[pygame-sdl2] 01/04: New upstream version 6.99.12

Markus Koschany apo at moszumanska.debian.org
Wed Dec 21 11:10:59 UTC 2016


This is an automated email from the git hooks/post-receive script.

apo pushed a commit to branch master
in repository pygame-sdl2.

commit 4a765160f70ba15513ba05ac6d70336336fc00a4
Author: Markus Koschany <apo at debian.org>
Date:   Wed Dec 21 11:57:06 2016 +0100

    New upstream version 6.99.12
---
 PKG-INFO                      |    2 +-
 gen/pygame_sdl2.display.c     | 3354 ++++++++++++-----------
 gen/pygame_sdl2.mixer.c       | 5834 ++++++++++++++++-------------------------
 gen/pygame_sdl2.rwobject.c    |  534 ++--
 gen3/pygame_sdl2.display.c    | 3382 +++++++++++++-----------
 gen3/pygame_sdl2.rwobject.c   | 1293 +++++----
 pygame_sdl2.egg-info/PKG-INFO |    2 +-
 setup.cfg                     |    2 +-
 setup.py                      |   14 +-
 src/SDL_gfxPrimitives.c       |    2 +-
 src/pygame_sdl2/display.pyx   |   31 +-
 src/pygame_sdl2/mixer.pyx     |   72 +-
 src/pygame_sdl2/rwobject.pyx  |   18 +-
 13 files changed, 6942 insertions(+), 7598 deletions(-)

diff --git a/PKG-INFO b/PKG-INFO
index 45b16e9..498577b 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: pygame_sdl2
-Version: 2.1.0-for-renpy-6.99.11
+Version: 2.1.0-for-renpy-6.99.12
 Summary: UNKNOWN
 Home-page: https://github.com/renpy/pygame_sdl2
 Author: Tom Rothamel
diff --git a/gen/pygame_sdl2.display.c b/gen/pygame_sdl2.display.c
index c35fc85..09de07b 100644
--- a/gen/pygame_sdl2.display.c
+++ b/gen/pygame_sdl2.display.c
@@ -650,6 +650,11 @@ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyOb
 
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb);
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
+
 static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
 
 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
@@ -680,9 +685,6 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                      int is_list, int wraparound, int boundscheck);
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb);
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
-
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
 
 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
@@ -700,8 +702,6 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
 
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
-
 #if CYTHON_COMPILING_IN_CPYTHON
 #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
 static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
@@ -894,9 +894,9 @@ int __pyx_module_is_main_pygame_sdl2__display = 0;
 
 /* Implementation of 'pygame_sdl2.display' */
 static PyObject *__pyx_builtin_object;
+static PyObject *__pyx_builtin_ImportError;
 static PyObject *__pyx_builtin_MemoryError;
 static PyObject *__pyx_builtin_range;
-static PyObject *__pyx_builtin_ImportError;
 static char __pyx_k_0[] = "0";
 static char __pyx_k_i[] = "i";
 static char __pyx_k_t[] = "t";
@@ -1023,6 +1023,8 @@ static char __pyx_k_pygame_sdl2_error[] = "pygame_sdl2.error";
 static char __pyx_k_toggle_fullscreen[] = "toggle_fullscreen";
 static char __pyx_k_get_display_bounds[] = "get_display_bounds";
 static char __pyx_k_pygame_sdl2_locals[] = "pygame_sdl2.locals";
+static char __pyx_k_shown_first_window[] = "_shown_first_window";
+static char __pyx_k_before_first_window[] = "_before_first_window";
 static char __pyx_k_gl_reset_attributes[] = "gl_reset_attributes";
 static char __pyx_k_pygame_sdl2_display[] = "pygame_sdl2.display";
 static char __pyx_k_default_swap_control[] = "default_swap_control";
@@ -1044,6 +1046,7 @@ static PyObject *__pyx_n_s_PYGAME_IOS;
 static PyObject *__pyx_n_s_SDL_VIDEO_MAC_FULLSCREEN_SPACES;
 static PyObject *__pyx_n_s_SRCALPHA;
 static PyObject *__pyx_n_s_androidembed;
+static PyObject *__pyx_n_s_before_first_window;
 static PyObject *__pyx_n_s_bitsize;
 static PyObject *__pyx_n_s_blit_hw;
 static PyObject *__pyx_n_s_blit_hw_A;
@@ -1153,6 +1156,7 @@ static PyObject *__pyx_n_s_set_gamma_ramp;
 static PyObject *__pyx_n_s_set_icon;
 static PyObject *__pyx_n_s_set_mode;
 static PyObject *__pyx_n_s_shifts;
+static PyObject *__pyx_n_s_shown_first_window;
 static PyObject *__pyx_n_s_size;
 static PyObject *__pyx_n_s_surface;
 static PyObject *__pyx_n_s_t;
@@ -1169,6 +1173,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_sdl_main_init(CYTHON_UNUSED PyO
 static PyObject *__pyx_pf_11pygame_sdl2_7display_2init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_4quit(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6get_init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_8_before_first_window(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self, PyObject *__pyx_v_title, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth, PyObject *__pyx_v_pos); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
@@ -1190,36 +1195,36 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_7surface___get__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
 static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_2__set__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_4__del__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_10set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_surface(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_14get_window(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_16flip(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_18update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_driver(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_wm_info(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_24get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_26list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_28mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_38gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_40get_active(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_42iconify(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_44toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_52set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_caption(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_60get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_62hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_64get_platform(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_tp_new_11pygame_sdl2_7display_Window(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_int_0;
 static PyObject *__pyx_int_1;
@@ -1237,57 +1242,59 @@ static PyObject *__pyx_tuple__8;
 static PyObject *__pyx_tuple__10;
 static PyObject *__pyx_tuple__11;
 static PyObject *__pyx_tuple__16;
-static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_tuple__18;
 static PyObject *__pyx_tuple__23;
 static PyObject *__pyx_tuple__25;
 static PyObject *__pyx_tuple__27;
-static PyObject *__pyx_tuple__30;
+static PyObject *__pyx_tuple__29;
 static PyObject *__pyx_tuple__32;
 static PyObject *__pyx_tuple__34;
-static PyObject *__pyx_tuple__37;
+static PyObject *__pyx_tuple__36;
 static PyObject *__pyx_tuple__39;
 static PyObject *__pyx_tuple__41;
-static PyObject *__pyx_tuple__47;
+static PyObject *__pyx_tuple__43;
 static PyObject *__pyx_tuple__49;
 static PyObject *__pyx_tuple__51;
 static PyObject *__pyx_tuple__53;
-static PyObject *__pyx_tuple__57;
+static PyObject *__pyx_tuple__55;
 static PyObject *__pyx_tuple__59;
 static PyObject *__pyx_tuple__61;
+static PyObject *__pyx_tuple__63;
 static PyObject *__pyx_codeobj__12;
 static PyObject *__pyx_codeobj__13;
 static PyObject *__pyx_codeobj__14;
 static PyObject *__pyx_codeobj__15;
 static PyObject *__pyx_codeobj__17;
-static PyObject *__pyx_codeobj__18;
 static PyObject *__pyx_codeobj__19;
 static PyObject *__pyx_codeobj__20;
+static PyObject *__pyx_codeobj__21;
 static PyObject *__pyx_codeobj__22;
 static PyObject *__pyx_codeobj__24;
 static PyObject *__pyx_codeobj__26;
 static PyObject *__pyx_codeobj__28;
-static PyObject *__pyx_codeobj__29;
+static PyObject *__pyx_codeobj__30;
 static PyObject *__pyx_codeobj__31;
 static PyObject *__pyx_codeobj__33;
 static PyObject *__pyx_codeobj__35;
-static PyObject *__pyx_codeobj__36;
+static PyObject *__pyx_codeobj__37;
 static PyObject *__pyx_codeobj__38;
 static PyObject *__pyx_codeobj__40;
 static PyObject *__pyx_codeobj__42;
-static PyObject *__pyx_codeobj__43;
 static PyObject *__pyx_codeobj__44;
 static PyObject *__pyx_codeobj__45;
 static PyObject *__pyx_codeobj__46;
+static PyObject *__pyx_codeobj__47;
 static PyObject *__pyx_codeobj__48;
 static PyObject *__pyx_codeobj__50;
 static PyObject *__pyx_codeobj__52;
 static PyObject *__pyx_codeobj__54;
-static PyObject *__pyx_codeobj__55;
 static PyObject *__pyx_codeobj__56;
+static PyObject *__pyx_codeobj__57;
 static PyObject *__pyx_codeobj__58;
 static PyObject *__pyx_codeobj__60;
 static PyObject *__pyx_codeobj__62;
-static PyObject *__pyx_codeobj__63;
+static PyObject *__pyx_codeobj__64;
+static PyObject *__pyx_codeobj__65;
 
 /* "pygame_sdl2/display.pyx":39
  * main_done = False
@@ -1864,7 +1871,219 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6get_init(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":95
+/* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_11pygame_sdl2_7display_9_before_first_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_9_before_first_window = {"_before_first_window", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_9_before_first_window, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_9_before_first_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_before_first_window (wrapper)", 0);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_8_before_first_window(__pyx_self);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_11pygame_sdl2_7display_8_before_first_window(CYTHON_UNUSED PyObject *__pyx_self) {
+  PyObject *__pyx_v_androidembed = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_t_8;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("_before_first_window", 0);
+
+  /* "pygame_sdl2/display.pyx":100
+ *     global _shown_first_window
+ * 
+ *     if _shown_first_window:             # <<<<<<<<<<<<<<
+ *         return
+ * 
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_shown_first_window); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "pygame_sdl2/display.pyx":101
+ * 
+ *     if _shown_first_window:
+ *         return             # <<<<<<<<<<<<<<
+ * 
+ *     _shown_first_window = True
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+
+    /* "pygame_sdl2/display.pyx":100
+ *     global _shown_first_window
+ * 
+ *     if _shown_first_window:             # <<<<<<<<<<<<<<
+ *         return
+ * 
+ */
+  }
+
+  /* "pygame_sdl2/display.pyx":103
+ *         return
+ * 
+ *     _shown_first_window = True             # <<<<<<<<<<<<<<
+ * 
+ *     # If we're on android, we have to close the splash window before opening
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_shown_first_window, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "pygame_sdl2/display.pyx":107
+ *     # If we're on android, we have to close the splash window before opening
+ *     # our window.
+ *     try:             # <<<<<<<<<<<<<<
+ *         import androidembed
+ *         androidembed.close_window()
+ */
+  {
+    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
+    __Pyx_XGOTREF(__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_4);
+    __Pyx_XGOTREF(__pyx_t_5);
+    /*try:*/ {
+
+      /* "pygame_sdl2/display.pyx":108
+ *     # our window.
+ *     try:
+ *         import androidembed             # <<<<<<<<<<<<<<
+ *         androidembed.close_window()
+ *     except ImportError:
+ */
+      __pyx_t_1 = __Pyx_Import(__pyx_n_s_androidembed, 0, -1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_v_androidembed = __pyx_t_1;
+      __pyx_t_1 = 0;
+
+      /* "pygame_sdl2/display.pyx":109
+ *     try:
+ *         import androidembed
+ *         androidembed.close_window()             # <<<<<<<<<<<<<<
+ *     except ImportError:
+ *         pass
+ */
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_androidembed, __pyx_n_s_close_window); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_7 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
+        if (likely(__pyx_t_7)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+          __Pyx_INCREF(__pyx_t_7);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_6, function);
+        }
+      }
+      if (__pyx_t_7) {
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      } else {
+        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      }
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+      /* "pygame_sdl2/display.pyx":107
+ *     # If we're on android, we have to close the splash window before opening
+ *     # our window.
+ *     try:             # <<<<<<<<<<<<<<
+ *         import androidembed
+ *         androidembed.close_window()
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L11_try_end;
+    __pyx_L4_error:;
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+    /* "pygame_sdl2/display.pyx":110
+ *         import androidembed
+ *         androidembed.close_window()
+ *     except ImportError:             # <<<<<<<<<<<<<<
+ *         pass
+ * 
+ */
+    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_ImportError);
+    if (__pyx_t_8) {
+      PyErr_Restore(0,0,0);
+      goto __pyx_L5_exception_handled;
+    }
+    goto __pyx_L6_except_error;
+    __pyx_L6_except_error:;
+
+    /* "pygame_sdl2/display.pyx":107
+ *     # If we're on android, we have to close the splash window before opening
+ *     # our window.
+ *     try:             # <<<<<<<<<<<<<<
+ *         import androidembed
+ *         androidembed.close_window()
+ */
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_XGIVEREF(__pyx_t_4);
+    __Pyx_XGIVEREF(__pyx_t_5);
+    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+    goto __pyx_L1_error;
+    __pyx_L5_exception_handled:;
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_XGIVEREF(__pyx_t_4);
+    __Pyx_XGIVEREF(__pyx_t_5);
+    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+    __pyx_L11_try_end:;
+  }
+
+  /* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("pygame_sdl2.display._before_first_window", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_androidembed);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "pygame_sdl2/display.pyx":116
  * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -1932,7 +2151,7 @@ static int __pyx_pw_11pygame_sdl2_7display_6Window_1__init__(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -1953,7 +2172,7 @@ static int __pyx_pw_11pygame_sdl2_7display_6Window_1__init__(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -1973,13 +2192,13 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Uint32 __pyx_t_5;
-  char const *__pyx_t_6;
-  int __pyx_t_7;
+  PyObject *__pyx_t_5 = NULL;
+  Uint32 __pyx_t_6;
+  char const *__pyx_t_7;
   int __pyx_t_8;
   int __pyx_t_9;
   int __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
+  int __pyx_t_11;
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
   PyObject *__pyx_t_14 = NULL;
@@ -1992,7 +2211,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "pygame_sdl2/display.pyx":97
+  /* "pygame_sdl2/display.pyx":118
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -2003,22 +2222,22 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":98
+    /* "pygame_sdl2/display.pyx":119
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
- *         self.create_flags = flags
+ *         _before_first_window()
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":97
+    /* "pygame_sdl2/display.pyx":118
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -2027,74 +2246,103 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
   }
 
-  /* "pygame_sdl2/display.pyx":100
+  /* "pygame_sdl2/display.pyx":121
  *             title = title.encode("utf-8")
  * 
+ *         _before_first_window()             # <<<<<<<<<<<<<<
+ * 
+ *         self.create_flags = flags
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_before_first_window); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_5);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_3, function);
+    }
+  }
+  if (__pyx_t_5) {
+    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else {
+    __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+  /* "pygame_sdl2/display.pyx":123
+ *         _before_first_window()
+ * 
  *         self.create_flags = flags             # <<<<<<<<<<<<<<
  * 
  *         self.window = SDL_CreateWindow(
  */
-  __pyx_t_5 = __Pyx_PyInt_As_uint32_t(__pyx_v_flags); if (unlikely((__pyx_t_5 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->create_flags = __pyx_t_5;
+  __pyx_t_6 = __Pyx_PyInt_As_uint32_t(__pyx_v_flags); if (unlikely((__pyx_t_6 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->create_flags = __pyx_t_6;
 
-  /* "pygame_sdl2/display.pyx":103
+  /* "pygame_sdl2/display.pyx":126
  * 
  *         self.window = SDL_CreateWindow(
  *             title,             # <<<<<<<<<<<<<<
  *             pos[0], pos[1],
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  */
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":104
+  /* "pygame_sdl2/display.pyx":127
  *         self.window = SDL_CreateWindow(
  *             title,
  *             pos[0], pos[1],             # <<<<<<<<<<<<<<
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  * 
  */
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "pygame_sdl2/display.pyx":105
+  /* "pygame_sdl2/display.pyx":128
  *             title,
  *             pos[0], pos[1],
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)             # <<<<<<<<<<<<<<
  * 
  *         if not self.window:
  */
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Or(__pyx_v_flags, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Or(__pyx_v_flags, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_uint32_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_As_uint32_t(__pyx_t_3); if (unlikely((__pyx_t_6 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":102
+  /* "pygame_sdl2/display.pyx":125
  *         self.create_flags = flags
  * 
  *         self.window = SDL_CreateWindow(             # <<<<<<<<<<<<<<
  *             title,
  *             pos[0], pos[1],
  */
-  __pyx_v_self->window = SDL_CreateWindow(__pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_5);
+  __pyx_v_self->window = SDL_CreateWindow(__pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":107
+  /* "pygame_sdl2/display.pyx":130
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  * 
  *         if not self.window:             # <<<<<<<<<<<<<<
@@ -2104,38 +2352,38 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __pyx_t_2 = ((!(__pyx_v_self->window != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":108
+    /* "pygame_sdl2/display.pyx":131
  * 
  *         if not self.window:
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *         # From here on, the window exists. So we have to call self.destroy if
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_11 = NULL;
+    __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
-      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
-      if (likely(__pyx_t_11)) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-        __Pyx_INCREF(__pyx_t_11);
+        __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_4, function);
       }
     }
-    if (__pyx_t_11) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    if (__pyx_t_5) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":107
+    /* "pygame_sdl2/display.pyx":130
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  * 
  *         if not self.window:             # <<<<<<<<<<<<<<
@@ -2144,7 +2392,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
   }
 
-  /* "pygame_sdl2/display.pyx":113
+  /* "pygame_sdl2/display.pyx":136
  *         # an exception occurs.
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -2158,23 +2406,23 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
     __Pyx_XGOTREF(__pyx_t_14);
     /*try:*/ {
 
-      /* "pygame_sdl2/display.pyx":115
+      /* "pygame_sdl2/display.pyx":138
  *         try:
  * 
  *             if flags & SDL_WINDOW_OPENGL:             # <<<<<<<<<<<<<<
  * 
  *                 self.gl_context = SDL_GL_CreateContext(self.window)
  */
-      __pyx_t_3 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_3 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyNumber_And(__pyx_v_flags, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_4 = PyNumber_And(__pyx_v_flags, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_2) {
 
-        /* "pygame_sdl2/display.pyx":117
+        /* "pygame_sdl2/display.pyx":140
  *             if flags & SDL_WINDOW_OPENGL:
  * 
  *                 self.gl_context = SDL_GL_CreateContext(self.window)             # <<<<<<<<<<<<<<
@@ -2183,7 +2431,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
         __pyx_v_self->gl_context = SDL_GL_CreateContext(__pyx_v_self->window);
 
-        /* "pygame_sdl2/display.pyx":119
+        /* "pygame_sdl2/display.pyx":142
  *                 self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *                 if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -2193,38 +2441,38 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
         __pyx_t_2 = ((__pyx_v_self->gl_context == NULL) != 0);
         if (__pyx_t_2) {
 
-          /* "pygame_sdl2/display.pyx":120
+          /* "pygame_sdl2/display.pyx":143
  * 
  *                 if self.gl_context == NULL:
  *                     raise error()             # <<<<<<<<<<<<<<
  * 
  *                 if not ios:
  */
-          __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_11 = NULL;
+          __pyx_t_5 = NULL;
           if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
-            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
-            if (likely(__pyx_t_11)) {
+            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
+            if (likely(__pyx_t_5)) {
               PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-              __Pyx_INCREF(__pyx_t_11);
+              __Pyx_INCREF(__pyx_t_5);
               __Pyx_INCREF(function);
               __Pyx_DECREF_SET(__pyx_t_3, function);
             }
           }
-          if (__pyx_t_11) {
-            __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
-            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+          if (__pyx_t_5) {
+            __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           } else {
-            __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           }
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_Raise(__pyx_t_4, 0, 0, 0);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
 
-          /* "pygame_sdl2/display.pyx":119
+          /* "pygame_sdl2/display.pyx":142
  *                 self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *                 if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -2233,51 +2481,51 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
         }
 
-        /* "pygame_sdl2/display.pyx":122
+        /* "pygame_sdl2/display.pyx":145
  *                     raise error()
  * 
  *                 if not ios:             # <<<<<<<<<<<<<<
  *                     # Try setting the swap interval - first positive, then negated
  *                     # to deal with the case where the negative interval isn't
  */
-        __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_1 = ((!__pyx_t_2) != 0);
         if (__pyx_t_1) {
 
-          /* "pygame_sdl2/display.pyx":126
+          /* "pygame_sdl2/display.pyx":149
  *                     # to deal with the case where the negative interval isn't
  *                     # supported. Then give up and carry on.
  *                     if SDL_GL_SetSwapInterval(default_swap_control):             # <<<<<<<<<<<<<<
  *                         SDL_GL_SetSwapInterval(-default_swap_control)
  * 
  */
-          __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __pyx_t_1 = (SDL_GL_SetSwapInterval(__pyx_t_10) != 0);
+          __pyx_t_1 = (SDL_GL_SetSwapInterval(__pyx_t_11) != 0);
           if (__pyx_t_1) {
 
-            /* "pygame_sdl2/display.pyx":127
+            /* "pygame_sdl2/display.pyx":150
  *                     # supported. Then give up and carry on.
  *                     if SDL_GL_SetSwapInterval(default_swap_control):
  *                         SDL_GL_SetSwapInterval(-default_swap_control)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-            __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
             __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_3 = PyNumber_Negative(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_3 = PyNumber_Negative(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
             __Pyx_GOTREF(__pyx_t_3);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-            __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            SDL_GL_SetSwapInterval(__pyx_t_10);
+            SDL_GL_SetSwapInterval(__pyx_t_11);
 
-            /* "pygame_sdl2/display.pyx":126
+            /* "pygame_sdl2/display.pyx":149
  *                     # to deal with the case where the negative interval isn't
  *                     # supported. Then give up and carry on.
  *                     if SDL_GL_SetSwapInterval(default_swap_control):             # <<<<<<<<<<<<<<
@@ -2286,7 +2534,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
           }
 
-          /* "pygame_sdl2/display.pyx":122
+          /* "pygame_sdl2/display.pyx":145
  *                     raise error()
  * 
  *                 if not ios:             # <<<<<<<<<<<<<<
@@ -2295,7 +2543,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
         }
 
-        /* "pygame_sdl2/display.pyx":115
+        /* "pygame_sdl2/display.pyx":138
  *         try:
  * 
  *             if flags & SDL_WINDOW_OPENGL:             # <<<<<<<<<<<<<<
@@ -2304,36 +2552,36 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
       }
 
-      /* "pygame_sdl2/display.pyx":130
+      /* "pygame_sdl2/display.pyx":153
  * 
  * 
  *             self.create_surface()             # <<<<<<<<<<<<<<
  * 
  *         except:
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_11 = NULL;
+      __pyx_t_5 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
-        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
-        if (likely(__pyx_t_11)) {
+        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+        if (likely(__pyx_t_5)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_11);
+          __Pyx_INCREF(__pyx_t_5);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_4, function);
         }
       }
-      if (__pyx_t_11) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      if (__pyx_t_5) {
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
-        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       }
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "pygame_sdl2/display.pyx":113
+      /* "pygame_sdl2/display.pyx":136
  *         # an exception occurs.
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -2346,11 +2594,11 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
     __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
     goto __pyx_L12_try_end;
     __pyx_L5_error:;
-    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":132
+    /* "pygame_sdl2/display.pyx":155
  *             self.create_surface()
  * 
  *         except:             # <<<<<<<<<<<<<<
@@ -2359,19 +2607,19 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
     /*except:*/ {
       __Pyx_AddTraceback("pygame_sdl2.display.Window.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_GOTREF(__pyx_t_11);
+      __Pyx_GOTREF(__pyx_t_5);
 
-      /* "pygame_sdl2/display.pyx":133
+      /* "pygame_sdl2/display.pyx":156
  * 
  *         except:
  *             self.destroy()             # <<<<<<<<<<<<<<
  *             raise
  * 
  */
-      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_destroy); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_destroy); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
       __Pyx_GOTREF(__pyx_t_16);
       __pyx_t_17 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_16))) {
@@ -2384,16 +2632,16 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
         }
       }
       if (__pyx_t_17) {
-        __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
       } else {
-        __pyx_t_15 = __Pyx_PyObject_CallNoArg(__pyx_t_16); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_15 = __Pyx_PyObject_CallNoArg(__pyx_t_16); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
       }
       __Pyx_GOTREF(__pyx_t_15);
       __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
       __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 
-      /* "pygame_sdl2/display.pyx":134
+      /* "pygame_sdl2/display.pyx":157
  *         except:
  *             self.destroy()
  *             raise             # <<<<<<<<<<<<<<
@@ -2402,14 +2650,14 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
       __Pyx_GIVEREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_4);
-      __Pyx_XGIVEREF(__pyx_t_11);
-      __Pyx_ErrRestore(__pyx_t_3, __pyx_t_4, __pyx_t_11);
-      __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_11 = 0; 
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      __Pyx_XGIVEREF(__pyx_t_5);
+      __Pyx_ErrRestore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+      __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; 
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
     }
     __pyx_L7_except_error:;
 
-    /* "pygame_sdl2/display.pyx":113
+    /* "pygame_sdl2/display.pyx":136
  *         # an exception occurs.
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -2424,7 +2672,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
     __pyx_L12_try_end:;
   }
 
-  /* "pygame_sdl2/display.pyx":95
+  /* "pygame_sdl2/display.pyx":116
  * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -2438,7 +2686,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_15);
   __Pyx_XDECREF(__pyx_t_16);
   __Pyx_XDECREF(__pyx_t_17);
@@ -2450,7 +2698,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":136
+/* "pygame_sdl2/display.pyx":159
  *             raise
  * 
  *     def create_surface(self):             # <<<<<<<<<<<<<<
@@ -2487,7 +2735,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":142
+  /* "pygame_sdl2/display.pyx":165
  * 
  *         cdef int w, h
  *         SDL_GetWindowSize(self.window, &w, &h)             # <<<<<<<<<<<<<<
@@ -2496,7 +2744,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  */
   SDL_GetWindowSize(__pyx_v_self->window, (&__pyx_v_w), (&__pyx_v_h));
 
-  /* "pygame_sdl2/display.pyx":144
+  /* "pygame_sdl2/display.pyx":167
  *         SDL_GetWindowSize(self.window, &w, &h)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -2506,18 +2754,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   __pyx_t_1 = (__pyx_v_self->gl_context != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":149
+    /* "pygame_sdl2/display.pyx":172
  *             # TODO: Make this a bit less wasteful of memory, even if it means
  *             # we lie about the actual size of the pixel array.
  *             self.surface = Surface((w, h), SRCALPHA, 32)             # <<<<<<<<<<<<<<
  * 
  *         else:
  */
-    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -2525,9 +2773,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
     __pyx_t_2 = 0;
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
@@ -2538,7 +2786,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_int_32);
     __pyx_t_4 = 0;
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_GIVEREF(__pyx_t_3);
@@ -2547,7 +2795,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     __pyx_v_self->surface = ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":144
+    /* "pygame_sdl2/display.pyx":167
  *         SDL_GetWindowSize(self.window, &w, &h)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -2557,7 +2805,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":153
+  /* "pygame_sdl2/display.pyx":176
  *         else:
  * 
  *             self.window_surface = SDL_GetWindowSurface(self.window)             # <<<<<<<<<<<<<<
@@ -2567,7 +2815,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   /*else*/ {
     __pyx_v_self->window_surface = SDL_GetWindowSurface(__pyx_v_self->window);
 
-    /* "pygame_sdl2/display.pyx":157
+    /* "pygame_sdl2/display.pyx":180
  *             # If the surface is 32-bit, we can use it directly. Otherwise,
  *             # we need to create a 32-bit proxy surface.
  *             if self.window_surface.format.BitsPerPixel == 32:             # <<<<<<<<<<<<<<
@@ -2577,14 +2825,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     __pyx_t_1 = ((__pyx_v_self->window_surface->format->BitsPerPixel == 32) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":159
+      /* "pygame_sdl2/display.pyx":182
  *             if self.window_surface.format.BitsPerPixel == 32:
  * 
  *                 self.surface = Surface(())             # <<<<<<<<<<<<<<
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_v_self->surface);
@@ -2592,7 +2840,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       __pyx_v_self->surface = ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "pygame_sdl2/display.pyx":160
+      /* "pygame_sdl2/display.pyx":183
  * 
  *                 self.surface = Surface(())
  *                 self.surface.surface = self.window_surface             # <<<<<<<<<<<<<<
@@ -2602,7 +2850,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       __pyx_t_5 = __pyx_v_self->window_surface;
       __pyx_v_self->surface->surface = __pyx_t_5;
 
-      /* "pygame_sdl2/display.pyx":161
+      /* "pygame_sdl2/display.pyx":184
  *                 self.surface = Surface(())
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False             # <<<<<<<<<<<<<<
@@ -2611,7 +2859,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  */
       __pyx_v_self->surface->owns_surface = 0;
 
-      /* "pygame_sdl2/display.pyx":162
+      /* "pygame_sdl2/display.pyx":185
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False
  *                 self.surface.window_surface = True             # <<<<<<<<<<<<<<
@@ -2620,7 +2868,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  */
       __pyx_v_self->surface->window_surface = 1;
 
-      /* "pygame_sdl2/display.pyx":157
+      /* "pygame_sdl2/display.pyx":180
  *             # If the surface is 32-bit, we can use it directly. Otherwise,
  *             # we need to create a 32-bit proxy surface.
  *             if self.window_surface.format.BitsPerPixel == 32:             # <<<<<<<<<<<<<<
@@ -2630,7 +2878,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       goto __pyx_L4;
     }
 
-    /* "pygame_sdl2/display.pyx":165
+    /* "pygame_sdl2/display.pyx":188
  * 
  *             else:
  *                 self.surface = Surface((w, h), 0, 32)             # <<<<<<<<<<<<<<
@@ -2638,11 +2886,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  *         self.surface.get_window_flags = self.get_window_flags
  */
     /*else*/ {
-      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
@@ -2650,7 +2898,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
       __pyx_t_3 = 0;
       __pyx_t_2 = 0;
-      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
@@ -2661,7 +2909,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       __Pyx_GIVEREF(__pyx_int_32);
       PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_int_32);
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_GIVEREF(__pyx_t_4);
@@ -2674,14 +2922,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":167
+  /* "pygame_sdl2/display.pyx":190
  *                 self.surface = Surface((w, h), 0, 32)
  * 
  *         self.surface.get_window_flags = self.get_window_flags             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_window_flags); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_window_flags); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->surface->get_window_flags);
@@ -2689,7 +2937,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   __pyx_v_self->surface->get_window_flags = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "pygame_sdl2/display.pyx":136
+  /* "pygame_sdl2/display.pyx":159
  *             raise
  * 
  *     def create_surface(self):             # <<<<<<<<<<<<<<
@@ -2712,7 +2960,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":170
+/* "pygame_sdl2/display.pyx":193
  * 
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -2743,7 +2991,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "pygame_sdl2/display.pyx":175
+  /* "pygame_sdl2/display.pyx":198
  *         """
  * 
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -2753,7 +3001,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_self->gl_context != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":176
+    /* "pygame_sdl2/display.pyx":199
  * 
  *         if self.gl_context != NULL:
  *             SDL_GL_DeleteContext(self.gl_context)             # <<<<<<<<<<<<<<
@@ -2762,7 +3010,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
     SDL_GL_DeleteContext(__pyx_v_self->gl_context);
 
-    /* "pygame_sdl2/display.pyx":175
+    /* "pygame_sdl2/display.pyx":198
  *         """
  * 
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -2771,17 +3019,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":178
+  /* "pygame_sdl2/display.pyx":201
  *             SDL_GL_DeleteContext(self.gl_context)
  * 
  *         if self.surface:             # <<<<<<<<<<<<<<
  * 
  *             # Break the cycle that prevents refcounting from collecting this
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self->surface)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self->surface)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":182
+    /* "pygame_sdl2/display.pyx":205
  *             # Break the cycle that prevents refcounting from collecting this
  *             # object.
  *             self.surface.get_window_flags = None             # <<<<<<<<<<<<<<
@@ -2794,7 +3042,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
     __Pyx_DECREF(__pyx_v_self->surface->get_window_flags);
     __pyx_v_self->surface->get_window_flags = Py_None;
 
-    /* "pygame_sdl2/display.pyx":185
+    /* "pygame_sdl2/display.pyx":208
  * 
  *             # Necessary to collect the GL surface, doesn't hurt the window surface.
  *             self.surface = None             # <<<<<<<<<<<<<<
@@ -2807,7 +3055,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
     __Pyx_DECREF(((PyObject *)__pyx_v_self->surface));
     __pyx_v_self->surface = ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)Py_None);
 
-    /* "pygame_sdl2/display.pyx":178
+    /* "pygame_sdl2/display.pyx":201
  *             SDL_GL_DeleteContext(self.gl_context)
  * 
  *         if self.surface:             # <<<<<<<<<<<<<<
@@ -2816,7 +3064,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":187
+  /* "pygame_sdl2/display.pyx":210
  *             self.surface = None
  * 
  *         SDL_DestroyWindow(self.window)             # <<<<<<<<<<<<<<
@@ -2825,7 +3073,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
   SDL_DestroyWindow(__pyx_v_self->window);
 
-  /* "pygame_sdl2/display.pyx":170
+  /* "pygame_sdl2/display.pyx":193
  * 
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -2845,7 +3093,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":189
+/* "pygame_sdl2/display.pyx":212
  *         SDL_DestroyWindow(self.window)
  * 
  *     def resize(self, size, opengl=False):             # <<<<<<<<<<<<<<
@@ -2890,7 +3138,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_7resize(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2905,7 +3153,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_7resize(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("resize", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("resize", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.resize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2939,7 +3187,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("resize", 0);
 
-  /* "pygame_sdl2/display.pyx":197
+  /* "pygame_sdl2/display.pyx":220
  * 
  *         # Prevents a loop between the surface and this object.
  *         self.surface.get_window_flags = None             # <<<<<<<<<<<<<<
@@ -2952,7 +3200,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   __Pyx_DECREF(__pyx_v_self->surface->get_window_flags);
   __pyx_v_self->surface->get_window_flags = Py_None;
 
-  /* "pygame_sdl2/display.pyx":199
+  /* "pygame_sdl2/display.pyx":222
  *         self.surface.get_window_flags = None
  * 
  *         if self.gl_context and not opengl:             # <<<<<<<<<<<<<<
@@ -2965,13 +3213,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_3 = ((!__pyx_t_2) != 0);
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":200
+    /* "pygame_sdl2/display.pyx":223
  * 
  *         if self.gl_context and not opengl:
  *             SDL_GL_DeleteContext(self.gl_context)             # <<<<<<<<<<<<<<
@@ -2980,7 +3228,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     SDL_GL_DeleteContext(__pyx_v_self->gl_context);
 
-    /* "pygame_sdl2/display.pyx":201
+    /* "pygame_sdl2/display.pyx":224
  *         if self.gl_context and not opengl:
  *             SDL_GL_DeleteContext(self.gl_context)
  *             self.gl_context = NULL             # <<<<<<<<<<<<<<
@@ -2989,7 +3237,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     __pyx_v_self->gl_context = NULL;
 
-    /* "pygame_sdl2/display.pyx":199
+    /* "pygame_sdl2/display.pyx":222
  *         self.surface.get_window_flags = None
  * 
  *         if self.gl_context and not opengl:             # <<<<<<<<<<<<<<
@@ -2998,7 +3246,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   }
 
-  /* "pygame_sdl2/display.pyx":203
+  /* "pygame_sdl2/display.pyx":226
  *             self.gl_context = NULL
  * 
  *         cdef int cur_width = 0             # <<<<<<<<<<<<<<
@@ -3007,7 +3255,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   __pyx_v_cur_width = 0;
 
-  /* "pygame_sdl2/display.pyx":204
+  /* "pygame_sdl2/display.pyx":227
  * 
  *         cdef int cur_width = 0
  *         cdef int cur_height = 0             # <<<<<<<<<<<<<<
@@ -3016,7 +3264,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   __pyx_v_cur_height = 0;
 
-  /* "pygame_sdl2/display.pyx":206
+  /* "pygame_sdl2/display.pyx":229
  *         cdef int cur_height = 0
  * 
  *         width, height = size             # <<<<<<<<<<<<<<
@@ -3033,7 +3281,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -3046,21 +3294,21 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_t_5);
     #else
-    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
     index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
     index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_5);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_7 = NULL;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L7_unpacking_done;
@@ -3068,7 +3316,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L7_unpacking_done:;
   }
   __pyx_v_width = __pyx_t_4;
@@ -3076,7 +3324,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   __pyx_v_height = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":208
+  /* "pygame_sdl2/display.pyx":231
  *         width, height = size
  * 
  *         SDL_GetWindowSize(self.window, &cur_width, &cur_height)             # <<<<<<<<<<<<<<
@@ -3085,46 +3333,46 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   SDL_GetWindowSize(__pyx_v_self->window, (&__pyx_v_cur_width), (&__pyx_v_cur_height));
 
-  /* "pygame_sdl2/display.pyx":210
+  /* "pygame_sdl2/display.pyx":233
  *         SDL_GetWindowSize(self.window, &cur_width, &cur_height)
  * 
  *         if (cur_width != width) or (cur_height != height):             # <<<<<<<<<<<<<<
  *             SDL_SetWindowSize(self.window, width, height)
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_cur_width); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_cur_width); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_v_width, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_v_width, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (!__pyx_t_3) {
   } else {
     __pyx_t_1 = __pyx_t_3;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_cur_height); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_cur_height); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_v_height, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_v_height, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_1 = __pyx_t_3;
   __pyx_L9_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":211
+    /* "pygame_sdl2/display.pyx":234
  * 
  *         if (cur_width != width) or (cur_height != height):
  *             SDL_SetWindowSize(self.window, width, height)             # <<<<<<<<<<<<<<
  * 
  *         cdef int w, h
  */
-    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_width); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_height); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_width); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_height); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     SDL_SetWindowSize(__pyx_v_self->window, __pyx_t_8, __pyx_t_9);
 
-    /* "pygame_sdl2/display.pyx":210
+    /* "pygame_sdl2/display.pyx":233
  *         SDL_GetWindowSize(self.window, &cur_width, &cur_height)
  * 
  *         if (cur_width != width) or (cur_height != height):             # <<<<<<<<<<<<<<
@@ -3133,14 +3381,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   }
 
-  /* "pygame_sdl2/display.pyx":216
+  /* "pygame_sdl2/display.pyx":239
  * 
  *         # Create a missing GL context.
  *         if opengl and not self.gl_context:             # <<<<<<<<<<<<<<
  *             self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_3) {
   } else {
     __pyx_t_1 = __pyx_t_3;
@@ -3151,7 +3399,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   __pyx_L12_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":217
+    /* "pygame_sdl2/display.pyx":240
  *         # Create a missing GL context.
  *         if opengl and not self.gl_context:
  *             self.gl_context = SDL_GL_CreateContext(self.window)             # <<<<<<<<<<<<<<
@@ -3160,7 +3408,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     __pyx_v_self->gl_context = SDL_GL_CreateContext(__pyx_v_self->window);
 
-    /* "pygame_sdl2/display.pyx":219
+    /* "pygame_sdl2/display.pyx":242
  *             self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *             if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -3170,14 +3418,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __pyx_t_1 = ((__pyx_v_self->gl_context == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":220
+      /* "pygame_sdl2/display.pyx":243
  * 
  *             if self.gl_context == NULL:
  *                 raise error()             # <<<<<<<<<<<<<<
  * 
  *         self.create_surface()
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -3190,18 +3438,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":219
+      /* "pygame_sdl2/display.pyx":242
  *             self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *             if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -3210,7 +3458,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     }
 
-    /* "pygame_sdl2/display.pyx":216
+    /* "pygame_sdl2/display.pyx":239
  * 
  *         # Create a missing GL context.
  *         if opengl and not self.gl_context:             # <<<<<<<<<<<<<<
@@ -3219,14 +3467,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   }
 
-  /* "pygame_sdl2/display.pyx":222
+  /* "pygame_sdl2/display.pyx":245
  *                 raise error()
  * 
  *         self.create_surface()             # <<<<<<<<<<<<<<
  * 
  *     def get_window_flags(self):
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_6 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3239,16 +3487,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     }
   }
   if (__pyx_t_6) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":189
+  /* "pygame_sdl2/display.pyx":212
  *         SDL_DestroyWindow(self.window)
  * 
  *     def resize(self, size, opengl=False):             # <<<<<<<<<<<<<<
@@ -3273,7 +3521,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":224
+/* "pygame_sdl2/display.pyx":247
  *         self.create_surface()
  * 
  *     def get_window_flags(self):             # <<<<<<<<<<<<<<
@@ -3306,19 +3554,19 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_window_flags", 0);
 
-  /* "pygame_sdl2/display.pyx":225
+  /* "pygame_sdl2/display.pyx":248
  * 
  *     def get_window_flags(self):
  *         rv = SDL_GetWindowFlags(self.window)             # <<<<<<<<<<<<<<
  * 
  *         if self.gl_context:
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(SDL_GetWindowFlags(__pyx_v_self->window)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(SDL_GetWindowFlags(__pyx_v_self->window)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rv = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/display.pyx":227
+  /* "pygame_sdl2/display.pyx":250
  *         rv = SDL_GetWindowFlags(self.window)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -3328,22 +3576,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   __pyx_t_2 = (__pyx_v_self->gl_context != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":228
+    /* "pygame_sdl2/display.pyx":251
  * 
  *         if self.gl_context:
  *             rv |= SDL_WINDOW_OPENGL             # <<<<<<<<<<<<<<
  *         else:
  *             rv &= ~SDL_WINDOW_OPENGL
  */
-    __pyx_t_1 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyNumber_InPlaceOr(__pyx_v_rv, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_InPlaceOr(__pyx_v_rv, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_rv, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":227
+    /* "pygame_sdl2/display.pyx":250
  *         rv = SDL_GetWindowFlags(self.window)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -3353,7 +3601,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":230
+  /* "pygame_sdl2/display.pyx":253
  *             rv |= SDL_WINDOW_OPENGL
  *         else:
  *             rv &= ~SDL_WINDOW_OPENGL             # <<<<<<<<<<<<<<
@@ -3361,9 +3609,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
  *         return rv
  */
   /*else*/ {
-    __pyx_t_3 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyNumber_InPlaceAnd(__pyx_v_rv, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyNumber_InPlaceAnd(__pyx_v_rv, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_rv, __pyx_t_1);
@@ -3371,7 +3619,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":232
+  /* "pygame_sdl2/display.pyx":255
  *             rv &= ~SDL_WINDOW_OPENGL
  * 
  *         return rv             # <<<<<<<<<<<<<<
@@ -3383,7 +3631,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   __pyx_r = __pyx_v_rv;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":224
+  /* "pygame_sdl2/display.pyx":247
  *         self.create_surface()
  * 
  *     def get_window_flags(self):             # <<<<<<<<<<<<<<
@@ -3404,7 +3652,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":234
+/* "pygame_sdl2/display.pyx":257
  *         return rv
  * 
  *     def proxy_window_surface(self):             # <<<<<<<<<<<<<<
@@ -3430,7 +3678,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_10proxy_window_surface(
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("proxy_window_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":235
+  /* "pygame_sdl2/display.pyx":258
  * 
  *     def proxy_window_surface(self):
  *         SDL_UpperBlit(self.surface.surface, NULL, self.window_surface, NULL)             # <<<<<<<<<<<<<<
@@ -3439,7 +3687,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_10proxy_window_surface(
  */
   SDL_UpperBlit(__pyx_v_self->surface->surface, NULL, __pyx_v_self->window_surface, NULL);
 
-  /* "pygame_sdl2/display.pyx":234
+  /* "pygame_sdl2/display.pyx":257
  *         return rv
  * 
  *     def proxy_window_surface(self):             # <<<<<<<<<<<<<<
@@ -3454,7 +3702,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_10proxy_window_surface(
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":237
+/* "pygame_sdl2/display.pyx":260
  *         SDL_UpperBlit(self.surface.surface, NULL, self.window_surface, NULL)
  * 
  *     def flip(self):             # <<<<<<<<<<<<<<
@@ -3487,7 +3735,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("flip", 0);
 
-  /* "pygame_sdl2/display.pyx":238
+  /* "pygame_sdl2/display.pyx":261
  * 
  *     def flip(self):
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -3497,7 +3745,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   __pyx_t_1 = ((__pyx_v_self->gl_context != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":239
+    /* "pygame_sdl2/display.pyx":262
  *     def flip(self):
  *         if self.gl_context != NULL:
  *             SDL_GL_SwapWindow(self.window)             # <<<<<<<<<<<<<<
@@ -3506,7 +3754,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
  */
     SDL_GL_SwapWindow(__pyx_v_self->window);
 
-    /* "pygame_sdl2/display.pyx":238
+    /* "pygame_sdl2/display.pyx":261
  * 
  *     def flip(self):
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -3516,7 +3764,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":242
+  /* "pygame_sdl2/display.pyx":265
  *         else:
  * 
  *             if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3527,14 +3775,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
     __pyx_t_1 = ((__pyx_v_self->surface->surface != __pyx_v_self->window_surface) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":243
+      /* "pygame_sdl2/display.pyx":266
  * 
  *             if self.surface.surface != self.window_surface:
  *                 self.proxy_window_surface()             # <<<<<<<<<<<<<<
  * 
  *             SDL_UpdateWindowSurface(self.window)
  */
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -3547,16 +3795,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "pygame_sdl2/display.pyx":242
+      /* "pygame_sdl2/display.pyx":265
  *         else:
  * 
  *             if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3565,7 +3813,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
  */
     }
 
-    /* "pygame_sdl2/display.pyx":245
+    /* "pygame_sdl2/display.pyx":268
  *                 self.proxy_window_surface()
  * 
  *             SDL_UpdateWindowSurface(self.window)             # <<<<<<<<<<<<<<
@@ -3576,7 +3824,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":237
+  /* "pygame_sdl2/display.pyx":260
  *         SDL_UpperBlit(self.surface.surface, NULL, self.window_surface, NULL)
  * 
  *     def flip(self):             # <<<<<<<<<<<<<<
@@ -3599,7 +3847,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":247
+/* "pygame_sdl2/display.pyx":270
  *             SDL_UpdateWindowSurface(self.window)
  * 
  *     def get_surface(self):             # <<<<<<<<<<<<<<
@@ -3625,7 +3873,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_14get_surface(struct __
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":248
+  /* "pygame_sdl2/display.pyx":271
  * 
  *     def get_surface(self):
  *         return self.surface             # <<<<<<<<<<<<<<
@@ -3637,7 +3885,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_14get_surface(struct __
   __pyx_r = ((PyObject *)__pyx_v_self->surface);
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":247
+  /* "pygame_sdl2/display.pyx":270
  *             SDL_UpdateWindowSurface(self.window)
  * 
  *     def get_surface(self):             # <<<<<<<<<<<<<<
@@ -3652,7 +3900,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_14get_surface(struct __
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":250
+/* "pygame_sdl2/display.pyx":273
  *         return self.surface
  * 
  *     def update(self, rectangles=None):             # <<<<<<<<<<<<<<
@@ -3691,7 +3939,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_17update(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3704,7 +3952,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_17update(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3745,7 +3993,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __Pyx_RefNannySetupContext("update", 0);
   __Pyx_INCREF(__pyx_v_rectangles);
 
-  /* "pygame_sdl2/display.pyx":253
+  /* "pygame_sdl2/display.pyx":276
  * 
  *         cdef SDL_Rect *rects
  *         cdef int count = 0             # <<<<<<<<<<<<<<
@@ -3754,7 +4002,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   __pyx_v_count = 0;
 
-  /* "pygame_sdl2/display.pyx":255
+  /* "pygame_sdl2/display.pyx":278
  *         cdef int count = 0
  * 
  *         if rectangles is None:             # <<<<<<<<<<<<<<
@@ -3765,14 +4013,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":256
+    /* "pygame_sdl2/display.pyx":279
  * 
  *         if rectangles is None:
  *             self.flip()             # <<<<<<<<<<<<<<
  *             return
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_flip); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_flip); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3785,16 +4033,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":257
+    /* "pygame_sdl2/display.pyx":280
  *         if rectangles is None:
  *             self.flip()
  *             return             # <<<<<<<<<<<<<<
@@ -3805,7 +4053,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":255
+    /* "pygame_sdl2/display.pyx":278
  *         cdef int count = 0
  * 
  *         if rectangles is None:             # <<<<<<<<<<<<<<
@@ -3814,7 +4062,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":259
+  /* "pygame_sdl2/display.pyx":282
  *             return
  * 
  *         if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3824,14 +4072,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_2 = ((__pyx_v_self->surface->surface != __pyx_v_self->window_surface) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":260
+    /* "pygame_sdl2/display.pyx":283
  * 
  *         if self.surface.surface != self.window_surface:
  *             self.proxy_window_surface()             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(rectangles, list):
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3844,16 +4092,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":259
+    /* "pygame_sdl2/display.pyx":282
  *             return
  * 
  *         if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3862,7 +4110,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":262
+  /* "pygame_sdl2/display.pyx":285
  *             self.proxy_window_surface()
  * 
  *         if not isinstance(rectangles, list):             # <<<<<<<<<<<<<<
@@ -3873,14 +4121,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":263
+    /* "pygame_sdl2/display.pyx":286
  * 
  *         if not isinstance(rectangles, list):
  *             rectangles = [ rectangles ]             # <<<<<<<<<<<<<<
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  */
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_rectangles);
     __Pyx_GIVEREF(__pyx_v_rectangles);
@@ -3888,7 +4136,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     __Pyx_DECREF_SET(__pyx_v_rectangles, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":262
+    /* "pygame_sdl2/display.pyx":285
  *             self.proxy_window_surface()
  * 
  *         if not isinstance(rectangles, list):             # <<<<<<<<<<<<<<
@@ -3897,17 +4145,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":265
+  /* "pygame_sdl2/display.pyx":288
  *             rectangles = [ rectangles ]
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))             # <<<<<<<<<<<<<<
  *         if rects == NULL:
  *             raise MemoryError("Couldn't allocate rectangles.")
  */
-  __pyx_t_6 = PyObject_Length(__pyx_v_rectangles); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Length(__pyx_v_rectangles); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_rects = ((SDL_Rect *)calloc(__pyx_t_6, (sizeof(SDL_Rect))));
 
-  /* "pygame_sdl2/display.pyx":266
+  /* "pygame_sdl2/display.pyx":289
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:             # <<<<<<<<<<<<<<
@@ -3917,20 +4165,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_rects == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":267
+    /* "pygame_sdl2/display.pyx":290
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:
  *             raise MemoryError("Couldn't allocate rectangles.")             # <<<<<<<<<<<<<<
  * 
  *         try:
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":266
+    /* "pygame_sdl2/display.pyx":289
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:             # <<<<<<<<<<<<<<
@@ -3939,7 +4187,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":269
+  /* "pygame_sdl2/display.pyx":292
  *             raise MemoryError("Couldn't allocate rectangles.")
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -3948,7 +4196,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   /*try:*/ {
 
-    /* "pygame_sdl2/display.pyx":271
+    /* "pygame_sdl2/display.pyx":294
  *         try:
  * 
  *             for i in rectangles:             # <<<<<<<<<<<<<<
@@ -3959,26 +4207,26 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       __pyx_t_3 = __pyx_v_rectangles; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_rectangles); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_rectangles); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
     }
     for (;;) {
       if (likely(!__pyx_t_7)) {
         if (likely(PyList_CheckExact(__pyx_t_3))) {
           if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         } else {
           if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         }
@@ -3988,7 +4236,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           }
           break;
         }
@@ -3997,7 +4245,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "pygame_sdl2/display.pyx":272
+      /* "pygame_sdl2/display.pyx":295
  * 
  *             for i in rectangles:
  *                 if i is None:             # <<<<<<<<<<<<<<
@@ -4008,7 +4256,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       __pyx_t_2 = (__pyx_t_1 != 0);
       if (__pyx_t_2) {
 
-        /* "pygame_sdl2/display.pyx":273
+        /* "pygame_sdl2/display.pyx":296
  *             for i in rectangles:
  *                 if i is None:
  *                     continue             # <<<<<<<<<<<<<<
@@ -4017,7 +4265,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
         goto __pyx_L10_continue;
 
-        /* "pygame_sdl2/display.pyx":272
+        /* "pygame_sdl2/display.pyx":295
  * 
  *             for i in rectangles:
  *                 if i is None:             # <<<<<<<<<<<<<<
@@ -4026,16 +4274,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
       }
 
-      /* "pygame_sdl2/display.pyx":275
+      /* "pygame_sdl2/display.pyx":298
  *                     continue
  * 
  *                 to_sdl_rect(i, &rects[count])             # <<<<<<<<<<<<<<
  *                 count += 1
  * 
  */
-      __pyx_t_8 = __pyx_f_11pygame_sdl2_4rect_to_sdl_rect(__pyx_v_i, (&(__pyx_v_rects[__pyx_v_count])), NULL); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_8 = __pyx_f_11pygame_sdl2_4rect_to_sdl_rect(__pyx_v_i, (&(__pyx_v_rects[__pyx_v_count])), NULL); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
 
-      /* "pygame_sdl2/display.pyx":276
+      /* "pygame_sdl2/display.pyx":299
  * 
  *                 to_sdl_rect(i, &rects[count])
  *                 count += 1             # <<<<<<<<<<<<<<
@@ -4044,7 +4292,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
       __pyx_v_count = (__pyx_v_count + 1);
 
-      /* "pygame_sdl2/display.pyx":271
+      /* "pygame_sdl2/display.pyx":294
  *         try:
  * 
  *             for i in rectangles:             # <<<<<<<<<<<<<<
@@ -4055,7 +4303,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":278
+    /* "pygame_sdl2/display.pyx":301
  *                 count += 1
  * 
  *             SDL_UpdateWindowSurfaceRects(self.window, rects, count)             # <<<<<<<<<<<<<<
@@ -4065,7 +4313,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     SDL_UpdateWindowSurfaceRects(__pyx_v_self->window, __pyx_v_rects, __pyx_v_count);
   }
 
-  /* "pygame_sdl2/display.pyx":281
+  /* "pygame_sdl2/display.pyx":304
  * 
  *         finally:
  *             free(rects)             # <<<<<<<<<<<<<<
@@ -4112,7 +4360,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     __pyx_L9:;
   }
 
-  /* "pygame_sdl2/display.pyx":250
+  /* "pygame_sdl2/display.pyx":273
  *         return self.surface
  * 
  *     def update(self, rectangles=None):             # <<<<<<<<<<<<<<
@@ -4137,7 +4385,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":283
+/* "pygame_sdl2/display.pyx":306
  *             free(rects)
  * 
  *     def get_wm_info(self):             # <<<<<<<<<<<<<<
@@ -4167,7 +4415,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_18get_wm_info(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_wm_info", 0);
 
-  /* "pygame_sdl2/display.pyx":284
+  /* "pygame_sdl2/display.pyx":307
  * 
  *     def get_wm_info(self):
  *         return { }             # <<<<<<<<<<<<<<
@@ -4175,13 +4423,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_18get_wm_info(CYTHON_UN
  *     def get_active(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":283
+  /* "pygame_sdl2/display.pyx":306
  *             free(rects)
  * 
  *     def get_wm_info(self):             # <<<<<<<<<<<<<<
@@ -4200,7 +4448,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_18get_wm_info(CYTHON_UN
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":286
+/* "pygame_sdl2/display.pyx":309
  *         return { }
  * 
  *     def get_active(self):             # <<<<<<<<<<<<<<
@@ -4227,7 +4475,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("get_active", 0);
 
-  /* "pygame_sdl2/display.pyx":287
+  /* "pygame_sdl2/display.pyx":310
  * 
  *     def get_active(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED):             # <<<<<<<<<<<<<<
@@ -4237,7 +4485,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
   __pyx_t_1 = ((SDL_GetWindowFlags(__pyx_v_self->window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":288
+    /* "pygame_sdl2/display.pyx":311
  *     def get_active(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED):
  *             return False             # <<<<<<<<<<<<<<
@@ -4249,7 +4497,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
     __pyx_r = Py_False;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":287
+    /* "pygame_sdl2/display.pyx":310
  * 
  *     def get_active(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED):             # <<<<<<<<<<<<<<
@@ -4258,7 +4506,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
  */
   }
 
-  /* "pygame_sdl2/display.pyx":290
+  /* "pygame_sdl2/display.pyx":313
  *             return False
  *         else:
  *             return True             # <<<<<<<<<<<<<<
@@ -4272,7 +4520,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
     goto __pyx_L0;
   }
 
-  /* "pygame_sdl2/display.pyx":286
+  /* "pygame_sdl2/display.pyx":309
  *         return { }
  * 
  *     def get_active(self):             # <<<<<<<<<<<<<<
@@ -4287,7 +4535,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":292
+/* "pygame_sdl2/display.pyx":315
  *             return True
  * 
  *     def iconify(self):             # <<<<<<<<<<<<<<
@@ -4313,7 +4561,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("iconify", 0);
 
-  /* "pygame_sdl2/display.pyx":293
+  /* "pygame_sdl2/display.pyx":316
  * 
  *     def iconify(self):
  *         SDL_MinimizeWindow(self.window)             # <<<<<<<<<<<<<<
@@ -4322,7 +4570,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
  */
   SDL_MinimizeWindow(__pyx_v_self->window);
 
-  /* "pygame_sdl2/display.pyx":294
+  /* "pygame_sdl2/display.pyx":317
  *     def iconify(self):
  *         SDL_MinimizeWindow(self.window)
  *         return True             # <<<<<<<<<<<<<<
@@ -4334,7 +4582,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":292
+  /* "pygame_sdl2/display.pyx":315
  *             return True
  * 
  *     def iconify(self):             # <<<<<<<<<<<<<<
@@ -4349,7 +4597,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":296
+/* "pygame_sdl2/display.pyx":319
  *         return True
  * 
  *     def toggle_fullscreen(self):             # <<<<<<<<<<<<<<
@@ -4382,7 +4630,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toggle_fullscreen", 0);
 
-  /* "pygame_sdl2/display.pyx":297
+  /* "pygame_sdl2/display.pyx":320
  * 
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4392,7 +4640,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   __pyx_t_1 = ((SDL_GetWindowFlags(__pyx_v_self->window) & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":298
+    /* "pygame_sdl2/display.pyx":321
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):
  *             if SDL_SetWindowFullscreen(self.window, 0):             # <<<<<<<<<<<<<<
@@ -4402,14 +4650,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
     __pyx_t_1 = (SDL_SetWindowFullscreen(__pyx_v_self->window, 0) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":299
+      /* "pygame_sdl2/display.pyx":322
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):
  *             if SDL_SetWindowFullscreen(self.window, 0):
  *                 raise error()             # <<<<<<<<<<<<<<
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -4422,18 +4670,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":298
+      /* "pygame_sdl2/display.pyx":321
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):
  *             if SDL_SetWindowFullscreen(self.window, 0):             # <<<<<<<<<<<<<<
@@ -4442,7 +4690,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
  */
     }
 
-    /* "pygame_sdl2/display.pyx":297
+    /* "pygame_sdl2/display.pyx":320
  * 
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4452,7 +4700,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":301
+  /* "pygame_sdl2/display.pyx":324
  *                 raise error()
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4463,14 +4711,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
     __pyx_t_1 = (SDL_SetWindowFullscreen(__pyx_v_self->window, SDL_WINDOW_FULLSCREEN_DESKTOP) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":302
+      /* "pygame_sdl2/display.pyx":325
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):
  *                 raise error()             # <<<<<<<<<<<<<<
  * 
  *         return True
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -4483,18 +4731,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":301
+      /* "pygame_sdl2/display.pyx":324
  *                 raise error()
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4505,7 +4753,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":304
+  /* "pygame_sdl2/display.pyx":327
  *                 raise error()
  * 
  *         return True             # <<<<<<<<<<<<<<
@@ -4517,7 +4765,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":296
+  /* "pygame_sdl2/display.pyx":319
  *         return True
  * 
  *     def toggle_fullscreen(self):             # <<<<<<<<<<<<<<
@@ -4538,7 +4786,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":306
+/* "pygame_sdl2/display.pyx":329
  *         return True
  * 
  *     def set_gamma(self, red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -4590,7 +4838,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_27set_gamma(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4607,7 +4855,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_27set_gamma(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.set_gamma", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4636,7 +4884,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __Pyx_INCREF(__pyx_v_green);
   __Pyx_INCREF(__pyx_v_blue);
 
-  /* "pygame_sdl2/display.pyx":307
+  /* "pygame_sdl2/display.pyx":330
  * 
  *     def set_gamma(self, red, green=None, blue=None):
  *         if green is None:             # <<<<<<<<<<<<<<
@@ -4647,7 +4895,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":308
+    /* "pygame_sdl2/display.pyx":331
  *     def set_gamma(self, red, green=None, blue=None):
  *         if green is None:
  *             green = red             # <<<<<<<<<<<<<<
@@ -4657,7 +4905,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
     __Pyx_INCREF(__pyx_v_red);
     __Pyx_DECREF_SET(__pyx_v_green, __pyx_v_red);
 
-    /* "pygame_sdl2/display.pyx":307
+    /* "pygame_sdl2/display.pyx":330
  * 
  *     def set_gamma(self, red, green=None, blue=None):
  *         if green is None:             # <<<<<<<<<<<<<<
@@ -4666,7 +4914,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":309
+  /* "pygame_sdl2/display.pyx":332
  *         if green is None:
  *             green = red
  *         if blue is None:             # <<<<<<<<<<<<<<
@@ -4677,7 +4925,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":310
+    /* "pygame_sdl2/display.pyx":333
  *             green = red
  *         if blue is None:
  *             blue = red             # <<<<<<<<<<<<<<
@@ -4687,7 +4935,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
     __Pyx_INCREF(__pyx_v_red);
     __Pyx_DECREF_SET(__pyx_v_blue, __pyx_v_red);
 
-    /* "pygame_sdl2/display.pyx":309
+    /* "pygame_sdl2/display.pyx":332
  *         if green is None:
  *             green = red
  *         if blue is None:             # <<<<<<<<<<<<<<
@@ -4696,37 +4944,37 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":316
+  /* "pygame_sdl2/display.pyx":339
  *         cdef Uint16 blue_gamma[256]
  * 
  *         SDL_CalculateGammaRamp(red, red_gamma)             # <<<<<<<<<<<<<<
  *         SDL_CalculateGammaRamp(green, green_gamma)
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  */
-  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_red); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_red); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_CalculateGammaRamp(__pyx_t_3, __pyx_v_red_gamma);
 
-  /* "pygame_sdl2/display.pyx":317
+  /* "pygame_sdl2/display.pyx":340
  * 
  *         SDL_CalculateGammaRamp(red, red_gamma)
  *         SDL_CalculateGammaRamp(green, green_gamma)             # <<<<<<<<<<<<<<
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  * 
  */
-  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_green); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_green); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_CalculateGammaRamp(__pyx_t_3, __pyx_v_green_gamma);
 
-  /* "pygame_sdl2/display.pyx":318
+  /* "pygame_sdl2/display.pyx":341
  *         SDL_CalculateGammaRamp(red, red_gamma)
  *         SDL_CalculateGammaRamp(green, green_gamma)
  *         SDL_CalculateGammaRamp(blue, blue_gamma)             # <<<<<<<<<<<<<<
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  */
-  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_blue); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_blue); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_CalculateGammaRamp(__pyx_t_3, __pyx_v_blue_gamma);
 
-  /* "pygame_sdl2/display.pyx":320
+  /* "pygame_sdl2/display.pyx":343
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4736,7 +4984,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_t_1 = (SDL_SetWindowGammaRamp(__pyx_v_self->window, __pyx_v_red_gamma, __pyx_v_green_gamma, __pyx_v_blue_gamma) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":321
+    /* "pygame_sdl2/display.pyx":344
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  *             return False             # <<<<<<<<<<<<<<
@@ -4748,7 +4996,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
     __pyx_r = Py_False;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":320
+    /* "pygame_sdl2/display.pyx":343
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4757,7 +5005,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":323
+  /* "pygame_sdl2/display.pyx":346
  *             return False
  * 
  *         return True             # <<<<<<<<<<<<<<
@@ -4769,7 +5017,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":306
+  /* "pygame_sdl2/display.pyx":329
  *         return True
  * 
  *     def set_gamma(self, red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -4789,7 +5037,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":325
+/* "pygame_sdl2/display.pyx":348
  *         return True
  * 
  *     def set_gamma_ramp(self, red, green, blue):             # <<<<<<<<<<<<<<
@@ -4830,16 +5078,16 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_29set_gamma_ramp(PyObje
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -4854,7 +5102,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_29set_gamma_ramp(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.set_gamma_ramp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4883,7 +5131,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_gamma_ramp", 0);
 
-  /* "pygame_sdl2/display.pyx":331
+  /* "pygame_sdl2/display.pyx":354
  *         cdef Uint16 blue_gamma[256]
  * 
  *         for i in range(256):             # <<<<<<<<<<<<<<
@@ -4893,47 +5141,47 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   for (__pyx_t_1 = 0; __pyx_t_1 < 0x100; __pyx_t_1+=1) {
     __pyx_v_i = __pyx_t_1;
 
-    /* "pygame_sdl2/display.pyx":332
+    /* "pygame_sdl2/display.pyx":355
  * 
  *         for i in range(256):
  *             red_gamma[i] = red[i]             # <<<<<<<<<<<<<<
  *             green_gamma[i] = green[i]
  *             blue_gamma[i] = blue[i]
  */
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_red, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_red, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_red_gamma[__pyx_v_i]) = __pyx_t_3;
 
-    /* "pygame_sdl2/display.pyx":333
+    /* "pygame_sdl2/display.pyx":356
  *         for i in range(256):
  *             red_gamma[i] = red[i]
  *             green_gamma[i] = green[i]             # <<<<<<<<<<<<<<
  *             blue_gamma[i] = blue[i]
  * 
  */
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_green, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_green, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_green_gamma[__pyx_v_i]) = __pyx_t_3;
 
-    /* "pygame_sdl2/display.pyx":334
+    /* "pygame_sdl2/display.pyx":357
  *             red_gamma[i] = red[i]
  *             green_gamma[i] = green[i]
  *             blue_gamma[i] = blue[i]             # <<<<<<<<<<<<<<
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  */
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_blue, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_blue, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_blue_gamma[__pyx_v_i]) = __pyx_t_3;
   }
 
-  /* "pygame_sdl2/display.pyx":336
+  /* "pygame_sdl2/display.pyx":359
  *             blue_gamma[i] = blue[i]
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4943,7 +5191,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   __pyx_t_4 = (SDL_SetWindowGammaRamp(__pyx_v_self->window, __pyx_v_red_gamma, __pyx_v_green_gamma, __pyx_v_blue_gamma) != 0);
   if (__pyx_t_4) {
 
-    /* "pygame_sdl2/display.pyx":337
+    /* "pygame_sdl2/display.pyx":360
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  *             return False             # <<<<<<<<<<<<<<
@@ -4955,7 +5203,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
     __pyx_r = Py_False;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":336
+    /* "pygame_sdl2/display.pyx":359
  *             blue_gamma[i] = blue[i]
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4964,7 +5212,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
  */
   }
 
-  /* "pygame_sdl2/display.pyx":339
+  /* "pygame_sdl2/display.pyx":362
  *             return False
  * 
  *         return True             # <<<<<<<<<<<<<<
@@ -4976,7 +5224,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":325
+  /* "pygame_sdl2/display.pyx":348
  *         return True
  * 
  *     def set_gamma_ramp(self, red, green, blue):             # <<<<<<<<<<<<<<
@@ -4995,7 +5243,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":341
+/* "pygame_sdl2/display.pyx":364
  *         return True
  * 
  *     def set_icon(self, Surface surface):             # <<<<<<<<<<<<<<
@@ -5012,7 +5260,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_31set_icon(PyObject *__
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_icon (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_surface), __pyx_ptype_11pygame_sdl2_7surface_Surface, 1, "surface", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_surface), __pyx_ptype_11pygame_sdl2_7surface_Surface, 1, "surface", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_v_self), ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)__pyx_v_surface));
 
   /* function exit code */
@@ -5029,7 +5277,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(struct __pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_icon", 0);
 
-  /* "pygame_sdl2/display.pyx":342
+  /* "pygame_sdl2/display.pyx":365
  * 
  *     def set_icon(self, Surface surface):
  *         SDL_SetWindowIcon(self.window, surface.surface)             # <<<<<<<<<<<<<<
@@ -5038,7 +5286,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(struct __pyx
  */
   SDL_SetWindowIcon(__pyx_v_self->window, __pyx_v_surface->surface);
 
-  /* "pygame_sdl2/display.pyx":341
+  /* "pygame_sdl2/display.pyx":364
  *         return True
  * 
  *     def set_icon(self, Surface surface):             # <<<<<<<<<<<<<<
@@ -5053,7 +5301,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(struct __pyx
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":344
+/* "pygame_sdl2/display.pyx":367
  *         SDL_SetWindowIcon(self.window, surface.surface)
  * 
  *     def set_caption(self, title):             # <<<<<<<<<<<<<<
@@ -5088,7 +5336,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
   __Pyx_RefNannySetupContext("set_caption", 0);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "pygame_sdl2/display.pyx":346
+  /* "pygame_sdl2/display.pyx":369
  *     def set_caption(self, title):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -5099,22 +5347,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":347
+    /* "pygame_sdl2/display.pyx":370
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *         SDL_SetWindowTitle(self.window, title)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":346
+    /* "pygame_sdl2/display.pyx":369
  *     def set_caption(self, title):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -5123,17 +5371,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
  */
   }
 
-  /* "pygame_sdl2/display.pyx":349
+  /* "pygame_sdl2/display.pyx":372
  *             title = title.encode("utf-8")
  * 
  *         SDL_SetWindowTitle(self.window, title)             # <<<<<<<<<<<<<<
  * 
  *     def get_drawable_size(self):
  */
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_SetWindowTitle(__pyx_v_self->window, __pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":344
+  /* "pygame_sdl2/display.pyx":367
  *         SDL_SetWindowIcon(self.window, surface.surface)
  * 
  *     def set_caption(self, title):             # <<<<<<<<<<<<<<
@@ -5156,7 +5404,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":351
+/* "pygame_sdl2/display.pyx":374
  *         SDL_SetWindowTitle(self.window, title)
  * 
  *     def get_drawable_size(self):             # <<<<<<<<<<<<<<
@@ -5190,7 +5438,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_drawable_size", 0);
 
-  /* "pygame_sdl2/display.pyx":354
+  /* "pygame_sdl2/display.pyx":377
  *         cdef int w, h
  * 
  *         SDL_GL_GetDrawableSize(self.window, &w, &h)             # <<<<<<<<<<<<<<
@@ -5199,7 +5447,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
  */
   SDL_GL_GetDrawableSize(__pyx_v_self->window, (&__pyx_v_w), (&__pyx_v_h));
 
-  /* "pygame_sdl2/display.pyx":355
+  /* "pygame_sdl2/display.pyx":378
  * 
  *         SDL_GL_GetDrawableSize(self.window, &w, &h)
  *         return w, h             # <<<<<<<<<<<<<<
@@ -5207,11 +5455,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
  * # The icon that's used for new windows.
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -5223,7 +5471,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":351
+  /* "pygame_sdl2/display.pyx":374
  *         SDL_SetWindowTitle(self.window, title)
  * 
  *     def get_drawable_size(self):             # <<<<<<<<<<<<<<
@@ -5352,7 +5600,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_4__del__(struct __py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":366
+/* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -5361,9 +5609,9 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_4__del__(struct __py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_9set_mode = {"set_mode", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_9set_mode, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_11set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_11set_mode = {"set_mode", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_11set_mode, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_11set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_resolution = 0;
   PyObject *__pyx_v_flags = 0;
   PyObject *__pyx_v_depth = 0;
@@ -5416,7 +5664,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_mode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_mode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5435,222 +5683,110 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_mode", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_mode", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_8set_mode(__pyx_self, __pyx_v_resolution, __pyx_v_flags, __pyx_v_depth, __pyx_v_pos);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_10set_mode(__pyx_self, __pyx_v_resolution, __pyx_v_flags, __pyx_v_depth, __pyx_v_pos);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos) {
-  PyObject *__pyx_v_androidembed = NULL;
+static PyObject *__pyx_pf_11pygame_sdl2_7display_10set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_t_7;
+  Py_ssize_t __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
-  PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
-  int __pyx_t_12;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_mode", 0);
 
-  /* "pygame_sdl2/display.pyx":371
- *     # If we're on android, we have to close the splash window before opening
- *     # our window.
- *     try:             # <<<<<<<<<<<<<<
- *         import androidembed
- *         androidembed.close_window()
- */
-  {
-    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
-    __Pyx_XGOTREF(__pyx_t_1);
-    __Pyx_XGOTREF(__pyx_t_2);
-    __Pyx_XGOTREF(__pyx_t_3);
-    /*try:*/ {
-
-      /* "pygame_sdl2/display.pyx":372
- *     # our window.
- *     try:
- *         import androidembed             # <<<<<<<<<<<<<<
- *         androidembed.close_window()
- *     except ImportError:
- */
-      __pyx_t_4 = __Pyx_Import(__pyx_n_s_androidembed, 0, -1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_v_androidembed = __pyx_t_4;
-      __pyx_t_4 = 0;
-
-      /* "pygame_sdl2/display.pyx":373
- *     try:
- *         import androidembed
- *         androidembed.close_window()             # <<<<<<<<<<<<<<
- *     except ImportError:
- *         pass
- */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_androidembed, __pyx_n_s_close_window); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
-        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
-        if (likely(__pyx_t_6)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
-          __Pyx_INCREF(__pyx_t_6);
-          __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_5, function);
-        }
-      }
-      if (__pyx_t_6) {
-        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      } else {
-        __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-
-      /* "pygame_sdl2/display.pyx":371
- *     # If we're on android, we have to close the splash window before opening
- *     # our window.
- *     try:             # <<<<<<<<<<<<<<
- *         import androidembed
- *         androidembed.close_window()
- */
-    }
-    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L10_try_end;
-    __pyx_L3_error:;
-    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-
-    /* "pygame_sdl2/display.pyx":374
- *         import androidembed
- *         androidembed.close_window()
- *     except ImportError:             # <<<<<<<<<<<<<<
- *         pass
- * 
- */
-    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_ImportError);
-    if (__pyx_t_7) {
-      PyErr_Restore(0,0,0);
-      goto __pyx_L4_exception_handled;
-    }
-    goto __pyx_L5_except_error;
-    __pyx_L5_except_error:;
-
-    /* "pygame_sdl2/display.pyx":371
- *     # If we're on android, we have to close the splash window before opening
- *     # our window.
- *     try:             # <<<<<<<<<<<<<<
- *         import androidembed
- *         androidembed.close_window()
- */
-    __Pyx_XGIVEREF(__pyx_t_1);
-    __Pyx_XGIVEREF(__pyx_t_2);
-    __Pyx_XGIVEREF(__pyx_t_3);
-    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-    goto __pyx_L1_error;
-    __pyx_L4_exception_handled:;
-    __Pyx_XGIVEREF(__pyx_t_1);
-    __Pyx_XGIVEREF(__pyx_t_2);
-    __Pyx_XGIVEREF(__pyx_t_3);
-    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-    __pyx_L10_try_end:;
-  }
-
-  /* "pygame_sdl2/display.pyx":377
- *         pass
+  /* "pygame_sdl2/display.pyx":392
+ *     global main_window
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):
  */
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_8) {
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":379
+    /* "pygame_sdl2/display.pyx":394
  *     if main_window:
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):             # <<<<<<<<<<<<<<
  *             main_window.resize(resolution, flags & SDL_WINDOW_OPENGL)
  *             return main_window.surface
  */
-    __pyx_t_4 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyNumber_And(__pyx_v_flags, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyInt_From_uint32_t((__pyx_v_11pygame_sdl2_7display_main_window->create_flags & (~SDL_WINDOW_OPENGL))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_2 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyNumber_And(__pyx_v_flags, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = __Pyx_PyInt_From_uint32_t((__pyx_v_11pygame_sdl2_7display_main_window->create_flags & (~SDL_WINDOW_OPENGL))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (__pyx_t_8) {
+    if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":380
+      /* "pygame_sdl2/display.pyx":395
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):
  *             main_window.resize(resolution, flags & SDL_WINDOW_OPENGL)             # <<<<<<<<<<<<<<
  *             return main_window.surface
  * 
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_resize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_resize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_3 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyNumber_And(__pyx_v_flags, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_9 = PyNumber_And(__pyx_v_flags, __pyx_t_5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_9);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = NULL;
-      __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
-        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
-        if (likely(__pyx_t_5)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = NULL;
+      __pyx_t_6 = 0;
+      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+        if (likely(__pyx_t_3)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+          __Pyx_INCREF(__pyx_t_3);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_4, function);
-          __pyx_t_10 = 1;
+          __Pyx_DECREF_SET(__pyx_t_2, function);
+          __pyx_t_6 = 1;
         }
       }
-      __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_11);
-      if (__pyx_t_5) {
-        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      if (__pyx_t_3) {
+        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
       }
       __Pyx_INCREF(__pyx_v_resolution);
       __Pyx_GIVEREF(__pyx_v_resolution);
-      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_v_resolution);
-      __Pyx_GIVEREF(__pyx_t_9);
-      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_9);
-      __pyx_t_9 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_resolution);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "pygame_sdl2/display.pyx":381
+      /* "pygame_sdl2/display.pyx":396
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):
  *             main_window.resize(resolution, flags & SDL_WINDOW_OPENGL)
  *             return main_window.surface             # <<<<<<<<<<<<<<
@@ -5662,7 +5798,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
       __pyx_r = ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface);
       goto __pyx_L0;
 
-      /* "pygame_sdl2/display.pyx":379
+      /* "pygame_sdl2/display.pyx":394
  *     if main_window:
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):             # <<<<<<<<<<<<<<
@@ -5671,7 +5807,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
     }
 
-    /* "pygame_sdl2/display.pyx":384
+    /* "pygame_sdl2/display.pyx":399
  * 
  *         else:
  *             main_window.destroy()             # <<<<<<<<<<<<<<
@@ -5679,31 +5815,31 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)
  */
     /*else*/ {
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_destroy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_11 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
-        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
-        if (likely(__pyx_t_11)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_11);
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_destroy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_7 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
+        if (likely(__pyx_t_7)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+          __Pyx_INCREF(__pyx_t_7);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_4, function);
+          __Pyx_DECREF_SET(__pyx_t_2, function);
         }
       }
-      if (__pyx_t_11) {
-        __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      if (__pyx_t_7) {
+        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       } else {
-        __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
 
-    /* "pygame_sdl2/display.pyx":377
- *         pass
+    /* "pygame_sdl2/display.pyx":392
+ *     global main_window
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
  * 
@@ -5711,95 +5847,95 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
   }
 
-  /* "pygame_sdl2/display.pyx":386
+  /* "pygame_sdl2/display.pyx":401
  *             main_window.destroy()
  * 
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)             # <<<<<<<<<<<<<<
  * 
  *     if default_icon is not None:
  */
-  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
   __Pyx_INCREF(__pyx_v_resolution);
   __Pyx_GIVEREF(__pyx_v_resolution);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_resolution);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_resolution);
   __Pyx_INCREF(__pyx_v_flags);
   __Pyx_GIVEREF(__pyx_v_flags);
-  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_flags);
+  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_flags);
   __Pyx_INCREF(__pyx_v_depth);
   __Pyx_GIVEREF(__pyx_v_depth);
-  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_depth);
-  __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pos, __pyx_v_pos) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7display_Window), __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_depth);
+  __pyx_t_4 = 0;
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_pos, __pyx_v_pos) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7display_Window), __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_XGOTREF(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
-  __Pyx_DECREF_SET(__pyx_v_11pygame_sdl2_7display_main_window, ((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_t_11));
-  __Pyx_GIVEREF(__pyx_t_11);
-  __pyx_t_11 = 0;
+  __Pyx_DECREF_SET(__pyx_v_11pygame_sdl2_7display_main_window, ((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_t_7));
+  __Pyx_GIVEREF(__pyx_t_7);
+  __pyx_t_7 = 0;
 
-  /* "pygame_sdl2/display.pyx":388
+  /* "pygame_sdl2/display.pyx":403
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)
  * 
  *     if default_icon is not None:             # <<<<<<<<<<<<<<
  *         main_window.set_icon(default_icon)
  * 
  */
-  __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_8 = (__pyx_t_11 != Py_None);
-  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-  __pyx_t_12 = (__pyx_t_8 != 0);
-  if (__pyx_t_12) {
+  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = (__pyx_t_7 != Py_None);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_8 = (__pyx_t_1 != 0);
+  if (__pyx_t_8) {
 
-    /* "pygame_sdl2/display.pyx":389
+    /* "pygame_sdl2/display.pyx":404
  * 
  *     if default_icon is not None:
  *         main_window.set_icon(default_icon)             # <<<<<<<<<<<<<<
  * 
  *     return main_window.surface
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
-      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6);
-      if (likely(__pyx_t_9)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
-        __Pyx_INCREF(__pyx_t_9);
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_5 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_6, function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
       }
     }
-    if (!__pyx_t_9) {
-      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __Pyx_GOTREF(__pyx_t_11);
+    if (!__pyx_t_5) {
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9); __pyx_t_9 = NULL;
-      __Pyx_GIVEREF(__pyx_t_4);
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_4);
-      __pyx_t_4 = 0;
-      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_11);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      __Pyx_GIVEREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_t_2);
+      __pyx_t_2 = 0;
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "pygame_sdl2/display.pyx":388
+    /* "pygame_sdl2/display.pyx":403
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)
  * 
  *     if default_icon is not None:             # <<<<<<<<<<<<<<
@@ -5808,7 +5944,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
   }
 
-  /* "pygame_sdl2/display.pyx":391
+  /* "pygame_sdl2/display.pyx":406
  *         main_window.set_icon(default_icon)
  * 
  *     return main_window.surface             # <<<<<<<<<<<<<<
@@ -5820,7 +5956,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
   __pyx_r = ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface);
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -5830,21 +5966,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("pygame_sdl2.display.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_androidembed);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":393
+/* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
@@ -5853,20 +5988,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_11get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_11get_surface = {"get_surface", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_11get_surface, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_11get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_13get_surface = {"get_surface", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_13get_surface, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_surface (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_10get_surface(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_12get_surface(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_surface(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -5879,7 +6014,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":394
+  /* "pygame_sdl2/display.pyx":409
  * 
  * def get_surface():
  *     if main_window is None:             # <<<<<<<<<<<<<<
@@ -5890,7 +6025,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":395
+    /* "pygame_sdl2/display.pyx":410
  * def get_surface():
  *     if main_window is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -5902,7 +6037,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
     __pyx_r = Py_None;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":394
+    /* "pygame_sdl2/display.pyx":409
  * 
  * def get_surface():
  *     if main_window is None:             # <<<<<<<<<<<<<<
@@ -5911,7 +6046,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
  */
   }
 
-  /* "pygame_sdl2/display.pyx":397
+  /* "pygame_sdl2/display.pyx":412
  *         return None
  * 
  *     return main_window.get_surface()             # <<<<<<<<<<<<<<
@@ -5919,7 +6054,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
  * def get_window():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -5932,10 +6067,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -5943,7 +6078,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":393
+  /* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
@@ -5964,7 +6099,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":399
+/* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
@@ -5973,26 +6108,26 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_12get_window[] = "\n    Returns the Window created by set_mode, or None if no such window\n    exists.\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_13get_window = {"get_window", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_13get_window, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_12get_window};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_15get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_14get_window[] = "\n    Returns the Window created by set_mode, or None if no such window\n    exists.\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_15get_window = {"get_window", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_15get_window, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_14get_window};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_15get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_window (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_12get_window(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_14get_window(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_14get_window(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_window", 0);
 
-  /* "pygame_sdl2/display.pyx":405
+  /* "pygame_sdl2/display.pyx":420
  *     """
  * 
  *     return main_window             # <<<<<<<<<<<<<<
@@ -6004,7 +6139,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyOb
   __pyx_r = ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window);
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":399
+  /* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
@@ -6019,7 +6154,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":407
+/* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
@@ -6028,20 +6163,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_15flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_15flip = {"flip", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_15flip, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_15flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_17flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_17flip = {"flip", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_17flip, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_17flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("flip (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_14flip(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_16flip(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_16flip(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6053,24 +6188,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("flip", 0);
 
-  /* "pygame_sdl2/display.pyx":408
+  /* "pygame_sdl2/display.pyx":423
  * 
  * def flip():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         main_window.flip()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":409
+    /* "pygame_sdl2/display.pyx":424
  * def flip():
  *     if main_window:
  *         main_window.flip()             # <<<<<<<<<<<<<<
  * 
  * def update(rectangles=None):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_flip); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_flip); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -6083,16 +6218,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "pygame_sdl2/display.pyx":408
+    /* "pygame_sdl2/display.pyx":423
  * 
  * def flip():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -6101,7 +6236,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "pygame_sdl2/display.pyx":407
+  /* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
@@ -6124,7 +6259,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":411
+/* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
@@ -6133,9 +6268,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_17update = {"update", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_17update, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_19update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_19update = {"update", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_19update, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_19update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rectangles = 0;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -6164,7 +6299,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6177,20 +6312,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_16update(__pyx_self, __pyx_v_rectangles);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_18update(__pyx_self, __pyx_v_rectangles);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_18update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6203,24 +6338,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("update", 0);
 
-  /* "pygame_sdl2/display.pyx":412
+  /* "pygame_sdl2/display.pyx":427
  * 
  * def update(rectangles=None):
  *     if main_window:             # <<<<<<<<<<<<<<
  *         main_window.update(rectangles)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":413
+    /* "pygame_sdl2/display.pyx":428
  * def update(rectangles=None):
  *     if main_window:
  *         main_window.update(rectangles)             # <<<<<<<<<<<<<<
  * 
  * def get_driver():
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_update); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_update); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -6233,23 +6368,23 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
       }
     }
     if (!__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_rectangles); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_rectangles); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
       __Pyx_INCREF(__pyx_v_rectangles);
       __Pyx_GIVEREF(__pyx_v_rectangles);
       PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_rectangles);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "pygame_sdl2/display.pyx":412
+    /* "pygame_sdl2/display.pyx":427
  * 
  * def update(rectangles=None):
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -6258,7 +6393,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "pygame_sdl2/display.pyx":411
+  /* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
@@ -6282,7 +6417,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":415
+/* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
@@ -6291,20 +6426,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_19get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_19get_driver = {"get_driver", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_19get_driver, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_19get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_21get_driver = {"get_driver", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_21get_driver, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_driver (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_18get_driver(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_20get_driver(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_driver(CYTHON_UNUSED PyObject *__pyx_self) {
   char const *__pyx_v_driver;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -6317,7 +6452,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_driver", 0);
 
-  /* "pygame_sdl2/display.pyx":416
+  /* "pygame_sdl2/display.pyx":431
  * 
  * def get_driver():
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()             # <<<<<<<<<<<<<<
@@ -6326,7 +6461,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
  */
   __pyx_v_driver = SDL_GetCurrentVideoDriver();
 
-  /* "pygame_sdl2/display.pyx":418
+  /* "pygame_sdl2/display.pyx":433
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  *     if driver == NULL:             # <<<<<<<<<<<<<<
@@ -6336,14 +6471,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
   __pyx_t_1 = ((__pyx_v_driver == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":419
+    /* "pygame_sdl2/display.pyx":434
  * 
  *     if driver == NULL:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return driver
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -6356,18 +6491,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":418
+    /* "pygame_sdl2/display.pyx":433
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  *     if driver == NULL:             # <<<<<<<<<<<<<<
@@ -6376,7 +6511,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
  */
   }
 
-  /* "pygame_sdl2/display.pyx":421
+  /* "pygame_sdl2/display.pyx":436
  *         raise error()
  * 
  *     return driver             # <<<<<<<<<<<<<<
@@ -6384,13 +6519,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
  * class Info(object):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_driver); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_driver); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":415
+  /* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
@@ -6411,7 +6546,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":425
+/* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
@@ -6450,7 +6585,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "pygame_sdl2/display.pyx":429
+  /* "pygame_sdl2/display.pyx":444
  *         cdef SDL_PixelFormat *format
  * 
  *         if SDL_GetCurrentDisplayMode(0, &dm):             # <<<<<<<<<<<<<<
@@ -6460,14 +6595,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_1 = (SDL_GetCurrentDisplayMode(0, (&__pyx_v_dm)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":430
+    /* "pygame_sdl2/display.pyx":445
  * 
  *         if SDL_GetCurrentDisplayMode(0, &dm):
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *         format = SDL_AllocFormat(dm.format)
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -6480,18 +6615,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":429
+    /* "pygame_sdl2/display.pyx":444
  *         cdef SDL_PixelFormat *format
  * 
  *         if SDL_GetCurrentDisplayMode(0, &dm):             # <<<<<<<<<<<<<<
@@ -6500,7 +6635,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":432
+  /* "pygame_sdl2/display.pyx":447
  *             raise error()
  * 
  *         format = SDL_AllocFormat(dm.format)             # <<<<<<<<<<<<<<
@@ -6509,7 +6644,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   __pyx_v_format = SDL_AllocFormat(__pyx_v_dm.format);
 
-  /* "pygame_sdl2/display.pyx":433
+  /* "pygame_sdl2/display.pyx":448
  * 
  *         format = SDL_AllocFormat(dm.format)
  *         if format == NULL:             # <<<<<<<<<<<<<<
@@ -6519,14 +6654,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_1 = ((__pyx_v_format == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":434
+    /* "pygame_sdl2/display.pyx":449
  *         format = SDL_AllocFormat(dm.format)
  *         if format == NULL:
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *         self.bitsize = format.BitsPerPixel
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -6539,18 +6674,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":433
+    /* "pygame_sdl2/display.pyx":448
  * 
  *         format = SDL_AllocFormat(dm.format)
  *         if format == NULL:             # <<<<<<<<<<<<<<
@@ -6559,78 +6694,78 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":436
+  /* "pygame_sdl2/display.pyx":451
  *             raise error()
  * 
  *         self.bitsize = format.BitsPerPixel             # <<<<<<<<<<<<<<
  *         self.bytesize = format.BytesPerPixel
  * 
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BitsPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BitsPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bitsize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bitsize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/display.pyx":437
+  /* "pygame_sdl2/display.pyx":452
  * 
  *         self.bitsize = format.BitsPerPixel
  *         self.bytesize = format.BytesPerPixel             # <<<<<<<<<<<<<<
  * 
  *         self.masks = (
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BytesPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BytesPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bytesize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bytesize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/display.pyx":440
+  /* "pygame_sdl2/display.pyx":455
  * 
  *         self.masks = (
  *             format.Rmask,             # <<<<<<<<<<<<<<
  *             format.Gmask,
  *             format.Bmask,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Rmask); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Rmask); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "pygame_sdl2/display.pyx":441
+  /* "pygame_sdl2/display.pyx":456
  *         self.masks = (
  *             format.Rmask,
  *             format.Gmask,             # <<<<<<<<<<<<<<
  *             format.Bmask,
  *             format.Amask,
  */
-  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Gmask); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Gmask); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "pygame_sdl2/display.pyx":442
+  /* "pygame_sdl2/display.pyx":457
  *             format.Rmask,
  *             format.Gmask,
  *             format.Bmask,             # <<<<<<<<<<<<<<
  *             format.Amask,
  *             )
  */
-  __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Bmask); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Bmask); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "pygame_sdl2/display.pyx":443
+  /* "pygame_sdl2/display.pyx":458
  *             format.Gmask,
  *             format.Bmask,
  *             format.Amask,             # <<<<<<<<<<<<<<
  *             )
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Amask); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Amask); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":440
+  /* "pygame_sdl2/display.pyx":455
  * 
  *         self.masks = (
  *             format.Rmask,             # <<<<<<<<<<<<<<
  *             format.Gmask,
  *             format.Bmask,
  */
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -6645,64 +6780,64 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_4 = 0;
   __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":439
+  /* "pygame_sdl2/display.pyx":454
  *         self.bytesize = format.BytesPerPixel
  * 
  *         self.masks = (             # <<<<<<<<<<<<<<
  *             format.Rmask,
  *             format.Gmask,
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_masks, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_masks, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":447
+  /* "pygame_sdl2/display.pyx":462
  * 
  *         self.shifts = (
  *             format.Rshift,             # <<<<<<<<<<<<<<
  *             format.Gshift,
  *             format.Bshift,
  */
-  __pyx_t_6 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rshift); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rshift); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":448
+  /* "pygame_sdl2/display.pyx":463
  *         self.shifts = (
  *             format.Rshift,
  *             format.Gshift,             # <<<<<<<<<<<<<<
  *             format.Bshift,
  *             format.Ashift,
  */
-  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gshift); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gshift); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":449
+  /* "pygame_sdl2/display.pyx":464
  *             format.Rshift,
  *             format.Gshift,
  *             format.Bshift,             # <<<<<<<<<<<<<<
  *             format.Ashift,
  *             )
  */
-  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bshift); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bshift); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "pygame_sdl2/display.pyx":450
+  /* "pygame_sdl2/display.pyx":465
  *             format.Gshift,
  *             format.Bshift,
  *             format.Ashift,             # <<<<<<<<<<<<<<
  *             )
  * 
  */
-  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Ashift); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Ashift); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "pygame_sdl2/display.pyx":447
+  /* "pygame_sdl2/display.pyx":462
  * 
  *         self.shifts = (
  *             format.Rshift,             # <<<<<<<<<<<<<<
  *             format.Gshift,
  *             format.Bshift,
  */
-  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
@@ -6717,64 +6852,64 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_4 = 0;
   __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":446
+  /* "pygame_sdl2/display.pyx":461
  *             )
  * 
  *         self.shifts = (             # <<<<<<<<<<<<<<
  *             format.Rshift,
  *             format.Gshift,
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_shifts, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_shifts, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/display.pyx":454
+  /* "pygame_sdl2/display.pyx":469
  * 
  *         self.losses = (
  *             format.Rloss,             # <<<<<<<<<<<<<<
  *             format.Gloss,
  *             format.Bloss,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rloss); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rloss); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "pygame_sdl2/display.pyx":455
+  /* "pygame_sdl2/display.pyx":470
  *         self.losses = (
  *             format.Rloss,
  *             format.Gloss,             # <<<<<<<<<<<<<<
  *             format.Bloss,
  *             format.Aloss,
  */
-  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gloss); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gloss); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "pygame_sdl2/display.pyx":456
+  /* "pygame_sdl2/display.pyx":471
  *             format.Rloss,
  *             format.Gloss,
  *             format.Bloss,             # <<<<<<<<<<<<<<
  *             format.Aloss,
  *             )
  */
-  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bloss); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bloss); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "pygame_sdl2/display.pyx":457
+  /* "pygame_sdl2/display.pyx":472
  *             format.Gloss,
  *             format.Bloss,
  *             format.Aloss,             # <<<<<<<<<<<<<<
  *             )
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Aloss); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Aloss); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":454
+  /* "pygame_sdl2/display.pyx":469
  * 
  *         self.losses = (
  *             format.Rloss,             # <<<<<<<<<<<<<<
  *             format.Gloss,
  *             format.Bloss,
  */
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -6789,17 +6924,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_4 = 0;
   __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":453
+  /* "pygame_sdl2/display.pyx":468
  *             )
  * 
  *         self.losses = (             # <<<<<<<<<<<<<<
  *             format.Rloss,
  *             format.Gloss,
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_losses, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_losses, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":460
+  /* "pygame_sdl2/display.pyx":475
  *             )
  * 
  *         SDL_FreeFormat(format)             # <<<<<<<<<<<<<<
@@ -6808,24 +6943,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   SDL_FreeFormat(__pyx_v_format);
 
-  /* "pygame_sdl2/display.pyx":462
+  /* "pygame_sdl2/display.pyx":477
  *         SDL_FreeFormat(format)
  * 
  *         if main_window:             # <<<<<<<<<<<<<<
  *             self.current_w, self.current_h = main_window.surface.get_size()
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":463
+    /* "pygame_sdl2/display.pyx":478
  * 
  *         if main_window:
  *             self.current_w, self.current_h = main_window.surface.get_size()             # <<<<<<<<<<<<<<
  *         else:
  * 
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface), __pyx_n_s_get_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface), __pyx_n_s_get_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -6838,10 +6973,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -6855,7 +6990,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -6868,15 +7003,15 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext;
@@ -6884,7 +7019,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       __Pyx_GOTREF(__pyx_t_5);
       index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       goto __pyx_L7_unpacking_done;
@@ -6892,15 +7027,15 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L7_unpacking_done:;
     }
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":462
+    /* "pygame_sdl2/display.pyx":477
  *         SDL_FreeFormat(format)
  * 
  *         if main_window:             # <<<<<<<<<<<<<<
@@ -6910,7 +7045,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
     goto __pyx_L5;
   }
 
-  /* "pygame_sdl2/display.pyx":466
+  /* "pygame_sdl2/display.pyx":481
  *         else:
  * 
  *             self.current_w = dm.w             # <<<<<<<<<<<<<<
@@ -6918,119 +7053,119 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  * 
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.w); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.w); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "pygame_sdl2/display.pyx":467
+    /* "pygame_sdl2/display.pyx":482
  * 
  *             self.current_w = dm.w
  *             self.current_h = dm.h             # <<<<<<<<<<<<<<
  * 
  *         self.refresh_rate = dm.refresh_rate
  */
-    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.h); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.h); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
   __pyx_L5:;
 
-  /* "pygame_sdl2/display.pyx":469
+  /* "pygame_sdl2/display.pyx":484
  *             self.current_h = dm.h
  * 
  *         self.refresh_rate = dm.refresh_rate             # <<<<<<<<<<<<<<
  * 
  *         # The rest of these are just guesses.
  */
-  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.refresh_rate); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.refresh_rate); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_refresh_rate, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_refresh_rate, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":472
+  /* "pygame_sdl2/display.pyx":487
  * 
  *         # The rest of these are just guesses.
  *         self.hw = False             # <<<<<<<<<<<<<<
  *         self.wm = True
  *         self.video_mem = 256 * 1024 * 1024
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":473
+  /* "pygame_sdl2/display.pyx":488
  *         # The rest of these are just guesses.
  *         self.hw = False
  *         self.wm = True             # <<<<<<<<<<<<<<
  *         self.video_mem = 256 * 1024 * 1024
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wm, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wm, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":474
+  /* "pygame_sdl2/display.pyx":489
  *         self.hw = False
  *         self.wm = True
  *         self.video_mem = 256 * 1024 * 1024             # <<<<<<<<<<<<<<
  * 
  *         self.blit_hw = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_video_mem, __pyx_int_268435456) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_video_mem, __pyx_int_268435456) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":476
+  /* "pygame_sdl2/display.pyx":491
  *         self.video_mem = 256 * 1024 * 1024
  * 
  *         self.blit_hw = False             # <<<<<<<<<<<<<<
  *         self.blit_hw_CC = False
  *         self.blit_hw_A = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":477
+  /* "pygame_sdl2/display.pyx":492
  * 
  *         self.blit_hw = False
  *         self.blit_hw_CC = False             # <<<<<<<<<<<<<<
  *         self.blit_hw_A = False
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":478
+  /* "pygame_sdl2/display.pyx":493
  *         self.blit_hw = False
  *         self.blit_hw_CC = False
  *         self.blit_hw_A = False             # <<<<<<<<<<<<<<
  * 
  *         self.blit_sw = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":480
+  /* "pygame_sdl2/display.pyx":495
  *         self.blit_hw_A = False
  * 
  *         self.blit_sw = False             # <<<<<<<<<<<<<<
  *         self.blit_sw_CC = False
  *         self.blit_sw_A = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":481
+  /* "pygame_sdl2/display.pyx":496
  * 
  *         self.blit_sw = False
  *         self.blit_sw_CC = False             # <<<<<<<<<<<<<<
  *         self.blit_sw_A = False
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":482
+  /* "pygame_sdl2/display.pyx":497
  *         self.blit_sw = False
  *         self.blit_sw_CC = False
  *         self.blit_sw_A = False             # <<<<<<<<<<<<<<
  * 
  *     def __repr__(self):
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":425
+  /* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
@@ -7055,7 +7190,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":484
+/* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -7090,7 +7225,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "pygame_sdl2/display.pyx":485
+  /* "pygame_sdl2/display.pyx":500
  * 
  *     def __repr__(self):
  *         return "<Info({!r})>".format(self.__dict__)             # <<<<<<<<<<<<<<
@@ -7098,9 +7233,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_Info_r, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_Info_r, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -7113,17 +7248,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
@@ -7132,7 +7267,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":484
+  /* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -7155,7 +7290,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":488
+/* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
@@ -7164,20 +7299,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_21get_wm_info = {"get_wm_info", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_21get_wm_info, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_23get_wm_info = {"get_wm_info", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_23get_wm_info, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_wm_info (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_20get_wm_info(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_22get_wm_info(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_wm_info(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7189,17 +7324,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_wm_info", 0);
 
-  /* "pygame_sdl2/display.pyx":489
+  /* "pygame_sdl2/display.pyx":504
  * 
  * def get_wm_info():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.get_wm_info()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":490
+    /* "pygame_sdl2/display.pyx":505
  * def get_wm_info():
  *     if main_window:
  *         return main_window.get_wm_info()             # <<<<<<<<<<<<<<
@@ -7207,7 +7342,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  *     return {}
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_wm_info); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_wm_info); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -7220,10 +7355,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -7231,7 +7366,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":489
+    /* "pygame_sdl2/display.pyx":504
  * 
  * def get_wm_info():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -7240,7 +7375,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  */
   }
 
-  /* "pygame_sdl2/display.pyx":492
+  /* "pygame_sdl2/display.pyx":507
  *         return main_window.get_wm_info()
  * 
  *     return {}             # <<<<<<<<<<<<<<
@@ -7248,13 +7383,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":488
+  /* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
@@ -7275,7 +7410,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":495
+/* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -7284,21 +7419,21 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_22get_num_video_displays[] = "\n    Returns the number of video displays connected to the system.\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_23get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_23get_num_video_displays, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_22get_num_video_displays};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_25get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_24get_num_video_displays[] = "\n    Returns the number of video displays connected to the system.\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_25get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_25get_num_video_displays, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_24get_num_video_displays};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_25get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_num_video_displays (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_24get_num_video_displays(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_24get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
   int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -7311,7 +7446,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_num_video_displays", 0);
 
-  /* "pygame_sdl2/display.pyx":500
+  /* "pygame_sdl2/display.pyx":515
  *     """
  * 
  *     rv = SDL_GetNumVideoDisplays()             # <<<<<<<<<<<<<<
@@ -7320,7 +7455,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  */
   __pyx_v_rv = SDL_GetNumVideoDisplays();
 
-  /* "pygame_sdl2/display.pyx":502
+  /* "pygame_sdl2/display.pyx":517
  *     rv = SDL_GetNumVideoDisplays()
  * 
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -7330,14 +7465,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
   __pyx_t_1 = ((__pyx_v_rv < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":503
+    /* "pygame_sdl2/display.pyx":518
  * 
  *     if rv < 0:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -7350,18 +7485,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":502
+    /* "pygame_sdl2/display.pyx":517
  *     rv = SDL_GetNumVideoDisplays()
  * 
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -7370,7 +7505,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  */
   }
 
-  /* "pygame_sdl2/display.pyx":505
+  /* "pygame_sdl2/display.pyx":520
  *         raise error()
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -7378,13 +7513,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":495
+  /* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -7405,7 +7540,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":508
+/* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
@@ -7414,10 +7549,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_24list_modes[] = "\n    Returns a list of possible display modes for the display `display`.\n\n    `depth` and `flags` are ignored.\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_25list_modes = {"list_modes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_25list_modes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_24list_modes};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_27list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_26list_modes[] = "\n    Returns a list of possible display modes for the display `display`.\n\n    `depth` and `flags` are ignored.\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_27list_modes = {"list_modes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_27list_modes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_26list_modes};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_27list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   CYTHON_UNUSED PyObject *__pyx_v_depth = 0;
   CYTHON_UNUSED PyObject *__pyx_v_flags = 0;
   PyObject *__pyx_v_display = 0;
@@ -7462,7 +7597,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_modes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_modes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -7479,20 +7614,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("list_modes", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("list_modes", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.list_modes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_24list_modes(__pyx_self, __pyx_v_depth, __pyx_v_flags, __pyx_v_display);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_26list_modes(__pyx_self, __pyx_v_depth, __pyx_v_flags, __pyx_v_display);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_26list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display) {
   int __pyx_v_num_modes;
   int __pyx_v_i;
   SDL_DisplayMode __pyx_v_mode;
@@ -7513,29 +7648,29 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("list_modes", 0);
 
-  /* "pygame_sdl2/display.pyx":518
+  /* "pygame_sdl2/display.pyx":533
  *     cdef SDL_DisplayMode mode
  * 
  *     rv = [ ]             # <<<<<<<<<<<<<<
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rv = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/display.pyx":520
+  /* "pygame_sdl2/display.pyx":535
  *     rv = [ ]
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)             # <<<<<<<<<<<<<<
  *     if num_modes < 0:
  *         raise error()
  */
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_num_modes = SDL_GetNumDisplayModes(__pyx_t_2);
 
-  /* "pygame_sdl2/display.pyx":521
+  /* "pygame_sdl2/display.pyx":536
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)
  *     if num_modes < 0:             # <<<<<<<<<<<<<<
@@ -7545,14 +7680,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   __pyx_t_3 = ((__pyx_v_num_modes < 0) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":522
+    /* "pygame_sdl2/display.pyx":537
  *     num_modes = SDL_GetNumDisplayModes(display)
  *     if num_modes < 0:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     for 0 <= i < num_modes:
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -7565,18 +7700,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":521
+    /* "pygame_sdl2/display.pyx":536
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)
  *     if num_modes < 0:             # <<<<<<<<<<<<<<
@@ -7585,7 +7720,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
  */
   }
 
-  /* "pygame_sdl2/display.pyx":524
+  /* "pygame_sdl2/display.pyx":539
  *         raise error()
  * 
  *     for 0 <= i < num_modes:             # <<<<<<<<<<<<<<
@@ -7595,29 +7730,29 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   __pyx_t_2 = __pyx_v_num_modes;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "pygame_sdl2/display.pyx":525
+    /* "pygame_sdl2/display.pyx":540
  * 
  *     for 0 <= i < num_modes:
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:             # <<<<<<<<<<<<<<
  *             t = (mode.w, mode.h)
  *             if t not in rv:
  */
-    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_3 = ((SDL_GetDisplayMode(__pyx_t_6, __pyx_v_i, (&__pyx_v_mode)) == 0) != 0);
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/display.pyx":526
+      /* "pygame_sdl2/display.pyx":541
  *     for 0 <= i < num_modes:
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:
  *             t = (mode.w, mode.h)             # <<<<<<<<<<<<<<
  *             if t not in rv:
  *                 rv.append(t)
  */
-      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_mode.w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_mode.w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_mode.h); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_mode.h); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -7628,27 +7763,27 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
       __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "pygame_sdl2/display.pyx":527
+      /* "pygame_sdl2/display.pyx":542
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:
  *             t = (mode.w, mode.h)
  *             if t not in rv:             # <<<<<<<<<<<<<<
  *                 rv.append(t)
  * 
  */
-      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_t, __pyx_v_rv, Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_t, __pyx_v_rv, Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_7 = (__pyx_t_3 != 0);
       if (__pyx_t_7) {
 
-        /* "pygame_sdl2/display.pyx":528
+        /* "pygame_sdl2/display.pyx":543
  *             t = (mode.w, mode.h)
  *             if t not in rv:
  *                 rv.append(t)             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-        __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_rv, __pyx_v_t); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_rv, __pyx_v_t); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-        /* "pygame_sdl2/display.pyx":527
+        /* "pygame_sdl2/display.pyx":542
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:
  *             t = (mode.w, mode.h)
  *             if t not in rv:             # <<<<<<<<<<<<<<
@@ -7657,7 +7792,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
  */
       }
 
-      /* "pygame_sdl2/display.pyx":525
+      /* "pygame_sdl2/display.pyx":540
  * 
  *     for 0 <= i < num_modes:
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:             # <<<<<<<<<<<<<<
@@ -7667,7 +7802,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
     }
   }
 
-  /* "pygame_sdl2/display.pyx":530
+  /* "pygame_sdl2/display.pyx":545
  *                 rv.append(t)
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -7679,7 +7814,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   __pyx_r = __pyx_v_rv;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":508
+  /* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
@@ -7702,7 +7837,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":533
+/* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
@@ -7711,10 +7846,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_26mode_ok[] = "\n    Returns true if size is in the result of list_modes().\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_27mode_ok = {"mode_ok", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_27mode_ok, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_26mode_ok};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_29mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_28mode_ok[] = "\n    Returns true if size is in the result of list_modes().\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_29mode_ok = {"mode_ok", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_29mode_ok, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_28mode_ok};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_29mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_size = 0;
   CYTHON_UNUSED PyObject *__pyx_v_flags = 0;
   CYTHON_UNUSED PyObject *__pyx_v_depth = 0;
@@ -7756,7 +7891,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mode_ok") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mode_ok") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -7773,20 +7908,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mode_ok", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mode_ok", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.mode_ok", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_26mode_ok(__pyx_self, __pyx_v_size, __pyx_v_flags, __pyx_v_depth);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_28mode_ok(__pyx_self, __pyx_v_size, __pyx_v_flags, __pyx_v_depth);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_28mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7799,7 +7934,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mode_ok", 0);
 
-  /* "pygame_sdl2/display.pyx":538
+  /* "pygame_sdl2/display.pyx":553
  *     """
  * 
  *     return tuple(size) in list_modes()             # <<<<<<<<<<<<<<
@@ -7807,9 +7942,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
  * def gl_reset_attributes():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_list_modes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_list_modes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -7822,23 +7957,23 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":533
+  /* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
@@ -7860,7 +7995,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":540
+/* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
@@ -7869,25 +8004,25 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_29gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_29gl_reset_attributes = {"gl_reset_attributes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_29gl_reset_attributes, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_29gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_31gl_reset_attributes = {"gl_reset_attributes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_31gl_reset_attributes, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_reset_attributes (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_30gl_reset_attributes(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_reset_attributes", 0);
 
-  /* "pygame_sdl2/display.pyx":541
+  /* "pygame_sdl2/display.pyx":556
  * 
  * def gl_reset_attributes():
  *     SDL_GL_ResetAttributes()             # <<<<<<<<<<<<<<
@@ -7896,7 +8031,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UN
  */
   SDL_GL_ResetAttributes();
 
-  /* "pygame_sdl2/display.pyx":540
+  /* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
@@ -7911,7 +8046,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UN
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":543
+/* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
@@ -7920,9 +8055,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UN
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_31gl_set_attribute = {"gl_set_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_33gl_set_attribute = {"gl_set_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_33gl_set_attribute, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_v_value = 0;
   int __pyx_lineno = 0;
@@ -7951,11 +8086,11 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gl_set_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gl_set_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7968,20 +8103,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.gl_set_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(__pyx_self, __pyx_v_flag, __pyx_v_value);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_32gl_set_attribute(__pyx_self, __pyx_v_flag, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value) {
   CYTHON_UNUSED PyObject *__pyx_v_default_swap_control = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -7996,35 +8131,35 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("gl_set_attribute", 0);
 
-  /* "pygame_sdl2/display.pyx":545
+  /* "pygame_sdl2/display.pyx":560
  * def gl_set_attribute(flag, value):
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
  *         if ios:
  *             return
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":546
+    /* "pygame_sdl2/display.pyx":561
  * 
  *     if flag == GL_SWAP_CONTROL:
  *         if ios:             # <<<<<<<<<<<<<<
  *             return
  * 
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/display.pyx":547
+      /* "pygame_sdl2/display.pyx":562
  *     if flag == GL_SWAP_CONTROL:
  *         if ios:
  *             return             # <<<<<<<<<<<<<<
@@ -8035,7 +8170,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
       goto __pyx_L0;
 
-      /* "pygame_sdl2/display.pyx":546
+      /* "pygame_sdl2/display.pyx":561
  * 
  *     if flag == GL_SWAP_CONTROL:
  *         if ios:             # <<<<<<<<<<<<<<
@@ -8044,31 +8179,31 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
     }
 
-    /* "pygame_sdl2/display.pyx":552
+    /* "pygame_sdl2/display.pyx":567
  *         # to deal with the case where the negative interval isn't
  *         # supported. Then give up and carry on.
  *         if SDL_GL_SetSwapInterval(value):             # <<<<<<<<<<<<<<
  *             SDL_GL_SetSwapInterval(-value)
  * 
  */
-    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_3 = (SDL_GL_SetSwapInterval(__pyx_t_4) != 0);
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/display.pyx":553
+      /* "pygame_sdl2/display.pyx":568
  *         # supported. Then give up and carry on.
  *         if SDL_GL_SetSwapInterval(value):
  *             SDL_GL_SetSwapInterval(-value)             # <<<<<<<<<<<<<<
  * 
  *         default_swap_control = value
  */
-      __pyx_t_2 = PyNumber_Negative(__pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyNumber_Negative(__pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       SDL_GL_SetSwapInterval(__pyx_t_4);
 
-      /* "pygame_sdl2/display.pyx":552
+      /* "pygame_sdl2/display.pyx":567
  *         # to deal with the case where the negative interval isn't
  *         # supported. Then give up and carry on.
  *         if SDL_GL_SetSwapInterval(value):             # <<<<<<<<<<<<<<
@@ -8077,7 +8212,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
     }
 
-    /* "pygame_sdl2/display.pyx":555
+    /* "pygame_sdl2/display.pyx":570
  *             SDL_GL_SetSwapInterval(-value)
  * 
  *         default_swap_control = value             # <<<<<<<<<<<<<<
@@ -8087,7 +8222,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
     __Pyx_INCREF(__pyx_v_value);
     __pyx_v_default_swap_control = __pyx_v_value;
 
-    /* "pygame_sdl2/display.pyx":556
+    /* "pygame_sdl2/display.pyx":571
  * 
  *         default_swap_control = value
  *         return             # <<<<<<<<<<<<<<
@@ -8098,7 +8233,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":545
+    /* "pygame_sdl2/display.pyx":560
  * def gl_set_attribute(flag, value):
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
@@ -8107,26 +8242,26 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":558
+  /* "pygame_sdl2/display.pyx":573
  *         return
  * 
  *     if SDL_GL_SetAttribute(flag, value):             # <<<<<<<<<<<<<<
  *         raise error()
  * 
  */
-  __pyx_t_5 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_3 = (SDL_GL_SetAttribute(__pyx_t_5, __pyx_t_4) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":559
+    /* "pygame_sdl2/display.pyx":574
  * 
  *     if SDL_GL_SetAttribute(flag, value):
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  * def gl_get_attribute(flag):
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_6 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) {
@@ -8139,18 +8274,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":558
+    /* "pygame_sdl2/display.pyx":573
  *         return
  * 
  *     if SDL_GL_SetAttribute(flag, value):             # <<<<<<<<<<<<<<
@@ -8159,7 +8294,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":543
+  /* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
@@ -8183,7 +8318,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":561
+/* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
@@ -8192,20 +8327,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_33gl_get_attribute = {"gl_get_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_33gl_get_attribute, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_35gl_get_attribute = {"gl_get_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_35gl_get_attribute, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_get_attribute (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(__pyx_self, ((PyObject *)__pyx_v_flag));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_34gl_get_attribute(__pyx_self, ((PyObject *)__pyx_v_flag));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag) {
   int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -8219,22 +8354,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("gl_get_attribute", 0);
 
-  /* "pygame_sdl2/display.pyx":564
+  /* "pygame_sdl2/display.pyx":579
  *     cdef int rv
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
  *         return SDL_GL_GetSwapInterval()
  * 
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":565
+    /* "pygame_sdl2/display.pyx":580
  * 
  *     if flag == GL_SWAP_CONTROL:
  *         return SDL_GL_GetSwapInterval()             # <<<<<<<<<<<<<<
@@ -8242,13 +8377,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  *     if SDL_GL_GetAttribute(flag, &rv):
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __Pyx_PyInt_From_int(SDL_GL_GetSwapInterval()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_int(SDL_GL_GetSwapInterval()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":564
+    /* "pygame_sdl2/display.pyx":579
  *     cdef int rv
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
@@ -8257,25 +8392,25 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":567
+  /* "pygame_sdl2/display.pyx":582
  *         return SDL_GL_GetSwapInterval()
  * 
  *     if SDL_GL_GetAttribute(flag, &rv):             # <<<<<<<<<<<<<<
  *         raise error()
  * 
  */
-  __pyx_t_4 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_3 = (SDL_GL_GetAttribute(__pyx_t_4, (&__pyx_v_rv)) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":568
+    /* "pygame_sdl2/display.pyx":583
  * 
  *     if SDL_GL_GetAttribute(flag, &rv):
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) {
@@ -8288,18 +8423,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":567
+    /* "pygame_sdl2/display.pyx":582
  *         return SDL_GL_GetSwapInterval()
  * 
  *     if SDL_GL_GetAttribute(flag, &rv):             # <<<<<<<<<<<<<<
@@ -8308,7 +8443,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":570
+  /* "pygame_sdl2/display.pyx":585
  *         raise error()
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -8316,13 +8451,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  * def gl_load_library(path):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":561
+  /* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
@@ -8343,7 +8478,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":572
+/* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
@@ -8352,20 +8487,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_35gl_load_library = {"gl_load_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_35gl_load_library, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_37gl_load_library = {"gl_load_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_37gl_load_library, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_load_library (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_34gl_load_library(__pyx_self, ((PyObject *)__pyx_v_path));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_36gl_load_library(__pyx_self, ((PyObject *)__pyx_v_path));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8379,7 +8514,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("gl_load_library", 0);
 
-  /* "pygame_sdl2/display.pyx":573
+  /* "pygame_sdl2/display.pyx":588
  * 
  * def gl_load_library(path):
  *     if path is None:             # <<<<<<<<<<<<<<
@@ -8390,7 +8525,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":574
+    /* "pygame_sdl2/display.pyx":589
  * def gl_load_library(path):
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):             # <<<<<<<<<<<<<<
@@ -8400,14 +8535,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
     __pyx_t_2 = (SDL_GL_LoadLibrary(NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "pygame_sdl2/display.pyx":575
+      /* "pygame_sdl2/display.pyx":590
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):
  *             raise error()             # <<<<<<<<<<<<<<
  *     else:
  *         if SDL_GL_LoadLibrary(path):
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -8420,18 +8555,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
         }
       }
       if (__pyx_t_5) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
-        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":574
+      /* "pygame_sdl2/display.pyx":589
  * def gl_load_library(path):
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):             # <<<<<<<<<<<<<<
@@ -8440,7 +8575,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
  */
     }
 
-    /* "pygame_sdl2/display.pyx":573
+    /* "pygame_sdl2/display.pyx":588
  * 
  * def gl_load_library(path):
  *     if path is None:             # <<<<<<<<<<<<<<
@@ -8450,7 +8585,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":577
+  /* "pygame_sdl2/display.pyx":592
  *             raise error()
  *     else:
  *         if SDL_GL_LoadLibrary(path):             # <<<<<<<<<<<<<<
@@ -8458,18 +8593,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
  * 
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_path); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_path); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_2 = (SDL_GL_LoadLibrary(__pyx_t_6) != 0);
     if (__pyx_t_2) {
 
-      /* "pygame_sdl2/display.pyx":578
+      /* "pygame_sdl2/display.pyx":593
  *     else:
  *         if SDL_GL_LoadLibrary(path):
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  * def gl_unload_library():
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -8482,18 +8617,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
         }
       }
       if (__pyx_t_5) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
-        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":577
+      /* "pygame_sdl2/display.pyx":592
  *             raise error()
  *     else:
  *         if SDL_GL_LoadLibrary(path):             # <<<<<<<<<<<<<<
@@ -8504,7 +8639,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":572
+  /* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
@@ -8527,7 +8662,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":580
+/* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
@@ -8536,25 +8671,25 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_37gl_unload_library = {"gl_unload_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_37gl_unload_library, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_39gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_39gl_unload_library = {"gl_unload_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_39gl_unload_library, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_39gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_unload_library (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_36gl_unload_library(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_38gl_unload_library(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_38gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_unload_library", 0);
 
-  /* "pygame_sdl2/display.pyx":581
+  /* "pygame_sdl2/display.pyx":596
  * 
  * def gl_unload_library():
  *     SDL_GL_UnloadLibrary()             # <<<<<<<<<<<<<<
@@ -8563,7 +8698,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUS
  */
   SDL_GL_UnloadLibrary();
 
-  /* "pygame_sdl2/display.pyx":580
+  /* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
@@ -8578,7 +8713,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":583
+/* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
@@ -8587,20 +8722,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_39get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_39get_active = {"get_active", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_39get_active, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_39get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_41get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_41get_active = {"get_active", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_41get_active, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_41get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_active (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_38get_active(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_40get_active(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_40get_active(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8612,17 +8747,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_active", 0);
 
-  /* "pygame_sdl2/display.pyx":584
+  /* "pygame_sdl2/display.pyx":599
  * 
  * def get_active():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.get_active()
  *     return False
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":585
+    /* "pygame_sdl2/display.pyx":600
  * def get_active():
  *     if main_window:
  *         return main_window.get_active()             # <<<<<<<<<<<<<<
@@ -8630,7 +8765,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_active); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_active); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -8643,10 +8778,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8654,7 +8789,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":584
+    /* "pygame_sdl2/display.pyx":599
  * 
  * def get_active():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -8663,7 +8798,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
  */
   }
 
-  /* "pygame_sdl2/display.pyx":586
+  /* "pygame_sdl2/display.pyx":601
  *     if main_window:
  *         return main_window.get_active()
  *     return False             # <<<<<<<<<<<<<<
@@ -8675,7 +8810,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":583
+  /* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
@@ -8696,7 +8831,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":588
+/* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
@@ -8705,20 +8840,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_41iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_41iconify = {"iconify", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_41iconify, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_41iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_43iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_43iconify = {"iconify", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_43iconify, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_43iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("iconify (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_40iconify(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_42iconify(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_42iconify(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8730,17 +8865,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("iconify", 0);
 
-  /* "pygame_sdl2/display.pyx":589
+  /* "pygame_sdl2/display.pyx":604
  * 
  * def iconify():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.iconify()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":590
+    /* "pygame_sdl2/display.pyx":605
  * def iconify():
  *     if main_window:
  *         return main_window.iconify()             # <<<<<<<<<<<<<<
@@ -8748,7 +8883,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
  *     return False
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_iconify); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_iconify); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -8761,10 +8896,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8772,7 +8907,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":589
+    /* "pygame_sdl2/display.pyx":604
  * 
  * def iconify():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -8781,7 +8916,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
  */
   }
 
-  /* "pygame_sdl2/display.pyx":592
+  /* "pygame_sdl2/display.pyx":607
  *         return main_window.iconify()
  * 
  *     return False             # <<<<<<<<<<<<<<
@@ -8793,7 +8928,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":588
+  /* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
@@ -8814,7 +8949,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":594
+/* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
@@ -8823,20 +8958,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_43toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_43toggle_fullscreen = {"toggle_fullscreen", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_43toggle_fullscreen, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_43toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_45toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_45toggle_fullscreen = {"toggle_fullscreen", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_45toggle_fullscreen, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_45toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("toggle_fullscreen (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_44toggle_fullscreen(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_44toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8848,17 +8983,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toggle_fullscreen", 0);
 
-  /* "pygame_sdl2/display.pyx":595
+  /* "pygame_sdl2/display.pyx":610
  * 
  * def toggle_fullscreen():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.toggle_fullscreen()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":596
+    /* "pygame_sdl2/display.pyx":611
  * def toggle_fullscreen():
  *     if main_window:
  *         return main_window.toggle_fullscreen()             # <<<<<<<<<<<<<<
@@ -8866,7 +9001,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
  *     return True
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_toggle_fullscreen); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_toggle_fullscreen); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -8879,10 +9014,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8890,7 +9025,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":595
+    /* "pygame_sdl2/display.pyx":610
  * 
  * def toggle_fullscreen():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -8899,7 +9034,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
  */
   }
 
-  /* "pygame_sdl2/display.pyx":598
+  /* "pygame_sdl2/display.pyx":613
  *         return main_window.toggle_fullscreen()
  * 
  *     return True             # <<<<<<<<<<<<<<
@@ -8911,7 +9046,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":594
+  /* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
@@ -8932,7 +9067,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":600
+/* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -8941,9 +9076,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_45set_gamma = {"set_gamma", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_45set_gamma, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_47set_gamma = {"set_gamma", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_47set_gamma, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_red = 0;
   PyObject *__pyx_v_green = 0;
   PyObject *__pyx_v_blue = 0;
@@ -8985,7 +9120,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -9002,20 +9137,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_gamma", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_44set_gamma(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_46set_gamma(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9029,17 +9164,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_gamma", 0);
 
-  /* "pygame_sdl2/display.pyx":601
+  /* "pygame_sdl2/display.pyx":616
  * 
  * def set_gamma(red, green=None, blue=None):
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.set_gamma(red, green, blue)
  *     return False
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":602
+    /* "pygame_sdl2/display.pyx":617
  * def set_gamma(red, green=None, blue=None):
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)             # <<<<<<<<<<<<<<
@@ -9047,7 +9182,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     __pyx_t_5 = 0;
@@ -9061,7 +9196,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
         __pyx_t_5 = 1;
       }
     }
-    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -9075,7 +9210,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
     __Pyx_INCREF(__pyx_v_blue);
     __Pyx_GIVEREF(__pyx_v_blue);
     PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_blue);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -9083,7 +9218,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":601
+    /* "pygame_sdl2/display.pyx":616
  * 
  * def set_gamma(red, green=None, blue=None):
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9092,7 +9227,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
  */
   }
 
-  /* "pygame_sdl2/display.pyx":603
+  /* "pygame_sdl2/display.pyx":618
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)
  *     return False             # <<<<<<<<<<<<<<
@@ -9104,7 +9239,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":600
+  /* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -9126,7 +9261,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":605
+/* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
@@ -9135,9 +9270,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_47set_gamma_ramp = {"set_gamma_ramp", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_49set_gamma_ramp = {"set_gamma_ramp", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_49set_gamma_ramp, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_red = 0;
   PyObject *__pyx_v_green = 0;
   PyObject *__pyx_v_blue = 0;
@@ -9168,16 +9303,16 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -9192,20 +9327,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_gamma_ramp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_48set_gamma_ramp(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9219,17 +9354,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_gamma_ramp", 0);
 
-  /* "pygame_sdl2/display.pyx":606
+  /* "pygame_sdl2/display.pyx":621
  * 
  * def set_gamma_ramp(red, green, blue):
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.set_gamma_ramp(red, green, blue)
  *     return False
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":607
+    /* "pygame_sdl2/display.pyx":622
  * def set_gamma_ramp(red, green, blue):
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)             # <<<<<<<<<<<<<<
@@ -9237,7 +9372,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma_ramp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma_ramp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     __pyx_t_5 = 0;
@@ -9251,7 +9386,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
         __pyx_t_5 = 1;
       }
     }
-    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -9265,7 +9400,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
     __Pyx_INCREF(__pyx_v_blue);
     __Pyx_GIVEREF(__pyx_v_blue);
     PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_blue);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -9273,7 +9408,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":606
+    /* "pygame_sdl2/display.pyx":621
  * 
  * def set_gamma_ramp(red, green, blue):
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9282,7 +9417,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
  */
   }
 
-  /* "pygame_sdl2/display.pyx":608
+  /* "pygame_sdl2/display.pyx":623
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)
  *     return False             # <<<<<<<<<<<<<<
@@ -9294,7 +9429,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":605
+  /* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
@@ -9316,7 +9451,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":610
+/* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
@@ -9325,20 +9460,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_49set_icon = {"set_icon", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_49set_icon, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_51set_icon = {"set_icon", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_51set_icon, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_icon (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_48set_icon(__pyx_self, ((PyObject *)__pyx_v_surface));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_50set_icon(__pyx_self, ((PyObject *)__pyx_v_surface));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -9353,14 +9488,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_icon", 0);
 
-  /* "pygame_sdl2/display.pyx":613
+  /* "pygame_sdl2/display.pyx":628
  *     global default_icon
  * 
  *     default_icon = surface.copy()             # <<<<<<<<<<<<<<
  * 
  *     if main_window is not None:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -9373,17 +9508,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/display.pyx":615
+  /* "pygame_sdl2/display.pyx":630
  *     default_icon = surface.copy()
  * 
  *     if main_window is not None:             # <<<<<<<<<<<<<<
@@ -9394,16 +9529,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/display.pyx":616
+    /* "pygame_sdl2/display.pyx":631
  * 
  *     if main_window is not None:
  *         main_window.set_icon(default_icon)             # <<<<<<<<<<<<<<
  * 
  * def set_caption(title, icontitle = None):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_6 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -9416,24 +9551,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "pygame_sdl2/display.pyx":615
+    /* "pygame_sdl2/display.pyx":630
  *     default_icon = surface.copy()
  * 
  *     if main_window is not None:             # <<<<<<<<<<<<<<
@@ -9442,7 +9577,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
  */
   }
 
-  /* "pygame_sdl2/display.pyx":610
+  /* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
@@ -9467,7 +9602,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":618
+/* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
@@ -9476,9 +9611,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_51set_caption = {"set_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_51set_caption, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_53set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_53set_caption = {"set_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_53set_caption, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_53set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_title = 0;
   CYTHON_UNUSED PyObject *__pyx_v_icontitle = 0;
   int __pyx_lineno = 0;
@@ -9512,7 +9647,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_caption") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_caption") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -9527,20 +9662,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_caption", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_caption", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_caption", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_50set_caption(__pyx_self, __pyx_v_title, __pyx_v_icontitle);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_52set_caption(__pyx_self, __pyx_v_title, __pyx_v_icontitle);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_52set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9554,35 +9689,35 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_caption", 0);
 
-  /* "pygame_sdl2/display.pyx":621
+  /* "pygame_sdl2/display.pyx":636
  *     global default_title
  * 
  *     default_title = title             # <<<<<<<<<<<<<<
  * 
  *     if main_window:
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_v_title) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_v_title) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":623
+  /* "pygame_sdl2/display.pyx":638
  *     default_title = title
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
  *         main_window.set_caption(default_title)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":624
+    /* "pygame_sdl2/display.pyx":639
  * 
  *     if main_window:
  *         main_window.set_caption(default_title)             # <<<<<<<<<<<<<<
  * 
  * def get_caption():
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_caption); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_caption); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -9595,24 +9730,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_4);
       __pyx_t_4 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "pygame_sdl2/display.pyx":623
+    /* "pygame_sdl2/display.pyx":638
  *     default_title = title
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9621,7 +9756,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
  */
   }
 
-  /* "pygame_sdl2/display.pyx":618
+  /* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
@@ -9646,7 +9781,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":626
+/* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
@@ -9655,20 +9790,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_53get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_53get_caption = {"get_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_53get_caption, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_53get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_55get_caption = {"get_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_55get_caption, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_caption (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_52get_caption(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_54get_caption(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_caption(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -9677,7 +9812,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_caption", 0);
 
-  /* "pygame_sdl2/display.pyx":627
+  /* "pygame_sdl2/display.pyx":642
  * 
  * def get_caption():
  *     return default_title             # <<<<<<<<<<<<<<
@@ -9685,13 +9820,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
  * def get_drawable_size():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":626
+  /* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
@@ -9710,7 +9845,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":629
+/* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
@@ -9719,20 +9854,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_55get_drawable_size = {"get_drawable_size", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_55get_drawable_size, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_57get_drawable_size = {"get_drawable_size", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_57get_drawable_size, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_drawable_size (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_54get_drawable_size(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_56get_drawable_size(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9744,17 +9879,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_drawable_size", 0);
 
-  /* "pygame_sdl2/display.pyx":630
+  /* "pygame_sdl2/display.pyx":645
  * 
  * def get_drawable_size():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.get_drawable_size()
  *     return None
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":631
+    /* "pygame_sdl2/display.pyx":646
  * def get_drawable_size():
  *     if main_window:
  *         return main_window.get_drawable_size()             # <<<<<<<<<<<<<<
@@ -9762,7 +9897,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_drawable_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_drawable_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -9775,10 +9910,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -9786,7 +9921,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":630
+    /* "pygame_sdl2/display.pyx":645
  * 
  * def get_drawable_size():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9795,7 +9930,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
  */
   }
 
-  /* "pygame_sdl2/display.pyx":632
+  /* "pygame_sdl2/display.pyx":647
  *     if main_window:
  *         return main_window.get_drawable_size()
  *     return None             # <<<<<<<<<<<<<<
@@ -9807,7 +9942,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":629
+  /* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
@@ -9828,7 +9963,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":634
+/* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -9837,20 +9972,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_57get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_57get_num_video_displays, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_59get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_59get_num_video_displays, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_num_video_displays (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_58get_num_video_displays(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
   int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -9863,7 +9998,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_num_video_displays", 0);
 
-  /* "pygame_sdl2/display.pyx":635
+  /* "pygame_sdl2/display.pyx":650
  * 
  * def get_num_video_displays():
  *     rv = SDL_GetNumVideoDisplays()             # <<<<<<<<<<<<<<
@@ -9872,7 +10007,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  */
   __pyx_v_rv = SDL_GetNumVideoDisplays();
 
-  /* "pygame_sdl2/display.pyx":636
+  /* "pygame_sdl2/display.pyx":651
  * def get_num_video_displays():
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -9882,14 +10017,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
   __pyx_t_1 = ((__pyx_v_rv < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":637
+    /* "pygame_sdl2/display.pyx":652
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -9902,18 +10037,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":636
+    /* "pygame_sdl2/display.pyx":651
  * def get_num_video_displays():
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -9922,7 +10057,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  */
   }
 
-  /* "pygame_sdl2/display.pyx":639
+  /* "pygame_sdl2/display.pyx":654
  *         raise error()
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -9930,13 +10065,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  * def get_display_bounds(index):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":634
+  /* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -9957,7 +10092,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":641
+/* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
@@ -9966,20 +10101,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_59get_display_bounds = {"get_display_bounds", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_59get_display_bounds, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_61get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_61get_display_bounds = {"get_display_bounds", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_61get_display_bounds, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_61get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_display_bounds (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_58get_display_bounds(__pyx_self, ((PyObject *)__pyx_v_index));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_60get_display_bounds(__pyx_self, ((PyObject *)__pyx_v_index));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_60get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index) {
   SDL_Rect __pyx_v_rect;
   CYTHON_UNUSED int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
@@ -9995,17 +10130,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_display_bounds", 0);
 
-  /* "pygame_sdl2/display.pyx":643
+  /* "pygame_sdl2/display.pyx":658
  * def get_display_bounds(index):
  *     cdef SDL_Rect rect
  *     rv = SDL_GetDisplayBounds(index, &rect)             # <<<<<<<<<<<<<<
  * 
  *     return (rect.x, rect.y, rect.w, rect.h)
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_index); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_index); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_rv = SDL_GetDisplayBounds(__pyx_t_1, (&__pyx_v_rect));
 
-  /* "pygame_sdl2/display.pyx":645
+  /* "pygame_sdl2/display.pyx":660
  *     rv = SDL_GetDisplayBounds(index, &rect)
  * 
  *     return (rect.x, rect.y, rect.w, rect.h)             # <<<<<<<<<<<<<<
@@ -10013,15 +10148,15 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
  * def hint(hint, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rect.x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rect.x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rect.y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rect.y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_rect.w); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_rect.w); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_rect.h); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_rect.h); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -10039,7 +10174,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":641
+  /* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
@@ -10062,7 +10197,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":647
+/* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
@@ -10071,9 +10206,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_61hint = {"hint", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_61hint, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_63hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_63hint = {"hint", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_63hint, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_63hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_hint = 0;
   PyObject *__pyx_v_value = 0;
   int __pyx_lineno = 0;
@@ -10102,11 +10237,11 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10119,20 +10254,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.hint", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_60hint(__pyx_self, __pyx_v_hint, __pyx_v_value);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_62hint(__pyx_self, __pyx_v_hint, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_62hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -10148,7 +10283,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   __Pyx_INCREF(__pyx_v_hint);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "pygame_sdl2/display.pyx":649
+  /* "pygame_sdl2/display.pyx":664
  * def hint(hint, value):
  * 
  *     if not isinstance(hint, bytes):             # <<<<<<<<<<<<<<
@@ -10159,22 +10294,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":650
+    /* "pygame_sdl2/display.pyx":665
  * 
  *     if not isinstance(hint, bytes):
  *         hint = hint.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(value, bytes):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_hint, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":649
+    /* "pygame_sdl2/display.pyx":664
  * def hint(hint, value):
  * 
  *     if not isinstance(hint, bytes):             # <<<<<<<<<<<<<<
@@ -10183,7 +10318,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "pygame_sdl2/display.pyx":652
+  /* "pygame_sdl2/display.pyx":667
  *         hint = hint.encode("utf-8")
  * 
  *     if not isinstance(value, bytes):             # <<<<<<<<<<<<<<
@@ -10194,22 +10329,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":653
+    /* "pygame_sdl2/display.pyx":668
  * 
  *     if not isinstance(value, bytes):
  *         value = value.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     SDL_SetHint(hint, value)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":652
+    /* "pygame_sdl2/display.pyx":667
  *         hint = hint.encode("utf-8")
  * 
  *     if not isinstance(value, bytes):             # <<<<<<<<<<<<<<
@@ -10218,18 +10353,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "pygame_sdl2/display.pyx":655
+  /* "pygame_sdl2/display.pyx":670
  *         value = value.encode("utf-8")
  * 
  *     SDL_SetHint(hint, value)             # <<<<<<<<<<<<<<
  * 
  * def get_platform():
  */
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_hint); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_value); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_hint); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_value); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_SetHint(__pyx_t_5, __pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":647
+  /* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
@@ -10253,7 +10388,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":657
+/* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
@@ -10262,20 +10397,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_63get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_63get_platform = {"get_platform", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_63get_platform, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_63get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_65get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_65get_platform = {"get_platform", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_65get_platform, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_65get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_platform (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_62get_platform(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_64get_platform(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_64get_platform(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10284,7 +10419,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_platform", 0);
 
-  /* "pygame_sdl2/display.pyx":658
+  /* "pygame_sdl2/display.pyx":673
  * 
  * def get_platform():
  *     return SDL_GetPlatform()             # <<<<<<<<<<<<<<
@@ -10292,13 +10427,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED Py
  * cdef api SDL_Window *PyWindow_AsWindow(window):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBytes_FromString(SDL_GetPlatform()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBytes_FromString(SDL_GetPlatform()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":657
+  /* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
@@ -10317,7 +10452,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":660
+/* "pygame_sdl2/display.pyx":675
  *     return SDL_GetPlatform()
  * 
  * cdef api SDL_Window *PyWindow_AsWindow(window):             # <<<<<<<<<<<<<<
@@ -10333,7 +10468,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __Pyx_RefNannySetupContext("PyWindow_AsWindow", 0);
   __Pyx_INCREF(__pyx_v_window);
 
-  /* "pygame_sdl2/display.pyx":667
+  /* "pygame_sdl2/display.pyx":682
  *     """
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10344,7 +10479,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":668
+    /* "pygame_sdl2/display.pyx":683
  * 
  *     if window is None:
  *         window = main_window             # <<<<<<<<<<<<<<
@@ -10354,7 +10489,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
     __Pyx_INCREF(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
     __Pyx_DECREF_SET(__pyx_v_window, ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
 
-    /* "pygame_sdl2/display.pyx":667
+    /* "pygame_sdl2/display.pyx":682
  *     """
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10363,7 +10498,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
  */
   }
 
-  /* "pygame_sdl2/display.pyx":670
+  /* "pygame_sdl2/display.pyx":685
  *         window = main_window
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10374,7 +10509,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":671
+    /* "pygame_sdl2/display.pyx":686
  * 
  *     if window is None:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -10384,7 +10519,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
     __pyx_r = NULL;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":670
+    /* "pygame_sdl2/display.pyx":685
  *         window = main_window
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10393,7 +10528,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
  */
   }
 
-  /* "pygame_sdl2/display.pyx":673
+  /* "pygame_sdl2/display.pyx":688
  *         return NULL
  * 
  *     return (<Window> window).window             # <<<<<<<<<<<<<<
@@ -10401,7 +10536,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __pyx_r = ((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_v_window)->window;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":660
+  /* "pygame_sdl2/display.pyx":675
  *     return SDL_GetPlatform()
  * 
  * cdef api SDL_Window *PyWindow_AsWindow(window):             # <<<<<<<<<<<<<<
@@ -10594,6 +10729,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_SDL_VIDEO_MAC_FULLSCREEN_SPACES, __pyx_k_SDL_VIDEO_MAC_FULLSCREEN_SPACES, sizeof(__pyx_k_SDL_VIDEO_MAC_FULLSCREEN_SPACES), 0, 0, 1, 1},
   {&__pyx_n_s_SRCALPHA, __pyx_k_SRCALPHA, sizeof(__pyx_k_SRCALPHA), 0, 0, 1, 1},
   {&__pyx_n_s_androidembed, __pyx_k_androidembed, sizeof(__pyx_k_androidembed), 0, 0, 1, 1},
+  {&__pyx_n_s_before_first_window, __pyx_k_before_first_window, sizeof(__pyx_k_before_first_window), 0, 0, 1, 1},
   {&__pyx_n_s_bitsize, __pyx_k_bitsize, sizeof(__pyx_k_bitsize), 0, 0, 1, 1},
   {&__pyx_n_s_blit_hw, __pyx_k_blit_hw, sizeof(__pyx_k_blit_hw), 0, 0, 1, 1},
   {&__pyx_n_s_blit_hw_A, __pyx_k_blit_hw_A, sizeof(__pyx_k_blit_hw_A), 0, 0, 1, 1},
@@ -10703,6 +10839,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_set_icon, __pyx_k_set_icon, sizeof(__pyx_k_set_icon), 0, 0, 1, 1},
   {&__pyx_n_s_set_mode, __pyx_k_set_mode, sizeof(__pyx_k_set_mode), 0, 0, 1, 1},
   {&__pyx_n_s_shifts, __pyx_k_shifts, sizeof(__pyx_k_shifts), 0, 0, 1, 1},
+  {&__pyx_n_s_shown_first_window, __pyx_k_shown_first_window, sizeof(__pyx_k_shown_first_window), 0, 0, 1, 1},
   {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
   {&__pyx_n_s_surface, __pyx_k_surface, sizeof(__pyx_k_surface), 0, 0, 1, 1},
   {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1},
@@ -10718,10 +10855,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -10742,91 +10879,91 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "pygame_sdl2/display.pyx":95
+  /* "pygame_sdl2/display.pyx":116
  * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(title, bytes):
  */
-  __pyx_tuple__2 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__2 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "pygame_sdl2/display.pyx":98
+  /* "pygame_sdl2/display.pyx":119
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
- *         self.create_flags = flags
+ *         _before_first_window()
  */
-  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__4);
   __Pyx_GIVEREF(__pyx_tuple__4);
 
-  /* "pygame_sdl2/display.pyx":159
+  /* "pygame_sdl2/display.pyx":182
  *             if self.window_surface.format.BitsPerPixel == 32:
  * 
  *                 self.surface = Surface(())             # <<<<<<<<<<<<<<
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False
  */
-  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_empty_tuple); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_empty_tuple); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__5);
   __Pyx_GIVEREF(__pyx_tuple__5);
 
-  /* "pygame_sdl2/display.pyx":267
+  /* "pygame_sdl2/display.pyx":290
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:
  *             raise MemoryError("Couldn't allocate rectangles.")             # <<<<<<<<<<<<<<
  * 
  *         try:
  */
-  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Couldn_t_allocate_rectangles); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Couldn_t_allocate_rectangles); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_GIVEREF(__pyx_tuple__6);
 
-  /* "pygame_sdl2/display.pyx":347
+  /* "pygame_sdl2/display.pyx":370
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *         SDL_SetWindowTitle(self.window, title)
  */
-  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__7);
   __Pyx_GIVEREF(__pyx_tuple__7);
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  *     global main_window
  * 
  */
-  __pyx_tuple__8 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__8 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__8);
   __Pyx_GIVEREF(__pyx_tuple__8);
 
-  /* "pygame_sdl2/display.pyx":650
+  /* "pygame_sdl2/display.pyx":665
  * 
  *     if not isinstance(hint, bytes):
  *         hint = hint.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(value, bytes):
  */
-  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__10);
   __Pyx_GIVEREF(__pyx_tuple__10);
 
-  /* "pygame_sdl2/display.pyx":653
+  /* "pygame_sdl2/display.pyx":668
  * 
  *     if not isinstance(value, bytes):
  *         value = value.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     SDL_SetHint(hint, value)
  */
-  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__11);
   __Pyx_GIVEREF(__pyx_tuple__11);
 
@@ -10866,329 +11003,341 @@ static int __Pyx_InitCachedConstants(void) {
  */
   __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_init, 87, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_n_s_androidembed); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__16);
+  __Pyx_GIVEREF(__pyx_tuple__16);
+  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_before_first_window, 97, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  *     global main_window
  * 
  */
-  __pyx_tuple__16 = PyTuple_Pack(5, __pyx_n_s_resolution, __pyx_n_s_flags, __pyx_n_s_depth, __pyx_n_s_pos, __pyx_n_s_androidembed); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__16);
-  __Pyx_GIVEREF(__pyx_tuple__16);
-  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_mode, 366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__18 = PyTuple_Pack(4, __pyx_n_s_resolution, __pyx_n_s_flags, __pyx_n_s_depth, __pyx_n_s_pos); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__18);
+  __Pyx_GIVEREF(__pyx_tuple__18);
+  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_mode, 389, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":393
+  /* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
  *     if main_window is None:
  *         return None
  */
-  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_surface, 393, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_surface, 408, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":399
+  /* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the Window created by set_mode, or None if no such window
  */
-  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_window, 399, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_window, 414, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":407
+  /* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.flip()
  */
-  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_flip, 407, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_flip, 422, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":411
+  /* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.update(rectangles)
  */
-  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_n_s_rectangles); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__21);
-  __Pyx_GIVEREF(__pyx_tuple__21);
-  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_update, 411, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_rectangles); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__23);
+  __Pyx_GIVEREF(__pyx_tuple__23);
+  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_update, 426, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":415
+  /* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  */
-  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_driver); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__23);
-  __Pyx_GIVEREF(__pyx_tuple__23);
-  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_driver, 415, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_n_s_driver); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__25);
+  __Pyx_GIVEREF(__pyx_tuple__25);
+  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_driver, 430, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":425
+  /* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
  *         cdef SDL_DisplayMode dm
  *         cdef SDL_PixelFormat *format
  */
-  __pyx_tuple__25 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_dm, __pyx_n_s_format); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__25);
-  __Pyx_GIVEREF(__pyx_tuple__25);
-  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_init_2, 425, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__27 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_dm, __pyx_n_s_format); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__27);
+  __Pyx_GIVEREF(__pyx_tuple__27);
+  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_init_2, 440, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":484
+  /* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
  *         return "<Info({!r})>".format(self.__dict__)
  * 
  */
-  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__27);
-  __Pyx_GIVEREF(__pyx_tuple__27);
-  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_repr, 484, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__29);
+  __Pyx_GIVEREF(__pyx_tuple__29);
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_repr, 499, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":488
+  /* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_wm_info()
  */
-  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_wm_info, 488, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_wm_info, 503, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":495
+  /* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the number of video displays connected to the system.
  */
-  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__30);
-  __Pyx_GIVEREF(__pyx_tuple__30);
-  __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 495, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__32);
+  __Pyx_GIVEREF(__pyx_tuple__32);
+  __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 510, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":508
+  /* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns a list of possible display modes for the display `display`.
  */
-  __pyx_tuple__32 = PyTuple_Pack(8, __pyx_n_s_depth, __pyx_n_s_flags, __pyx_n_s_display, __pyx_n_s_num_modes, __pyx_n_s_i, __pyx_n_s_mode, __pyx_n_s_rv, __pyx_n_s_t); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__32);
-  __Pyx_GIVEREF(__pyx_tuple__32);
-  __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_list_modes, 508, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__34 = PyTuple_Pack(8, __pyx_n_s_depth, __pyx_n_s_flags, __pyx_n_s_display, __pyx_n_s_num_modes, __pyx_n_s_i, __pyx_n_s_mode, __pyx_n_s_rv, __pyx_n_s_t); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__34);
+  __Pyx_GIVEREF(__pyx_tuple__34);
+  __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_list_modes, 523, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":533
+  /* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns true if size is in the result of list_modes().
  */
-  __pyx_tuple__34 = PyTuple_Pack(3, __pyx_n_s_size, __pyx_n_s_flags, __pyx_n_s_depth); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__34);
-  __Pyx_GIVEREF(__pyx_tuple__34);
-  __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_mode_ok, 533, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__36 = PyTuple_Pack(3, __pyx_n_s_size, __pyx_n_s_flags, __pyx_n_s_depth); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__36);
+  __Pyx_GIVEREF(__pyx_tuple__36);
+  __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_mode_ok, 548, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":540
+  /* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
  *     SDL_GL_ResetAttributes()
  * 
  */
-  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_reset_attributes, 540, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_reset_attributes, 555, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":543
+  /* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
  * 
  *     if flag == GL_SWAP_CONTROL:
  */
-  __pyx_tuple__37 = PyTuple_Pack(3, __pyx_n_s_flag, __pyx_n_s_value, __pyx_n_s_default_swap_control); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__37);
-  __Pyx_GIVEREF(__pyx_tuple__37);
-  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_set_attribute, 543, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__39 = PyTuple_Pack(3, __pyx_n_s_flag, __pyx_n_s_value, __pyx_n_s_default_swap_control); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__39);
+  __Pyx_GIVEREF(__pyx_tuple__39);
+  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_set_attribute, 558, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":561
+  /* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
  *     cdef int rv
  * 
  */
-  __pyx_tuple__39 = PyTuple_Pack(2, __pyx_n_s_flag, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__39);
-  __Pyx_GIVEREF(__pyx_tuple__39);
-  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_get_attribute, 561, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_flag, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__41);
+  __Pyx_GIVEREF(__pyx_tuple__41);
+  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_get_attribute, 576, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":572
+  /* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):
  */
-  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_n_s_path); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__41);
-  __Pyx_GIVEREF(__pyx_tuple__41);
-  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_load_library, 572, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_n_s_path); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__43);
+  __Pyx_GIVEREF(__pyx_tuple__43);
+  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_load_library, 587, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":580
+  /* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
  *     SDL_GL_UnloadLibrary()
  * 
  */
-  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_unload_library, 580, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_unload_library, 595, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":583
+  /* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_active()
  */
-  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_active, 583, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_active, 598, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":588
+  /* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.iconify()
  */
-  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_iconify, 588, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_iconify, 603, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":594
+  /* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.toggle_fullscreen()
  */
-  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_toggle_fullscreen, 594, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_toggle_fullscreen, 609, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":600
+  /* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)
  */
-  __pyx_tuple__47 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__47);
-  __Pyx_GIVEREF(__pyx_tuple__47);
-  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma, 600, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__49 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__49);
+  __Pyx_GIVEREF(__pyx_tuple__49);
+  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma, 615, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":605
+  /* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)
  */
-  __pyx_tuple__49 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__49);
-  __Pyx_GIVEREF(__pyx_tuple__49);
-  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma_ramp, 605, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__51 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__51);
+  __Pyx_GIVEREF(__pyx_tuple__51);
+  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma_ramp, 620, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":610
+  /* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
  *     global default_icon
  * 
  */
-  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_n_s_surface); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__51);
-  __Pyx_GIVEREF(__pyx_tuple__51);
-  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_icon, 610, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_n_s_surface); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__53);
+  __Pyx_GIVEREF(__pyx_tuple__53);
+  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_icon, 625, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":618
+  /* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
  *     global default_title
  * 
  */
-  __pyx_tuple__53 = PyTuple_Pack(2, __pyx_n_s_title, __pyx_n_s_icontitle); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__53);
-  __Pyx_GIVEREF(__pyx_tuple__53);
-  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_caption, 618, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__55 = PyTuple_Pack(2, __pyx_n_s_title, __pyx_n_s_icontitle); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__55);
+  __Pyx_GIVEREF(__pyx_tuple__55);
+  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_caption, 633, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":626
+  /* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
  *     return default_title
  * 
  */
-  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_caption, 626, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_caption, 641, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":629
+  /* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_drawable_size()
  */
-  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_drawable_size, 629, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_drawable_size, 644, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":634
+  /* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:
  */
-  __pyx_tuple__57 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__57);
-  __Pyx_GIVEREF(__pyx_tuple__57);
-  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 634, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__59 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__59);
+  __Pyx_GIVEREF(__pyx_tuple__59);
+  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 649, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":641
+  /* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
  *     cdef SDL_Rect rect
  *     rv = SDL_GetDisplayBounds(index, &rect)
  */
-  __pyx_tuple__59 = PyTuple_Pack(3, __pyx_n_s_index, __pyx_n_s_rect, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__59);
-  __Pyx_GIVEREF(__pyx_tuple__59);
-  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_display_bounds, 641, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__61 = PyTuple_Pack(3, __pyx_n_s_index, __pyx_n_s_rect, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__61);
+  __Pyx_GIVEREF(__pyx_tuple__61);
+  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_display_bounds, 656, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":647
+  /* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(hint, bytes):
  */
-  __pyx_tuple__61 = PyTuple_Pack(2, __pyx_n_s_hint, __pyx_n_s_value); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__61);
-  __Pyx_GIVEREF(__pyx_tuple__61);
-  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_hint, 647, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__63 = PyTuple_Pack(2, __pyx_n_s_hint, __pyx_n_s_value); if (unlikely(!__pyx_tuple__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__63);
+  __Pyx_GIVEREF(__pyx_tuple__63);
+  __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_hint, 662, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":657
+  /* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
  *     return SDL_GetPlatform()
  * 
  */
-  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_platform, 657, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_platform, 672, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -11302,9 +11451,9 @@ PyMODINIT_FUNC PyInit_display(void)
   /*--- Function export code ---*/
   if (__Pyx_ExportFunction("PyWindow_AsWindow", (void (*)(void))__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow, "SDL_Window *(PyObject *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   /*--- Type init code ---*/
-  if (PyType_Ready(&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_11pygame_sdl2_7display_Window.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Window", (PyObject *)&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Window", (PyObject *)&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_type_11pygame_sdl2_7display_Window.tp_weaklistoffset == 0) __pyx_type_11pygame_sdl2_7display_Window.tp_weaklistoffset = offsetof(struct __pyx_obj_11pygame_sdl2_7display_Window, __weakref__);
   __pyx_ptype_11pygame_sdl2_7display_Window = &__pyx_type_11pygame_sdl2_7display_Window;
   /*--- Type import code ---*/
@@ -11574,7 +11723,7 @@ PyMODINIT_FUNC PyInit_display(void)
  * # The window that is used by the various module globals.
  * main_window = None             # <<<<<<<<<<<<<<
  * 
- * cdef class Window:
+ * # Have we shown the first window?
  */
   __Pyx_INCREF(Py_None);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
@@ -11583,16 +11732,37 @@ PyMODINIT_FUNC PyInit_display(void)
 
   /* "pygame_sdl2/display.pyx":95
  * 
+ * # Have we shown the first window?
+ * _shown_first_window = False             # <<<<<<<<<<<<<<
+ * 
+ * def _before_first_window():
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_shown_first_window, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_9_before_first_window, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_before_first_window, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "pygame_sdl2/display.pyx":116
+ * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(title, bytes):
  */
-  __pyx_t_3 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -11604,45 +11774,45 @@ PyMODINIT_FUNC PyInit_display(void)
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":358
+  /* "pygame_sdl2/display.pyx":381
  * 
  * # The icon that's used for new windows.
  * default_icon = None             # <<<<<<<<<<<<<<
  * 
  * # The title that's used for new windows.
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":361
+  /* "pygame_sdl2/display.pyx":384
  * 
  * # The title that's used for new windows.
  * default_title = "pygame window"             # <<<<<<<<<<<<<<
  * 
  * # The default gl_swap_control
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_kp_s_pygame_window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_kp_s_pygame_window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":364
+  /* "pygame_sdl2/display.pyx":387
  * 
  * # The default gl_swap_control
  * default_swap_control = 1             # <<<<<<<<<<<<<<
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_swap_control, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_swap_control, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  *     global main_window
  * 
  */
-  __pyx_t_6 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
@@ -11653,389 +11823,389 @@ PyMODINIT_FUNC PyInit_display(void)
   __pyx_k__9 = __pyx_t_3;
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_9set_mode, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_11set_mode, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_mode, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_mode, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":393
+  /* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
  *     if main_window is None:
  *         return None
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_11get_surface, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_13get_surface, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_surface, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_surface, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":399
+  /* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the Window created by set_mode, or None if no such window
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_13get_window, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_15get_window, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_window, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_window, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":407
+  /* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.flip()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_15flip, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_17flip, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_flip, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_flip, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":411
+  /* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.update(rectangles)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_17update, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_19update, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_update, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_update, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":415
+  /* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_19get_driver, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_21get_driver, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_driver, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_driver, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":423
+  /* "pygame_sdl2/display.pyx":438
  *     return driver
  * 
  * class Info(object):             # <<<<<<<<<<<<<<
  * 
  *     def __init__(self):
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_3, __pyx_n_s_Info, __pyx_n_s_Info, (PyObject *) NULL, __pyx_n_s_pygame_sdl2_display, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_3, __pyx_n_s_Info, __pyx_n_s_Info, (PyObject *) NULL, __pyx_n_s_pygame_sdl2_display, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":425
+  /* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
  *         cdef SDL_DisplayMode dm
  *         cdef SDL_PixelFormat *format
  */
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_1__init__, 0, __pyx_n_s_Info___init, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_1__init__, 0, __pyx_n_s_Info___init, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init_2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init_2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":484
+  /* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
  *         return "<Info({!r})>".format(self.__dict__)
  * 
  */
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_3__repr__, 0, __pyx_n_s_Info___repr, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_3__repr__, 0, __pyx_n_s_Info___repr, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_repr, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_repr, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":423
+  /* "pygame_sdl2/display.pyx":438
  *     return driver
  * 
  * class Info(object):             # <<<<<<<<<<<<<<
  * 
  *     def __init__(self):
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_Info, __pyx_t_3, __pyx_t_6, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_Info, __pyx_t_3, __pyx_t_6, NULL, 0, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Info, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Info, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":488
+  /* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_wm_info()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_21get_wm_info, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_23get_wm_info, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_wm_info, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_wm_info, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":495
+  /* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the number of video displays connected to the system.
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_23get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_25get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":508
+  /* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns a list of possible display modes for the display `display`.
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_25list_modes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_27list_modes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_modes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_modes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":533
+  /* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns true if size is in the result of list_modes().
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_27mode_ok, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_29mode_ok, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mode_ok, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mode_ok, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":540
+  /* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
  *     SDL_GL_ResetAttributes()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_29gl_reset_attributes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_31gl_reset_attributes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_reset_attributes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_reset_attributes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":543
+  /* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
  * 
  *     if flag == GL_SWAP_CONTROL:
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_31gl_set_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_33gl_set_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_set_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_set_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":561
+  /* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
  *     cdef int rv
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_33gl_get_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_35gl_get_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_get_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_get_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":572
+  /* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_35gl_load_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_37gl_load_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_load_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_load_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":580
+  /* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
  *     SDL_GL_UnloadLibrary()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_37gl_unload_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_39gl_unload_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_unload_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_unload_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":583
+  /* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_active()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_39get_active, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_41get_active, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_active, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_active, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":588
+  /* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.iconify()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_41iconify, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_43iconify, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_iconify, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_iconify, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":594
+  /* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.toggle_fullscreen()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_43toggle_fullscreen, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_45toggle_fullscreen, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_toggle_fullscreen, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_toggle_fullscreen, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":600
+  /* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_45set_gamma, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_47set_gamma, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":605
+  /* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_47set_gamma_ramp, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_49set_gamma_ramp, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma_ramp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma_ramp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":610
+  /* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
  *     global default_icon
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_49set_icon, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_51set_icon, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_icon, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_icon, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":618
+  /* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
  *     global default_title
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_51set_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_53set_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":626
+  /* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
  *     return default_title
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_53get_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_55get_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":629
+  /* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_drawable_size()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_55get_drawable_size, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_57get_drawable_size, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_drawable_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_drawable_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":634
+  /* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_57get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_59get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":641
+  /* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
  *     cdef SDL_Rect rect
  *     rv = SDL_GetDisplayBounds(index, &rect)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_59get_display_bounds, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_61get_display_bounds, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_display_bounds, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_display_bounds, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":647
+  /* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(hint, bytes):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_61hint, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_63hint, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_hint, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_hint, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":657
+  /* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
  *     return SDL_GetPlatform()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_63get_platform, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_65get_platform, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_platform, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_platform, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "pygame_sdl2/display.pyx":1
@@ -12400,6 +12570,110 @@ bad:
 }
 #endif
 
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0;
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
+        }
+    }
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+#else
+    PyErr_GetExcInfo(type, value, tb);
+#endif
+}
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(type, value, tb);
+#endif
+}
+
 static void __Pyx_RaiseDoubleKeywordsError(
     const char* func_name,
     PyObject* kw_name)
@@ -12620,37 +12894,6 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
 }
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    *type = tstate->exc_type;
-    *value = tstate->exc_value;
-    *tb = tstate->exc_traceback;
-    Py_XINCREF(*type);
-    Py_XINCREF(*value);
-    Py_XINCREF(*tb);
-#else
-    PyErr_GetExcInfo(type, value, tb);
-#endif
-}
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
-    tmp_type = tstate->exc_type;
-    tmp_value = tstate->exc_value;
-    tmp_tb = tstate->exc_traceback;
-    tstate->exc_type = type;
-    tstate->exc_value = value;
-    tstate->exc_traceback = tb;
-    Py_XDECREF(tmp_type);
-    Py_XDECREF(tmp_value);
-    Py_XDECREF(tmp_tb);
-#else
-    PyErr_SetExcInfo(type, value, tb);
-#endif
-}
-
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
     PyObject *local_type, *local_value, *local_tb;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -12821,79 +13064,6 @@ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
     return 0;
 }
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
-    PyObject *empty_list = 0;
-    PyObject *module = 0;
-    PyObject *global_dict = 0;
-    PyObject *empty_dict = 0;
-    PyObject *list;
-    #if PY_VERSION_HEX < 0x03030000
-    PyObject *py_import;
-    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
-    if (!py_import)
-        goto bad;
-    #endif
-    if (from_list)
-        list = from_list;
-    else {
-        empty_list = PyList_New(0);
-        if (!empty_list)
-            goto bad;
-        list = empty_list;
-    }
-    global_dict = PyModule_GetDict(__pyx_m);
-    if (!global_dict)
-        goto bad;
-    empty_dict = PyDict_New();
-    if (!empty_dict)
-        goto bad;
-    {
-        #if PY_MAJOR_VERSION >= 3
-        if (level == -1) {
-            if (strchr(__Pyx_MODULE_NAME, '.')) {
-                #if PY_VERSION_HEX < 0x03030000
-                PyObject *py_level = PyInt_FromLong(1);
-                if (!py_level)
-                    goto bad;
-                module = PyObject_CallFunctionObjArgs(py_import,
-                    name, global_dict, empty_dict, list, py_level, NULL);
-                Py_DECREF(py_level);
-                #else
-                module = PyImport_ImportModuleLevelObject(
-                    name, global_dict, empty_dict, list, 1);
-                #endif
-                if (!module) {
-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
-                        goto bad;
-                    PyErr_Clear();
-                }
-            }
-            level = 0;
-        }
-        #endif
-        if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
-            PyObject *py_level = PyInt_FromLong(level);
-            if (!py_level)
-                goto bad;
-            module = PyObject_CallFunctionObjArgs(py_import,
-                name, global_dict, empty_dict, list, py_level, NULL);
-            Py_DECREF(py_level);
-            #else
-            module = PyImport_ImportModuleLevelObject(
-                name, global_dict, empty_dict, list, level);
-            #endif
-        }
-    }
-bad:
-    #if PY_VERSION_HEX < 0x03030000
-    Py_XDECREF(py_import);
-    #endif
-    Py_XDECREF(empty_list);
-    Py_XDECREF(empty_dict);
-    return module;
-}
-
 static void* __Pyx_GetVtable(PyObject *dict) {
     void* ptr;
     PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
diff --git a/gen/pygame_sdl2.mixer.c b/gen/pygame_sdl2.mixer.c
index 1a151d9..3673e9e 100644
--- a/gen/pygame_sdl2.mixer.c
+++ b/gen/pygame_sdl2.mixer.c
@@ -1,13 +1,25 @@
-/* Generated by Cython 0.23.4 */
+/* Generated by Cython 0.21.1 */
 
 #define PY_SSIZE_T_CLEAN
+#ifndef CYTHON_USE_PYLONG_INTERNALS
+#ifdef PYLONG_BITS_IN_DIGIT
+#define CYTHON_USE_PYLONG_INTERNALS 0
+#else
+#include "pyconfig.h"
+#ifdef PYLONG_BITS_IN_DIGIT
+#define CYTHON_USE_PYLONG_INTERNALS 1
+#else
+#define CYTHON_USE_PYLONG_INTERNALS 0
+#endif
+#endif
+#endif
 #include "Python.h"
 #ifndef Py_PYTHON_H
     #error Python headers needed to compile C extensions, please install development version of Python.
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
     #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_23_4"
+#define CYTHON_ABI "0_21_1"
 #include <stddef.h>
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -42,40 +54,33 @@
 #define CYTHON_COMPILING_IN_PYPY 0
 #define CYTHON_COMPILING_IN_CPYTHON 1
 #endif
-#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
-#define CYTHON_USE_PYLONG_INTERNALS 1
-#endif
-#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600
 #define Py_OptimizeFlag 0
 #endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
           PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
-  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
           PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyType_Type
 #endif
-#ifndef Py_TPFLAGS_CHECKTYPES
+#if PY_MAJOR_VERSION >= 3
   #define Py_TPFLAGS_CHECKTYPES 0
-#endif
-#ifndef Py_TPFLAGS_HAVE_INDEX
   #define Py_TPFLAGS_HAVE_INDEX 0
-#endif
-#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
   #define Py_TPFLAGS_HAVE_NEWBUFFER 0
 #endif
-#ifndef Py_TPFLAGS_HAVE_FINALIZE
+#if PY_VERSION_HEX < 0x030400a1 && !defined(Py_TPFLAGS_HAVE_FINALIZE)
   #define Py_TPFLAGS_HAVE_FINALIZE 0
 #endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
-  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
+  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ? \
                                               0 : _PyUnicode_Ready((PyObject *)(op)))
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
@@ -94,13 +99,12 @@
 #if CYTHON_COMPILING_IN_PYPY
   #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
   #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+  #define __Pyx_PyFrozenSet_Size(s)         PyObject_Size(s)
 #else
   #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
-  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
       PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
-#endif
-#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
-  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
+  #define __Pyx_PyFrozenSet_Size(s)         PySet_Size(s)
 #endif
 #define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
@@ -165,32 +169,6 @@
 #else
   #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #endif
-#if PY_VERSION_HEX >= 0x030500B1
-#define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
-#define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
-#elif CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
-typedef struct {
-    unaryfunc am_await;
-    unaryfunc am_aiter;
-    unaryfunc am_anext;
-} __Pyx_PyAsyncMethodsStruct;
-#define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
-#else
-#define __Pyx_PyType_AsAsync(obj) NULL
-#endif
-#ifndef CYTHON_RESTRICT
-  #if defined(__GNUC__)
-    #define CYTHON_RESTRICT __restrict__
-  #elif defined(_MSC_VER) && _MSC_VER >= 1400
-    #define CYTHON_RESTRICT __restrict
-  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-    #define CYTHON_RESTRICT restrict
-  #else
-    #define CYTHON_RESTRICT
-  #endif
-#endif
-#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
-
 #ifndef CYTHON_INLINE
   #if defined(__GNUC__)
     #define CYTHON_INLINE __inline__
@@ -202,20 +180,35 @@ typedef struct {
     #define CYTHON_INLINE
   #endif
 #endif
-
-#if defined(WIN32) || defined(MS_WINDOWS)
-  #define _USE_MATH_DEFINES
+#ifndef CYTHON_RESTRICT
+  #if defined(__GNUC__)
+    #define CYTHON_RESTRICT __restrict__
+  #elif defined(_MSC_VER) && _MSC_VER >= 1400
+    #define CYTHON_RESTRICT __restrict
+  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define CYTHON_RESTRICT restrict
+  #else
+    #define CYTHON_RESTRICT
+  #endif
 #endif
-#include <math.h>
 #ifdef NAN
 #define __PYX_NAN() ((float) NAN)
 #else
 static CYTHON_INLINE float __PYX_NAN() {
+  /* Initialize NaN. The sign is irrelevant, an exponent with all bits 1 and
+   a nonzero mantissa means NaN. If the first bit in the mantissa is 1, it is
+   a quiet NaN. */
   float value;
   memset(&value, 0xFF, sizeof(value));
   return value;
 }
 #endif
+#ifdef __cplusplus
+template<typename T>
+void __Pyx_call_destructor(T* x) {
+    x->~T();
+}
+#endif
 
 
 #if PY_MAJOR_VERSION >= 3
@@ -234,6 +227,10 @@ static CYTHON_INLINE float __PYX_NAN() {
   #endif
 #endif
 
+#if defined(WIN32) || defined(MS_WINDOWS)
+#define _USE_MATH_DEFINES
+#endif
+#include <math.h>
 #define __PYX_HAVE__pygame_sdl2__mixer
 #define __PYX_HAVE_API__pygame_sdl2__mixer
 #include "stdint.h"
@@ -263,13 +260,6 @@ static CYTHON_INLINE float __PYX_NAN() {
 #   define CYTHON_UNUSED
 # endif
 #endif
-#ifndef CYTHON_NCP_UNUSED
-# if CYTHON_COMPILING_IN_CPYTHON
-#  define CYTHON_NCP_UNUSED
-# else
-#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
-# endif
-#endif
 typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
                 const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
 
@@ -278,34 +268,16 @@ typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
 #define __PYX_DEFAULT_STRING_ENCODING ""
 #define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
 #define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
-#define __Pyx_uchar_cast(c) ((unsigned char)c)
-#define __Pyx_long_cast(x) ((long)x)
-#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
-    (sizeof(type) < sizeof(Py_ssize_t))  ||\
-    (sizeof(type) > sizeof(Py_ssize_t) &&\
-          likely(v < (type)PY_SSIZE_T_MAX ||\
-                 v == (type)PY_SSIZE_T_MAX)  &&\
-          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
-                                v == (type)PY_SSIZE_T_MIN)))  ||\
-    (sizeof(type) == sizeof(Py_ssize_t) &&\
-          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (    \
+    (sizeof(type) < sizeof(Py_ssize_t))  ||             \
+    (sizeof(type) > sizeof(Py_ssize_t) &&               \
+          likely(v < (type)PY_SSIZE_T_MAX ||            \
+                 v == (type)PY_SSIZE_T_MAX)  &&         \
+          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||       \
+                                v == (type)PY_SSIZE_T_MIN)))  ||  \
+    (sizeof(type) == sizeof(Py_ssize_t) &&              \
+          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||        \
                                v == (type)PY_SSIZE_T_MAX)))  )
-#if defined (__cplusplus) && __cplusplus >= 201103L
-    #include <cstdlib>
-    #define __Pyx_sst_abs(value) std::abs(value)
-#elif SIZEOF_INT >= SIZEOF_SIZE_T
-    #define __Pyx_sst_abs(value) abs(value)
-#elif SIZEOF_LONG >= SIZEOF_SIZE_T
-    #define __Pyx_sst_abs(value) labs(value)
-#elif defined (_MSC_VER) && defined (_M_X64)
-    #define __Pyx_sst_abs(value) _abs64(value)
-#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-    #define __Pyx_sst_abs(value) llabs(value)
-#elif defined (__GNUC__)
-    #define __Pyx_sst_abs(value) __builtin_llabs(value)
-#else
-    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
-#endif
 static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject*);
 static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
 #define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
@@ -322,11 +294,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
 #endif
 #define __Pyx_PyObject_AsSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
 #define __Pyx_PyObject_AsUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
-#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
-#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
-#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
-#define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
-#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
+#define __Pyx_PyObject_FromUString(s)  __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromUString(s)   __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromUString(s)   __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromUString(s)     __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromUString(s) __Pyx_PyUnicode_FromString((const char*)s)
 #if PY_MAJOR_VERSION < 3
 static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
 {
@@ -340,9 +312,8 @@ static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
 #define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
 #define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
 #define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
-#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
-#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
-#define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False))
+#define __Pyx_Owned_Py_None(b) (Py_INCREF(Py_None), Py_None)
+#define __Pyx_PyBool_FromLong(b) ((b) ? (Py_INCREF(Py_True), Py_True) : (Py_INCREF(Py_False), Py_False))
 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
@@ -363,7 +334,7 @@ static int __Pyx_init_sys_getdefaultencoding_params(void) {
     const char* default_encoding_c;
     sys = PyImport_ImportModule("sys");
     if (!sys) goto bad;
-    default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
+    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
     Py_DECREF(sys);
     if (!default_encoding) goto bad;
     default_encoding_c = PyBytes_AsString(default_encoding);
@@ -450,11 +421,12 @@ static const char *__pyx_filename;
 
 
 static const char *__pyx_f[] = {
-  "src/pygame_sdl2/mixer.pyx",
+  "pygame_sdl2/mixer.pyx",
 };
 
 /*--- Type declarations ---*/
 struct __pyx_obj_11pygame_sdl2_5mixer_Sound;
+struct __pyx_obj_11pygame_sdl2_5mixer_Channel;
 struct __pyx_opt_args_11pygame_sdl2_8rwobject_to_rwops;
 
 /* "pygame_sdl2/rwobject.pxd":21
@@ -468,7 +440,7 @@ struct __pyx_opt_args_11pygame_sdl2_8rwobject_to_rwops {
   PyObject *mode;
 };
 
-/* "pygame_sdl2/mixer.pyx":155
+/* "pygame_sdl2/mixer.pyx":161
  * 
  * 
  * cdef class Sound:             # <<<<<<<<<<<<<<
@@ -481,7 +453,18 @@ struct __pyx_obj_11pygame_sdl2_5mixer_Sound {
 };
 
 
-/* --- Runtime support code (head) --- */
+/* "pygame_sdl2/mixer.pyx":249
+ * 
+ * 
+ * cdef class Channel(object):             # <<<<<<<<<<<<<<
+ *     cdef int cid
+ * 
+ */
+struct __pyx_obj_11pygame_sdl2_5mixer_Channel {
+  PyObject_HEAD
+  int cid;
+};
+
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -498,19 +481,19 @@ struct __pyx_obj_11pygame_sdl2_5mixer_Sound {
   static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
   #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
 #ifdef WITH_THREAD
-  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
-          if (acquire_gil) {\
-              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
-              PyGILState_Release(__pyx_gilstate_save);\
-          } else {\
-              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
+          if (acquire_gil) { \
+              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure(); \
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
+              PyGILState_Release(__pyx_gilstate_save); \
+          } else { \
+              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__); \
           }
 #else
-  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+  #define __Pyx_RefNannySetupContext(name, acquire_gil) \
           __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
 #endif
-  #define __Pyx_RefNannyFinishContext()\
+  #define __Pyx_RefNannyFinishContext() \
           __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
   #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
   #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
@@ -533,13 +516,13 @@ struct __pyx_obj_11pygame_sdl2_5mixer_Sound {
   #define __Pyx_XGOTREF(r)
   #define __Pyx_XGIVEREF(r)
 #endif
-#define __Pyx_XDECREF_SET(r, v) do {\
-        PyObject *tmp = (PyObject *) r;\
-        r = v; __Pyx_XDECREF(tmp);\
+#define __Pyx_XDECREF_SET(r, v) do {                            \
+        PyObject *tmp = (PyObject *) r;                         \
+        r = v; __Pyx_XDECREF(tmp);                              \
     } while (0)
-#define __Pyx_DECREF_SET(r, v) do {\
-        PyObject *tmp = (PyObject *) r;\
-        r = v; __Pyx_DECREF(tmp);\
+#define __Pyx_DECREF_SET(r, v) do {                             \
+        PyObject *tmp = (PyObject *) r;                         \
+        r = v; __Pyx_DECREF(tmp);                               \
     } while (0)
 #define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
@@ -606,7 +589,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
 #endif
 
-#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION >= 3
 static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
     PyObject *value;
     value = PyDict_GetItemWithError(d, key);
@@ -646,12 +629,12 @@ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObjec
 
 static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                   int lineno, const char *filename,
-                                  int full_traceback, int nogil);
+                                  int full_traceback);
 
 static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
 
-static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
-    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
+    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
     const char* function_name);
 
 static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
@@ -689,20 +672,20 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
 
 static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed);
 
-#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
-    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
-    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
+#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
+    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) : \
+    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) : \
                __Pyx_GetItemInt_Generic(o, to_py_func(i))))
-#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
-    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
+    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
     (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
-#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
-    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
-    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck) \
+    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ? \
+    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) : \
     (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                               int wraparound, int boundscheck);
@@ -710,92 +693,11 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                      int is_list, int wraparound, int boundscheck);
 
-#if CYTHON_COMPILING_IN_CPYTHON
-#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
-static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
-    PyTypeObject* tp = Py_TYPE(obj);
-    if (likely(tp->tp_setattro))
-        return tp->tp_setattro(obj, attr_name, value);
-#if PY_MAJOR_VERSION < 3
-    if (likely(tp->tp_setattr))
-        return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
-#endif
-    return PyObject_SetAttr(obj, attr_name, value);
-}
-#else
-#define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
-#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
-#endif
-
 static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
     const char *name, int exact);
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
-
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
-static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases);
-
-static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
-
-#define __Pyx_CyFunction_USED 1
-#include <structmember.h>
-#define __Pyx_CYFUNCTION_STATICMETHOD  0x01
-#define __Pyx_CYFUNCTION_CLASSMETHOD   0x02
-#define __Pyx_CYFUNCTION_CCLASS        0x04
-#define __Pyx_CyFunction_GetClosure(f)\
-    (((__pyx_CyFunctionObject *) (f))->func_closure)
-#define __Pyx_CyFunction_GetClassObj(f)\
-    (((__pyx_CyFunctionObject *) (f))->func_classobj)
-#define __Pyx_CyFunction_Defaults(type, f)\
-    ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
-#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
-    ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
-typedef struct {
-    PyCFunctionObject func;
-#if PY_VERSION_HEX < 0x030500A0
-    PyObject *func_weakreflist;
-#endif
-    PyObject *func_dict;
-    PyObject *func_name;
-    PyObject *func_qualname;
-    PyObject *func_doc;
-    PyObject *func_globals;
-    PyObject *func_code;
-    PyObject *func_closure;
-    PyObject *func_classobj;
-    void *defaults;
-    int defaults_pyobjects;
-    int flags;
-    PyObject *defaults_tuple;
-    PyObject *defaults_kwdict;
-    PyObject *(*defaults_getter)(PyObject *);
-    PyObject *func_annotations;
-} __pyx_CyFunctionObject;
-static PyTypeObject *__pyx_CyFunctionType = 0;
-#define __Pyx_CyFunction_NewEx(ml, flags, qualname, self, module, globals, code)\
-    __Pyx_CyFunction_New(__pyx_CyFunctionType, ml, flags, qualname, self, module, globals, code)
-static PyObject *__Pyx_CyFunction_New(PyTypeObject *, PyMethodDef *ml,
-                                      int flags, PyObject* qualname,
-                                      PyObject *self,
-                                      PyObject *module, PyObject *globals,
-                                      PyObject* code);
-static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
-                                                         size_t size,
-                                                         int pyobjects);
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
-                                                            PyObject *tuple);
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
-                                                             PyObject *dict);
-static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
-                                                              PyObject *dict);
-static int __pyx_CyFunction_init(void);
-
-static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name, PyObject *qualname,
-                                           PyObject *mkw, PyObject *modname, PyObject *doc);
-static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases, PyObject *dict,
-                                      PyObject *mkw, int calculate_metaclass, int allow_py2_metaclass);
-
 typedef struct {
     int code_line;
     PyCodeObject* code_object;
@@ -813,12 +715,12 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
 static void __Pyx_AddTraceback(const char *funcname, int c_line,
                                int py_line, const char *filename);
 
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MIX_InitFlags(MIX_InitFlags value);
-
 static CYTHON_INLINE uint16_t __Pyx_PyInt_As_uint16_t(PyObject *);
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value);
@@ -861,6 +763,7 @@ static SDL_RWops *(*__pyx_f_11pygame_sdl2_8rwobject_to_rwops)(PyObject *, struct
 
 /* Module declarations from 'pygame_sdl2.mixer' */
 static PyTypeObject *__pyx_ptype_11pygame_sdl2_5mixer_Sound = 0;
+static PyTypeObject *__pyx_ptype_11pygame_sdl2_5mixer_Channel = 0;
 static PyObject *__pyx_v_11pygame_sdl2_5mixer_preinit_args = 0;
 static PyObject *__pyx_v_11pygame_sdl2_5mixer_output_spec = 0;
 static PyObject *__pyx_v_11pygame_sdl2_5mixer_channel_events = 0;
@@ -871,15 +774,56 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int); /*proto*/
 int __pyx_module_is_main_pygame_sdl2__mixer = 0;
 
 /* Implementation of 'pygame_sdl2.mixer' */
-static PyObject *__pyx_builtin_object;
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer__play_current(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_channel); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_size, PyObject *__pyx_v_channels, PyObject *__pyx_v_buffer); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_4pre_init(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_size, PyObject *__pyx_v_channels, PyObject *__pyx_v_buffersize); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_6quit(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_8get_init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_10stop(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_12pause(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_14unpause(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_16fadeout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_time); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_18set_num_channels(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_count); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_20get_num_channels(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_22set_reserved(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_count); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_force); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_26get_busy(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static int __pyx_pf_11pygame_sdl2_5mixer_5Sound___cinit__(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static void __pyx_pf_11pygame_sdl2_5mixer_5Sound_2__dealloc__(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static int __pyx_pf_11pygame_sdl2_5mixer_5Sound_4__init__(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_fi); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_6play(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_loops, PyObject *__pyx_v_maxtime, PyObject *__pyx_v_fade_ms); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_8stop(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_10pause(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_12unpause(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_14fadeout(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_time); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_16set_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_18get_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_22get_length(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_24get_raw(CYTHON_UNUSED struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
+static int __pyx_pf_11pygame_sdl2_5mixer_7Channel___init__(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_cid); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound, PyObject *__pyx_v_loops, PyObject *__pyx_v_maxtime, PyObject *__pyx_v_fade_ms); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_4stop(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_6pause(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_8unpause(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_time); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_volume); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_type); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self); /* proto */
+static PyObject *__pyx_tp_new_11pygame_sdl2_5mixer_Sound(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_11pygame_sdl2_5mixer_Channel(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static char __pyx_k__4[] = "{}\n";
 static char __pyx_k_fi[] = "fi";
+static char __pyx_k_ms[] = "ms";
 static char __pyx_k__13[] = "*";
 static char __pyx_k_cid[] = "cid";
-static char __pyx_k_doc[] = "__doc__";
 static char __pyx_k_get[] = "get";
 static char __pyx_k_sys[] = "sys";
-static char __pyx_k_vol[] = "vol";
 static char __pyx_k_Lock[] = "Lock";
 static char __pyx_k_args[] = "args";
 static char __pyx_k_chan[] = "chan";
@@ -890,7 +834,6 @@ static char __pyx_k_lock[] = "_lock";
 static char __pyx_k_main[] = "__main__";
 static char __pyx_k_play[] = "play";
 static char __pyx_k_quit[] = "quit";
-static char __pyx_k_self[] = "self";
 static char __pyx_k_size[] = "size";
 static char __pyx_k_stop[] = "stop";
 static char __pyx_k_test[] = "__test__";
@@ -903,7 +846,6 @@ static char __pyx_k_force[] = "force";
 static char __pyx_k_loops[] = "loops";
 static char __pyx_k_music[] = "music";
 static char __pyx_k_pause[] = "pause";
-static char __pyx_k_queue[] = "queue";
 static char __pyx_k_sound[] = "sound";
 static char __pyx_k_start[] = "start";
 static char __pyx_k_Thread[] = "Thread";
@@ -912,79 +854,37 @@ static char __pyx_k_buffer[] = "buffer";
 static char __pyx_k_errors[] = "errors";
 static char __pyx_k_format[] = "format";
 static char __pyx_k_import[] = "__import__";
-static char __pyx_k_init_2[] = "__init__";
-static char __pyx_k_module[] = "__module__";
-static char __pyx_k_object[] = "object";
 static char __pyx_k_target[] = "target";
-static char __pyx_k_volume[] = "volume";
-static char __pyx_k_Channel[] = "Channel";
 static char __pyx_k_channel[] = "channel";
 static char __pyx_k_fade_ms[] = "fade_ms";
 static char __pyx_k_fadeout[] = "fadeout";
 static char __pyx_k_maxtime[] = "maxtime";
-static char __pyx_k_prepare[] = "__prepare__";
 static char __pyx_k_unpause[] = "unpause";
 static char __pyx_k_channels[] = "channels";
 static char __pyx_k_get_busy[] = "get_busy";
 static char __pyx_k_get_init[] = "get_init";
 static char __pyx_k_pre_init[] = "pre_init";
-static char __pyx_k_qualname[] = "__qualname__";
 static char __pyx_k_frequency[] = "frequency";
-static char __pyx_k_get_queue[] = "get_queue";
-static char __pyx_k_get_sound[] = "get_sound";
-static char __pyx_k_metaclass[] = "__metaclass__";
 static char __pyx_k_threading[] = "threading";
 static char __pyx_k_buffersize[] = "buffersize";
-static char __pyx_k_get_volume[] = "get_volume";
 static char __pyx_k_next_sound[] = "next_sound";
-static char __pyx_k_set_volume[] = "set_volume";
 static char __pyx_k_pygame_sdl2[] = "pygame_sdl2";
-static char __pyx_k_Channel_play[] = "Channel.play";
-static char __pyx_k_Channel_stop[] = "Channel.stop";
 static char __pyx_k_find_channel[] = "find_channel";
-static char __pyx_k_get_endevent[] = "get_endevent";
 static char __pyx_k_play_current[] = "_play_current";
-static char __pyx_k_set_endevent[] = "set_endevent";
 static char __pyx_k_set_reserved[] = "set_reserved";
-static char __pyx_k_Channel_pause[] = "Channel.pause";
-static char __pyx_k_Channel_queue[] = "Channel.queue";
 static char __pyx_k_register_init[] = "register_init";
 static char __pyx_k_register_quit[] = "register_quit";
-static char __pyx_k_Channel___init[] = "Channel.__init__";
-static char __pyx_k_Channel_fadeout[] = "Channel.fadeout";
-static char __pyx_k_Channel_unpause[] = "Channel.unpause";
 static char __pyx_k_Not_implemented[] = "Not implemented.";
-static char __pyx_k_Channel_get_busy[] = "Channel.get_busy";
 static char __pyx_k_get_num_channels[] = "get_num_channels";
 static char __pyx_k_set_num_channels[] = "set_num_channels";
-static char __pyx_k_Channel_get_queue[] = "Channel.get_queue";
-static char __pyx_k_Channel_get_sound[] = "Channel.get_sound";
 static char __pyx_k_pygame_sdl2_error[] = "pygame_sdl2.error";
 static char __pyx_k_pygame_sdl2_mixer[] = "pygame_sdl2.mixer";
-static char __pyx_k_Channel_get_volume[] = "Channel.get_volume";
-static char __pyx_k_Channel_set_volume[] = "Channel.set_volume";
-static char __pyx_k_Channel_get_endevent[] = "Channel.get_endevent";
-static char __pyx_k_Channel_set_endevent[] = "Channel.set_endevent";
 static char __pyx_k_pygame_sdl2_mixer_music[] = "pygame_sdl2.mixer_music";
-static char __pyx_k_home_tom_ab_pygame_sdl2_src_pyg[] = "/home/tom/ab/pygame_sdl2/src/pygame_sdl2/mixer.pyx";
-static PyObject *__pyx_n_s_Channel;
-static PyObject *__pyx_n_s_Channel___init;
-static PyObject *__pyx_n_s_Channel_fadeout;
-static PyObject *__pyx_n_s_Channel_get_busy;
-static PyObject *__pyx_n_s_Channel_get_endevent;
-static PyObject *__pyx_n_s_Channel_get_queue;
-static PyObject *__pyx_n_s_Channel_get_sound;
-static PyObject *__pyx_n_s_Channel_get_volume;
-static PyObject *__pyx_n_s_Channel_pause;
-static PyObject *__pyx_n_s_Channel_play;
-static PyObject *__pyx_n_s_Channel_queue;
-static PyObject *__pyx_n_s_Channel_set_endevent;
-static PyObject *__pyx_n_s_Channel_set_volume;
-static PyObject *__pyx_n_s_Channel_stop;
-static PyObject *__pyx_n_s_Channel_unpause;
+static char __pyx_k_Users_tom_ab_pygame_sdl2_src_py[] = "/Users/tom/ab/pygame_sdl2/src/pygame_sdl2/mixer.pyx";
 static PyObject *__pyx_n_s_Lock;
 static PyObject *__pyx_kp_s_Not_implemented;
 static PyObject *__pyx_n_s_Thread;
+static PyObject *__pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py;
 static PyObject *__pyx_n_s__13;
 static PyObject *__pyx_kp_s__4;
 static PyObject *__pyx_n_s_append;
@@ -996,7 +896,6 @@ static PyObject *__pyx_n_s_channel;
 static PyObject *__pyx_n_s_channels;
 static PyObject *__pyx_n_s_cid;
 static PyObject *__pyx_n_s_count;
-static PyObject *__pyx_n_s_doc;
 static PyObject *__pyx_n_s_enter;
 static PyObject *__pyx_n_s_error;
 static PyObject *__pyx_n_s_errors;
@@ -1011,44 +910,30 @@ static PyObject *__pyx_n_s_format;
 static PyObject *__pyx_n_s_frequency;
 static PyObject *__pyx_n_s_get;
 static PyObject *__pyx_n_s_get_busy;
-static PyObject *__pyx_n_s_get_endevent;
 static PyObject *__pyx_n_s_get_init;
 static PyObject *__pyx_n_s_get_num_channels;
-static PyObject *__pyx_n_s_get_queue;
-static PyObject *__pyx_n_s_get_sound;
-static PyObject *__pyx_n_s_get_volume;
-static PyObject *__pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg;
 static PyObject *__pyx_n_s_import;
 static PyObject *__pyx_n_s_init;
-static PyObject *__pyx_n_s_init_2;
 static PyObject *__pyx_n_s_lock;
 static PyObject *__pyx_n_s_loops;
 static PyObject *__pyx_n_s_main;
 static PyObject *__pyx_n_s_maxtime;
-static PyObject *__pyx_n_s_metaclass;
-static PyObject *__pyx_n_s_module;
+static PyObject *__pyx_n_s_ms;
 static PyObject *__pyx_n_s_music;
 static PyObject *__pyx_n_s_next_sound;
-static PyObject *__pyx_n_s_object;
 static PyObject *__pyx_n_s_pause;
 static PyObject *__pyx_n_s_play;
 static PyObject *__pyx_n_s_play_current;
 static PyObject *__pyx_n_s_pre_init;
-static PyObject *__pyx_n_s_prepare;
 static PyObject *__pyx_n_s_pygame_sdl2;
 static PyObject *__pyx_n_s_pygame_sdl2_error;
 static PyObject *__pyx_n_s_pygame_sdl2_mixer;
 static PyObject *__pyx_n_s_pygame_sdl2_mixer_music;
-static PyObject *__pyx_n_s_qualname;
-static PyObject *__pyx_n_s_queue;
 static PyObject *__pyx_n_s_quit;
 static PyObject *__pyx_n_s_register_init;
 static PyObject *__pyx_n_s_register_quit;
-static PyObject *__pyx_n_s_self;
-static PyObject *__pyx_n_s_set_endevent;
 static PyObject *__pyx_n_s_set_num_channels;
 static PyObject *__pyx_n_s_set_reserved;
-static PyObject *__pyx_n_s_set_volume;
 static PyObject *__pyx_n_s_size;
 static PyObject *__pyx_n_s_sound;
 static PyObject *__pyx_n_s_start;
@@ -1060,50 +945,6 @@ static PyObject *__pyx_n_s_threading;
 static PyObject *__pyx_n_s_time;
 static PyObject *__pyx_n_s_type;
 static PyObject *__pyx_n_s_unpause;
-static PyObject *__pyx_n_s_vol;
-static PyObject *__pyx_n_s_volume;
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer__play_current(CYTHON_UNUSED PyObject *__pyx_self, int __pyx_v_channel); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_size, PyObject *__pyx_v_channels, PyObject *__pyx_v_buffer); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_4pre_init(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_size, PyObject *__pyx_v_channels, PyObject *__pyx_v_buffersize); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_6quit(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_8get_init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_10stop(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_12pause(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_14unpause(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_16fadeout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_time); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_18set_num_channels(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_count); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_20get_num_channels(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_22set_reserved(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_count); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_force); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_26get_busy(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static int __pyx_pf_11pygame_sdl2_5mixer_5Sound___cinit__(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static void __pyx_pf_11pygame_sdl2_5mixer_5Sound_2__dealloc__(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static int __pyx_pf_11pygame_sdl2_5mixer_5Sound_4__init__(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_fi); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_6play(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_loops, PyObject *__pyx_v_maxtime, PyObject *__pyx_v_fade_ms); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_8stop(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_10pause(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_12unpause(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_14fadeout(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_time); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_16set_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_18get_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_22get_length(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_24get_raw(CYTHON_UNUSED struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_cid); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound, PyObject *__pyx_v_loops, PyObject *__pyx_v_maxtime, PyObject *__pyx_v_fade_ms); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_4stop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_6pause(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_8unpause(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_time); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_volume); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_type); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_tp_new_11pygame_sdl2_5mixer_Sound(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_int_0;
 static PyObject *__pyx_int_2;
 static PyObject *__pyx_int_4096;
@@ -1128,22 +969,6 @@ static PyObject *__pyx_tuple__26;
 static PyObject *__pyx_tuple__28;
 static PyObject *__pyx_tuple__31;
 static PyObject *__pyx_tuple__33;
-static PyObject *__pyx_tuple__36;
-static PyObject *__pyx_tuple__38;
-static PyObject *__pyx_tuple__40;
-static PyObject *__pyx_tuple__41;
-static PyObject *__pyx_tuple__43;
-static PyObject *__pyx_tuple__45;
-static PyObject *__pyx_tuple__47;
-static PyObject *__pyx_tuple__49;
-static PyObject *__pyx_tuple__51;
-static PyObject *__pyx_tuple__53;
-static PyObject *__pyx_tuple__55;
-static PyObject *__pyx_tuple__57;
-static PyObject *__pyx_tuple__59;
-static PyObject *__pyx_tuple__61;
-static PyObject *__pyx_tuple__63;
-static PyObject *__pyx_tuple__64;
 static PyObject *__pyx_codeobj__15;
 static PyObject *__pyx_codeobj__17;
 static PyObject *__pyx_codeobj__19;
@@ -1158,20 +983,6 @@ static PyObject *__pyx_codeobj__30;
 static PyObject *__pyx_codeobj__32;
 static PyObject *__pyx_codeobj__34;
 static PyObject *__pyx_codeobj__35;
-static PyObject *__pyx_codeobj__37;
-static PyObject *__pyx_codeobj__39;
-static PyObject *__pyx_codeobj__42;
-static PyObject *__pyx_codeobj__44;
-static PyObject *__pyx_codeobj__46;
-static PyObject *__pyx_codeobj__48;
-static PyObject *__pyx_codeobj__50;
-static PyObject *__pyx_codeobj__52;
-static PyObject *__pyx_codeobj__54;
-static PyObject *__pyx_codeobj__56;
-static PyObject *__pyx_codeobj__58;
-static PyObject *__pyx_codeobj__60;
-static PyObject *__pyx_codeobj__62;
-static PyObject *__pyx_codeobj__65;
 
 /* "pygame_sdl2/mixer.pyx":41
  * _lock = threading.Lock()
@@ -1322,14 +1133,6 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer__play_current(CYTHON_UNUSED PyObj
           __Pyx_GOTREF(__pyx_t_3);
           if (unlikely(PyDict_SetItem(__pyx_v_11pygame_sdl2_5mixer_channel_queued, __pyx_t_3, Py_None) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 53; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-          /* "pygame_sdl2/mixer.pyx":50
- *     cdef Sound next_sound
- * 
- *     with _lock:             # <<<<<<<<<<<<<<
- *         next_sound = channel_queued[channel]
- *         current_sounds[channel] = next_sound
- */
         }
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -1340,6 +1143,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer__play_current(CYTHON_UNUSED PyObj
         __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+        /* "pygame_sdl2/mixer.pyx":50
+ *     cdef Sound next_sound
+ * 
+ *     with _lock:             # <<<<<<<<<<<<<<
+ *         next_sound = channel_queued[channel]
+ *         current_sounds[channel] = next_sound
+ */
         /*except:*/ {
           __Pyx_AddTraceback("pygame_sdl2.mixer._play_current", __pyx_clineno, __pyx_lineno, __pyx_filename);
           if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 50; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
@@ -1408,8 +1219,8 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer__play_current(CYTHON_UNUSED PyObj
  *         channel_queued[channel] = None
  * 
  *     if next_sound:             # <<<<<<<<<<<<<<
- *         Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)
- * 
+ *         with nogil:
+ *             Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)
  */
   if (unlikely(!__pyx_v_next_sound)) { __Pyx_RaiseUnboundLocalError("next_sound"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
   __pyx_t_11 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_next_sound)); if (unlikely(__pyx_t_11 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -1418,21 +1229,54 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer__play_current(CYTHON_UNUSED PyObj
     /* "pygame_sdl2/mixer.pyx":56
  * 
  *     if next_sound:
- *         Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)             # <<<<<<<<<<<<<<
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)
+ * 
+ */
+    {
+        #ifdef WITH_THREAD
+        PyThreadState *_save;
+        Py_UNBLOCK_THREADS
+        #endif
+        /*try:*/ {
+
+          /* "pygame_sdl2/mixer.pyx":57
+ *     if next_sound:
+ *         with nogil:
+ *             Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-    if (unlikely(!__pyx_v_next_sound)) { __Pyx_RaiseUnboundLocalError("next_sound"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
-    Mix_PlayChannelTimed(__pyx_v_channel, __pyx_v_next_sound->chunk, 0, -1);
+          if (unlikely(!__pyx_v_next_sound)) { __Pyx_RaiseUnboundLocalError("next_sound"); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L21_error;} }
+          Mix_PlayChannelTimed(__pyx_v_channel, __pyx_v_next_sound->chunk, 0, -1);
+        }
 
-    /* "pygame_sdl2/mixer.pyx":55
- *         channel_queued[channel] = None
+        /* "pygame_sdl2/mixer.pyx":56
  * 
- *     if next_sound:             # <<<<<<<<<<<<<<
- *         Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)
+ *     if next_sound:
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)
  * 
  */
+        /*finally:*/ {
+          /*normal exit:*/{
+            #ifdef WITH_THREAD
+            Py_BLOCK_THREADS
+            #endif
+            goto __pyx_L22;
+          }
+          __pyx_L21_error: {
+            #ifdef WITH_THREAD
+            Py_BLOCK_THREADS
+            #endif
+            goto __pyx_L1_error;
+          }
+          __pyx_L22:;
+        }
+    }
+    goto __pyx_L19;
   }
+  __pyx_L19:;
 
   /* "pygame_sdl2/mixer.pyx":41
  * _lock = threading.Lock()
@@ -1459,7 +1303,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer__play_current(CYTHON_UNUSED PyObj
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":59
+/* "pygame_sdl2/mixer.pyx":60
  * 
  * 
  * cdef void channel_callback(int channel) with gil:             # <<<<<<<<<<<<<<
@@ -1493,7 +1337,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
   #endif
   __Pyx_RefNannySetupContext("channel_callback", 0);
 
-  /* "pygame_sdl2/mixer.pyx":61
+  /* "pygame_sdl2/mixer.pyx":62
  * cdef void channel_callback(int channel) with gil:
  * 
  *     cdef int etype = 0             # <<<<<<<<<<<<<<
@@ -1502,7 +1346,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
  */
   __pyx_v_etype = 0;
 
-  /* "pygame_sdl2/mixer.pyx":64
+  /* "pygame_sdl2/mixer.pyx":65
  *     cdef SDL_Event e
  * 
  *     etype = channel_events.get(channel, 0)             # <<<<<<<<<<<<<<
@@ -1511,18 +1355,18 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
  */
   if (unlikely(__pyx_v_11pygame_sdl2_5mixer_channel_events == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_channel); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_channel); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_events, __pyx_t_1, __pyx_int_0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_events, __pyx_t_1, __pyx_int_0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_etype = __pyx_t_3;
 
-  /* "pygame_sdl2/mixer.pyx":65
+  /* "pygame_sdl2/mixer.pyx":66
  * 
  *     etype = channel_events.get(channel, 0)
  *     if etype != 0:             # <<<<<<<<<<<<<<
@@ -1532,7 +1376,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
   __pyx_t_4 = ((__pyx_v_etype != 0) != 0);
   if (__pyx_t_4) {
 
-    /* "pygame_sdl2/mixer.pyx":66
+    /* "pygame_sdl2/mixer.pyx":67
  *     etype = channel_events.get(channel, 0)
  *     if etype != 0:
  *         memset(&e, 0, sizeof(SDL_Event))             # <<<<<<<<<<<<<<
@@ -1541,7 +1385,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
  */
     memset((&__pyx_v_e), 0, (sizeof(SDL_Event)));
 
-    /* "pygame_sdl2/mixer.pyx":67
+    /* "pygame_sdl2/mixer.pyx":68
  *     if etype != 0:
  *         memset(&e, 0, sizeof(SDL_Event))
  *         e.type = etype             # <<<<<<<<<<<<<<
@@ -1550,7 +1394,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
  */
     __pyx_v_e.type = __pyx_v_etype;
 
-    /* "pygame_sdl2/mixer.pyx":68
+    /* "pygame_sdl2/mixer.pyx":69
  *         memset(&e, 0, sizeof(SDL_Event))
  *         e.type = etype
  *         SDL_PushEvent(&e)             # <<<<<<<<<<<<<<
@@ -1558,17 +1402,11 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
  *     with _lock:
  */
     SDL_PushEvent((&__pyx_v_e));
-
-    /* "pygame_sdl2/mixer.pyx":65
- * 
- *     etype = channel_events.get(channel, 0)
- *     if etype != 0:             # <<<<<<<<<<<<<<
- *         memset(&e, 0, sizeof(SDL_Event))
- *         e.type = etype
- */
+    goto __pyx_L3;
   }
+  __pyx_L3:;
 
-  /* "pygame_sdl2/mixer.pyx":70
+  /* "pygame_sdl2/mixer.pyx":71
  *         SDL_PushEvent(&e)
  * 
  *     with _lock:             # <<<<<<<<<<<<<<
@@ -1576,11 +1414,11 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
  *         if next_sound:
  */
   /*with:*/ {
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_2, __pyx_n_s_enter); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
@@ -1593,10 +1431,10 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
       }
     }
     if (__pyx_t_7) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -1610,7 +1448,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
         __Pyx_XGOTREF(__pyx_t_10);
         /*try:*/ {
 
-          /* "pygame_sdl2/mixer.pyx":71
+          /* "pygame_sdl2/mixer.pyx":72
  * 
  *     with _lock:
  *         next_sound = channel_queued.get(channel)             # <<<<<<<<<<<<<<
@@ -1619,58 +1457,58 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
  */
           if (unlikely(__pyx_v_11pygame_sdl2_5mixer_channel_queued == Py_None)) {
             PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           }
-          __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_channel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_channel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_queued, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_queued, __pyx_t_2, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __pyx_v_next_sound = __pyx_t_1;
           __pyx_t_1 = 0;
 
-          /* "pygame_sdl2/mixer.pyx":72
+          /* "pygame_sdl2/mixer.pyx":73
  *     with _lock:
  *         next_sound = channel_queued.get(channel)
  *         if next_sound:             # <<<<<<<<<<<<<<
  *             threading.Thread(target=_play_current, args=(channel,)).start()
  * 
  */
-          __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_next_sound); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 72; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_next_sound); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           if (__pyx_t_4) {
 
-            /* "pygame_sdl2/mixer.pyx":73
+            /* "pygame_sdl2/mixer.pyx":74
  *         next_sound = channel_queued.get(channel)
  *         if next_sound:
  *             threading.Thread(target=_play_current, args=(channel,)).start()             # <<<<<<<<<<<<<<
  * 
  * # A list of errors that occured during mixer initialization.
  */
-            __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_threading); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_threading); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Thread); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_Thread); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_6);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_2);
-            __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_play_current); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_play_current); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_7);
-            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_target, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_target, __pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-            __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_channel); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_channel); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_7);
-            __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_11 = PyTuple_New(1); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __Pyx_GIVEREF(__pyx_t_7);
             PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7);
+            __Pyx_GIVEREF(__pyx_t_7);
             __pyx_t_7 = 0;
-            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_args, __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_args, __pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-            __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_11);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_start); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_2);
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
             __pyx_t_11 = NULL;
@@ -1684,31 +1522,17 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
               }
             }
             if (__pyx_t_11) {
-              __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+              __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
               __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
             } else {
-              __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+              __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             }
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-            /* "pygame_sdl2/mixer.pyx":72
- *     with _lock:
- *         next_sound = channel_queued.get(channel)
- *         if next_sound:             # <<<<<<<<<<<<<<
- *             threading.Thread(target=_play_current, args=(channel,)).start()
- * 
- */
+            goto __pyx_L16;
           }
-
-          /* "pygame_sdl2/mixer.pyx":70
- *         SDL_PushEvent(&e)
- * 
- *     with _lock:             # <<<<<<<<<<<<<<
- *         next_sound = channel_queued.get(channel)
- *         if next_sound:
- */
+          __pyx_L16:;
         }
         __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -1720,22 +1544,30 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
         __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+        /* "pygame_sdl2/mixer.pyx":71
+ *         SDL_PushEvent(&e)
+ * 
+ *     with _lock:             # <<<<<<<<<<<<<<
+ *         next_sound = channel_queued.get(channel)
+ *         if next_sound:
+ */
         /*except:*/ {
           __Pyx_AddTraceback("pygame_sdl2.mixer.channel_callback", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_2);
           __Pyx_GOTREF(__pyx_t_11);
-          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+          __pyx_t_6 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
           __Pyx_GOTREF(__pyx_t_6);
           __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-          if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+          if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
           __Pyx_GOTREF(__pyx_t_12);
           __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_12);
           __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
-          if (__pyx_t_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+          if (__pyx_t_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
           __pyx_t_13 = ((!(__pyx_t_4 != 0)) != 0);
           if (__pyx_t_13) {
             __Pyx_GIVEREF(__pyx_t_1);
@@ -1743,7 +1575,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
             __Pyx_XGIVEREF(__pyx_t_11);
             __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_11);
             __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_11 = 0; 
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
           }
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -1769,7 +1601,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
         if (__pyx_t_5) {
           __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__2, NULL);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         }
@@ -1784,7 +1616,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
     __pyx_L20:;
   }
 
-  /* "pygame_sdl2/mixer.pyx":59
+  /* "pygame_sdl2/mixer.pyx":60
  * 
  * 
  * cdef void channel_callback(int channel) with gil:             # <<<<<<<<<<<<<<
@@ -1800,7 +1632,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_11);
-  __Pyx_WriteUnraisable("pygame_sdl2.mixer.channel_callback", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("pygame_sdl2.mixer.channel_callback", __pyx_clineno, __pyx_lineno, __pyx_filename, 0);
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_next_sound);
   __Pyx_RefNannyFinishContext();
@@ -1809,7 +1641,7 @@ static void __pyx_f_11pygame_sdl2_5mixer_channel_callback(int __pyx_v_channel) {
   #endif
 }
 
-/* "pygame_sdl2/mixer.pyx":79
+/* "pygame_sdl2/mixer.pyx":80
  * 
  * @pygame_sdl2.register_init
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):             # <<<<<<<<<<<<<<
@@ -1873,7 +1705,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_3init(PyObject *__pyx_self, PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -1892,7 +1724,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_3init(PyObject *__pyx_self, PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("init", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("init", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -1906,7 +1738,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_3init(PyObject *__pyx_self, PyObj
 }
 
 static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_frequency, PyObject *__pyx_v_size, PyObject *__pyx_v_channels, PyObject *__pyx_v_buffer) {
-  PyObject *__pyx_v_flag = NULL;
+  MIX_InitFlags __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -1919,12 +1751,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   Py_ssize_t __pyx_t_10;
-  int __pyx_t_11;
+  MIX_InitFlags __pyx_t_11;
   int __pyx_t_12;
   PyObject *(*__pyx_t_13)(PyObject *);
-  Uint16 __pyx_t_14;
-  int __pyx_t_15;
+  int __pyx_t_14;
+  Uint16 __pyx_t_15;
   int __pyx_t_16;
+  int __pyx_t_17;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -1934,14 +1767,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
   __Pyx_INCREF(__pyx_v_channels);
   __Pyx_INCREF(__pyx_v_buffer);
 
-  /* "pygame_sdl2/mixer.pyx":80
+  /* "pygame_sdl2/mixer.pyx":81
  * @pygame_sdl2.register_init
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):
  *     if get_init() is not None:             # <<<<<<<<<<<<<<
  *         return
  * 
  */
-  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
@@ -1954,10 +1787,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -1966,7 +1799,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/mixer.pyx":81
+    /* "pygame_sdl2/mixer.pyx":82
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):
  *     if get_init() is not None:
  *         return             # <<<<<<<<<<<<<<
@@ -1976,65 +1809,57 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
     __Pyx_XDECREF(__pyx_r);
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
-
-    /* "pygame_sdl2/mixer.pyx":80
- * @pygame_sdl2.register_init
- * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):
- *     if get_init() is not None:             # <<<<<<<<<<<<<<
- *         return
- * 
- */
   }
 
-  /* "pygame_sdl2/mixer.pyx":83
+  /* "pygame_sdl2/mixer.pyx":84
  *         return
  * 
  *     for flag in (MIX_INIT_FLAC, MIX_INIT_MOD, MIX_INIT_MODPLUG,             # <<<<<<<<<<<<<<
  *                  MIX_INIT_MP3, MIX_INIT_OGG, MIX_INIT_FLUIDSYNTH):
  * 
  */
-  __pyx_t_1 = __Pyx_PyInt_From_MIX_InitFlags(MIX_INIT_FLAC); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyInt_FromLong(MIX_INIT_FLAC); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_MIX_InitFlags(MIX_INIT_MOD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyInt_FromLong(MIX_INIT_MOD); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_MIX_InitFlags(MIX_INIT_MODPLUG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyInt_FromLong(MIX_INIT_MODPLUG); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "pygame_sdl2/mixer.pyx":84
+  /* "pygame_sdl2/mixer.pyx":85
  * 
  *     for flag in (MIX_INIT_FLAC, MIX_INIT_MOD, MIX_INIT_MODPLUG,
  *                  MIX_INIT_MP3, MIX_INIT_OGG, MIX_INIT_FLUIDSYNTH):             # <<<<<<<<<<<<<<
  * 
  *         if Mix_Init(flag) != flag:
  */
-  __pyx_t_6 = __Pyx_PyInt_From_MIX_InitFlags(MIX_INIT_MP3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyInt_FromLong(MIX_INIT_MP3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyInt_From_MIX_InitFlags(MIX_INIT_OGG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyInt_FromLong(MIX_INIT_OGG); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = __Pyx_PyInt_From_MIX_InitFlags(MIX_INIT_FLUIDSYNTH); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyInt_FromLong(MIX_INIT_FLUIDSYNTH); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
 
-  /* "pygame_sdl2/mixer.pyx":83
+  /* "pygame_sdl2/mixer.pyx":84
  *         return
  * 
  *     for flag in (MIX_INIT_FLAC, MIX_INIT_MOD, MIX_INIT_MODPLUG,             # <<<<<<<<<<<<<<
  *                  MIX_INIT_MP3, MIX_INIT_OGG, MIX_INIT_FLUIDSYNTH):
  * 
  */
-  __pyx_t_9 = PyTuple_New(6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = PyTuple_New(6); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
-  __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_9, 4, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_8);
+  __Pyx_GIVEREF(__pyx_t_7);
   PyTuple_SET_ITEM(__pyx_t_9, 5, __pyx_t_8);
+  __Pyx_GIVEREF(__pyx_t_8);
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
   __pyx_t_3 = 0;
@@ -2046,42 +1871,36 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
   for (;;) {
     if (__pyx_t_10 >= 6) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_10); __Pyx_INCREF(__pyx_t_9); __pyx_t_10++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #else
-    __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_9 = PySequence_ITEM(__pyx_t_8, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #endif
-    __Pyx_XDECREF_SET(__pyx_v_flag, __pyx_t_9);
-    __pyx_t_9 = 0;
+    __pyx_t_11 = ((MIX_InitFlags)PyInt_AsLong(__pyx_t_9)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __pyx_v_flag = __pyx_t_11;
 
-    /* "pygame_sdl2/mixer.pyx":86
+    /* "pygame_sdl2/mixer.pyx":87
  *                  MIX_INIT_MP3, MIX_INIT_OGG, MIX_INIT_FLUIDSYNTH):
  * 
  *         if Mix_Init(flag) != flag:             # <<<<<<<<<<<<<<
  *             errors.append("{}\n".format(SDL_GetError()))
  * 
  */
-    __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_flag); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_9 = __Pyx_PyInt_From_int(Mix_Init(__pyx_t_11)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_7 = PyObject_RichCompare(__pyx_t_9, __pyx_v_flag, Py_NE); __Pyx_XGOTREF(__pyx_t_7); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_5 = ((Mix_Init(__pyx_v_flag) != __pyx_v_flag) != 0);
     if (__pyx_t_5) {
 
-      /* "pygame_sdl2/mixer.pyx":87
+      /* "pygame_sdl2/mixer.pyx":88
  * 
  *         if Mix_Init(flag) != flag:
  *             errors.append("{}\n".format(SDL_GetError()))             # <<<<<<<<<<<<<<
  * 
  *     if preinit_args:
  */
-      __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_errors); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s__4, __pyx_n_s_format); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_errors); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_9);
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s__4, __pyx_n_s_format); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_3 = __Pyx_PyBytes_FromString(SDL_GetError()); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyBytes_FromString(SDL_GetError()); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_2 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
@@ -2094,35 +1913,29 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
         }
       }
       if (!__pyx_t_2) {
-        __pyx_t_9 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __Pyx_GOTREF(__pyx_t_9);
+        __Pyx_GOTREF(__pyx_t_7);
       } else {
-        __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
-        __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
-        __Pyx_GIVEREF(__pyx_t_3);
+        PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = NULL;
         PyTuple_SET_ITEM(__pyx_t_1, 0+1, __pyx_t_3);
+        __Pyx_GIVEREF(__pyx_t_3);
         __pyx_t_3 = 0;
-        __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_9);
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       }
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_12 = __Pyx_PyObject_Append(__pyx_t_7, __pyx_t_9); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __pyx_t_12 = __Pyx_PyObject_Append(__pyx_t_9, __pyx_t_7); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-
-      /* "pygame_sdl2/mixer.pyx":86
- *                  MIX_INIT_MP3, MIX_INIT_OGG, MIX_INIT_FLUIDSYNTH):
- * 
- *         if Mix_Init(flag) != flag:             # <<<<<<<<<<<<<<
- *             errors.append("{}\n".format(SDL_GetError()))
- * 
- */
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      goto __pyx_L6;
     }
+    __pyx_L6:;
 
-    /* "pygame_sdl2/mixer.pyx":83
+    /* "pygame_sdl2/mixer.pyx":84
  *         return
  * 
  *     for flag in (MIX_INIT_FLAC, MIX_INIT_MOD, MIX_INIT_MODPLUG,             # <<<<<<<<<<<<<<
@@ -2132,17 +1945,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
   }
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":89
+  /* "pygame_sdl2/mixer.pyx":90
  *             errors.append("{}\n".format(SDL_GetError()))
  * 
  *     if preinit_args:             # <<<<<<<<<<<<<<
  *         frequency, size, channels, buffer = preinit_args
  * 
  */
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_11pygame_sdl2_5mixer_preinit_args); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_11pygame_sdl2_5mixer_preinit_args); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/mixer.pyx":90
+    /* "pygame_sdl2/mixer.pyx":91
  * 
  *     if preinit_args:
  *         frequency, size, channels, buffer = preinit_args             # <<<<<<<<<<<<<<
@@ -2159,30 +1972,30 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
       if (unlikely(size != 4)) {
         if (size > 4) __Pyx_RaiseTooManyValuesError(4);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
-        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
-        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
+        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
+        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 3); 
       } else {
         __pyx_t_8 = PyList_GET_ITEM(sequence, 0); 
-        __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
-        __pyx_t_7 = PyList_GET_ITEM(sequence, 2); 
+        __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
+        __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
         __pyx_t_6 = PyList_GET_ITEM(sequence, 3); 
       }
       __Pyx_INCREF(__pyx_t_8);
-      __Pyx_INCREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_t_7);
+      __Pyx_INCREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_t_6);
       #else
       {
         Py_ssize_t i;
-        PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_9,&__pyx_t_7,&__pyx_t_6};
+        PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_7,&__pyx_t_9,&__pyx_t_6};
         for (i=0; i < 4; i++) {
-          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(item);
           *(temps[i]) = item;
         }
@@ -2190,8 +2003,8 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
       #endif
     } else {
       Py_ssize_t index = -1;
-      PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_9,&__pyx_t_7,&__pyx_t_6};
-      __pyx_t_1 = PyObject_GetIter(__pyx_v_11pygame_sdl2_5mixer_preinit_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyObject** temps[4] = {&__pyx_t_8,&__pyx_t_7,&__pyx_t_9,&__pyx_t_6};
+      __pyx_t_1 = PyObject_GetIter(__pyx_v_11pygame_sdl2_5mixer_preinit_args); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_13 = Py_TYPE(__pyx_t_1)->tp_iternext;
       for (index=0; index < 4; index++) {
@@ -2199,7 +2012,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
         __Pyx_GOTREF(item);
         *(temps[index]) = item;
       }
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_1), 4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_1), 4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_13 = NULL;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L9_unpacking_done;
@@ -2207,114 +2020,100 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_13 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L9_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_frequency, __pyx_t_8);
     __pyx_t_8 = 0;
-    __Pyx_DECREF_SET(__pyx_v_size, __pyx_t_9);
-    __pyx_t_9 = 0;
-    __Pyx_DECREF_SET(__pyx_v_channels, __pyx_t_7);
+    __Pyx_DECREF_SET(__pyx_v_size, __pyx_t_7);
     __pyx_t_7 = 0;
+    __Pyx_DECREF_SET(__pyx_v_channels, __pyx_t_9);
+    __pyx_t_9 = 0;
     __Pyx_DECREF_SET(__pyx_v_buffer, __pyx_t_6);
     __pyx_t_6 = 0;
+    goto __pyx_L7;
+  }
+  __pyx_L7:;
 
-    /* "pygame_sdl2/mixer.pyx":89
- *             errors.append("{}\n".format(SDL_GetError()))
- * 
- *     if preinit_args:             # <<<<<<<<<<<<<<
- *         frequency, size, channels, buffer = preinit_args
- * 
- */
-  }
-
-  /* "pygame_sdl2/mixer.pyx":92
+  /* "pygame_sdl2/mixer.pyx":93
  *         frequency, size, channels, buffer = preinit_args
  * 
  *     if Mix_OpenAudio(frequency, size, channels, buffer) != 0:             # <<<<<<<<<<<<<<
  *         raise error()
  * 
  */
-  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_v_frequency); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_14 = __Pyx_PyInt_As_uint16_t(__pyx_v_size); if (unlikely((__pyx_t_14 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_15 = __Pyx_PyInt_As_int(__pyx_v_channels); if (unlikely((__pyx_t_15 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_16 = __Pyx_PyInt_As_int(__pyx_v_buffer); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = ((Mix_OpenAudio(__pyx_t_11, __pyx_t_14, __pyx_t_15, __pyx_t_16) != 0) != 0);
+  __pyx_t_14 = __Pyx_PyInt_As_int(__pyx_v_frequency); if (unlikely((__pyx_t_14 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_15 = __Pyx_PyInt_As_uint16_t(__pyx_v_size); if (unlikely((__pyx_t_15 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_16 = __Pyx_PyInt_As_int(__pyx_v_channels); if (unlikely((__pyx_t_16 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_17 = __Pyx_PyInt_As_int(__pyx_v_buffer); if (unlikely((__pyx_t_17 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((Mix_OpenAudio(__pyx_t_14, __pyx_t_15, __pyx_t_16, __pyx_t_17) != 0) != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/mixer.pyx":93
+    /* "pygame_sdl2/mixer.pyx":94
  * 
  *     if Mix_OpenAudio(frequency, size, channels, buffer) != 0:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     global output_spec
  */
-    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_7))) {
-      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
-      if (likely(__pyx_t_9)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
-        __Pyx_INCREF(__pyx_t_9);
+    __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_7 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_9))) {
+      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
+      if (likely(__pyx_t_7)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
+        __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_7, function);
+        __Pyx_DECREF_SET(__pyx_t_9, function);
       }
     }
-    if (__pyx_t_9) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    if (__pyx_t_7) {
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     } else {
-      __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-    /* "pygame_sdl2/mixer.pyx":92
- *         frequency, size, channels, buffer = preinit_args
- * 
- *     if Mix_OpenAudio(frequency, size, channels, buffer) != 0:             # <<<<<<<<<<<<<<
- *         raise error()
- * 
- */
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "pygame_sdl2/mixer.pyx":96
+  /* "pygame_sdl2/mixer.pyx":97
  * 
  *     global output_spec
  *     output_spec = get_init()             # <<<<<<<<<<<<<<
  * 
  *     Mix_ChannelFinished(channel_callback)
  */
-  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_init); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_9 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_7))) {
-    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_7);
-    if (likely(__pyx_t_9)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
-      __Pyx_INCREF(__pyx_t_9);
+  __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_init); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_9);
+  __pyx_t_7 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_9))) {
+    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_9);
+    if (likely(__pyx_t_7)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
+      __Pyx_INCREF(__pyx_t_7);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_7, function);
+      __Pyx_DECREF_SET(__pyx_t_9, function);
     }
   }
-  if (__pyx_t_9) {
-    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+  if (__pyx_t_7) {
+    __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   } else {
-    __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_9); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_6);
-  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_XGOTREF(__pyx_v_11pygame_sdl2_5mixer_output_spec);
   __Pyx_DECREF_SET(__pyx_v_11pygame_sdl2_5mixer_output_spec, __pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":98
+  /* "pygame_sdl2/mixer.pyx":99
  *     output_spec = get_init()
  * 
  *     Mix_ChannelFinished(channel_callback)             # <<<<<<<<<<<<<<
@@ -2323,7 +2122,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
  */
   Mix_ChannelFinished(__pyx_f_11pygame_sdl2_5mixer_channel_callback);
 
-  /* "pygame_sdl2/mixer.pyx":79
+  /* "pygame_sdl2/mixer.pyx":80
  * 
  * @pygame_sdl2.register_init
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):             # <<<<<<<<<<<<<<
@@ -2345,7 +2144,6 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
   __Pyx_AddTraceback("pygame_sdl2.mixer.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_flag);
   __Pyx_XDECREF(__pyx_v_frequency);
   __Pyx_XDECREF(__pyx_v_size);
   __Pyx_XDECREF(__pyx_v_channels);
@@ -2355,7 +2153,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_2init(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":100
+/* "pygame_sdl2/mixer.pyx":101
  *     Mix_ChannelFinished(channel_callback)
  * 
  * def pre_init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffersize=4096):             # <<<<<<<<<<<<<<
@@ -2419,7 +2217,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_5pre_init(PyObject *__pyx_self, P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pre_init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pre_init") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2438,7 +2236,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_5pre_init(PyObject *__pyx_self, P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pre_init", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("pre_init", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.pre_init", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2460,33 +2258,33 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_4pre_init(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pre_init", 0);
 
-  /* "pygame_sdl2/mixer.pyx":102
+  /* "pygame_sdl2/mixer.pyx":103
  * def pre_init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffersize=4096):
  *     global preinit_args
  *     preinit_args = (frequency, size, channels, buffersize)             # <<<<<<<<<<<<<<
  * 
  * @pygame_sdl2.register_quit
  */
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_frequency);
-  __Pyx_GIVEREF(__pyx_v_frequency);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_frequency);
+  __Pyx_GIVEREF(__pyx_v_frequency);
   __Pyx_INCREF(__pyx_v_size);
-  __Pyx_GIVEREF(__pyx_v_size);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_size);
+  __Pyx_GIVEREF(__pyx_v_size);
   __Pyx_INCREF(__pyx_v_channels);
-  __Pyx_GIVEREF(__pyx_v_channels);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_channels);
+  __Pyx_GIVEREF(__pyx_v_channels);
   __Pyx_INCREF(__pyx_v_buffersize);
-  __Pyx_GIVEREF(__pyx_v_buffersize);
   PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_buffersize);
+  __Pyx_GIVEREF(__pyx_v_buffersize);
   __Pyx_XGOTREF(__pyx_v_11pygame_sdl2_5mixer_preinit_args);
   __Pyx_DECREF_SET(__pyx_v_11pygame_sdl2_5mixer_preinit_args, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":100
+  /* "pygame_sdl2/mixer.pyx":101
  *     Mix_ChannelFinished(channel_callback)
  * 
  * def pre_init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffersize=4096):             # <<<<<<<<<<<<<<
@@ -2507,7 +2305,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_4pre_init(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":105
+/* "pygame_sdl2/mixer.pyx":106
  * 
  * @pygame_sdl2.register_quit
  * def quit(): # @ReservedAssignment             # <<<<<<<<<<<<<<
@@ -2534,7 +2332,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_6quit(CYTHON_UNUSED PyObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("quit", 0);
 
-  /* "pygame_sdl2/mixer.pyx":106
+  /* "pygame_sdl2/mixer.pyx":107
  * @pygame_sdl2.register_quit
  * def quit(): # @ReservedAssignment
  *     Mix_CloseAudio()             # <<<<<<<<<<<<<<
@@ -2543,7 +2341,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_6quit(CYTHON_UNUSED PyObject *__p
  */
   Mix_CloseAudio();
 
-  /* "pygame_sdl2/mixer.pyx":107
+  /* "pygame_sdl2/mixer.pyx":108
  * def quit(): # @ReservedAssignment
  *     Mix_CloseAudio()
  *     Mix_Quit()             # <<<<<<<<<<<<<<
@@ -2552,7 +2350,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_6quit(CYTHON_UNUSED PyObject *__p
  */
   Mix_Quit();
 
-  /* "pygame_sdl2/mixer.pyx":105
+  /* "pygame_sdl2/mixer.pyx":106
  * 
  * @pygame_sdl2.register_quit
  * def quit(): # @ReservedAssignment             # <<<<<<<<<<<<<<
@@ -2567,7 +2365,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_6quit(CYTHON_UNUSED PyObject *__p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":109
+/* "pygame_sdl2/mixer.pyx":110
  *     Mix_Quit()
  * 
  * def get_init():             # <<<<<<<<<<<<<<
@@ -2605,7 +2403,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_8get_init(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_init", 0);
 
-  /* "pygame_sdl2/mixer.pyx":114
+  /* "pygame_sdl2/mixer.pyx":115
  *     cdef int channels
  * 
  *     if Mix_QuerySpec(&frequency, &format, &channels) == 0:             # <<<<<<<<<<<<<<
@@ -2615,7 +2413,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_8get_init(CYTHON_UNUSED PyObject
   __pyx_t_1 = ((Mix_QuerySpec((&__pyx_v_frequency), (&__pyx_v_format), (&__pyx_v_channels)) == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/mixer.pyx":115
+    /* "pygame_sdl2/mixer.pyx":116
  * 
  *     if Mix_QuerySpec(&frequency, &format, &channels) == 0:
  *         return None             # <<<<<<<<<<<<<<
@@ -2626,39 +2424,31 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_8get_init(CYTHON_UNUSED PyObject
     __Pyx_INCREF(Py_None);
     __pyx_r = Py_None;
     goto __pyx_L0;
-
-    /* "pygame_sdl2/mixer.pyx":114
- *     cdef int channels
- * 
- *     if Mix_QuerySpec(&frequency, &format, &channels) == 0:             # <<<<<<<<<<<<<<
- *         return None
- *     else:
- */
   }
+  /*else*/ {
 
-  /* "pygame_sdl2/mixer.pyx":117
+    /* "pygame_sdl2/mixer.pyx":118
  *         return None
  *     else:
  *         return frequency, format, channels             # <<<<<<<<<<<<<<
  * 
  * def stop():
  */
-  /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_frequency); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_frequency); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_From_uint16_t(__pyx_v_format); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_uint16_t(__pyx_v_format); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_channels); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_channels); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 118; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
-    __Pyx_GIVEREF(__pyx_t_3);
+    __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
-    __Pyx_GIVEREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_2 = 0;
     __pyx_t_3 = 0;
     __pyx_t_4 = 0;
@@ -2667,7 +2457,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_8get_init(CYTHON_UNUSED PyObject
     goto __pyx_L0;
   }
 
-  /* "pygame_sdl2/mixer.pyx":109
+  /* "pygame_sdl2/mixer.pyx":110
  *     Mix_Quit()
  * 
  * def get_init():             # <<<<<<<<<<<<<<
@@ -2689,12 +2479,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_8get_init(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":119
+/* "pygame_sdl2/mixer.pyx":120
  *         return frequency, format, channels
  * 
  * def stop():             # <<<<<<<<<<<<<<
- *     Mix_HaltChannel(-1)
- * 
+ *     with nogil:
+ *         Mix_HaltChannel(-1)
  */
 
 /* Python wrapper */
@@ -2716,21 +2506,54 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_10stop(CYTHON_UNUSED PyObject *__
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("stop", 0);
 
-  /* "pygame_sdl2/mixer.pyx":120
+  /* "pygame_sdl2/mixer.pyx":121
+ * 
+ * def stop():
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_HaltChannel(-1)
  * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":122
  * def stop():
- *     Mix_HaltChannel(-1)             # <<<<<<<<<<<<<<
+ *     with nogil:
+ *         Mix_HaltChannel(-1)             # <<<<<<<<<<<<<<
  * 
  * def pause():
  */
-  Mix_HaltChannel(-1);
+        Mix_HaltChannel(-1);
+      }
+
+      /* "pygame_sdl2/mixer.pyx":121
+ * 
+ * def stop():
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_HaltChannel(-1)
+ * 
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
 
-  /* "pygame_sdl2/mixer.pyx":119
+  /* "pygame_sdl2/mixer.pyx":120
  *         return frequency, format, channels
  * 
  * def stop():             # <<<<<<<<<<<<<<
- *     Mix_HaltChannel(-1)
- * 
+ *     with nogil:
+ *         Mix_HaltChannel(-1)
  */
 
   /* function exit code */
@@ -2740,12 +2563,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_10stop(CYTHON_UNUSED PyObject *__
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":122
- *     Mix_HaltChannel(-1)
+/* "pygame_sdl2/mixer.pyx":124
+ *         Mix_HaltChannel(-1)
  * 
  * def pause():             # <<<<<<<<<<<<<<
- *     Mix_Pause(-1)
- * 
+ *     with nogil:
+ *         Mix_Pause(-1)
  */
 
 /* Python wrapper */
@@ -2767,21 +2590,54 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_12pause(CYTHON_UNUSED PyObject *_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("pause", 0);
 
-  /* "pygame_sdl2/mixer.pyx":123
+  /* "pygame_sdl2/mixer.pyx":125
  * 
  * def pause():
- *     Mix_Pause(-1)             # <<<<<<<<<<<<<<
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_Pause(-1)
+ * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":126
+ * def pause():
+ *     with nogil:
+ *         Mix_Pause(-1)             # <<<<<<<<<<<<<<
  * 
  * def unpause():
  */
-  Mix_Pause(-1);
+        Mix_Pause(-1);
+      }
 
-  /* "pygame_sdl2/mixer.pyx":122
- *     Mix_HaltChannel(-1)
+      /* "pygame_sdl2/mixer.pyx":125
  * 
- * def pause():             # <<<<<<<<<<<<<<
- *     Mix_Pause(-1)
+ * def pause():
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_Pause(-1)
+ * 
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
+
+  /* "pygame_sdl2/mixer.pyx":124
+ *         Mix_HaltChannel(-1)
  * 
+ * def pause():             # <<<<<<<<<<<<<<
+ *     with nogil:
+ *         Mix_Pause(-1)
  */
 
   /* function exit code */
@@ -2791,12 +2647,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_12pause(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":125
- *     Mix_Pause(-1)
+/* "pygame_sdl2/mixer.pyx":128
+ *         Mix_Pause(-1)
  * 
  * def unpause():             # <<<<<<<<<<<<<<
- *     Mix_Resume(-1)
- * 
+ *     with nogil:
+ *         Mix_Resume(-1)
  */
 
 /* Python wrapper */
@@ -2818,21 +2674,54 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_14unpause(CYTHON_UNUSED PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("unpause", 0);
 
-  /* "pygame_sdl2/mixer.pyx":126
+  /* "pygame_sdl2/mixer.pyx":129
+ * 
+ * def unpause():
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_Resume(-1)
  * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":130
  * def unpause():
- *     Mix_Resume(-1)             # <<<<<<<<<<<<<<
+ *     with nogil:
+ *         Mix_Resume(-1)             # <<<<<<<<<<<<<<
  * 
  * def fadeout(time):
  */
-  Mix_Resume(-1);
+        Mix_Resume(-1);
+      }
 
-  /* "pygame_sdl2/mixer.pyx":125
- *     Mix_Pause(-1)
+      /* "pygame_sdl2/mixer.pyx":129
  * 
- * def unpause():             # <<<<<<<<<<<<<<
- *     Mix_Resume(-1)
+ * def unpause():
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_Resume(-1)
+ * 
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
+
+  /* "pygame_sdl2/mixer.pyx":128
+ *         Mix_Pause(-1)
  * 
+ * def unpause():             # <<<<<<<<<<<<<<
+ *     with nogil:
+ *         Mix_Resume(-1)
  */
 
   /* function exit code */
@@ -2842,12 +2731,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_14unpause(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":128
- *     Mix_Resume(-1)
+/* "pygame_sdl2/mixer.pyx":132
+ *         Mix_Resume(-1)
  * 
  * def fadeout(time):             # <<<<<<<<<<<<<<
- *     Mix_FadeOutChannel(-1, time)
- * 
+ *     cdef int ms = time
+ *     with nogil:
  */
 
 /* Python wrapper */
@@ -2865,6 +2754,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_17fadeout(PyObject *__pyx_self, P
 }
 
 static PyObject *__pyx_pf_11pygame_sdl2_5mixer_16fadeout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_time) {
+  int __pyx_v_ms;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -2873,22 +2763,64 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_16fadeout(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("fadeout", 0);
 
-  /* "pygame_sdl2/mixer.pyx":129
+  /* "pygame_sdl2/mixer.pyx":133
  * 
  * def fadeout(time):
- *     Mix_FadeOutChannel(-1, time)             # <<<<<<<<<<<<<<
+ *     cdef int ms = time             # <<<<<<<<<<<<<<
+ *     with nogil:
+ *         Mix_FadeOutChannel(-1, ms)
+ */
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_time); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_ms = __pyx_t_1;
+
+  /* "pygame_sdl2/mixer.pyx":134
+ * def fadeout(time):
+ *     cdef int ms = time
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_FadeOutChannel(-1, ms)
+ * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":135
+ *     cdef int ms = time
+ *     with nogil:
+ *         Mix_FadeOutChannel(-1, ms)             # <<<<<<<<<<<<<<
  * 
  * def set_num_channels(count):
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_time); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 129; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Mix_FadeOutChannel(-1, __pyx_t_1);
+        Mix_FadeOutChannel(-1, __pyx_v_ms);
+      }
 
-  /* "pygame_sdl2/mixer.pyx":128
- *     Mix_Resume(-1)
+      /* "pygame_sdl2/mixer.pyx":134
+ * def fadeout(time):
+ *     cdef int ms = time
+ *     with nogil:             # <<<<<<<<<<<<<<
+ *         Mix_FadeOutChannel(-1, ms)
  * 
- * def fadeout(time):             # <<<<<<<<<<<<<<
- *     Mix_FadeOutChannel(-1, time)
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
+
+  /* "pygame_sdl2/mixer.pyx":132
+ *         Mix_Resume(-1)
  * 
+ * def fadeout(time):             # <<<<<<<<<<<<<<
+ *     cdef int ms = time
+ *     with nogil:
  */
 
   /* function exit code */
@@ -2903,8 +2835,8 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_16fadeout(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":131
- *     Mix_FadeOutChannel(-1, time)
+/* "pygame_sdl2/mixer.pyx":137
+ *         Mix_FadeOutChannel(-1, ms)
  * 
  * def set_num_channels(count):             # <<<<<<<<<<<<<<
  *     Mix_AllocateChannels(count)
@@ -2934,18 +2866,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_18set_num_channels(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_num_channels", 0);
 
-  /* "pygame_sdl2/mixer.pyx":132
+  /* "pygame_sdl2/mixer.pyx":138
  * 
  * def set_num_channels(count):
  *     Mix_AllocateChannels(count)             # <<<<<<<<<<<<<<
  * 
  * def get_num_channels():
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_count); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_count); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Mix_AllocateChannels(__pyx_t_1);
 
-  /* "pygame_sdl2/mixer.pyx":131
- *     Mix_FadeOutChannel(-1, time)
+  /* "pygame_sdl2/mixer.pyx":137
+ *         Mix_FadeOutChannel(-1, ms)
  * 
  * def set_num_channels(count):             # <<<<<<<<<<<<<<
  *     Mix_AllocateChannels(count)
@@ -2964,7 +2896,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_18set_num_channels(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":134
+/* "pygame_sdl2/mixer.pyx":140
  *     Mix_AllocateChannels(count)
  * 
  * def get_num_channels():             # <<<<<<<<<<<<<<
@@ -2995,7 +2927,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_20get_num_channels(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_num_channels", 0);
 
-  /* "pygame_sdl2/mixer.pyx":135
+  /* "pygame_sdl2/mixer.pyx":141
  * 
  * def get_num_channels():
  *     return Mix_AllocateChannels(-1)             # <<<<<<<<<<<<<<
@@ -3003,13 +2935,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_20get_num_channels(CYTHON_UNUSED
  * def set_reserved(count):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(Mix_AllocateChannels(-1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(Mix_AllocateChannels(-1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":134
+  /* "pygame_sdl2/mixer.pyx":140
  *     Mix_AllocateChannels(count)
  * 
  * def get_num_channels():             # <<<<<<<<<<<<<<
@@ -3028,7 +2960,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_20get_num_channels(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":137
+/* "pygame_sdl2/mixer.pyx":143
  *     return Mix_AllocateChannels(-1)
  * 
  * def set_reserved(count):             # <<<<<<<<<<<<<<
@@ -3059,17 +2991,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_22set_reserved(CYTHON_UNUSED PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_reserved", 0);
 
-  /* "pygame_sdl2/mixer.pyx":138
+  /* "pygame_sdl2/mixer.pyx":144
  * 
  * def set_reserved(count):
  *     Mix_ReserveChannels(count)             # <<<<<<<<<<<<<<
  * 
  * def find_channel(force=False):
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_count); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_count); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Mix_ReserveChannels(__pyx_t_1);
 
-  /* "pygame_sdl2/mixer.pyx":137
+  /* "pygame_sdl2/mixer.pyx":143
  *     return Mix_AllocateChannels(-1)
  * 
  * def set_reserved(count):             # <<<<<<<<<<<<<<
@@ -3089,7 +3021,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_22set_reserved(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":140
+/* "pygame_sdl2/mixer.pyx":146
  *     Mix_ReserveChannels(count)
  * 
  * def find_channel(force=False):             # <<<<<<<<<<<<<<
@@ -3129,7 +3061,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_25find_channel(PyObject *__pyx_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find_channel") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find_channel") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3142,7 +3074,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_25find_channel(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("find_channel", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("find_channel", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.find_channel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3164,14 +3096,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("find_channel", 0);
 
-  /* "pygame_sdl2/mixer.pyx":142
+  /* "pygame_sdl2/mixer.pyx":148
  * def find_channel(force=False):
  *     cdef int chan
  *     chan = Mix_GroupAvailable(-1)             # <<<<<<<<<<<<<<
@@ -3180,28 +3110,28 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
  */
   __pyx_v_chan = Mix_GroupAvailable(-1);
 
-  /* "pygame_sdl2/mixer.pyx":143
+  /* "pygame_sdl2/mixer.pyx":149
  *     cdef int chan
  *     chan = Mix_GroupAvailable(-1)
  *     if chan == -1:             # <<<<<<<<<<<<<<
  *         if not force:
  *             return None
  */
-  __pyx_t_1 = ((__pyx_v_chan == -1L) != 0);
+  __pyx_t_1 = ((__pyx_v_chan == -1) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/mixer.pyx":144
+    /* "pygame_sdl2/mixer.pyx":150
  *     chan = Mix_GroupAvailable(-1)
  *     if chan == -1:
  *         if not force:             # <<<<<<<<<<<<<<
  *             return None
  *         chan = Mix_GroupOldest(-1)
  */
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_force); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_force); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_2 = ((!__pyx_t_1) != 0);
     if (__pyx_t_2) {
 
-      /* "pygame_sdl2/mixer.pyx":145
+      /* "pygame_sdl2/mixer.pyx":151
  *     if chan == -1:
  *         if not force:
  *             return None             # <<<<<<<<<<<<<<
@@ -3212,17 +3142,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
       __Pyx_INCREF(Py_None);
       __pyx_r = Py_None;
       goto __pyx_L0;
-
-      /* "pygame_sdl2/mixer.pyx":144
- *     chan = Mix_GroupAvailable(-1)
- *     if chan == -1:
- *         if not force:             # <<<<<<<<<<<<<<
- *             return None
- *         chan = Mix_GroupOldest(-1)
- */
     }
 
-    /* "pygame_sdl2/mixer.pyx":146
+    /* "pygame_sdl2/mixer.pyx":152
  *         if not force:
  *             return None
  *         chan = Mix_GroupOldest(-1)             # <<<<<<<<<<<<<<
@@ -3231,24 +3153,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
  */
     __pyx_v_chan = Mix_GroupOldest(-1);
 
-    /* "pygame_sdl2/mixer.pyx":147
+    /* "pygame_sdl2/mixer.pyx":153
  *             return None
  *         chan = Mix_GroupOldest(-1)
  *         if chan == -1:             # <<<<<<<<<<<<<<
  *             raise error()
  *     return Channel(chan)
  */
-    __pyx_t_2 = ((__pyx_v_chan == -1L) != 0);
+    __pyx_t_2 = ((__pyx_v_chan == -1) != 0);
     if (__pyx_t_2) {
 
-      /* "pygame_sdl2/mixer.pyx":148
+      /* "pygame_sdl2/mixer.pyx":154
  *         chan = Mix_GroupOldest(-1)
  *         if chan == -1:
  *             raise error()             # <<<<<<<<<<<<<<
  *     return Channel(chan)
  * 
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -3261,36 +3183,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
         }
       }
       if (__pyx_t_5) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
-        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-      /* "pygame_sdl2/mixer.pyx":147
- *             return None
- *         chan = Mix_GroupOldest(-1)
- *         if chan == -1:             # <<<<<<<<<<<<<<
- *             raise error()
- *     return Channel(chan)
- */
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 154; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-
-    /* "pygame_sdl2/mixer.pyx":143
- *     cdef int chan
- *     chan = Mix_GroupAvailable(-1)
- *     if chan == -1:             # <<<<<<<<<<<<<<
- *         if not force:
- *             return None
- */
+    goto __pyx_L3;
   }
+  __pyx_L3:;
 
-  /* "pygame_sdl2/mixer.pyx":149
+  /* "pygame_sdl2/mixer.pyx":155
  *         if chan == -1:
  *             raise error()
  *     return Channel(chan)             # <<<<<<<<<<<<<<
@@ -3298,41 +3206,21 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
  * def get_busy():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_Channel); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_chan); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_chan); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
-    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
-    if (likely(__pyx_t_6)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-      __Pyx_INCREF(__pyx_t_6);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_4, function);
-    }
-  }
-  if (!__pyx_t_6) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __Pyx_GOTREF(__pyx_t_3);
-  } else {
-    __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_5);
-    __pyx_t_5 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-  }
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_11pygame_sdl2_5mixer_Channel)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":140
+  /* "pygame_sdl2/mixer.pyx":146
  *     Mix_ReserveChannels(count)
  * 
  * def find_channel(force=False):             # <<<<<<<<<<<<<<
@@ -3345,8 +3233,6 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("pygame_sdl2.mixer.find_channel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -3355,7 +3241,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_24find_channel(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":151
+/* "pygame_sdl2/mixer.pyx":157
  *     return Channel(chan)
  * 
  * def get_busy():             # <<<<<<<<<<<<<<
@@ -3386,7 +3272,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_26get_busy(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_busy", 0);
 
-  /* "pygame_sdl2/mixer.pyx":152
+  /* "pygame_sdl2/mixer.pyx":158
  * 
  * def get_busy():
  *     return Mix_GroupNewer(-1) != -1             # <<<<<<<<<<<<<<
@@ -3394,13 +3280,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_26get_busy(CYTHON_UNUSED PyObject
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBool_FromLong((Mix_GroupNewer(-1) != -1L)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBool_FromLong((Mix_GroupNewer(-1) != -1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":151
+  /* "pygame_sdl2/mixer.pyx":157
  *     return Channel(chan)
  * 
  * def get_busy():             # <<<<<<<<<<<<<<
@@ -3419,7 +3305,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_26get_busy(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":158
+/* "pygame_sdl2/mixer.pyx":164
  *     cdef Mix_Chunk *chunk
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -3448,7 +3334,7 @@ static int __pyx_pf_11pygame_sdl2_5mixer_5Sound___cinit__(struct __pyx_obj_11pyg
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "pygame_sdl2/mixer.pyx":159
+  /* "pygame_sdl2/mixer.pyx":165
  * 
  *     def __cinit__(self):
  *         self.chunk = NULL             # <<<<<<<<<<<<<<
@@ -3457,7 +3343,7 @@ static int __pyx_pf_11pygame_sdl2_5mixer_5Sound___cinit__(struct __pyx_obj_11pyg
  */
   __pyx_v_self->chunk = NULL;
 
-  /* "pygame_sdl2/mixer.pyx":158
+  /* "pygame_sdl2/mixer.pyx":164
  *     cdef Mix_Chunk *chunk
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -3471,7 +3357,7 @@ static int __pyx_pf_11pygame_sdl2_5mixer_5Sound___cinit__(struct __pyx_obj_11pyg
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":161
+/* "pygame_sdl2/mixer.pyx":167
  *         self.chunk = NULL
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -3495,7 +3381,7 @@ static void __pyx_pf_11pygame_sdl2_5mixer_5Sound_2__dealloc__(struct __pyx_obj_1
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "pygame_sdl2/mixer.pyx":162
+  /* "pygame_sdl2/mixer.pyx":168
  * 
  *     def __dealloc__(self):
  *         if self.chunk:             # <<<<<<<<<<<<<<
@@ -3505,7 +3391,7 @@ static void __pyx_pf_11pygame_sdl2_5mixer_5Sound_2__dealloc__(struct __pyx_obj_1
   __pyx_t_1 = (__pyx_v_self->chunk != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/mixer.pyx":163
+    /* "pygame_sdl2/mixer.pyx":169
  *     def __dealloc__(self):
  *         if self.chunk:
  *             Mix_FreeChunk(self.chunk)             # <<<<<<<<<<<<<<
@@ -3513,17 +3399,11 @@ static void __pyx_pf_11pygame_sdl2_5mixer_5Sound_2__dealloc__(struct __pyx_obj_1
  *     def __init__(self, fi):
  */
     Mix_FreeChunk(__pyx_v_self->chunk);
-
-    /* "pygame_sdl2/mixer.pyx":162
- * 
- *     def __dealloc__(self):
- *         if self.chunk:             # <<<<<<<<<<<<<<
- *             Mix_FreeChunk(self.chunk)
- * 
- */
+    goto __pyx_L3;
   }
+  __pyx_L3:;
 
-  /* "pygame_sdl2/mixer.pyx":161
+  /* "pygame_sdl2/mixer.pyx":167
  *         self.chunk = NULL
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -3535,7 +3415,7 @@ static void __pyx_pf_11pygame_sdl2_5mixer_5Sound_2__dealloc__(struct __pyx_obj_1
   __Pyx_RefNannyFinishContext();
 }
 
-/* "pygame_sdl2/mixer.pyx":165
+/* "pygame_sdl2/mixer.pyx":171
  *             Mix_FreeChunk(self.chunk)
  * 
  *     def __init__(self, fi):             # <<<<<<<<<<<<<<
@@ -3571,7 +3451,7 @@ static int __pyx_pw_11pygame_sdl2_5mixer_5Sound_5__init__(PyObject *__pyx_v_self
         else goto __pyx_L5_argtuple_error;
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -3582,7 +3462,7 @@ static int __pyx_pw_11pygame_sdl2_5mixer_5Sound_5__init__(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.Sound.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3608,17 +3488,17 @@ static int __pyx_pf_11pygame_sdl2_5mixer_5Sound_4__init__(struct __pyx_obj_11pyg
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "pygame_sdl2/mixer.pyx":166
+  /* "pygame_sdl2/mixer.pyx":172
  * 
  *     def __init__(self, fi):
  *         self.chunk = Mix_LoadWAV_RW(to_rwops(fi), 1)             # <<<<<<<<<<<<<<
  *         if self.chunk == NULL:
  *             raise error()
  */
-  __pyx_t_1 = __pyx_f_11pygame_sdl2_8rwobject_to_rwops(__pyx_v_fi, NULL); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11pygame_sdl2_8rwobject_to_rwops(__pyx_v_fi, NULL); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_self->chunk = Mix_LoadWAV_RW(__pyx_t_1, 1);
 
-  /* "pygame_sdl2/mixer.pyx":167
+  /* "pygame_sdl2/mixer.pyx":173
  *     def __init__(self, fi):
  *         self.chunk = Mix_LoadWAV_RW(to_rwops(fi), 1)
  *         if self.chunk == NULL:             # <<<<<<<<<<<<<<
@@ -3628,14 +3508,14 @@ static int __pyx_pf_11pygame_sdl2_5mixer_5Sound_4__init__(struct __pyx_obj_11pyg
   __pyx_t_2 = ((__pyx_v_self->chunk == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/mixer.pyx":168
+    /* "pygame_sdl2/mixer.pyx":174
  *         self.chunk = Mix_LoadWAV_RW(to_rwops(fi), 1)
  *         if self.chunk == NULL:
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *     def play(self, loops=0, maxtime=-1, fade_ms=0):
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -3648,27 +3528,19 @@ static int __pyx_pf_11pygame_sdl2_5mixer_5Sound_4__init__(struct __pyx_obj_11pyg
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-    /* "pygame_sdl2/mixer.pyx":167
- *     def __init__(self, fi):
- *         self.chunk = Mix_LoadWAV_RW(to_rwops(fi), 1)
- *         if self.chunk == NULL:             # <<<<<<<<<<<<<<
- *             raise error()
- * 
- */
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "pygame_sdl2/mixer.pyx":165
+  /* "pygame_sdl2/mixer.pyx":171
  *             Mix_FreeChunk(self.chunk)
  * 
  *     def __init__(self, fi):             # <<<<<<<<<<<<<<
@@ -3690,12 +3562,12 @@ static int __pyx_pf_11pygame_sdl2_5mixer_5Sound_4__init__(struct __pyx_obj_11pyg
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":170
+/* "pygame_sdl2/mixer.pyx":176
  *             raise error()
  * 
  *     def play(self, loops=0, maxtime=-1, fade_ms=0):             # <<<<<<<<<<<<<<
  *         cdef int cid
- *         if fade_ms != 0:
+ *         cdef int _loops = loops
  */
 
 /* Python wrapper */
@@ -3745,7 +3617,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_5Sound_7play(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "play") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "play") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3762,7 +3634,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_5Sound_7play(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("play", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("play", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.Sound.play", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3777,121 +3649,160 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_5Sound_7play(PyObject *__pyx_v_se
 
 static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_6play(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_loops, PyObject *__pyx_v_maxtime, PyObject *__pyx_v_fade_ms) {
   int __pyx_v_cid;
+  int __pyx_v__loops;
+  int __pyx_v__maxtime;
+  int __pyx_v__fade_ms;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_t_5;
-  PyObject *__pyx_t_6 = NULL;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("play", 0);
 
-  /* "pygame_sdl2/mixer.pyx":172
+  /* "pygame_sdl2/mixer.pyx":178
  *     def play(self, loops=0, maxtime=-1, fade_ms=0):
  *         cdef int cid
- *         if fade_ms != 0:             # <<<<<<<<<<<<<<
- *             cid = Mix_FadeInChannelTimed(-1, self.chunk, loops, fade_ms, maxtime)
- *         else:
+ *         cdef int _loops = loops             # <<<<<<<<<<<<<<
+ *         cdef int _maxtime = maxtime
+ *         cdef int _fade_ms = fade_ms
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_fade_ms, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (__pyx_t_2) {
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_loops); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v__loops = __pyx_t_1;
 
-    /* "pygame_sdl2/mixer.pyx":173
+  /* "pygame_sdl2/mixer.pyx":179
  *         cdef int cid
- *         if fade_ms != 0:
- *             cid = Mix_FadeInChannelTimed(-1, self.chunk, loops, fade_ms, maxtime)             # <<<<<<<<<<<<<<
- *         else:
- *             cid = Mix_PlayChannelTimed(-1, self.chunk, loops, maxtime)
+ *         cdef int _loops = loops
+ *         cdef int _maxtime = maxtime             # <<<<<<<<<<<<<<
+ *         cdef int _fade_ms = fade_ms
+ * 
  */
-    __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_loops); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_fade_ms); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_maxtime); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_cid = Mix_FadeInChannelTimed(-1, __pyx_v_self->chunk, __pyx_t_3, __pyx_t_4, __pyx_t_5);
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_maxtime); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v__maxtime = __pyx_t_1;
 
-    /* "pygame_sdl2/mixer.pyx":172
- *     def play(self, loops=0, maxtime=-1, fade_ms=0):
- *         cdef int cid
- *         if fade_ms != 0:             # <<<<<<<<<<<<<<
- *             cid = Mix_FadeInChannelTimed(-1, self.chunk, loops, fade_ms, maxtime)
- *         else:
+  /* "pygame_sdl2/mixer.pyx":180
+ *         cdef int _loops = loops
+ *         cdef int _maxtime = maxtime
+ *         cdef int _fade_ms = fade_ms             # <<<<<<<<<<<<<<
+ * 
+ *         with nogil:
  */
-    goto __pyx_L3;
-  }
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_fade_ms); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v__fade_ms = __pyx_t_1;
 
-  /* "pygame_sdl2/mixer.pyx":175
- *             cid = Mix_FadeInChannelTimed(-1, self.chunk, loops, fade_ms, maxtime)
- *         else:
- *             cid = Mix_PlayChannelTimed(-1, self.chunk, loops, maxtime)             # <<<<<<<<<<<<<<
+  /* "pygame_sdl2/mixer.pyx":182
+ *         cdef int _fade_ms = fade_ms
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             if _fade_ms != 0:
+ *                 cid = Mix_FadeInChannelTimed(-1, self.chunk, _loops, _fade_ms, _maxtime)
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":183
+ * 
+ *         with nogil:
+ *             if _fade_ms != 0:             # <<<<<<<<<<<<<<
+ *                 cid = Mix_FadeInChannelTimed(-1, self.chunk, _loops, _fade_ms, _maxtime)
+ *             else:
+ */
+        __pyx_t_2 = ((__pyx_v__fade_ms != 0) != 0);
+        if (__pyx_t_2) {
+
+          /* "pygame_sdl2/mixer.pyx":184
+ *         with nogil:
+ *             if _fade_ms != 0:
+ *                 cid = Mix_FadeInChannelTimed(-1, self.chunk, _loops, _fade_ms, _maxtime)             # <<<<<<<<<<<<<<
+ *             else:
+ *                 cid = Mix_PlayChannelTimed(-1, self.chunk, _loops, _maxtime)
+ */
+          __pyx_v_cid = Mix_FadeInChannelTimed(-1, __pyx_v_self->chunk, __pyx_v__loops, __pyx_v__fade_ms, __pyx_v__maxtime);
+          goto __pyx_L6;
+        }
+        /*else*/ {
+
+          /* "pygame_sdl2/mixer.pyx":186
+ *                 cid = Mix_FadeInChannelTimed(-1, self.chunk, _loops, _fade_ms, _maxtime)
+ *             else:
+ *                 cid = Mix_PlayChannelTimed(-1, self.chunk, _loops, _maxtime)             # <<<<<<<<<<<<<<
  * 
  *         if cid == -1:
  */
-  /*else*/ {
-    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_loops); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_maxtime); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_cid = Mix_PlayChannelTimed(-1, __pyx_v_self->chunk, __pyx_t_5, __pyx_t_4);
+          __pyx_v_cid = Mix_PlayChannelTimed(-1, __pyx_v_self->chunk, __pyx_v__loops, __pyx_v__maxtime);
+        }
+        __pyx_L6:;
+      }
+
+      /* "pygame_sdl2/mixer.pyx":182
+ *         cdef int _fade_ms = fade_ms
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             if _fade_ms != 0:
+ *                 cid = Mix_FadeInChannelTimed(-1, self.chunk, _loops, _fade_ms, _maxtime)
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
   }
-  __pyx_L3:;
 
-  /* "pygame_sdl2/mixer.pyx":177
- *             cid = Mix_PlayChannelTimed(-1, self.chunk, loops, maxtime)
+  /* "pygame_sdl2/mixer.pyx":188
+ *                 cid = Mix_PlayChannelTimed(-1, self.chunk, _loops, _maxtime)
  * 
  *         if cid == -1:             # <<<<<<<<<<<<<<
  *             raise error()
  *         return Channel(cid)
  */
-  __pyx_t_2 = ((__pyx_v_cid == -1L) != 0);
+  __pyx_t_2 = ((__pyx_v_cid == -1) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/mixer.pyx":178
+    /* "pygame_sdl2/mixer.pyx":189
  * 
  *         if cid == -1:
  *             raise error()             # <<<<<<<<<<<<<<
  *         return Channel(cid)
  * 
  */
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_6))) {
-      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
-      if (likely(__pyx_t_7)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
-        __Pyx_INCREF(__pyx_t_7);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_6, function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
       }
     }
-    if (__pyx_t_7) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    if (__pyx_t_5) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-    /* "pygame_sdl2/mixer.pyx":177
- *             cid = Mix_PlayChannelTimed(-1, self.chunk, loops, maxtime)
- * 
- *         if cid == -1:             # <<<<<<<<<<<<<<
- *             raise error()
- *         return Channel(cid)
- */
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "pygame_sdl2/mixer.pyx":179
+  /* "pygame_sdl2/mixer.pyx":190
  *         if cid == -1:
  *             raise error()
  *         return Channel(cid)             # <<<<<<<<<<<<<<
@@ -3899,55 +3810,33 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_6play(struct __pyx_obj_11p
  *     def stop(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_Channel); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_cid); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_8 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_6))) {
-    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6);
-    if (likely(__pyx_t_8)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
-      __Pyx_INCREF(__pyx_t_8);
-      __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_6, function);
-    }
-  }
-  if (!__pyx_t_8) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __Pyx_GOTREF(__pyx_t_1);
-  } else {
-    __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_9);
-    __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
-    __Pyx_GIVEREF(__pyx_t_7);
-    PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_t_7);
-    __pyx_t_7 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-  }
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_r = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_cid); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_11pygame_sdl2_5mixer_Channel)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":170
+  /* "pygame_sdl2/mixer.pyx":176
  *             raise error()
  * 
  *     def play(self, loops=0, maxtime=-1, fade_ms=0):             # <<<<<<<<<<<<<<
  *         cdef int cid
- *         if fade_ms != 0:
+ *         cdef int _loops = loops
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_AddTraceback("pygame_sdl2.mixer.Sound.play", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -3956,7 +3845,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_6play(struct __pyx_obj_11p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":181
+/* "pygame_sdl2/mixer.pyx":192
  *         return Channel(cid)
  * 
  *     def stop(self):             # <<<<<<<<<<<<<<
@@ -3984,7 +3873,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_8stop(struct __pyx_obj_11p
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("stop", 0);
 
-  /* "pygame_sdl2/mixer.pyx":182
+  /* "pygame_sdl2/mixer.pyx":193
  * 
  *     def stop(self):
  *         cdef int i = 0             # <<<<<<<<<<<<<<
@@ -3993,48 +3882,75 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_8stop(struct __pyx_obj_11p
  */
   __pyx_v_i = 0;
 
-  /* "pygame_sdl2/mixer.pyx":183
+  /* "pygame_sdl2/mixer.pyx":194
  *     def stop(self):
  *         cdef int i = 0
  *         while i < Mix_AllocateChannels(-1):             # <<<<<<<<<<<<<<
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_HaltChannel(i)
+ *                 with nogil:
  */
   while (1) {
     __pyx_t_1 = ((__pyx_v_i < Mix_AllocateChannels(-1)) != 0);
     if (!__pyx_t_1) break;
 
-    /* "pygame_sdl2/mixer.pyx":184
+    /* "pygame_sdl2/mixer.pyx":195
  *         cdef int i = 0
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_HaltChannel(i)
- *             i += 1
+ *                 with nogil:
+ *                     Mix_HaltChannel(i)
  */
     __pyx_t_1 = ((Mix_GetChunk(__pyx_v_i) == __pyx_v_self->chunk) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/mixer.pyx":185
+      /* "pygame_sdl2/mixer.pyx":196
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_HaltChannel(i)             # <<<<<<<<<<<<<<
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_HaltChannel(i)
+ *             i += 1
+ */
+      {
+          #ifdef WITH_THREAD
+          PyThreadState *_save;
+          Py_UNBLOCK_THREADS
+          #endif
+          /*try:*/ {
+
+            /* "pygame_sdl2/mixer.pyx":197
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:
+ *                     Mix_HaltChannel(i)             # <<<<<<<<<<<<<<
  *             i += 1
  * 
  */
-      Mix_HaltChannel(__pyx_v_i);
+            Mix_HaltChannel(__pyx_v_i);
+          }
 
-      /* "pygame_sdl2/mixer.pyx":184
- *         cdef int i = 0
+          /* "pygame_sdl2/mixer.pyx":196
  *         while i < Mix_AllocateChannels(-1):
- *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_HaltChannel(i)
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_HaltChannel(i)
  *             i += 1
  */
+          /*finally:*/ {
+            /*normal exit:*/{
+              #ifdef WITH_THREAD
+              Py_BLOCK_THREADS
+              #endif
+              goto __pyx_L10;
+            }
+            __pyx_L10:;
+          }
+      }
+      goto __pyx_L5;
     }
+    __pyx_L5:;
 
-    /* "pygame_sdl2/mixer.pyx":186
- *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_HaltChannel(i)
+    /* "pygame_sdl2/mixer.pyx":198
+ *                 with nogil:
+ *                     Mix_HaltChannel(i)
  *             i += 1             # <<<<<<<<<<<<<<
  * 
  *     def pause(self):
@@ -4042,7 +3958,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_8stop(struct __pyx_obj_11p
     __pyx_v_i = (__pyx_v_i + 1);
   }
 
-  /* "pygame_sdl2/mixer.pyx":181
+  /* "pygame_sdl2/mixer.pyx":192
  *         return Channel(cid)
  * 
  *     def stop(self):             # <<<<<<<<<<<<<<
@@ -4057,7 +3973,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_8stop(struct __pyx_obj_11p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":188
+/* "pygame_sdl2/mixer.pyx":200
  *             i += 1
  * 
  *     def pause(self):             # <<<<<<<<<<<<<<
@@ -4085,7 +4001,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_10pause(struct __pyx_obj_1
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("pause", 0);
 
-  /* "pygame_sdl2/mixer.pyx":189
+  /* "pygame_sdl2/mixer.pyx":201
  * 
  *     def pause(self):
  *         cdef int i = 0             # <<<<<<<<<<<<<<
@@ -4094,48 +4010,75 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_10pause(struct __pyx_obj_1
  */
   __pyx_v_i = 0;
 
-  /* "pygame_sdl2/mixer.pyx":190
+  /* "pygame_sdl2/mixer.pyx":202
  *     def pause(self):
  *         cdef int i = 0
  *         while i < Mix_AllocateChannels(-1):             # <<<<<<<<<<<<<<
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_Pause(i)
+ *                 with nogil:
  */
   while (1) {
     __pyx_t_1 = ((__pyx_v_i < Mix_AllocateChannels(-1)) != 0);
     if (!__pyx_t_1) break;
 
-    /* "pygame_sdl2/mixer.pyx":191
+    /* "pygame_sdl2/mixer.pyx":203
  *         cdef int i = 0
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_Pause(i)
- *             i += 1
+ *                 with nogil:
+ *                     Mix_Pause(i)
  */
     __pyx_t_1 = ((Mix_GetChunk(__pyx_v_i) == __pyx_v_self->chunk) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/mixer.pyx":192
+      /* "pygame_sdl2/mixer.pyx":204
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_Pause(i)             # <<<<<<<<<<<<<<
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_Pause(i)
+ *             i += 1
+ */
+      {
+          #ifdef WITH_THREAD
+          PyThreadState *_save;
+          Py_UNBLOCK_THREADS
+          #endif
+          /*try:*/ {
+
+            /* "pygame_sdl2/mixer.pyx":205
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:
+ *                     Mix_Pause(i)             # <<<<<<<<<<<<<<
  *             i += 1
  * 
  */
-      Mix_Pause(__pyx_v_i);
+            Mix_Pause(__pyx_v_i);
+          }
 
-      /* "pygame_sdl2/mixer.pyx":191
- *         cdef int i = 0
+          /* "pygame_sdl2/mixer.pyx":204
  *         while i < Mix_AllocateChannels(-1):
- *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_Pause(i)
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_Pause(i)
  *             i += 1
  */
+          /*finally:*/ {
+            /*normal exit:*/{
+              #ifdef WITH_THREAD
+              Py_BLOCK_THREADS
+              #endif
+              goto __pyx_L10;
+            }
+            __pyx_L10:;
+          }
+      }
+      goto __pyx_L5;
     }
+    __pyx_L5:;
 
-    /* "pygame_sdl2/mixer.pyx":193
- *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_Pause(i)
+    /* "pygame_sdl2/mixer.pyx":206
+ *                 with nogil:
+ *                     Mix_Pause(i)
  *             i += 1             # <<<<<<<<<<<<<<
  * 
  *     def unpause(self):
@@ -4143,7 +4086,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_10pause(struct __pyx_obj_1
     __pyx_v_i = (__pyx_v_i + 1);
   }
 
-  /* "pygame_sdl2/mixer.pyx":188
+  /* "pygame_sdl2/mixer.pyx":200
  *             i += 1
  * 
  *     def pause(self):             # <<<<<<<<<<<<<<
@@ -4158,7 +4101,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_10pause(struct __pyx_obj_1
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":195
+/* "pygame_sdl2/mixer.pyx":208
  *             i += 1
  * 
  *     def unpause(self):             # <<<<<<<<<<<<<<
@@ -4186,7 +4129,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_12unpause(struct __pyx_obj
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("unpause", 0);
 
-  /* "pygame_sdl2/mixer.pyx":196
+  /* "pygame_sdl2/mixer.pyx":209
  * 
  *     def unpause(self):
  *         cdef int i = 0             # <<<<<<<<<<<<<<
@@ -4195,48 +4138,75 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_12unpause(struct __pyx_obj
  */
   __pyx_v_i = 0;
 
-  /* "pygame_sdl2/mixer.pyx":197
+  /* "pygame_sdl2/mixer.pyx":210
  *     def unpause(self):
  *         cdef int i = 0
  *         while i < Mix_AllocateChannels(-1):             # <<<<<<<<<<<<<<
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_Resume(i)
+ *                 with nogil:
  */
   while (1) {
     __pyx_t_1 = ((__pyx_v_i < Mix_AllocateChannels(-1)) != 0);
     if (!__pyx_t_1) break;
 
-    /* "pygame_sdl2/mixer.pyx":198
+    /* "pygame_sdl2/mixer.pyx":211
  *         cdef int i = 0
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_Resume(i)
- *             i += 1
+ *                 with nogil:
+ *                     Mix_Resume(i)
  */
     __pyx_t_1 = ((Mix_GetChunk(__pyx_v_i) == __pyx_v_self->chunk) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/mixer.pyx":199
+      /* "pygame_sdl2/mixer.pyx":212
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_Resume(i)             # <<<<<<<<<<<<<<
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_Resume(i)
+ *             i += 1
+ */
+      {
+          #ifdef WITH_THREAD
+          PyThreadState *_save;
+          Py_UNBLOCK_THREADS
+          #endif
+          /*try:*/ {
+
+            /* "pygame_sdl2/mixer.pyx":213
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:
+ *                     Mix_Resume(i)             # <<<<<<<<<<<<<<
  *             i += 1
  * 
  */
-      Mix_Resume(__pyx_v_i);
+            Mix_Resume(__pyx_v_i);
+          }
 
-      /* "pygame_sdl2/mixer.pyx":198
- *         cdef int i = 0
+          /* "pygame_sdl2/mixer.pyx":212
  *         while i < Mix_AllocateChannels(-1):
- *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_Resume(i)
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_Resume(i)
  *             i += 1
  */
+          /*finally:*/ {
+            /*normal exit:*/{
+              #ifdef WITH_THREAD
+              Py_BLOCK_THREADS
+              #endif
+              goto __pyx_L10;
+            }
+            __pyx_L10:;
+          }
+      }
+      goto __pyx_L5;
     }
+    __pyx_L5:;
 
-    /* "pygame_sdl2/mixer.pyx":200
- *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_Resume(i)
+    /* "pygame_sdl2/mixer.pyx":214
+ *                 with nogil:
+ *                     Mix_Resume(i)
  *             i += 1             # <<<<<<<<<<<<<<
  * 
  *     def fadeout(self, time):
@@ -4244,7 +4214,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_12unpause(struct __pyx_obj
     __pyx_v_i = (__pyx_v_i + 1);
   }
 
-  /* "pygame_sdl2/mixer.pyx":195
+  /* "pygame_sdl2/mixer.pyx":208
  *             i += 1
  * 
  *     def unpause(self):             # <<<<<<<<<<<<<<
@@ -4259,12 +4229,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_12unpause(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":202
+/* "pygame_sdl2/mixer.pyx":216
  *             i += 1
  * 
  *     def fadeout(self, time):             # <<<<<<<<<<<<<<
  *         cdef int i = 0
- *         while i < Mix_AllocateChannels(-1):
+ *         cdef int ms = time
  */
 
 /* Python wrapper */
@@ -4282,6 +4252,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_5Sound_15fadeout(PyObject *__pyx_
 
 static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_14fadeout(struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_self, PyObject *__pyx_v_time) {
   int __pyx_v_i;
+  int __pyx_v_ms;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -4291,58 +4262,94 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_14fadeout(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("fadeout", 0);
 
-  /* "pygame_sdl2/mixer.pyx":203
+  /* "pygame_sdl2/mixer.pyx":217
  * 
  *     def fadeout(self, time):
  *         cdef int i = 0             # <<<<<<<<<<<<<<
+ *         cdef int ms = time
  *         while i < Mix_AllocateChannels(-1):
- *             if Mix_GetChunk(i) == self.chunk:
  */
   __pyx_v_i = 0;
 
-  /* "pygame_sdl2/mixer.pyx":204
+  /* "pygame_sdl2/mixer.pyx":218
  *     def fadeout(self, time):
  *         cdef int i = 0
+ *         cdef int ms = time             # <<<<<<<<<<<<<<
+ *         while i < Mix_AllocateChannels(-1):
+ *             if Mix_GetChunk(i) == self.chunk:
+ */
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_time); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_ms = __pyx_t_1;
+
+  /* "pygame_sdl2/mixer.pyx":219
+ *         cdef int i = 0
+ *         cdef int ms = time
  *         while i < Mix_AllocateChannels(-1):             # <<<<<<<<<<<<<<
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_FadeOutChannel(i, time)
+ *                 with nogil:
  */
   while (1) {
-    __pyx_t_1 = ((__pyx_v_i < Mix_AllocateChannels(-1)) != 0);
-    if (!__pyx_t_1) break;
+    __pyx_t_2 = ((__pyx_v_i < Mix_AllocateChannels(-1)) != 0);
+    if (!__pyx_t_2) break;
 
-    /* "pygame_sdl2/mixer.pyx":205
- *         cdef int i = 0
+    /* "pygame_sdl2/mixer.pyx":220
+ *         cdef int ms = time
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_FadeOutChannel(i, time)
- *             i += 1
+ *                 with nogil:
+ *                     Mix_FadeOutChannel(i, ms)
  */
-    __pyx_t_1 = ((Mix_GetChunk(__pyx_v_i) == __pyx_v_self->chunk) != 0);
-    if (__pyx_t_1) {
+    __pyx_t_2 = ((Mix_GetChunk(__pyx_v_i) == __pyx_v_self->chunk) != 0);
+    if (__pyx_t_2) {
 
-      /* "pygame_sdl2/mixer.pyx":206
+      /* "pygame_sdl2/mixer.pyx":221
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_FadeOutChannel(i, time)             # <<<<<<<<<<<<<<
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_FadeOutChannel(i, ms)
+ *             i += 1
+ */
+      {
+          #ifdef WITH_THREAD
+          PyThreadState *_save;
+          Py_UNBLOCK_THREADS
+          #endif
+          /*try:*/ {
+
+            /* "pygame_sdl2/mixer.pyx":222
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:
+ *                     Mix_FadeOutChannel(i, ms)             # <<<<<<<<<<<<<<
  *             i += 1
  * 
  */
-      __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_time); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      Mix_FadeOutChannel(__pyx_v_i, __pyx_t_2);
+            Mix_FadeOutChannel(__pyx_v_i, __pyx_v_ms);
+          }
 
-      /* "pygame_sdl2/mixer.pyx":205
- *         cdef int i = 0
+          /* "pygame_sdl2/mixer.pyx":221
  *         while i < Mix_AllocateChannels(-1):
- *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 Mix_FadeOutChannel(i, time)
+ *             if Mix_GetChunk(i) == self.chunk:
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     Mix_FadeOutChannel(i, ms)
  *             i += 1
  */
+          /*finally:*/ {
+            /*normal exit:*/{
+              #ifdef WITH_THREAD
+              Py_BLOCK_THREADS
+              #endif
+              goto __pyx_L10;
+            }
+            __pyx_L10:;
+          }
+      }
+      goto __pyx_L5;
     }
+    __pyx_L5:;
 
-    /* "pygame_sdl2/mixer.pyx":207
- *             if Mix_GetChunk(i) == self.chunk:
- *                 Mix_FadeOutChannel(i, time)
+    /* "pygame_sdl2/mixer.pyx":223
+ *                 with nogil:
+ *                     Mix_FadeOutChannel(i, ms)
  *             i += 1             # <<<<<<<<<<<<<<
  * 
  *     def set_volume(self, value):
@@ -4350,12 +4357,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_14fadeout(struct __pyx_obj
     __pyx_v_i = (__pyx_v_i + 1);
   }
 
-  /* "pygame_sdl2/mixer.pyx":202
+  /* "pygame_sdl2/mixer.pyx":216
  *             i += 1
  * 
  *     def fadeout(self, time):             # <<<<<<<<<<<<<<
  *         cdef int i = 0
- *         while i < Mix_AllocateChannels(-1):
+ *         cdef int ms = time
  */
 
   /* function exit code */
@@ -4370,7 +4377,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_14fadeout(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":209
+/* "pygame_sdl2/mixer.pyx":225
  *             i += 1
  * 
  *     def set_volume(self, value):             # <<<<<<<<<<<<<<
@@ -4402,23 +4409,23 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_16set_volume(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_volume", 0);
 
-  /* "pygame_sdl2/mixer.pyx":210
+  /* "pygame_sdl2/mixer.pyx":226
  * 
  *     def set_volume(self, value):
  *         Mix_VolumeChunk(self.chunk, MIX_MAX_VOLUME * value)             # <<<<<<<<<<<<<<
  * 
  *     def get_volume(self):
  */
-  __pyx_t_1 = __Pyx_PyInt_From_int(MIX_MAX_VOLUME); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(MIX_MAX_VOLUME); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   Mix_VolumeChunk(__pyx_v_self->chunk, __pyx_t_3);
 
-  /* "pygame_sdl2/mixer.pyx":209
+  /* "pygame_sdl2/mixer.pyx":225
  *             i += 1
  * 
  *     def set_volume(self, value):             # <<<<<<<<<<<<<<
@@ -4440,7 +4447,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_16set_volume(struct __pyx_
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":212
+/* "pygame_sdl2/mixer.pyx":228
  *         Mix_VolumeChunk(self.chunk, MIX_MAX_VOLUME * value)
  * 
  *     def get_volume(self):             # <<<<<<<<<<<<<<
@@ -4470,7 +4477,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_18get_volume(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_volume", 0);
 
-  /* "pygame_sdl2/mixer.pyx":213
+  /* "pygame_sdl2/mixer.pyx":229
  * 
  *     def get_volume(self):
  *         return Mix_VolumeChunk(self.chunk, -1)             # <<<<<<<<<<<<<<
@@ -4478,13 +4485,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_18get_volume(struct __pyx_
  *     def get_num_channels(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(Mix_VolumeChunk(__pyx_v_self->chunk, -1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(Mix_VolumeChunk(__pyx_v_self->chunk, -1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":212
+  /* "pygame_sdl2/mixer.pyx":228
  *         Mix_VolumeChunk(self.chunk, MIX_MAX_VOLUME * value)
  * 
  *     def get_volume(self):             # <<<<<<<<<<<<<<
@@ -4503,7 +4510,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_18get_volume(struct __pyx_
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":215
+/* "pygame_sdl2/mixer.pyx":231
  *         return Mix_VolumeChunk(self.chunk, -1)
  * 
  *     def get_num_channels(self):             # <<<<<<<<<<<<<<
@@ -4536,7 +4543,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_num_channels", 0);
 
-  /* "pygame_sdl2/mixer.pyx":216
+  /* "pygame_sdl2/mixer.pyx":232
  * 
  *     def get_num_channels(self):
  *         cdef int i = 0             # <<<<<<<<<<<<<<
@@ -4545,7 +4552,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
  */
   __pyx_v_i = 0;
 
-  /* "pygame_sdl2/mixer.pyx":217
+  /* "pygame_sdl2/mixer.pyx":233
  *     def get_num_channels(self):
  *         cdef int i = 0
  *         cdef int n = 0             # <<<<<<<<<<<<<<
@@ -4554,7 +4561,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
  */
   __pyx_v_n = 0;
 
-  /* "pygame_sdl2/mixer.pyx":218
+  /* "pygame_sdl2/mixer.pyx":234
  *         cdef int i = 0
  *         cdef int n = 0
  *         while i < Mix_AllocateChannels(-1):             # <<<<<<<<<<<<<<
@@ -4565,7 +4572,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
     __pyx_t_1 = ((__pyx_v_i < Mix_AllocateChannels(-1)) != 0);
     if (!__pyx_t_1) break;
 
-    /* "pygame_sdl2/mixer.pyx":219
+    /* "pygame_sdl2/mixer.pyx":235
  *         cdef int n = 0
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
@@ -4575,7 +4582,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
     __pyx_t_1 = ((Mix_GetChunk(__pyx_v_i) == __pyx_v_self->chunk) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/mixer.pyx":220
+      /* "pygame_sdl2/mixer.pyx":236
  *         while i < Mix_AllocateChannels(-1):
  *             if Mix_GetChunk(i) == self.chunk:
  *                 n += 1             # <<<<<<<<<<<<<<
@@ -4583,17 +4590,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
  *         return n
  */
       __pyx_v_n = (__pyx_v_n + 1);
-
-      /* "pygame_sdl2/mixer.pyx":219
- *         cdef int n = 0
- *         while i < Mix_AllocateChannels(-1):
- *             if Mix_GetChunk(i) == self.chunk:             # <<<<<<<<<<<<<<
- *                 n += 1
- *             i += 1
- */
+      goto __pyx_L5;
     }
+    __pyx_L5:;
 
-    /* "pygame_sdl2/mixer.pyx":221
+    /* "pygame_sdl2/mixer.pyx":237
  *             if Mix_GetChunk(i) == self.chunk:
  *                 n += 1
  *             i += 1             # <<<<<<<<<<<<<<
@@ -4603,7 +4604,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
     __pyx_v_i = (__pyx_v_i + 1);
   }
 
-  /* "pygame_sdl2/mixer.pyx":222
+  /* "pygame_sdl2/mixer.pyx":238
  *                 n += 1
  *             i += 1
  *         return n             # <<<<<<<<<<<<<<
@@ -4611,13 +4612,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
  *     def get_length(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_n); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":215
+  /* "pygame_sdl2/mixer.pyx":231
  *         return Mix_VolumeChunk(self.chunk, -1)
  * 
  *     def get_num_channels(self):             # <<<<<<<<<<<<<<
@@ -4636,7 +4637,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_20get_num_channels(struct
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":224
+/* "pygame_sdl2/mixer.pyx":240
  *         return n
  * 
  *     def get_length(self):             # <<<<<<<<<<<<<<
@@ -4668,7 +4669,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_22get_length(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_length", 0);
 
-  /* "pygame_sdl2/mixer.pyx":226
+  /* "pygame_sdl2/mixer.pyx":242
  *     def get_length(self):
  *         # TODO: Adjust for actual format, rather than assuming 16-bit.
  *         return <double>self.chunk.alen / output_spec[0] / 2 / output_spec[2]             # <<<<<<<<<<<<<<
@@ -4676,20 +4677,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_22get_length(struct __pyx_
  *     def get_raw(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyFloat_FromDouble(((double)__pyx_v_self->chunk->alen)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyFloat_FromDouble(((double)__pyx_v_self->chunk->alen)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_11pygame_sdl2_5mixer_output_spec, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_11pygame_sdl2_5mixer_output_spec, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_int_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_int_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_11pygame_sdl2_5mixer_output_spec, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_11pygame_sdl2_5mixer_output_spec, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -4697,7 +4698,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_22get_length(struct __pyx_
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":224
+  /* "pygame_sdl2/mixer.pyx":240
  *         return n
  * 
  *     def get_length(self):             # <<<<<<<<<<<<<<
@@ -4718,7 +4719,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_22get_length(struct __pyx_
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":228
+/* "pygame_sdl2/mixer.pyx":244
  *         return <double>self.chunk.alen / output_spec[0] / 2 / output_spec[2]
  * 
  *     def get_raw(self):             # <<<<<<<<<<<<<<
@@ -4749,23 +4750,23 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_24get_raw(CYTHON_UNUSED st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_raw", 0);
 
-  /* "pygame_sdl2/mixer.pyx":230
+  /* "pygame_sdl2/mixer.pyx":246
  *     def get_raw(self):
  *         # return self.chunk.abuf
  *         raise error("Not implemented.")             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_Raise(__pyx_t_2, 0, 0, 0);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":228
+  /* "pygame_sdl2/mixer.pyx":244
  *         return <double>self.chunk.alen / output_spec[0] / 2 / output_spec[2]
  * 
  *     def get_raw(self):             # <<<<<<<<<<<<<<
@@ -4784,34 +4785,31 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_5Sound_24get_raw(CYTHON_UNUSED st
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":234
+/* "pygame_sdl2/mixer.pyx":252
+ *     cdef int cid
  * 
- * class Channel(object):
  *     def __init__(self, cid):             # <<<<<<<<<<<<<<
  *         self.cid = cid
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_1__init__ = {"__init__", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_1__init__, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_1__init__(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_self = 0;
+static int __pyx_pw_11pygame_sdl2_5mixer_7Channel_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_pw_11pygame_sdl2_5mixer_7Channel_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_cid = 0;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
-  PyObject *__pyx_r = 0;
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_cid,0};
-    PyObject* values[2] = {0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cid,0};
+    PyObject* values[1] = {0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -4819,91 +4817,83 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_1__init__(PyObject *__py
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cid)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cid)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_self = values[0];
-    __pyx_v_cid = values[1];
+    __pyx_v_cid = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return NULL;
+  return -1;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel___init__(__pyx_self, __pyx_v_self, __pyx_v_cid);
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel___init__(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self), __pyx_v_cid);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_cid) {
-  PyObject *__pyx_r = NULL;
+static int __pyx_pf_11pygame_sdl2_5mixer_7Channel___init__(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_cid) {
+  int __pyx_r;
   __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "pygame_sdl2/mixer.pyx":235
- * class Channel(object):
+  /* "pygame_sdl2/mixer.pyx":253
+ * 
  *     def __init__(self, cid):
  *         self.cid = cid             # <<<<<<<<<<<<<<
  * 
  *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_cid, __pyx_v_cid) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_cid); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->cid = __pyx_t_1;
 
-  /* "pygame_sdl2/mixer.pyx":234
+  /* "pygame_sdl2/mixer.pyx":252
+ *     cdef int cid
  * 
- * class Channel(object):
  *     def __init__(self, cid):             # <<<<<<<<<<<<<<
  *         self.cid = cid
  * 
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
+  __pyx_r = -1;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":237
+/* "pygame_sdl2/mixer.pyx":255
  *         self.cid = cid
  * 
  *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):             # <<<<<<<<<<<<<<
- *         if fade_ms != 0:
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
+ *         cdef int _loops = loops
+ *         cdef int _maxtime = maxtime
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_3play = {"play", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_self = 0;
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound = 0;
   PyObject *__pyx_v_loops = 0;
   PyObject *__pyx_v_maxtime = 0;
@@ -4915,16 +4905,15 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play(PyObject *__pyx_se
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("play (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_sound,&__pyx_n_s_loops,&__pyx_n_s_maxtime,&__pyx_n_s_fade_ms,0};
-    PyObject* values[5] = {0,0,0,0,0};
-    values[2] = ((PyObject *)((PyObject *)__pyx_int_0));
-    values[3] = ((PyObject *)((PyObject *)__pyx_int_neg_1));
-    values[4] = ((PyObject *)((PyObject *)__pyx_int_0));
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sound,&__pyx_n_s_loops,&__pyx_n_s_maxtime,&__pyx_n_s_fade_ms,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[1] = ((PyObject *)__pyx_int_0);
+    values[2] = ((PyObject *)__pyx_int_neg_1);
+    values[3] = ((PyObject *)__pyx_int_0);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -4935,59 +4924,52 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play(PyObject *__pyx_se
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sound)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sound)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("play", 0, 2, 5, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-        case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_loops);
-          if (value) { values[2] = value; kw_args--; }
+          if (value) { values[1] = value; kw_args--; }
         }
-        case  3:
+        case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_maxtime);
-          if (value) { values[3] = value; kw_args--; }
+          if (value) { values[2] = value; kw_args--; }
         }
-        case  4:
+        case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fade_ms);
-          if (value) { values[4] = value; kw_args--; }
+          if (value) { values[3] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "play") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "play") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_self = values[0];
-    __pyx_v_sound = ((struct __pyx_obj_11pygame_sdl2_5mixer_Sound *)values[1]);
-    __pyx_v_loops = values[2];
-    __pyx_v_maxtime = values[3];
-    __pyx_v_fade_ms = values[4];
+    __pyx_v_sound = ((struct __pyx_obj_11pygame_sdl2_5mixer_Sound *)values[0]);
+    __pyx_v_loops = values[1];
+    __pyx_v_maxtime = values[2];
+    __pyx_v_fade_ms = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("play", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("play", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.play", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sound), __pyx_ptype_11pygame_sdl2_5mixer_Sound, 0, "sound", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(__pyx_self, __pyx_v_self, __pyx_v_sound, __pyx_v_loops, __pyx_v_maxtime, __pyx_v_fade_ms);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sound), __pyx_ptype_11pygame_sdl2_5mixer_Sound, 0, "sound", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self), __pyx_v_sound, __pyx_v_loops, __pyx_v_maxtime, __pyx_v_fade_ms);
 
   /* function exit code */
   goto __pyx_L0;
@@ -4998,137 +4980,169 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play(PyObject *__pyx_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound, PyObject *__pyx_v_loops, PyObject *__pyx_v_maxtime, PyObject *__pyx_v_fade_ms) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound, PyObject *__pyx_v_loops, PyObject *__pyx_v_maxtime, PyObject *__pyx_v_fade_ms) {
+  int __pyx_v__loops;
+  int __pyx_v__maxtime;
+  int __pyx_v__fade_ms;
   int __pyx_v_cid;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  int __pyx_t_5;
-  int __pyx_t_6;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
-  PyObject *__pyx_t_12 = NULL;
-  PyObject *__pyx_t_13 = NULL;
-  PyObject *__pyx_t_14 = NULL;
-  int __pyx_t_15;
+  int __pyx_t_12;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("play", 0);
 
-  /* "pygame_sdl2/mixer.pyx":238
+  /* "pygame_sdl2/mixer.pyx":256
  * 
  *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):
- *         if fade_ms != 0:             # <<<<<<<<<<<<<<
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
- *         else:
+ *         cdef int _loops = loops             # <<<<<<<<<<<<<<
+ *         cdef int _maxtime = maxtime
+ *         cdef int _fade_ms = fade_ms
  */
-  __pyx_t_1 = PyObject_RichCompare(__pyx_v_fade_ms, __pyx_int_0, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (__pyx_t_2) {
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_loops); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v__loops = __pyx_t_1;
 
-    /* "pygame_sdl2/mixer.pyx":239
+  /* "pygame_sdl2/mixer.pyx":257
  *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):
- *         if fade_ms != 0:
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)             # <<<<<<<<<<<<<<
- *         else:
- *             cid = Mix_PlayChannelTimed(self.cid, sound.chunk, loops, maxtime)
+ *         cdef int _loops = loops
+ *         cdef int _maxtime = maxtime             # <<<<<<<<<<<<<<
+ *         cdef int _fade_ms = fade_ms
+ * 
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_loops); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_fade_ms); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_maxtime); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_cid = Mix_FadeInChannelTimed(__pyx_t_3, __pyx_v_sound->chunk, __pyx_t_4, __pyx_t_5, __pyx_t_6);
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_maxtime); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v__maxtime = __pyx_t_1;
 
-    /* "pygame_sdl2/mixer.pyx":238
+  /* "pygame_sdl2/mixer.pyx":258
+ *         cdef int _loops = loops
+ *         cdef int _maxtime = maxtime
+ *         cdef int _fade_ms = fade_ms             # <<<<<<<<<<<<<<
  * 
- *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):
- *         if fade_ms != 0:             # <<<<<<<<<<<<<<
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
- *         else:
+ *         with nogil:
  */
-    goto __pyx_L3;
-  }
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_fade_ms); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v__fade_ms = __pyx_t_1;
 
-  /* "pygame_sdl2/mixer.pyx":241
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
- *         else:
- *             cid = Mix_PlayChannelTimed(self.cid, sound.chunk, loops, maxtime)             # <<<<<<<<<<<<<<
+  /* "pygame_sdl2/mixer.pyx":260
+ *         cdef int _fade_ms = fade_ms
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             if _fade_ms != 0:
+ *                 cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, _loops, _fade_ms, _maxtime)
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":261
+ * 
+ *         with nogil:
+ *             if _fade_ms != 0:             # <<<<<<<<<<<<<<
+ *                 cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, _loops, _fade_ms, _maxtime)
+ *             else:
+ */
+        __pyx_t_2 = ((__pyx_v__fade_ms != 0) != 0);
+        if (__pyx_t_2) {
+
+          /* "pygame_sdl2/mixer.pyx":262
+ *         with nogil:
+ *             if _fade_ms != 0:
+ *                 cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, _loops, _fade_ms, _maxtime)             # <<<<<<<<<<<<<<
+ *             else:
+ *                 cid = Mix_PlayChannelTimed(self.cid, sound.chunk, _loops, _maxtime)
+ */
+          __pyx_v_cid = Mix_FadeInChannelTimed(__pyx_v_self->cid, __pyx_v_sound->chunk, __pyx_v__loops, __pyx_v__fade_ms, __pyx_v__maxtime);
+          goto __pyx_L6;
+        }
+        /*else*/ {
+
+          /* "pygame_sdl2/mixer.pyx":264
+ *                 cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, _loops, _fade_ms, _maxtime)
+ *             else:
+ *                 cid = Mix_PlayChannelTimed(self.cid, sound.chunk, _loops, _maxtime)             # <<<<<<<<<<<<<<
  * 
  *         if cid == -1:
  */
-  /*else*/ {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_v_loops); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_maxtime); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_cid = Mix_PlayChannelTimed(__pyx_t_6, __pyx_v_sound->chunk, __pyx_t_5, __pyx_t_4);
+          __pyx_v_cid = Mix_PlayChannelTimed(__pyx_v_self->cid, __pyx_v_sound->chunk, __pyx_v__loops, __pyx_v__maxtime);
+        }
+        __pyx_L6:;
+      }
+
+      /* "pygame_sdl2/mixer.pyx":260
+ *         cdef int _fade_ms = fade_ms
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             if _fade_ms != 0:
+ *                 cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, _loops, _fade_ms, _maxtime)
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
   }
-  __pyx_L3:;
 
-  /* "pygame_sdl2/mixer.pyx":243
- *             cid = Mix_PlayChannelTimed(self.cid, sound.chunk, loops, maxtime)
+  /* "pygame_sdl2/mixer.pyx":266
+ *                 cid = Mix_PlayChannelTimed(self.cid, sound.chunk, _loops, _maxtime)
  * 
  *         if cid == -1:             # <<<<<<<<<<<<<<
  *             raise error()
  * 
  */
-  __pyx_t_2 = ((__pyx_v_cid == -1L) != 0);
+  __pyx_t_2 = ((__pyx_v_cid == -1) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/mixer.pyx":244
+    /* "pygame_sdl2/mixer.pyx":267
  * 
  *         if cid == -1:
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *         with _lock:
  */
-    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_7))) {
-      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
-      if (likely(__pyx_t_8)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
-        __Pyx_INCREF(__pyx_t_8);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_7, function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
       }
     }
-    if (__pyx_t_8) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    if (__pyx_t_5) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-    /* "pygame_sdl2/mixer.pyx":243
- *             cid = Mix_PlayChannelTimed(self.cid, sound.chunk, loops, maxtime)
- * 
- *         if cid == -1:             # <<<<<<<<<<<<<<
- *             raise error()
- * 
- */
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "pygame_sdl2/mixer.pyx":246
+  /* "pygame_sdl2/mixer.pyx":269
  *             raise error()
  * 
  *         with _lock:             # <<<<<<<<<<<<<<
@@ -5136,41 +5150,41 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(CYTHON_UNUSED PyOb
  * 
  */
   /*with:*/ {
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_9 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
-    __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_10 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
-      __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
-      if (likely(__pyx_t_10)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
-        __Pyx_INCREF(__pyx_t_10);
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_6 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_exit); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_6);
+    __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_3, __pyx_n_s_enter); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_7 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
+      if (likely(__pyx_t_7)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+        __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_8, function);
+        __Pyx_DECREF_SET(__pyx_t_5, function);
       }
     }
-    if (__pyx_t_10) {
-      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_10); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    if (__pyx_t_7) {
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     } else {
-      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
     }
-    __Pyx_GOTREF(__pyx_t_7);
-    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     /*try:*/ {
       {
-        __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
-        __Pyx_XGOTREF(__pyx_t_11);
-        __Pyx_XGOTREF(__pyx_t_12);
-        __Pyx_XGOTREF(__pyx_t_13);
+        __Pyx_ExceptionSave(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
+        __Pyx_XGOTREF(__pyx_t_8);
+        __Pyx_XGOTREF(__pyx_t_9);
+        __Pyx_XGOTREF(__pyx_t_10);
         /*try:*/ {
 
-          /* "pygame_sdl2/mixer.pyx":247
+          /* "pygame_sdl2/mixer.pyx":270
  * 
  *         with _lock:
  *             current_sounds[self.cid] = sound             # <<<<<<<<<<<<<<
@@ -5179,110 +5193,110 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(CYTHON_UNUSED PyOb
  */
           if (unlikely(__pyx_v_11pygame_sdl2_5mixer_current_sounds == Py_None)) {
             PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
           }
-          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
-          __Pyx_GOTREF(__pyx_t_1);
-          if (unlikely(PyDict_SetItem(__pyx_v_11pygame_sdl2_5mixer_current_sounds, __pyx_t_1, ((PyObject *)__pyx_v_sound)) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->cid); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+          __Pyx_GOTREF(__pyx_t_3);
+          if (unlikely(PyDict_SetItem(__pyx_v_11pygame_sdl2_5mixer_current_sounds, __pyx_t_3, ((PyObject *)__pyx_v_sound)) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        }
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+        goto __pyx_L19_try_end;
+        __pyx_L12_error:;
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-          /* "pygame_sdl2/mixer.pyx":246
+        /* "pygame_sdl2/mixer.pyx":269
  *             raise error()
  * 
  *         with _lock:             # <<<<<<<<<<<<<<
  *             current_sounds[self.cid] = sound
  * 
  */
-        }
-        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
-        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
-        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-        goto __pyx_L16_try_end;
-        __pyx_L9_error:;
-        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
         /*except:*/ {
           __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.play", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_7, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
-          __Pyx_GOTREF(__pyx_t_1);
+          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
+          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(__pyx_t_4);
+          __Pyx_GOTREF(__pyx_t_5);
+          __pyx_t_7 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
           __Pyx_GOTREF(__pyx_t_7);
-          __Pyx_GOTREF(__pyx_t_8);
-          __pyx_t_10 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_7, __pyx_t_8); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
-          __Pyx_GOTREF(__pyx_t_10);
-          __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, NULL);
-          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
-          __Pyx_GOTREF(__pyx_t_14);
-          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_14);
-          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-          if (__pyx_t_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
-          __pyx_t_15 = ((!(__pyx_t_2 != 0)) != 0);
-          if (__pyx_t_15) {
-            __Pyx_GIVEREF(__pyx_t_1);
-            __Pyx_GIVEREF(__pyx_t_7);
-            __Pyx_XGIVEREF(__pyx_t_8);
-            __Pyx_ErrRestore(__pyx_t_1, __pyx_t_7, __pyx_t_8);
-            __pyx_t_1 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; 
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
-          }
-          __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+          __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL);
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-          goto __pyx_L10_exception_handled;
+          if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
+          __Pyx_GOTREF(__pyx_t_11);
+          __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_11);
+          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+          if (__pyx_t_2 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
+          __pyx_t_12 = ((!(__pyx_t_2 != 0)) != 0);
+          if (__pyx_t_12) {
+            __Pyx_GIVEREF(__pyx_t_3);
+            __Pyx_GIVEREF(__pyx_t_4);
+            __Pyx_XGIVEREF(__pyx_t_5);
+            __Pyx_ErrRestore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+            __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; 
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
+          }
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+          goto __pyx_L13_exception_handled;
         }
-        __pyx_L11_except_error:;
-        __Pyx_XGIVEREF(__pyx_t_11);
-        __Pyx_XGIVEREF(__pyx_t_12);
-        __Pyx_XGIVEREF(__pyx_t_13);
-        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
+        __pyx_L14_except_error:;
+        __Pyx_XGIVEREF(__pyx_t_8);
+        __Pyx_XGIVEREF(__pyx_t_9);
+        __Pyx_XGIVEREF(__pyx_t_10);
+        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
         goto __pyx_L1_error;
-        __pyx_L10_exception_handled:;
-        __Pyx_XGIVEREF(__pyx_t_11);
-        __Pyx_XGIVEREF(__pyx_t_12);
-        __Pyx_XGIVEREF(__pyx_t_13);
-        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
-        __pyx_L16_try_end:;
+        __pyx_L13_exception_handled:;
+        __Pyx_XGIVEREF(__pyx_t_8);
+        __Pyx_XGIVEREF(__pyx_t_9);
+        __Pyx_XGIVEREF(__pyx_t_10);
+        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_9, __pyx_t_10);
+        __pyx_L19_try_end:;
       }
     }
     /*finally:*/ {
       /*normal exit:*/{
-        if (__pyx_t_9) {
-          __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__7, NULL);
-          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-          if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_13);
-          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+        if (__pyx_t_6) {
+          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__7, NULL);
+          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+          if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_10);
+          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         }
-        goto __pyx_L8;
+        goto __pyx_L11;
       }
-      __pyx_L8:;
+      __pyx_L11:;
     }
-    goto __pyx_L20;
-    __pyx_L5_error:;
-    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    goto __pyx_L23;
+    __pyx_L8_error:;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L1_error;
-    __pyx_L20:;
+    __pyx_L23:;
   }
 
-  /* "pygame_sdl2/mixer.pyx":237
+  /* "pygame_sdl2/mixer.pyx":255
  *         self.cid = cid
  * 
  *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):             # <<<<<<<<<<<<<<
- *         if fade_ms != 0:
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
+ *         cdef int _loops = loops
+ *         cdef int _maxtime = maxtime
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.play", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -5291,312 +5305,350 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_2play(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":249
+/* "pygame_sdl2/mixer.pyx":272
  *             current_sounds[self.cid] = sound
  * 
  *     def stop(self):             # <<<<<<<<<<<<<<
- *         Mix_HaltChannel(self.cid)
- * 
+ *         with nogil:
+ *             Mix_HaltChannel(self.cid)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_5stop(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_5stop = {"stop", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_5stop, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_5stop(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_5stop(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_5stop(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("stop (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_4stop(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_4stop(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_4stop(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_4stop(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("stop", 0);
 
-  /* "pygame_sdl2/mixer.pyx":250
+  /* "pygame_sdl2/mixer.pyx":273
+ * 
+ *     def stop(self):
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_HaltChannel(self.cid)
  * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":274
  *     def stop(self):
- *         Mix_HaltChannel(self.cid)             # <<<<<<<<<<<<<<
+ *         with nogil:
+ *             Mix_HaltChannel(self.cid)             # <<<<<<<<<<<<<<
  * 
  *     def pause(self):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  Mix_HaltChannel(__pyx_t_2);
+        Mix_HaltChannel(__pyx_v_self->cid);
+      }
+
+      /* "pygame_sdl2/mixer.pyx":273
+ * 
+ *     def stop(self):
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_HaltChannel(self.cid)
+ * 
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
 
-  /* "pygame_sdl2/mixer.pyx":249
+  /* "pygame_sdl2/mixer.pyx":272
  *             current_sounds[self.cid] = sound
  * 
  *     def stop(self):             # <<<<<<<<<<<<<<
- *         Mix_HaltChannel(self.cid)
- * 
+ *         with nogil:
+ *             Mix_HaltChannel(self.cid)
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.stop", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":252
- *         Mix_HaltChannel(self.cid)
+/* "pygame_sdl2/mixer.pyx":276
+ *             Mix_HaltChannel(self.cid)
  * 
  *     def pause(self):             # <<<<<<<<<<<<<<
- *         Mix_Pause(self.cid)
- * 
+ *         with nogil:
+ *             Mix_Pause(self.cid)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_7pause(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_7pause = {"pause", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_7pause, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_7pause(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_7pause(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_7pause(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("pause (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_6pause(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_6pause(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_6pause(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_6pause(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pause", 0);
 
-  /* "pygame_sdl2/mixer.pyx":253
+  /* "pygame_sdl2/mixer.pyx":277
+ * 
+ *     def pause(self):
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_Pause(self.cid)
  * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":278
  *     def pause(self):
- *         Mix_Pause(self.cid)             # <<<<<<<<<<<<<<
+ *         with nogil:
+ *             Mix_Pause(self.cid)             # <<<<<<<<<<<<<<
  * 
  *     def unpause(self):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  Mix_Pause(__pyx_t_2);
+        Mix_Pause(__pyx_v_self->cid);
+      }
 
-  /* "pygame_sdl2/mixer.pyx":252
- *         Mix_HaltChannel(self.cid)
+      /* "pygame_sdl2/mixer.pyx":277
  * 
- *     def pause(self):             # <<<<<<<<<<<<<<
- *         Mix_Pause(self.cid)
+ *     def pause(self):
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_Pause(self.cid)
+ * 
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
+
+  /* "pygame_sdl2/mixer.pyx":276
+ *             Mix_HaltChannel(self.cid)
  * 
+ *     def pause(self):             # <<<<<<<<<<<<<<
+ *         with nogil:
+ *             Mix_Pause(self.cid)
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.pause", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":255
- *         Mix_Pause(self.cid)
+/* "pygame_sdl2/mixer.pyx":280
+ *             Mix_Pause(self.cid)
  * 
  *     def unpause(self):             # <<<<<<<<<<<<<<
- *         Mix_Resume(self.cid)
- * 
+ *         with nogil:
+ *             Mix_Resume(self.cid)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_9unpause(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_9unpause = {"unpause", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_9unpause, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_9unpause(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_9unpause(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_9unpause(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("unpause (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_8unpause(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_8unpause(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_8unpause(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_8unpause(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("unpause", 0);
 
-  /* "pygame_sdl2/mixer.pyx":256
+  /* "pygame_sdl2/mixer.pyx":281
+ * 
+ *     def unpause(self):
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_Resume(self.cid)
  * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":282
  *     def unpause(self):
- *         Mix_Resume(self.cid)             # <<<<<<<<<<<<<<
+ *         with nogil:
+ *             Mix_Resume(self.cid)             # <<<<<<<<<<<<<<
  * 
  *     def fadeout(self, time):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  Mix_Resume(__pyx_t_2);
+        Mix_Resume(__pyx_v_self->cid);
+      }
 
-  /* "pygame_sdl2/mixer.pyx":255
- *         Mix_Pause(self.cid)
+      /* "pygame_sdl2/mixer.pyx":281
  * 
- *     def unpause(self):             # <<<<<<<<<<<<<<
- *         Mix_Resume(self.cid)
+ *     def unpause(self):
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_Resume(self.cid)
  * 
  */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
+
+  /* "pygame_sdl2/mixer.pyx":280
+ *             Mix_Pause(self.cid)
+ * 
+ *     def unpause(self):             # <<<<<<<<<<<<<<
+ *         with nogil:
+ *             Mix_Resume(self.cid)
+ */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.unpause", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":258
- *         Mix_Resume(self.cid)
+/* "pygame_sdl2/mixer.pyx":284
+ *             Mix_Resume(self.cid)
  * 
  *     def fadeout(self, time):             # <<<<<<<<<<<<<<
- *         Mix_FadeOutChannel(self.cid, time)
- * 
+ *         cdef int ms = time
+ *         with nogil:
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_11fadeout(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_11fadeout = {"fadeout", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_11fadeout, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_11fadeout(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_self = 0;
-  PyObject *__pyx_v_time = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_11fadeout(PyObject *__pyx_v_self, PyObject *__pyx_v_time); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_11fadeout(PyObject *__pyx_v_self, PyObject *__pyx_v_time) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("fadeout (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_time,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("fadeout", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fadeout") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-    }
-    __pyx_v_self = values[0];
-    __pyx_v_time = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("fadeout", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.fadeout", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(__pyx_self, __pyx_v_self, __pyx_v_time);
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self), ((PyObject *)__pyx_v_time));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_time) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_time) {
+  int __pyx_v_ms;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  int __pyx_t_3;
+  int __pyx_t_1;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("fadeout", 0);
 
-  /* "pygame_sdl2/mixer.pyx":259
+  /* "pygame_sdl2/mixer.pyx":285
  * 
  *     def fadeout(self, time):
- *         Mix_FadeOutChannel(self.cid, time)             # <<<<<<<<<<<<<<
+ *         cdef int ms = time             # <<<<<<<<<<<<<<
+ *         with nogil:
+ *             Mix_FadeOutChannel(self.cid, ms)
+ */
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_time); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 285; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_ms = __pyx_t_1;
+
+  /* "pygame_sdl2/mixer.pyx":286
+ *     def fadeout(self, time):
+ *         cdef int ms = time
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_FadeOutChannel(self.cid, ms)
+ * 
+ */
+  {
+      #ifdef WITH_THREAD
+      PyThreadState *_save;
+      Py_UNBLOCK_THREADS
+      #endif
+      /*try:*/ {
+
+        /* "pygame_sdl2/mixer.pyx":287
+ *         cdef int ms = time
+ *         with nogil:
+ *             Mix_FadeOutChannel(self.cid, ms)             # <<<<<<<<<<<<<<
  * 
  *     def set_volume(self, volume):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_v_time); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  Mix_FadeOutChannel(__pyx_t_2, __pyx_t_3);
+        Mix_FadeOutChannel(__pyx_v_self->cid, __pyx_v_ms);
+      }
 
-  /* "pygame_sdl2/mixer.pyx":258
- *         Mix_Resume(self.cid)
+      /* "pygame_sdl2/mixer.pyx":286
+ *     def fadeout(self, time):
+ *         cdef int ms = time
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             Mix_FadeOutChannel(self.cid, ms)
  * 
- *     def fadeout(self, time):             # <<<<<<<<<<<<<<
- *         Mix_FadeOutChannel(self.cid, time)
+ */
+      /*finally:*/ {
+        /*normal exit:*/{
+          #ifdef WITH_THREAD
+          Py_BLOCK_THREADS
+          #endif
+          goto __pyx_L5;
+        }
+        __pyx_L5:;
+      }
+  }
+
+  /* "pygame_sdl2/mixer.pyx":284
+ *             Mix_Resume(self.cid)
  * 
+ *     def fadeout(self, time):             # <<<<<<<<<<<<<<
+ *         cdef int ms = time
+ *         with nogil:
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.fadeout", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -5605,8 +5657,8 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":261
- *         Mix_FadeOutChannel(self.cid, time)
+/* "pygame_sdl2/mixer.pyx":289
+ *             Mix_FadeOutChannel(self.cid, ms)
  * 
  *     def set_volume(self, volume):             # <<<<<<<<<<<<<<
  *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
@@ -5614,104 +5666,50 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_10fadeout(CYTHON_UNUSED
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_13set_volume(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_13set_volume = {"set_volume", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_13set_volume, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_13set_volume(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_self = 0;
-  PyObject *__pyx_v_volume = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_13set_volume(PyObject *__pyx_v_self, PyObject *__pyx_v_volume); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_13set_volume(PyObject *__pyx_v_self, PyObject *__pyx_v_volume) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_volume (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_volume,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_volume)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("set_volume", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_volume") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-    }
-    __pyx_v_self = values[0];
-    __pyx_v_volume = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_volume", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.set_volume", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(__pyx_self, __pyx_v_self, __pyx_v_volume);
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self), ((PyObject *)__pyx_v_volume));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_volume) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_volume) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_volume", 0);
 
-  /* "pygame_sdl2/mixer.pyx":262
+  /* "pygame_sdl2/mixer.pyx":290
  * 
  *     def set_volume(self, volume):
  *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))             # <<<<<<<<<<<<<<
  * 
  *     def get_volume(self):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(MIX_MAX_VOLUME); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyInt_From_int(MIX_MAX_VOLUME); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_v_volume); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = PyNumber_Multiply(__pyx_t_1, __pyx_v_volume); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  Mix_Volume(__pyx_t_2, __pyx_t_4);
+  Mix_Volume(__pyx_v_self->cid, __pyx_t_3);
 
-  /* "pygame_sdl2/mixer.pyx":261
- *         Mix_FadeOutChannel(self.cid, time)
+  /* "pygame_sdl2/mixer.pyx":289
+ *             Mix_FadeOutChannel(self.cid, ms)
  * 
  *     def set_volume(self, volume):             # <<<<<<<<<<<<<<
  *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
@@ -5723,7 +5721,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(CYTHON_UNUS
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.set_volume", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -5732,7 +5730,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":264
+/* "pygame_sdl2/mixer.pyx":292
  *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
  * 
  *     def get_volume(self):             # <<<<<<<<<<<<<<
@@ -5741,44 +5739,38 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_12set_volume(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_15get_volume(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_15get_volume = {"get_volume", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_15get_volume, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_15get_volume(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_15get_volume(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_15get_volume(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_volume (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   int __pyx_v_vol;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_volume", 0);
 
-  /* "pygame_sdl2/mixer.pyx":265
+  /* "pygame_sdl2/mixer.pyx":293
  * 
  *     def get_volume(self):
  *         cdef int vol = Mix_Volume(self.cid, -1)             # <<<<<<<<<<<<<<
  *         return vol / <double>MIX_MAX_VOLUME
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_vol = Mix_Volume(__pyx_t_2, -1);
+  __pyx_v_vol = Mix_Volume(__pyx_v_self->cid, -1);
 
-  /* "pygame_sdl2/mixer.pyx":266
+  /* "pygame_sdl2/mixer.pyx":294
  *     def get_volume(self):
  *         cdef int vol = Mix_Volume(self.cid, -1)
  *         return vol / <double>MIX_MAX_VOLUME             # <<<<<<<<<<<<<<
@@ -5787,16 +5779,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(CYTHON_UNUS
  */
   __Pyx_XDECREF(__pyx_r);
   if (unlikely(((double)MIX_MAX_VOLUME) == 0)) {
+    #ifdef WITH_THREAD
+    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+    #endif
     PyErr_SetString(PyExc_ZeroDivisionError, "float division");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    #ifdef WITH_THREAD
+    PyGILState_Release(__pyx_gilstate_save);
+    #endif
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_1 = PyFloat_FromDouble((__pyx_v_vol / ((double)MIX_MAX_VOLUME))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyFloat_FromDouble((__pyx_v_vol / ((double)MIX_MAX_VOLUME))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":264
+  /* "pygame_sdl2/mixer.pyx":292
  *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
  * 
  *     def get_volume(self):             # <<<<<<<<<<<<<<
@@ -5815,7 +5813,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":268
+/* "pygame_sdl2/mixer.pyx":296
  *         return vol / <double>MIX_MAX_VOLUME
  * 
  *     def get_busy(self):             # <<<<<<<<<<<<<<
@@ -5824,30 +5822,28 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_14get_volume(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_17get_busy(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_17get_busy = {"get_busy", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_17get_busy, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_17get_busy(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_17get_busy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_17get_busy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_busy (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
-  int __pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_busy", 0);
 
-  /* "pygame_sdl2/mixer.pyx":269
+  /* "pygame_sdl2/mixer.pyx":297
  * 
  *     def get_busy(self):
  *         return Mix_Playing(self.cid) != 0             # <<<<<<<<<<<<<<
@@ -5855,17 +5851,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(CYTHON_UNUSED
  *     def get_sound(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_PyBool_FromLong((Mix_Playing(__pyx_t_2) != 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBool_FromLong((Mix_Playing(__pyx_v_self->cid) != 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 297; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":268
+  /* "pygame_sdl2/mixer.pyx":296
  *         return vol / <double>MIX_MAX_VOLUME
  * 
  *     def get_busy(self):             # <<<<<<<<<<<<<<
@@ -5884,7 +5876,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":271
+/* "pygame_sdl2/mixer.pyx":299
  *         return Mix_Playing(self.cid) != 0
  * 
  *     def get_sound(self):             # <<<<<<<<<<<<<<
@@ -5893,20 +5885,19 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_16get_busy(CYTHON_UNUSED
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_19get_sound(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_19get_sound = {"get_sound", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_19get_sound, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_19get_sound(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_19get_sound(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_19get_sound(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_sound (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -5925,7 +5916,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_sound", 0);
 
-  /* "pygame_sdl2/mixer.pyx":272
+  /* "pygame_sdl2/mixer.pyx":300
  * 
  *     def get_sound(self):
  *         with _lock:             # <<<<<<<<<<<<<<
@@ -5933,11 +5924,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
  * 
  */
   /*with:*/ {
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -5950,10 +5941,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -5967,7 +5958,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
         __Pyx_XGOTREF(__pyx_t_8);
         /*try:*/ {
 
-          /* "pygame_sdl2/mixer.pyx":273
+          /* "pygame_sdl2/mixer.pyx":301
  *     def get_sound(self):
  *         with _lock:
  *             return current_sounds.get(self.cid)             # <<<<<<<<<<<<<<
@@ -5977,46 +5968,46 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
           __Pyx_XDECREF(__pyx_r);
           if (unlikely(__pyx_v_11pygame_sdl2_5mixer_current_sounds == Py_None)) {
             PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           }
-          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_current_sounds, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_current_sounds, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 301; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_r = __pyx_t_3;
           __pyx_t_3 = 0;
           goto __pyx_L11_try_return;
+        }
+        __pyx_L7_error:;
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-          /* "pygame_sdl2/mixer.pyx":272
+        /* "pygame_sdl2/mixer.pyx":300
  * 
  *     def get_sound(self):
  *         with _lock:             # <<<<<<<<<<<<<<
  *             return current_sounds.get(self.cid)
  * 
  */
-        }
-        __pyx_L7_error:;
-        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
         /*except:*/ {
           __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.get_sound", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __Pyx_GOTREF(__pyx_t_5);
           __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-          if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __Pyx_GOTREF(__pyx_t_9);
           __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-          if (__pyx_t_10 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__pyx_t_10 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __pyx_t_11 = ((!(__pyx_t_10 != 0)) != 0);
           if (__pyx_t_11) {
             __Pyx_GIVEREF(__pyx_t_3);
@@ -6024,7 +6015,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
             __Pyx_XGIVEREF(__pyx_t_4);
             __Pyx_ErrRestore(__pyx_t_3, __pyx_t_1, __pyx_t_4);
             __pyx_t_3 = 0; __pyx_t_1 = 0; __pyx_t_4 = 0; 
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           }
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -6055,7 +6046,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
         if (__pyx_t_2) {
           __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__8, NULL);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         }
@@ -6067,7 +6058,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
         if (__pyx_t_2) {
           __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__9, NULL);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         }
@@ -6084,7 +6075,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
     __pyx_L18:;
   }
 
-  /* "pygame_sdl2/mixer.pyx":271
+  /* "pygame_sdl2/mixer.pyx":299
  *         return Mix_Playing(self.cid) != 0
  * 
  *     def get_sound(self):             # <<<<<<<<<<<<<<
@@ -6108,7 +6099,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":275
+/* "pygame_sdl2/mixer.pyx":303
  *             return current_sounds.get(self.cid)
  * 
  *     def queue(self, Sound sound):             # <<<<<<<<<<<<<<
@@ -6117,62 +6108,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_18get_sound(CYTHON_UNUSE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_21queue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_21queue = {"queue", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_21queue, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_21queue(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_self = 0;
-  struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound = 0;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_21queue(PyObject *__pyx_v_self, PyObject *__pyx_v_sound); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_21queue(PyObject *__pyx_v_self, PyObject *__pyx_v_sound) {
+  CYTHON_UNUSED int __pyx_lineno = 0;
+  CYTHON_UNUSED const char *__pyx_filename = NULL;
+  CYTHON_UNUSED int __pyx_clineno = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("queue (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_sound,0};
-    PyObject* values[2] = {0,0};
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sound)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("queue", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "queue") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
-      goto __pyx_L5_argtuple_error;
-    } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-    }
-    __pyx_v_self = values[0];
-    __pyx_v_sound = ((struct __pyx_obj_11pygame_sdl2_5mixer_Sound *)values[1]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("queue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-  __pyx_L3_error:;
-  __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.queue", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __Pyx_RefNannyFinishContext();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sound), __pyx_ptype_11pygame_sdl2_5mixer_Sound, 1, "sound", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(__pyx_self, __pyx_v_self, __pyx_v_sound);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sound), __pyx_ptype_11pygame_sdl2_5mixer_Sound, 1, "sound", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self), ((struct __pyx_obj_11pygame_sdl2_5mixer_Sound *)__pyx_v_sound));
 
   /* function exit code */
   goto __pyx_L0;
@@ -6183,7 +6128,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_21queue(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, struct __pyx_obj_11pygame_sdl2_5mixer_Sound *__pyx_v_sound) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6202,14 +6147,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("queue", 0);
 
-  /* "pygame_sdl2/mixer.pyx":276
+  /* "pygame_sdl2/mixer.pyx":304
  * 
  *     def queue(self, Sound sound):
  *         if self.get_busy():             # <<<<<<<<<<<<<<
  *             with _lock:
  *                 channel_queued[self.cid] = sound
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_get_busy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_busy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -6222,18 +6167,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 276; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (__pyx_t_4) {
 
-    /* "pygame_sdl2/mixer.pyx":277
+    /* "pygame_sdl2/mixer.pyx":305
  *     def queue(self, Sound sound):
  *         if self.get_busy():
  *             with _lock:             # <<<<<<<<<<<<<<
@@ -6241,11 +6186,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
  *         else:
  */
     /*with:*/ {
-      __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_3 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -6258,10 +6203,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -6275,7 +6220,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
           __Pyx_XGOTREF(__pyx_t_9);
           /*try:*/ {
 
-            /* "pygame_sdl2/mixer.pyx":278
+            /* "pygame_sdl2/mixer.pyx":306
  *         if self.get_busy():
  *             with _lock:
  *                 channel_queued[self.cid] = sound             # <<<<<<<<<<<<<<
@@ -6284,20 +6229,12 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
  */
             if (unlikely(__pyx_v_11pygame_sdl2_5mixer_channel_queued == Py_None)) {
               PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             }
-            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_GOTREF(__pyx_t_1);
-            if (unlikely(PyDict_SetItem(__pyx_v_11pygame_sdl2_5mixer_channel_queued, __pyx_t_1, ((PyObject *)__pyx_v_sound)) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            if (unlikely(PyDict_SetItem(__pyx_v_11pygame_sdl2_5mixer_channel_queued, __pyx_t_1, ((PyObject *)__pyx_v_sound)) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-
-            /* "pygame_sdl2/mixer.pyx":277
- *     def queue(self, Sound sound):
- *         if self.get_busy():
- *             with _lock:             # <<<<<<<<<<<<<<
- *                 channel_queued[self.cid] = sound
- *         else:
- */
           }
           __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
@@ -6308,22 +6245,30 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
           __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+          /* "pygame_sdl2/mixer.pyx":305
+ *     def queue(self, Sound sound):
+ *         if self.get_busy():
+ *             with _lock:             # <<<<<<<<<<<<<<
+ *                 channel_queued[self.cid] = sound
+ *         else:
+ */
           /*except:*/ {
             __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.queue", __pyx_clineno, __pyx_lineno, __pyx_filename);
-            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+            if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_GOTREF(__pyx_t_2);
             __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_6 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+            __pyx_t_6 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
             __Pyx_GOTREF(__pyx_t_6);
             __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL);
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-            if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+            if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
             __Pyx_GOTREF(__pyx_t_10);
             __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10);
             __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-            if (__pyx_t_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+            if (__pyx_t_4 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
             __pyx_t_11 = ((!(__pyx_t_4 != 0)) != 0);
             if (__pyx_t_11) {
               __Pyx_GIVEREF(__pyx_t_1);
@@ -6331,7 +6276,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
               __Pyx_XGIVEREF(__pyx_t_3);
               __Pyx_ErrRestore(__pyx_t_1, __pyx_t_2, __pyx_t_3);
               __pyx_t_1 = 0; __pyx_t_2 = 0; __pyx_t_3 = 0; 
-              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+              {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
             }
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
             __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -6357,7 +6302,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
           if (__pyx_t_5) {
             __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__10, NULL);
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-            if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_9);
             __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           }
@@ -6371,26 +6316,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
       goto __pyx_L1_error;
       __pyx_L19:;
     }
-
-    /* "pygame_sdl2/mixer.pyx":276
- * 
- *     def queue(self, Sound sound):
- *         if self.get_busy():             # <<<<<<<<<<<<<<
- *             with _lock:
- *                 channel_queued[self.cid] = sound
- */
     goto __pyx_L3;
   }
+  /*else*/ {
 
-  /* "pygame_sdl2/mixer.pyx":280
+    /* "pygame_sdl2/mixer.pyx":308
  *                 channel_queued[self.cid] = sound
  *         else:
  *             self.play(sound)             # <<<<<<<<<<<<<<
  * 
  *     def get_queue(self):
  */
-  /*else*/ {
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_play); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_play); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -6403,16 +6340,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
       }
     }
     if (!__pyx_t_1) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_sound)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)__pyx_v_sound)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL;
+      PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = NULL;
       __Pyx_INCREF(((PyObject *)__pyx_v_sound));
-      __Pyx_GIVEREF(((PyObject *)__pyx_v_sound));
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, ((PyObject *)__pyx_v_sound));
-      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GIVEREF(((PyObject *)__pyx_v_sound));
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
@@ -6421,7 +6358,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/mixer.pyx":275
+  /* "pygame_sdl2/mixer.pyx":303
  *             return current_sounds.get(self.cid)
  * 
  *     def queue(self, Sound sound):             # <<<<<<<<<<<<<<
@@ -6445,7 +6382,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":282
+/* "pygame_sdl2/mixer.pyx":310
  *             self.play(sound)
  * 
  *     def get_queue(self):             # <<<<<<<<<<<<<<
@@ -6454,20 +6391,19 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_20queue(CYTHON_UNUSED Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_23get_queue(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_23get_queue = {"get_queue", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_23get_queue, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_23get_queue(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_23get_queue(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_23get_queue(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_queue (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6486,7 +6422,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_queue", 0);
 
-  /* "pygame_sdl2/mixer.pyx":283
+  /* "pygame_sdl2/mixer.pyx":311
  * 
  *     def get_queue(self):
  *         with _lock:             # <<<<<<<<<<<<<<
@@ -6494,11 +6430,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
  * 
  */
   /*with:*/ {
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_lock); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_exit); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_t_1, __pyx_n_s_enter); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -6511,10 +6447,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -6528,7 +6464,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
         __Pyx_XGOTREF(__pyx_t_8);
         /*try:*/ {
 
-          /* "pygame_sdl2/mixer.pyx":284
+          /* "pygame_sdl2/mixer.pyx":312
  *     def get_queue(self):
  *         with _lock:
  *             return channel_queued.get(self.cid)             # <<<<<<<<<<<<<<
@@ -6538,46 +6474,46 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
           __Pyx_XDECREF(__pyx_r);
           if (unlikely(__pyx_v_11pygame_sdl2_5mixer_channel_queued == Py_None)) {
             PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           }
-          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_queued, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_3 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_queued, __pyx_t_1, Py_None); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 312; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_r = __pyx_t_3;
           __pyx_t_3 = 0;
           goto __pyx_L11_try_return;
+        }
+        __pyx_L7_error:;
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-          /* "pygame_sdl2/mixer.pyx":283
+        /* "pygame_sdl2/mixer.pyx":311
  * 
  *     def get_queue(self):
  *         with _lock:             # <<<<<<<<<<<<<<
  *             return channel_queued.get(self.cid)
  * 
  */
-        }
-        __pyx_L7_error:;
-        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
         /*except:*/ {
           __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.get_queue", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_1, &__pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          __pyx_t_5 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __Pyx_GOTREF(__pyx_t_5);
           __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-          if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __Pyx_GOTREF(__pyx_t_9);
           __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-          if (__pyx_t_10 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+          if (__pyx_t_10 < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           __pyx_t_11 = ((!(__pyx_t_10 != 0)) != 0);
           if (__pyx_t_11) {
             __Pyx_GIVEREF(__pyx_t_3);
@@ -6585,7 +6521,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
             __Pyx_XGIVEREF(__pyx_t_4);
             __Pyx_ErrRestore(__pyx_t_3, __pyx_t_1, __pyx_t_4);
             __pyx_t_3 = 0; __pyx_t_1 = 0; __pyx_t_4 = 0; 
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
           }
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -6616,7 +6552,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
         if (__pyx_t_2) {
           __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__11, NULL);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_8);
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         }
@@ -6628,7 +6564,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
         if (__pyx_t_2) {
           __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__12, NULL);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         }
@@ -6645,7 +6581,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
     __pyx_L18:;
   }
 
-  /* "pygame_sdl2/mixer.pyx":282
+  /* "pygame_sdl2/mixer.pyx":310
  *             self.play(sound)
  * 
  *     def get_queue(self):             # <<<<<<<<<<<<<<
@@ -6669,7 +6605,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":286
+/* "pygame_sdl2/mixer.pyx":314
  *             return channel_queued.get(self.cid)
  * 
  *     def set_endevent(self, type=None):             # <<<<<<<<<<<<<<
@@ -6678,10 +6614,8 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_22get_queue(CYTHON_UNUSE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_25set_endevent = {"set_endevent", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_self = 0;
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_type = 0;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -6690,14 +6624,13 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent(PyObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_endevent (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_self,&__pyx_n_s_type,0};
-    PyObject* values[2] = {0,0};
-    values[1] = ((PyObject *)((PyObject *)Py_None));
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_type,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
@@ -6705,44 +6638,39 @@ static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent(PyObject
       kw_args = PyDict_Size(__pyx_kwds);
       switch (pos_args) {
         case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_type);
-          if (value) { values[1] = value; kw_args--; }
+          if (value) { values[0] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_endevent") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_endevent") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        break;
+        case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_self = values[0];
-    __pyx_v_type = values[1];
+    __pyx_v_type = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_endevent", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_endevent", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.mixer.Channel.set_endevent", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(__pyx_self, __pyx_v_self, __pyx_v_type);
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self), __pyx_v_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self, PyObject *__pyx_v_type) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self, PyObject *__pyx_v_type) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6753,36 +6681,36 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_endevent", 0);
 
-  /* "pygame_sdl2/mixer.pyx":287
+  /* "pygame_sdl2/mixer.pyx":315
  * 
  *     def set_endevent(self, type=None):
  *         channel_events[self.cid] = type or 0             # <<<<<<<<<<<<<<
  * 
  *     def get_endevent(self):
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_type); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_type); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (!__pyx_t_2) {
   } else {
     __Pyx_INCREF(__pyx_v_type);
     __pyx_t_1 = __pyx_v_type;
     goto __pyx_L3_bool_binop_done;
   }
-  __pyx_t_3 = __Pyx_PyInt_From_long(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_long(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_1 = __pyx_t_3;
   __pyx_t_3 = 0;
   __pyx_L3_bool_binop_done:;
   if (unlikely(__pyx_v_11pygame_sdl2_5mixer_channel_events == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_self->cid); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (unlikely(PyDict_SetItem(__pyx_v_11pygame_sdl2_5mixer_channel_events, __pyx_t_3, __pyx_t_1) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(PyDict_SetItem(__pyx_v_11pygame_sdl2_5mixer_channel_events, __pyx_t_3, __pyx_t_1) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":286
+  /* "pygame_sdl2/mixer.pyx":314
  *             return channel_queued.get(self.cid)
  * 
  *     def set_endevent(self, type=None):             # <<<<<<<<<<<<<<
@@ -6804,7 +6732,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(CYTHON_UN
   return __pyx_r;
 }
 
-/* "pygame_sdl2/mixer.pyx":289
+/* "pygame_sdl2/mixer.pyx":317
  *         channel_events[self.cid] = type or 0
  * 
  *     def get_endevent(self):             # <<<<<<<<<<<<<<
@@ -6812,20 +6740,19 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_24set_endevent(CYTHON_UN
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_27get_endevent(PyObject *__pyx_self, PyObject *__pyx_v_self); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_5mixer_7Channel_27get_endevent = {"get_endevent", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_27get_endevent, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_27get_endevent(PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_27get_endevent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw_11pygame_sdl2_5mixer_7Channel_27get_endevent(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_endevent (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(__pyx_self, ((PyObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(((struct __pyx_obj_11pygame_sdl2_5mixer_Channel *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(struct __pyx_obj_11pygame_sdl2_5mixer_Channel *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -6835,7 +6762,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_endevent", 0);
 
-  /* "pygame_sdl2/mixer.pyx":290
+  /* "pygame_sdl2/mixer.pyx":318
  * 
  *     def get_endevent(self):
  *         return channel_events.get(self.cid, 0)             # <<<<<<<<<<<<<<
@@ -6843,18 +6770,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_5mixer_7Channel_26get_endevent(CYTHON_UN
   __Pyx_XDECREF(__pyx_r);
   if (unlikely(__pyx_v_11pygame_sdl2_5mixer_channel_events == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->cid); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_events, __pyx_t_1, __pyx_int_0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_11pygame_sdl2_5mixer_channel_events, __pyx_t_1, __pyx_int_0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/mixer.pyx":289
+  /* "pygame_sdl2/mixer.pyx":317
  *         channel_events[self.cid] = type or 0
  * 
  *     def get_endevent(self):             # <<<<<<<<<<<<<<
@@ -6929,9 +6856,8 @@ static PyTypeObject __pyx_type_11pygame_sdl2_5mixer_Sound = {
   0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
   0, /*tp_compare*/
-  #endif
-  #if PY_MAJOR_VERSION >= 3
-  0, /*tp_as_async*/
+  #else
+  0, /*reserved*/
   #endif
   0, /*tp_repr*/
   0, /*tp_as_number*/
@@ -6976,14 +6902,108 @@ static PyTypeObject __pyx_type_11pygame_sdl2_5mixer_Sound = {
   #endif
 };
 
-static PyMethodDef __pyx_methods[] = {
+static PyObject *__pyx_tp_new_11pygame_sdl2_5mixer_Channel(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  return o;
+}
+
+static void __pyx_tp_dealloc_11pygame_sdl2_5mixer_Channel(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static PyMethodDef __pyx_methods_11pygame_sdl2_5mixer_Channel[] = {
+  {"play", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_3play, METH_VARARGS|METH_KEYWORDS, 0},
+  {"stop", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_5stop, METH_NOARGS, 0},
+  {"pause", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_7pause, METH_NOARGS, 0},
+  {"unpause", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_9unpause, METH_NOARGS, 0},
+  {"fadeout", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_11fadeout, METH_O, 0},
+  {"set_volume", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_13set_volume, METH_O, 0},
+  {"get_volume", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_15get_volume, METH_NOARGS, 0},
+  {"get_busy", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_17get_busy, METH_NOARGS, 0},
+  {"get_sound", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_19get_sound, METH_NOARGS, 0},
+  {"queue", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_21queue, METH_O, 0},
+  {"get_queue", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_23get_queue, METH_NOARGS, 0},
+  {"set_endevent", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_25set_endevent, METH_VARARGS|METH_KEYWORDS, 0},
+  {"get_endevent", (PyCFunction)__pyx_pw_11pygame_sdl2_5mixer_7Channel_27get_endevent, METH_NOARGS, 0},
   {0, 0, 0, 0}
 };
 
-#if PY_MAJOR_VERSION >= 3
-static struct PyModuleDef __pyx_moduledef = {
-  #if PY_VERSION_HEX < 0x03020000
-    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
+static PyTypeObject __pyx_type_11pygame_sdl2_5mixer_Channel = {
+  PyVarObject_HEAD_INIT(0, 0)
+  "pygame_sdl2.mixer.Channel", /*tp_name*/
+  sizeof(struct __pyx_obj_11pygame_sdl2_5mixer_Channel), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_11pygame_sdl2_5mixer_Channel, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  0, /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_11pygame_sdl2_5mixer_Channel, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_11pygame_sdl2_5mixer_7Channel_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_11pygame_sdl2_5mixer_Channel, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  0, /*tp_version_tag*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyMethodDef __pyx_methods[] = {
+  {0, 0, 0, 0}
+};
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef __pyx_moduledef = {
+  #if PY_VERSION_HEX < 0x03020000
+    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
   #else
     PyModuleDef_HEAD_INIT,
   #endif
@@ -6999,24 +7019,10 @@ static struct PyModuleDef __pyx_moduledef = {
 #endif
 
 static __Pyx_StringTabEntry __pyx_string_tab[] = {
-  {&__pyx_n_s_Channel, __pyx_k_Channel, sizeof(__pyx_k_Channel), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel___init, __pyx_k_Channel___init, sizeof(__pyx_k_Channel___init), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_fadeout, __pyx_k_Channel_fadeout, sizeof(__pyx_k_Channel_fadeout), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_get_busy, __pyx_k_Channel_get_busy, sizeof(__pyx_k_Channel_get_busy), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_get_endevent, __pyx_k_Channel_get_endevent, sizeof(__pyx_k_Channel_get_endevent), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_get_queue, __pyx_k_Channel_get_queue, sizeof(__pyx_k_Channel_get_queue), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_get_sound, __pyx_k_Channel_get_sound, sizeof(__pyx_k_Channel_get_sound), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_get_volume, __pyx_k_Channel_get_volume, sizeof(__pyx_k_Channel_get_volume), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_pause, __pyx_k_Channel_pause, sizeof(__pyx_k_Channel_pause), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_play, __pyx_k_Channel_play, sizeof(__pyx_k_Channel_play), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_queue, __pyx_k_Channel_queue, sizeof(__pyx_k_Channel_queue), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_set_endevent, __pyx_k_Channel_set_endevent, sizeof(__pyx_k_Channel_set_endevent), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_set_volume, __pyx_k_Channel_set_volume, sizeof(__pyx_k_Channel_set_volume), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_stop, __pyx_k_Channel_stop, sizeof(__pyx_k_Channel_stop), 0, 0, 1, 1},
-  {&__pyx_n_s_Channel_unpause, __pyx_k_Channel_unpause, sizeof(__pyx_k_Channel_unpause), 0, 0, 1, 1},
   {&__pyx_n_s_Lock, __pyx_k_Lock, sizeof(__pyx_k_Lock), 0, 0, 1, 1},
   {&__pyx_kp_s_Not_implemented, __pyx_k_Not_implemented, sizeof(__pyx_k_Not_implemented), 0, 0, 1, 0},
   {&__pyx_n_s_Thread, __pyx_k_Thread, sizeof(__pyx_k_Thread), 0, 0, 1, 1},
+  {&__pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_k_Users_tom_ab_pygame_sdl2_src_py, sizeof(__pyx_k_Users_tom_ab_pygame_sdl2_src_py), 0, 0, 1, 0},
   {&__pyx_n_s__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 1, 1},
   {&__pyx_kp_s__4, __pyx_k__4, sizeof(__pyx_k__4), 0, 0, 1, 0},
   {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1},
@@ -7028,7 +7034,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_channels, __pyx_k_channels, sizeof(__pyx_k_channels), 0, 0, 1, 1},
   {&__pyx_n_s_cid, __pyx_k_cid, sizeof(__pyx_k_cid), 0, 0, 1, 1},
   {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
-  {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
   {&__pyx_n_s_enter, __pyx_k_enter, sizeof(__pyx_k_enter), 0, 0, 1, 1},
   {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1},
   {&__pyx_n_s_errors, __pyx_k_errors, sizeof(__pyx_k_errors), 0, 0, 1, 1},
@@ -7043,44 +7048,30 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_frequency, __pyx_k_frequency, sizeof(__pyx_k_frequency), 0, 0, 1, 1},
   {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
   {&__pyx_n_s_get_busy, __pyx_k_get_busy, sizeof(__pyx_k_get_busy), 0, 0, 1, 1},
-  {&__pyx_n_s_get_endevent, __pyx_k_get_endevent, sizeof(__pyx_k_get_endevent), 0, 0, 1, 1},
   {&__pyx_n_s_get_init, __pyx_k_get_init, sizeof(__pyx_k_get_init), 0, 0, 1, 1},
   {&__pyx_n_s_get_num_channels, __pyx_k_get_num_channels, sizeof(__pyx_k_get_num_channels), 0, 0, 1, 1},
-  {&__pyx_n_s_get_queue, __pyx_k_get_queue, sizeof(__pyx_k_get_queue), 0, 0, 1, 1},
-  {&__pyx_n_s_get_sound, __pyx_k_get_sound, sizeof(__pyx_k_get_sound), 0, 0, 1, 1},
-  {&__pyx_n_s_get_volume, __pyx_k_get_volume, sizeof(__pyx_k_get_volume), 0, 0, 1, 1},
-  {&__pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_k_home_tom_ab_pygame_sdl2_src_pyg, sizeof(__pyx_k_home_tom_ab_pygame_sdl2_src_pyg), 0, 0, 1, 0},
   {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
   {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
-  {&__pyx_n_s_init_2, __pyx_k_init_2, sizeof(__pyx_k_init_2), 0, 0, 1, 1},
   {&__pyx_n_s_lock, __pyx_k_lock, sizeof(__pyx_k_lock), 0, 0, 1, 1},
   {&__pyx_n_s_loops, __pyx_k_loops, sizeof(__pyx_k_loops), 0, 0, 1, 1},
   {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
   {&__pyx_n_s_maxtime, __pyx_k_maxtime, sizeof(__pyx_k_maxtime), 0, 0, 1, 1},
-  {&__pyx_n_s_metaclass, __pyx_k_metaclass, sizeof(__pyx_k_metaclass), 0, 0, 1, 1},
-  {&__pyx_n_s_module, __pyx_k_module, sizeof(__pyx_k_module), 0, 0, 1, 1},
+  {&__pyx_n_s_ms, __pyx_k_ms, sizeof(__pyx_k_ms), 0, 0, 1, 1},
   {&__pyx_n_s_music, __pyx_k_music, sizeof(__pyx_k_music), 0, 0, 1, 1},
   {&__pyx_n_s_next_sound, __pyx_k_next_sound, sizeof(__pyx_k_next_sound), 0, 0, 1, 1},
-  {&__pyx_n_s_object, __pyx_k_object, sizeof(__pyx_k_object), 0, 0, 1, 1},
   {&__pyx_n_s_pause, __pyx_k_pause, sizeof(__pyx_k_pause), 0, 0, 1, 1},
   {&__pyx_n_s_play, __pyx_k_play, sizeof(__pyx_k_play), 0, 0, 1, 1},
   {&__pyx_n_s_play_current, __pyx_k_play_current, sizeof(__pyx_k_play_current), 0, 0, 1, 1},
   {&__pyx_n_s_pre_init, __pyx_k_pre_init, sizeof(__pyx_k_pre_init), 0, 0, 1, 1},
-  {&__pyx_n_s_prepare, __pyx_k_prepare, sizeof(__pyx_k_prepare), 0, 0, 1, 1},
   {&__pyx_n_s_pygame_sdl2, __pyx_k_pygame_sdl2, sizeof(__pyx_k_pygame_sdl2), 0, 0, 1, 1},
   {&__pyx_n_s_pygame_sdl2_error, __pyx_k_pygame_sdl2_error, sizeof(__pyx_k_pygame_sdl2_error), 0, 0, 1, 1},
   {&__pyx_n_s_pygame_sdl2_mixer, __pyx_k_pygame_sdl2_mixer, sizeof(__pyx_k_pygame_sdl2_mixer), 0, 0, 1, 1},
   {&__pyx_n_s_pygame_sdl2_mixer_music, __pyx_k_pygame_sdl2_mixer_music, sizeof(__pyx_k_pygame_sdl2_mixer_music), 0, 0, 1, 1},
-  {&__pyx_n_s_qualname, __pyx_k_qualname, sizeof(__pyx_k_qualname), 0, 0, 1, 1},
-  {&__pyx_n_s_queue, __pyx_k_queue, sizeof(__pyx_k_queue), 0, 0, 1, 1},
   {&__pyx_n_s_quit, __pyx_k_quit, sizeof(__pyx_k_quit), 0, 0, 1, 1},
   {&__pyx_n_s_register_init, __pyx_k_register_init, sizeof(__pyx_k_register_init), 0, 0, 1, 1},
   {&__pyx_n_s_register_quit, __pyx_k_register_quit, sizeof(__pyx_k_register_quit), 0, 0, 1, 1},
-  {&__pyx_n_s_self, __pyx_k_self, sizeof(__pyx_k_self), 0, 0, 1, 1},
-  {&__pyx_n_s_set_endevent, __pyx_k_set_endevent, sizeof(__pyx_k_set_endevent), 0, 0, 1, 1},
   {&__pyx_n_s_set_num_channels, __pyx_k_set_num_channels, sizeof(__pyx_k_set_num_channels), 0, 0, 1, 1},
   {&__pyx_n_s_set_reserved, __pyx_k_set_reserved, sizeof(__pyx_k_set_reserved), 0, 0, 1, 1},
-  {&__pyx_n_s_set_volume, __pyx_k_set_volume, sizeof(__pyx_k_set_volume), 0, 0, 1, 1},
   {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
   {&__pyx_n_s_sound, __pyx_k_sound, sizeof(__pyx_k_sound), 0, 0, 1, 1},
   {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
@@ -7092,15 +7083,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1},
   {&__pyx_n_s_type, __pyx_k_type, sizeof(__pyx_k_type), 0, 0, 1, 1},
   {&__pyx_n_s_unpause, __pyx_k_unpause, sizeof(__pyx_k_unpause), 0, 0, 1, 1},
-  {&__pyx_n_s_vol, __pyx_k_vol, sizeof(__pyx_k_vol), 0, 0, 1, 1},
-  {&__pyx_n_s_volume, __pyx_k_volume, sizeof(__pyx_k_volume), 0, 0, 1, 1},
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
-  __pyx_L1_error:;
-  return -1;
 }
 
 static int __Pyx_InitCachedConstants(void) {
@@ -7118,75 +7104,75 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "pygame_sdl2/mixer.pyx":70
+  /* "pygame_sdl2/mixer.pyx":71
  *         SDL_PushEvent(&e)
  * 
  *     with _lock:             # <<<<<<<<<<<<<<
  *         next_sound = channel_queued.get(channel)
  *         if next_sound:
  */
-  __pyx_tuple__2 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__2 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 71; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "pygame_sdl2/mixer.pyx":230
+  /* "pygame_sdl2/mixer.pyx":246
  *     def get_raw(self):
  *         # return self.chunk.abuf
  *         raise error("Not implemented.")             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Not_implemented); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Not_implemented); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_GIVEREF(__pyx_tuple__6);
 
-  /* "pygame_sdl2/mixer.pyx":246
+  /* "pygame_sdl2/mixer.pyx":269
  *             raise error()
  * 
  *         with _lock:             # <<<<<<<<<<<<<<
  *             current_sounds[self.cid] = sound
  * 
  */
-  __pyx_tuple__7 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__7 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__7);
   __Pyx_GIVEREF(__pyx_tuple__7);
 
-  /* "pygame_sdl2/mixer.pyx":272
+  /* "pygame_sdl2/mixer.pyx":300
  * 
  *     def get_sound(self):
  *         with _lock:             # <<<<<<<<<<<<<<
  *             return current_sounds.get(self.cid)
  * 
  */
-  __pyx_tuple__8 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__8 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__8);
   __Pyx_GIVEREF(__pyx_tuple__8);
-  __pyx_tuple__9 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__9 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__9);
   __Pyx_GIVEREF(__pyx_tuple__9);
 
-  /* "pygame_sdl2/mixer.pyx":277
+  /* "pygame_sdl2/mixer.pyx":305
  *     def queue(self, Sound sound):
  *         if self.get_busy():
  *             with _lock:             # <<<<<<<<<<<<<<
  *                 channel_queued[self.cid] = sound
  *         else:
  */
-  __pyx_tuple__10 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__10 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 305; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__10);
   __Pyx_GIVEREF(__pyx_tuple__10);
 
-  /* "pygame_sdl2/mixer.pyx":283
+  /* "pygame_sdl2/mixer.pyx":311
  * 
  *     def get_queue(self):
  *         with _lock:             # <<<<<<<<<<<<<<
  *             return channel_queued.get(self.cid)
  * 
  */
-  __pyx_tuple__11 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__11 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__11);
   __Pyx_GIVEREF(__pyx_tuple__11);
-  __pyx_tuple__12 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__12 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__12);
   __Pyx_GIVEREF(__pyx_tuple__12);
 
@@ -7200,318 +7186,145 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__14 = PyTuple_Pack(3, __pyx_n_s_channel, __pyx_n_s_channel, __pyx_n_s_next_sound); if (unlikely(!__pyx_tuple__14)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__14);
   __Pyx_GIVEREF(__pyx_tuple__14);
-  __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_play_current, 41, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__14, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_play_current, 41, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":79
+  /* "pygame_sdl2/mixer.pyx":80
  * 
  * @pygame_sdl2.register_init
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):             # <<<<<<<<<<<<<<
  *     if get_init() is not None:
  *         return
  */
-  __pyx_tuple__16 = PyTuple_Pack(5, __pyx_n_s_frequency, __pyx_n_s_size, __pyx_n_s_channels, __pyx_n_s_buffer, __pyx_n_s_flag); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__16 = PyTuple_Pack(5, __pyx_n_s_frequency, __pyx_n_s_size, __pyx_n_s_channels, __pyx_n_s_buffer, __pyx_n_s_flag); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__16);
   __Pyx_GIVEREF(__pyx_tuple__16);
-  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_init, 79, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_init, 80, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":100
+  /* "pygame_sdl2/mixer.pyx":101
  *     Mix_ChannelFinished(channel_callback)
  * 
  * def pre_init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffersize=4096):             # <<<<<<<<<<<<<<
  *     global preinit_args
  *     preinit_args = (frequency, size, channels, buffersize)
  */
-  __pyx_tuple__18 = PyTuple_Pack(4, __pyx_n_s_frequency, __pyx_n_s_size, __pyx_n_s_channels, __pyx_n_s_buffersize); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__18 = PyTuple_Pack(4, __pyx_n_s_frequency, __pyx_n_s_size, __pyx_n_s_channels, __pyx_n_s_buffersize); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__18);
   __Pyx_GIVEREF(__pyx_tuple__18);
-  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_pre_init, 100, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_pre_init, 101, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":105
+  /* "pygame_sdl2/mixer.pyx":106
  * 
  * @pygame_sdl2.register_quit
  * def quit(): # @ReservedAssignment             # <<<<<<<<<<<<<<
  *     Mix_CloseAudio()
  *     Mix_Quit()
  */
-  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_quit, 105, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_quit, 106, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":109
+  /* "pygame_sdl2/mixer.pyx":110
  *     Mix_Quit()
  * 
  * def get_init():             # <<<<<<<<<<<<<<
  *     cdef int frequency
  *     cdef Uint16 format
  */
-  __pyx_tuple__21 = PyTuple_Pack(3, __pyx_n_s_frequency, __pyx_n_s_format, __pyx_n_s_channels); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__21 = PyTuple_Pack(3, __pyx_n_s_frequency, __pyx_n_s_format, __pyx_n_s_channels); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__21);
   __Pyx_GIVEREF(__pyx_tuple__21);
-  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(0, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_init, 109, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(0, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_get_init, 110, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":119
+  /* "pygame_sdl2/mixer.pyx":120
  *         return frequency, format, channels
  * 
  * def stop():             # <<<<<<<<<<<<<<
- *     Mix_HaltChannel(-1)
- * 
+ *     with nogil:
+ *         Mix_HaltChannel(-1)
  */
-  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_stop, 119, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_stop, 120, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":122
- *     Mix_HaltChannel(-1)
+  /* "pygame_sdl2/mixer.pyx":124
+ *         Mix_HaltChannel(-1)
  * 
  * def pause():             # <<<<<<<<<<<<<<
- *     Mix_Pause(-1)
- * 
+ *     with nogil:
+ *         Mix_Pause(-1)
  */
-  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_pause, 122, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_pause, 124, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":125
- *     Mix_Pause(-1)
+  /* "pygame_sdl2/mixer.pyx":128
+ *         Mix_Pause(-1)
  * 
  * def unpause():             # <<<<<<<<<<<<<<
- *     Mix_Resume(-1)
- * 
+ *     with nogil:
+ *         Mix_Resume(-1)
  */
-  __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_unpause, 125, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_unpause, 128, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":128
- *     Mix_Resume(-1)
+  /* "pygame_sdl2/mixer.pyx":132
+ *         Mix_Resume(-1)
  * 
  * def fadeout(time):             # <<<<<<<<<<<<<<
- *     Mix_FadeOutChannel(-1, time)
- * 
+ *     cdef int ms = time
+ *     with nogil:
  */
-  __pyx_tuple__26 = PyTuple_Pack(1, __pyx_n_s_time); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__26 = PyTuple_Pack(2, __pyx_n_s_time, __pyx_n_s_ms); if (unlikely(!__pyx_tuple__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__26);
   __Pyx_GIVEREF(__pyx_tuple__26);
-  __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_fadeout, 128, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_fadeout, 132, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":131
- *     Mix_FadeOutChannel(-1, time)
+  /* "pygame_sdl2/mixer.pyx":137
+ *         Mix_FadeOutChannel(-1, ms)
  * 
  * def set_num_channels(count):             # <<<<<<<<<<<<<<
  *     Mix_AllocateChannels(count)
  * 
  */
-  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_n_s_count); if (unlikely(!__pyx_tuple__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__28 = PyTuple_Pack(1, __pyx_n_s_count); if (unlikely(!__pyx_tuple__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__28);
   __Pyx_GIVEREF(__pyx_tuple__28);
-  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_num_channels, 131, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__28, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_set_num_channels, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":134
+  /* "pygame_sdl2/mixer.pyx":140
  *     Mix_AllocateChannels(count)
  * 
  * def get_num_channels():             # <<<<<<<<<<<<<<
  *     return Mix_AllocateChannels(-1)
  * 
  */
-  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_channels, 134, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_get_num_channels, 140, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":137
+  /* "pygame_sdl2/mixer.pyx":143
  *     return Mix_AllocateChannels(-1)
  * 
  * def set_reserved(count):             # <<<<<<<<<<<<<<
  *     Mix_ReserveChannels(count)
  * 
  */
-  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_n_s_count); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__31 = PyTuple_Pack(1, __pyx_n_s_count); if (unlikely(!__pyx_tuple__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__31);
   __Pyx_GIVEREF(__pyx_tuple__31);
-  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_reserved, 137, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__32 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__31, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_set_reserved, 143, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":140
+  /* "pygame_sdl2/mixer.pyx":146
  *     Mix_ReserveChannels(count)
  * 
  * def find_channel(force=False):             # <<<<<<<<<<<<<<
  *     cdef int chan
  *     chan = Mix_GroupAvailable(-1)
  */
-  __pyx_tuple__33 = PyTuple_Pack(2, __pyx_n_s_force, __pyx_n_s_chan); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__33 = PyTuple_Pack(2, __pyx_n_s_force, __pyx_n_s_chan); if (unlikely(!__pyx_tuple__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__33);
   __Pyx_GIVEREF(__pyx_tuple__33);
-  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_find_channel, 140, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__34 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__33, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_find_channel, 146, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/mixer.pyx":151
+  /* "pygame_sdl2/mixer.pyx":157
  *     return Channel(chan)
  * 
  * def get_busy():             # <<<<<<<<<<<<<<
  *     return Mix_GroupNewer(-1) != -1
  * 
  */
-  __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_busy, 151, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":234
- * 
- * class Channel(object):
- *     def __init__(self, cid):             # <<<<<<<<<<<<<<
- *         self.cid = cid
- * 
- */
-  __pyx_tuple__36 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_cid); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__36);
-  __Pyx_GIVEREF(__pyx_tuple__36);
-  __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_init_2, 234, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":237
- *         self.cid = cid
- * 
- *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):             # <<<<<<<<<<<<<<
- *         if fade_ms != 0:
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
- */
-  __pyx_tuple__38 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_sound, __pyx_n_s_loops, __pyx_n_s_maxtime, __pyx_n_s_fade_ms, __pyx_n_s_cid); if (unlikely(!__pyx_tuple__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__38);
-  __Pyx_GIVEREF(__pyx_tuple__38);
-  __pyx_codeobj__39 = (PyObject*)__Pyx_PyCode_New(5, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__38, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_play, 237, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_tuple__40 = PyTuple_Pack(3, ((PyObject *)__pyx_int_0), ((PyObject *)__pyx_int_neg_1), ((PyObject *)__pyx_int_0)); if (unlikely(!__pyx_tuple__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__40);
-  __Pyx_GIVEREF(__pyx_tuple__40);
-
-  /* "pygame_sdl2/mixer.pyx":249
- *             current_sounds[self.cid] = sound
- * 
- *     def stop(self):             # <<<<<<<<<<<<<<
- *         Mix_HaltChannel(self.cid)
- * 
- */
-  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__41);
-  __Pyx_GIVEREF(__pyx_tuple__41);
-  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_stop, 249, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":252
- *         Mix_HaltChannel(self.cid)
- * 
- *     def pause(self):             # <<<<<<<<<<<<<<
- *         Mix_Pause(self.cid)
- * 
- */
-  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__43);
-  __Pyx_GIVEREF(__pyx_tuple__43);
-  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_pause, 252, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":255
- *         Mix_Pause(self.cid)
- * 
- *     def unpause(self):             # <<<<<<<<<<<<<<
- *         Mix_Resume(self.cid)
- * 
- */
-  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__45);
-  __Pyx_GIVEREF(__pyx_tuple__45);
-  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__45, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_unpause, 255, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":258
- *         Mix_Resume(self.cid)
- * 
- *     def fadeout(self, time):             # <<<<<<<<<<<<<<
- *         Mix_FadeOutChannel(self.cid, time)
- * 
- */
-  __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_time); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__47);
-  __Pyx_GIVEREF(__pyx_tuple__47);
-  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_fadeout, 258, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":261
- *         Mix_FadeOutChannel(self.cid, time)
- * 
- *     def set_volume(self, volume):             # <<<<<<<<<<<<<<
- *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
- * 
- */
-  __pyx_tuple__49 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_volume); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__49);
-  __Pyx_GIVEREF(__pyx_tuple__49);
-  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_volume, 261, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":264
- *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
- * 
- *     def get_volume(self):             # <<<<<<<<<<<<<<
- *         cdef int vol = Mix_Volume(self.cid, -1)
- *         return vol / <double>MIX_MAX_VOLUME
- */
-  __pyx_tuple__51 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_vol); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__51);
-  __Pyx_GIVEREF(__pyx_tuple__51);
-  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_volume, 264, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":268
- *         return vol / <double>MIX_MAX_VOLUME
- * 
- *     def get_busy(self):             # <<<<<<<<<<<<<<
- *         return Mix_Playing(self.cid) != 0
- * 
- */
-  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__53);
-  __Pyx_GIVEREF(__pyx_tuple__53);
-  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_busy, 268, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":271
- *         return Mix_Playing(self.cid) != 0
- * 
- *     def get_sound(self):             # <<<<<<<<<<<<<<
- *         with _lock:
- *             return current_sounds.get(self.cid)
- */
-  __pyx_tuple__55 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__55);
-  __Pyx_GIVEREF(__pyx_tuple__55);
-  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_sound, 271, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":275
- *             return current_sounds.get(self.cid)
- * 
- *     def queue(self, Sound sound):             # <<<<<<<<<<<<<<
- *         if self.get_busy():
- *             with _lock:
- */
-  __pyx_tuple__57 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_sound); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__57);
-  __Pyx_GIVEREF(__pyx_tuple__57);
-  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_queue, 275, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":282
- *             self.play(sound)
- * 
- *     def get_queue(self):             # <<<<<<<<<<<<<<
- *         with _lock:
- *             return channel_queued.get(self.cid)
- */
-  __pyx_tuple__59 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__59);
-  __Pyx_GIVEREF(__pyx_tuple__59);
-  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_queue, 282, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-
-  /* "pygame_sdl2/mixer.pyx":286
- *             return channel_queued.get(self.cid)
- * 
- *     def set_endevent(self, type=None):             # <<<<<<<<<<<<<<
- *         channel_events[self.cid] = type or 0
- * 
- */
-  __pyx_tuple__61 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_type); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__61);
-  __Pyx_GIVEREF(__pyx_tuple__61);
-  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_endevent, 286, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_tuple__63 = PyTuple_Pack(1, ((PyObject *)Py_None)); if (unlikely(!__pyx_tuple__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__63);
-  __Pyx_GIVEREF(__pyx_tuple__63);
-
-  /* "pygame_sdl2/mixer.pyx":289
- *         channel_events[self.cid] = type or 0
- * 
- *     def get_endevent(self):             # <<<<<<<<<<<<<<
- *         return channel_events.get(self.cid, 0)
- */
-  __pyx_tuple__64 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__64);
-  __Pyx_GIVEREF(__pyx_tuple__64);
-  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__64, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_endevent, 289, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_tom_ab_pygame_sdl2_src_py, __pyx_n_s_get_busy, 157, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -7559,24 +7372,18 @@ PyMODINIT_FUNC PyInit_mixer(void)
   }
   #endif
   __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_mixer(void)", 0);
-  if (__Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if ( __Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #ifdef __Pyx_CyFunction_USED
-  if (__pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #endif
   #ifdef __Pyx_FusedFunction_USED
   if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #endif
-  #ifdef __Pyx_Coroutine_USED
-  if (__pyx_Coroutine_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
   #ifdef __Pyx_Generator_USED
   if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #endif
-  #ifdef __Pyx_StopAsyncIteration_USED
-  if (__pyx_StopAsyncIteration_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
   #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
@@ -7599,12 +7406,12 @@ PyMODINIT_FUNC PyInit_mixer(void)
   #endif
   if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   /*--- Initialize various global constants etc. ---*/
-  if (__Pyx_InitGlobals() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(__Pyx_InitGlobals() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
   if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #endif
   if (__pyx_module_is_main_pygame_sdl2__mixer) {
-    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   }
   #if PY_MAJOR_VERSION >= 3
   {
@@ -7615,9 +7422,9 @@ PyMODINIT_FUNC PyInit_mixer(void)
   }
   #endif
   /*--- Builtin init code ---*/
-  if (__Pyx_InitCachedBuiltins() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(__Pyx_InitCachedBuiltins() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   /*--- Constants init code ---*/
-  if (__Pyx_InitCachedConstants() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(__Pyx_InitCachedConstants() < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   /*--- Global init code ---*/
   __pyx_v_11pygame_sdl2_5mixer_preinit_args = Py_None; Py_INCREF(Py_None);
   __pyx_v_11pygame_sdl2_5mixer_output_spec = Py_None; Py_INCREF(Py_None);
@@ -7627,10 +7434,14 @@ PyMODINIT_FUNC PyInit_mixer(void)
   /*--- Variable export code ---*/
   /*--- Function export code ---*/
   /*--- Type init code ---*/
-  if (PyType_Ready(&__pyx_type_11pygame_sdl2_5mixer_Sound) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11pygame_sdl2_5mixer_Sound) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_11pygame_sdl2_5mixer_Sound.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Sound", (PyObject *)&__pyx_type_11pygame_sdl2_5mixer_Sound) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Sound", (PyObject *)&__pyx_type_11pygame_sdl2_5mixer_Sound) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_11pygame_sdl2_5mixer_Sound = &__pyx_type_11pygame_sdl2_5mixer_Sound;
+  if (PyType_Ready(&__pyx_type_11pygame_sdl2_5mixer_Channel) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_11pygame_sdl2_5mixer_Channel.tp_print = 0;
+  if (PyObject_SetAttrString(__pyx_m, "Channel", (PyObject *)&__pyx_type_11pygame_sdl2_5mixer_Channel) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_11pygame_sdl2_5mixer_Channel = &__pyx_type_11pygame_sdl2_5mixer_Channel;
   /*--- Type import code ---*/
   /*--- Variable import code ---*/
   /*--- Function import code ---*/
@@ -7638,9 +7449,6 @@ PyMODINIT_FUNC PyInit_mixer(void)
   if (__Pyx_ImportFunction(__pyx_t_1, "to_rwops", (void (**)(void))&__pyx_f_11pygame_sdl2_8rwobject_to_rwops, "SDL_RWops *(PyObject *, struct __pyx_opt_args_11pygame_sdl2_8rwobject_to_rwops *__pyx_optional_args)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   /*--- Execution code ---*/
-  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
-  if (__Pyx_patch_abc() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  #endif
 
   /* "pygame_sdl2/mixer.pyx":24
  * from libc.string cimport memset
@@ -7676,8 +7484,8 @@ PyMODINIT_FUNC PyInit_mixer(void)
   __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_n_s_error);
-  __Pyx_GIVEREF(__pyx_n_s_error);
   PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_error);
+  __Pyx_GIVEREF(__pyx_n_s_error);
   __pyx_t_3 = __Pyx_Import(__pyx_n_s_pygame_sdl2_error, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -7697,8 +7505,8 @@ PyMODINIT_FUNC PyInit_mixer(void)
   __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_n_s__13);
-  __Pyx_GIVEREF(__pyx_n_s__13);
   PyList_SET_ITEM(__pyx_t_3, 0, __pyx_n_s__13);
+  __Pyx_GIVEREF(__pyx_n_s__13);
   __pyx_t_2 = __Pyx_Import(__pyx_n_s_pygame_sdl2_mixer_music, __pyx_t_3, -1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 28; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -7828,52 +7636,52 @@ PyMODINIT_FUNC PyInit_mixer(void)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_play_current, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":76
+  /* "pygame_sdl2/mixer.pyx":77
  * 
  * # A list of errors that occured during mixer initialization.
  * errors = [ ]             # <<<<<<<<<<<<<<
  * 
  * @pygame_sdl2.register_init
  */
-  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_errors, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 76; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_errors, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":79
+  /* "pygame_sdl2/mixer.pyx":80
  * 
  * @pygame_sdl2.register_init
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):             # <<<<<<<<<<<<<<
  *     if get_init() is not None:
  *         return
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(MIX_DEFAULT_FORMAT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(MIX_DEFAULT_FORMAT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_k__3 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":78
+  /* "pygame_sdl2/mixer.pyx":79
  * errors = [ ]
  * 
  * @pygame_sdl2.register_init             # <<<<<<<<<<<<<<
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):
  *     if get_init() is not None:
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_pygame_sdl2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_pygame_sdl2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_register_init); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_register_init); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":79
+  /* "pygame_sdl2/mixer.pyx":80
  * 
  * @pygame_sdl2.register_init
  * def init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffer=4096):             # <<<<<<<<<<<<<<
  *     if get_init() is not None:
  *         return
  */
-  __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_3init, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_3init, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -7886,62 +7694,62 @@ PyMODINIT_FUNC PyInit_mixer(void)
     }
   }
   if (!__pyx_t_5) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
-    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __Pyx_GIVEREF(__pyx_t_5); __pyx_t_5 = NULL;
     PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_init, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_init, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":100
+  /* "pygame_sdl2/mixer.pyx":101
  *     Mix_ChannelFinished(channel_callback)
  * 
  * def pre_init(frequency=22050, size=MIX_DEFAULT_FORMAT, channels=2, buffersize=4096):             # <<<<<<<<<<<<<<
  *     global preinit_args
  *     preinit_args = (frequency, size, channels, buffersize)
  */
-  __pyx_t_2 = __Pyx_PyInt_From_int(MIX_DEFAULT_FORMAT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(MIX_DEFAULT_FORMAT); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_k__5 = __pyx_t_2;
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_5pre_init, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_5pre_init, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pre_init, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pre_init, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":104
+  /* "pygame_sdl2/mixer.pyx":105
  *     preinit_args = (frequency, size, channels, buffersize)
  * 
  * @pygame_sdl2.register_quit             # <<<<<<<<<<<<<<
  * def quit(): # @ReservedAssignment
  *     Mix_CloseAudio()
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_pygame_sdl2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_pygame_sdl2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_register_quit); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_register_quit); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":105
+  /* "pygame_sdl2/mixer.pyx":106
  * 
  * @pygame_sdl2.register_quit
  * def quit(): # @ReservedAssignment             # <<<<<<<<<<<<<<
  *     Mix_CloseAudio()
  *     Mix_Quit()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7quit, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7quit, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_6))) {
@@ -7954,383 +7762,182 @@ PyMODINIT_FUNC PyInit_mixer(void)
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_2);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
-    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = NULL;
     PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
+    __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_quit, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_quit, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":109
+  /* "pygame_sdl2/mixer.pyx":110
  *     Mix_Quit()
  * 
  * def get_init():             # <<<<<<<<<<<<<<
  *     cdef int frequency
  *     cdef Uint16 format
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_9get_init, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_9get_init, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_init, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_init, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":119
+  /* "pygame_sdl2/mixer.pyx":120
  *         return frequency, format, channels
  * 
  * def stop():             # <<<<<<<<<<<<<<
- *     Mix_HaltChannel(-1)
- * 
+ *     with nogil:
+ *         Mix_HaltChannel(-1)
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_11stop, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_11stop, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_stop, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_stop, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":122
- *     Mix_HaltChannel(-1)
+  /* "pygame_sdl2/mixer.pyx":124
+ *         Mix_HaltChannel(-1)
  * 
  * def pause():             # <<<<<<<<<<<<<<
- *     Mix_Pause(-1)
- * 
+ *     with nogil:
+ *         Mix_Pause(-1)
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_13pause, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_13pause, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pause, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pause, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":125
- *     Mix_Pause(-1)
+  /* "pygame_sdl2/mixer.pyx":128
+ *         Mix_Pause(-1)
  * 
  * def unpause():             # <<<<<<<<<<<<<<
- *     Mix_Resume(-1)
- * 
+ *     with nogil:
+ *         Mix_Resume(-1)
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_15unpause, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_15unpause, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unpause, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unpause, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":128
- *     Mix_Resume(-1)
+  /* "pygame_sdl2/mixer.pyx":132
+ *         Mix_Resume(-1)
  * 
  * def fadeout(time):             # <<<<<<<<<<<<<<
- *     Mix_FadeOutChannel(-1, time)
- * 
+ *     cdef int ms = time
+ *     with nogil:
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_17fadeout, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_17fadeout, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fadeout, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fadeout, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":131
- *     Mix_FadeOutChannel(-1, time)
+  /* "pygame_sdl2/mixer.pyx":137
+ *         Mix_FadeOutChannel(-1, ms)
  * 
  * def set_num_channels(count):             # <<<<<<<<<<<<<<
  *     Mix_AllocateChannels(count)
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_19set_num_channels, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_19set_num_channels, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_num_channels, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_num_channels, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":134
+  /* "pygame_sdl2/mixer.pyx":140
  *     Mix_AllocateChannels(count)
  * 
  * def get_num_channels():             # <<<<<<<<<<<<<<
  *     return Mix_AllocateChannels(-1)
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_21get_num_channels, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_21get_num_channels, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_channels, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_channels, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":137
+  /* "pygame_sdl2/mixer.pyx":143
  *     return Mix_AllocateChannels(-1)
  * 
  * def set_reserved(count):             # <<<<<<<<<<<<<<
  *     Mix_ReserveChannels(count)
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_23set_reserved, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_23set_reserved, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_reserved, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_reserved, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":140
+  /* "pygame_sdl2/mixer.pyx":146
  *     Mix_ReserveChannels(count)
  * 
  * def find_channel(force=False):             # <<<<<<<<<<<<<<
  *     cdef int chan
  *     chan = Mix_GroupAvailable(-1)
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_25find_channel, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_25find_channel, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_find_channel, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_find_channel, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":151
+  /* "pygame_sdl2/mixer.pyx":157
  *     return Channel(chan)
  * 
  * def get_busy():             # <<<<<<<<<<<<<<
  *     return Mix_GroupNewer(-1) != -1
  * 
  */
-  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_27get_busy, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_27get_busy, NULL, __pyx_n_s_pygame_sdl2_mixer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_busy, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_busy, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":233
- * 
- * 
- * class Channel(object):             # <<<<<<<<<<<<<<
- *     def __init__(self, cid):
- *         self.cid = cid
+  /* "pygame_sdl2/mixer.pyx":1
+ * # Copyright 2014 Patrick Dawson <pat at dw.is>             # <<<<<<<<<<<<<<
+ * #
+ * # This software is provided 'as-is', without any express or implied
  */
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_INCREF(__pyx_builtin_object);
-  __Pyx_GIVEREF(__pyx_builtin_object);
-  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_builtin_object);
-  __pyx_t_6 = __Pyx_CalculateMetaclass(NULL, __pyx_t_2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = __Pyx_Py3MetaclassPrepare(__pyx_t_6, __pyx_t_2, __pyx_n_s_Channel, __pyx_n_s_Channel, (PyObject *) NULL, __pyx_n_s_pygame_sdl2_mixer, (PyObject *) NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/mixer.pyx":234
- * 
- * class Channel(object):
- *     def __init__(self, cid):             # <<<<<<<<<<<<<<
- *         self.cid = cid
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_1__init__, 0, __pyx_n_s_Channel___init, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__37)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_init_2, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  /*--- Wrapped vars code ---*/
 
-  /* "pygame_sdl2/mixer.pyx":237
- *         self.cid = cid
- * 
- *     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):             # <<<<<<<<<<<<<<
- *         if fade_ms != 0:
- *             cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_3play, 0, __pyx_n_s_Channel_play, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__39)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_tuple__40);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_play, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
+  if (__pyx_m) {
+    if (__pyx_d) {
+      __Pyx_AddTraceback("init pygame_sdl2.mixer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+    }
+    Py_DECREF(__pyx_m); __pyx_m = 0;
+  } else if (!PyErr_Occurred()) {
+    PyErr_SetString(PyExc_ImportError, "init pygame_sdl2.mixer");
+  }
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  #if PY_MAJOR_VERSION < 3
+  return;
+  #else
+  return __pyx_m;
+  #endif
+}
 
-  /* "pygame_sdl2/mixer.pyx":249
- *             current_sounds[self.cid] = sound
- * 
- *     def stop(self):             # <<<<<<<<<<<<<<
- *         Mix_HaltChannel(self.cid)
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_5stop, 0, __pyx_n_s_Channel_stop, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__42)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_stop, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":252
- *         Mix_HaltChannel(self.cid)
- * 
- *     def pause(self):             # <<<<<<<<<<<<<<
- *         Mix_Pause(self.cid)
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_7pause, 0, __pyx_n_s_Channel_pause, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__44)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_pause, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":255
- *         Mix_Pause(self.cid)
- * 
- *     def unpause(self):             # <<<<<<<<<<<<<<
- *         Mix_Resume(self.cid)
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_9unpause, 0, __pyx_n_s_Channel_unpause, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__46)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_unpause, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":258
- *         Mix_Resume(self.cid)
- * 
- *     def fadeout(self, time):             # <<<<<<<<<<<<<<
- *         Mix_FadeOutChannel(self.cid, time)
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_11fadeout, 0, __pyx_n_s_Channel_fadeout, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__48)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_fadeout, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":261
- *         Mix_FadeOutChannel(self.cid, time)
- * 
- *     def set_volume(self, volume):             # <<<<<<<<<<<<<<
- *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_13set_volume, 0, __pyx_n_s_Channel_set_volume, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__50)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_set_volume, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":264
- *         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
- * 
- *     def get_volume(self):             # <<<<<<<<<<<<<<
- *         cdef int vol = Mix_Volume(self.cid, -1)
- *         return vol / <double>MIX_MAX_VOLUME
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_15get_volume, 0, __pyx_n_s_Channel_get_volume, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__52)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_get_volume, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":268
- *         return vol / <double>MIX_MAX_VOLUME
- * 
- *     def get_busy(self):             # <<<<<<<<<<<<<<
- *         return Mix_Playing(self.cid) != 0
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_17get_busy, 0, __pyx_n_s_Channel_get_busy, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__54)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_get_busy, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":271
- *         return Mix_Playing(self.cid) != 0
- * 
- *     def get_sound(self):             # <<<<<<<<<<<<<<
- *         with _lock:
- *             return current_sounds.get(self.cid)
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_19get_sound, 0, __pyx_n_s_Channel_get_sound, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__56)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_get_sound, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":275
- *             return current_sounds.get(self.cid)
- * 
- *     def queue(self, Sound sound):             # <<<<<<<<<<<<<<
- *         if self.get_busy():
- *             with _lock:
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_21queue, 0, __pyx_n_s_Channel_queue, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__58)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_queue, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":282
- *             self.play(sound)
- * 
- *     def get_queue(self):             # <<<<<<<<<<<<<<
- *         with _lock:
- *             return channel_queued.get(self.cid)
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_23get_queue, 0, __pyx_n_s_Channel_get_queue, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_get_queue, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":286
- *             return channel_queued.get(self.cid)
- * 
- *     def set_endevent(self, type=None):             # <<<<<<<<<<<<<<
- *         channel_events[self.cid] = type or 0
- * 
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_25set_endevent, 0, __pyx_n_s_Channel_set_endevent, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_3, __pyx_tuple__63);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_set_endevent, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":289
- *         channel_events[self.cid] = type or 0
- * 
- *     def get_endevent(self):             # <<<<<<<<<<<<<<
- *         return channel_events.get(self.cid, 0)
- */
-  __pyx_t_3 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_5mixer_7Channel_27get_endevent, 0, __pyx_n_s_Channel_get_endevent, NULL, __pyx_n_s_pygame_sdl2_mixer, __pyx_d, ((PyObject *)__pyx_codeobj__65)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyObject_SetItem(__pyx_t_5, __pyx_n_s_get_endevent, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":233
- * 
- * 
- * class Channel(object):             # <<<<<<<<<<<<<<
- *     def __init__(self, cid):
- *         self.cid = cid
- */
-  __pyx_t_3 = __Pyx_Py3ClassCreate(__pyx_t_6, __pyx_n_s_Channel, __pyx_t_2, __pyx_t_5, NULL, 0, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Channel, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "pygame_sdl2/mixer.pyx":1
- * # Copyright 2014 Patrick Dawson <pat at dw.is>             # <<<<<<<<<<<<<<
- * #
- * # This software is provided 'as-is', without any express or implied
- */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /*--- Wrapped vars code ---*/
-
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  if (__pyx_m) {
-    if (__pyx_d) {
-      __Pyx_AddTraceback("init pygame_sdl2.mixer", __pyx_clineno, __pyx_lineno, __pyx_filename);
-    }
-    Py_DECREF(__pyx_m); __pyx_m = 0;
-  } else if (!PyErr_Occurred()) {
-    PyErr_SetString(PyExc_ImportError, "init pygame_sdl2.mixer");
-  }
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  #if PY_MAJOR_VERSION < 3
-  return;
-  #else
-  return __pyx_m;
-  #endif
-}
-
-/* --- Runtime support code --- */
+/* Runtime support code */
 #if CYTHON_REFNANNY
 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
     PyObject *m = NULL, *p = NULL;
@@ -8440,12 +8047,8 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 }
 #else
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
-    PyObject *result;
-    PyObject *args = PyTuple_Pack(1, arg);
-    if (unlikely(!args)) return NULL;
-    result = __Pyx_PyObject_Call(func, args, NULL);
-    Py_DECREF(args);
-    return result;
+    PyObject* args = PyTuple_Pack(1, arg);
+    return (likely(args)) ? __Pyx_PyObject_Call(func, args, NULL) : NULL;
 }
 #endif
 
@@ -8601,7 +8204,7 @@ static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
 
 static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
     PyObject* value;
-#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION >= 3
     value = PyDict_GetItemWithError(d, key);
     if (unlikely(!value)) {
         if (unlikely(PyErr_Occurred()))
@@ -8628,14 +8231,9 @@ static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObjec
 
 static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
                                   CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
-                                  int full_traceback, CYTHON_UNUSED int nogil) {
+                                  int full_traceback) {
     PyObject *old_exc, *old_val, *old_tb;
     PyObject *ctx;
-#ifdef WITH_THREAD
-    PyGILState_STATE state;
-    if (nogil)
-        state = PyGILState_Ensure();
-#endif
     __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
     if (full_traceback) {
         Py_XINCREF(old_exc);
@@ -8656,10 +8254,6 @@ static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
         PyErr_WriteUnraisable(ctx);
         Py_DECREF(ctx);
     }
-#ifdef WITH_THREAD
-    if (nogil)
-        PyGILState_Release(state);
-#endif
 }
 
 static void __Pyx_RaiseDoubleKeywordsError(
@@ -8974,13 +8568,10 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
         if (value && PyExceptionInstance_Check(value)) {
             instance_class = (PyObject*) Py_TYPE(value);
             if (instance_class != type) {
-                int is_subclass = PyObject_IsSubclass(instance_class, type);
-                if (!is_subclass) {
-                    instance_class = NULL;
-                } else if (unlikely(is_subclass == -1)) {
-                    goto bad;
-                } else {
+                if (PyObject_IsSubclass(instance_class, type)) {
                     type = instance_class;
+                } else {
+                    instance_class = NULL;
                 }
             }
         }
@@ -9040,7 +8631,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
     if (tb) {
 #if CYTHON_COMPILING_IN_PYPY
         PyObject *tmp_type, *tmp_value, *tmp_tb;
-        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+        PyErr_Fetch(tmp_type, tmp_value, tmp_tb);
         Py_INCREF(tb);
         PyErr_Restore(tmp_type, tmp_value, tb);
         Py_XDECREF(tmp_tb);
@@ -9107,8 +8698,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
     return r;
 }
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
-                                                              CYTHON_NCP_UNUSED int wraparound,
-                                                              CYTHON_NCP_UNUSED int boundscheck) {
+                                                              int wraparound, int boundscheck) {
 #if CYTHON_COMPILING_IN_CPYTHON
     if (wraparound & unlikely(i < 0)) i += PyList_GET_SIZE(o);
     if ((!boundscheck) || likely((0 <= i) & (i < PyList_GET_SIZE(o)))) {
@@ -9122,8 +8712,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_
 #endif
 }
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
-                                                              CYTHON_NCP_UNUSED int wraparound,
-                                                              CYTHON_NCP_UNUSED int boundscheck) {
+                                                              int wraparound, int boundscheck) {
 #if CYTHON_COMPILING_IN_CPYTHON
     if (wraparound & unlikely(i < 0)) i += PyTuple_GET_SIZE(o);
     if ((!boundscheck) || likely((0 <= i) & (i < PyTuple_GET_SIZE(o)))) {
@@ -9136,9 +8725,8 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize
     return PySequence_GetItem(o, i);
 #endif
 }
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
-                                                     CYTHON_NCP_UNUSED int wraparound,
-                                                     CYTHON_NCP_UNUSED int boundscheck) {
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+                                                     int is_list, int wraparound, int boundscheck) {
 #if CYTHON_COMPILING_IN_CPYTHON
     if (is_list || PyList_CheckExact(o)) {
         Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
@@ -9155,849 +8743,68 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
             Py_INCREF(r);
             return r;
         }
-    } else {
-        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
-        if (likely(m && m->sq_item)) {
-            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
-                Py_ssize_t l = m->sq_length(o);
-                if (likely(l >= 0)) {
-                    i += l;
-                } else {
-                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
-                        PyErr_Clear();
-                    else
-                        return NULL;
-                }
-            }
-            return m->sq_item(o, i);
-        }
-    }
-#else
-    if (is_list || PySequence_Check(o)) {
-        return PySequence_GetItem(o, i);
-    }
-#endif
-    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
-}
-
-static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
-    PyErr_Format(PyExc_TypeError,
-        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
-        name, type->tp_name, Py_TYPE(obj)->tp_name);
-}
-static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
-    const char *name, int exact)
-{
-    if (unlikely(!type)) {
-        PyErr_SetString(PyExc_SystemError, "Missing type object");
-        return 0;
-    }
-    if (none_allowed && obj == Py_None) return 1;
-    else if (exact) {
-        if (likely(Py_TYPE(obj) == type)) return 1;
-        #if PY_MAJOR_VERSION == 2
-        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
-        #endif
-    }
-    else {
-        if (likely(PyObject_TypeCheck(obj, type))) return 1;
-    }
-    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
-    return 0;
-}
-
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
-    PyObject *empty_list = 0;
-    PyObject *module = 0;
-    PyObject *global_dict = 0;
-    PyObject *empty_dict = 0;
-    PyObject *list;
-    #if PY_VERSION_HEX < 0x03030000
-    PyObject *py_import;
-    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
-    if (!py_import)
-        goto bad;
-    #endif
-    if (from_list)
-        list = from_list;
-    else {
-        empty_list = PyList_New(0);
-        if (!empty_list)
-            goto bad;
-        list = empty_list;
-    }
-    global_dict = PyModule_GetDict(__pyx_m);
-    if (!global_dict)
-        goto bad;
-    empty_dict = PyDict_New();
-    if (!empty_dict)
-        goto bad;
-    {
-        #if PY_MAJOR_VERSION >= 3
-        if (level == -1) {
-            if (strchr(__Pyx_MODULE_NAME, '.')) {
-                #if PY_VERSION_HEX < 0x03030000
-                PyObject *py_level = PyInt_FromLong(1);
-                if (!py_level)
-                    goto bad;
-                module = PyObject_CallFunctionObjArgs(py_import,
-                    name, global_dict, empty_dict, list, py_level, NULL);
-                Py_DECREF(py_level);
-                #else
-                module = PyImport_ImportModuleLevelObject(
-                    name, global_dict, empty_dict, list, 1);
-                #endif
-                if (!module) {
-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
-                        goto bad;
-                    PyErr_Clear();
-                }
-            }
-            level = 0;
-        }
-        #endif
-        if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
-            PyObject *py_level = PyInt_FromLong(level);
-            if (!py_level)
-                goto bad;
-            module = PyObject_CallFunctionObjArgs(py_import,
-                name, global_dict, empty_dict, list, py_level, NULL);
-            Py_DECREF(py_level);
-            #else
-            module = PyImport_ImportModuleLevelObject(
-                name, global_dict, empty_dict, list, level);
-            #endif
-        }
-    }
-bad:
-    #if PY_VERSION_HEX < 0x03030000
-    Py_XDECREF(py_import);
-    #endif
-    Py_XDECREF(empty_list);
-    Py_XDECREF(empty_dict);
-    return module;
-}
-
-static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
-    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
-    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
-        PyErr_Format(PyExc_ImportError,
-        #if PY_MAJOR_VERSION < 3
-            "cannot import name %.230s", PyString_AS_STRING(name));
-        #else
-            "cannot import name %S", name);
-        #endif
-    }
-    return value;
-}
-
-static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
-    Py_ssize_t i, nbases = PyTuple_GET_SIZE(bases);
-    for (i=0; i < nbases; i++) {
-        PyTypeObject *tmptype;
-        PyObject *tmp = PyTuple_GET_ITEM(bases, i);
-        tmptype = Py_TYPE(tmp);
-#if PY_MAJOR_VERSION < 3
-        if (tmptype == &PyClass_Type)
-            continue;
-#endif
-        if (!metaclass) {
-            metaclass = tmptype;
-            continue;
-        }
-        if (PyType_IsSubtype(metaclass, tmptype))
-            continue;
-        if (PyType_IsSubtype(tmptype, metaclass)) {
-            metaclass = tmptype;
-            continue;
-        }
-        PyErr_SetString(PyExc_TypeError,
-                        "metaclass conflict: "
-                        "the metaclass of a derived class "
-                        "must be a (non-strict) subclass "
-                        "of the metaclasses of all its bases");
-        return NULL;
-    }
-    if (!metaclass) {
-#if PY_MAJOR_VERSION < 3
-        metaclass = &PyClass_Type;
-#else
-        metaclass = &PyType_Type;
-#endif
-    }
-    Py_INCREF((PyObject*) metaclass);
-    return (PyObject*) metaclass;
-}
-
-static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
-    PyObject* fake_module;
-    PyTypeObject* cached_type = NULL;
-    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
-    if (!fake_module) return NULL;
-    Py_INCREF(fake_module);
-    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
-    if (cached_type) {
-        if (!PyType_Check((PyObject*)cached_type)) {
-            PyErr_Format(PyExc_TypeError,
-                "Shared Cython type %.200s is not a type object",
-                type->tp_name);
-            goto bad;
-        }
-        if (cached_type->tp_basicsize != type->tp_basicsize) {
-            PyErr_Format(PyExc_TypeError,
-                "Shared Cython type %.200s has the wrong size, try recompiling",
-                type->tp_name);
-            goto bad;
-        }
-    } else {
-        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
-        PyErr_Clear();
-        if (PyType_Ready(type) < 0) goto bad;
-        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
-            goto bad;
-        Py_INCREF(type);
-        cached_type = type;
-    }
-done:
-    Py_DECREF(fake_module);
-    return cached_type;
-bad:
-    Py_XDECREF(cached_type);
-    cached_type = NULL;
-    goto done;
-}
-
-static PyObject *
-__Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
-{
-    if (unlikely(op->func_doc == NULL)) {
-        if (op->func.m_ml->ml_doc) {
-#if PY_MAJOR_VERSION >= 3
-            op->func_doc = PyUnicode_FromString(op->func.m_ml->ml_doc);
-#else
-            op->func_doc = PyString_FromString(op->func.m_ml->ml_doc);
-#endif
-            if (unlikely(op->func_doc == NULL))
-                return NULL;
-        } else {
-            Py_INCREF(Py_None);
-            return Py_None;
-        }
-    }
-    Py_INCREF(op->func_doc);
-    return op->func_doc;
-}
-static int
-__Pyx_CyFunction_set_doc(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp = op->func_doc;
-    if (value == NULL) {
-        value = Py_None;
-    }
-    Py_INCREF(value);
-    op->func_doc = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_name(__pyx_CyFunctionObject *op)
-{
-    if (unlikely(op->func_name == NULL)) {
-#if PY_MAJOR_VERSION >= 3
-        op->func_name = PyUnicode_InternFromString(op->func.m_ml->ml_name);
-#else
-        op->func_name = PyString_InternFromString(op->func.m_ml->ml_name);
-#endif
-        if (unlikely(op->func_name == NULL))
-            return NULL;
-    }
-    Py_INCREF(op->func_name);
-    return op->func_name;
-}
-static int
-__Pyx_CyFunction_set_name(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-#if PY_MAJOR_VERSION >= 3
-    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
-#else
-    if (unlikely(value == NULL || !PyString_Check(value))) {
-#endif
-        PyErr_SetString(PyExc_TypeError,
-                        "__name__ must be set to a string object");
-        return -1;
-    }
-    tmp = op->func_name;
-    Py_INCREF(value);
-    op->func_name = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_qualname(__pyx_CyFunctionObject *op)
-{
-    Py_INCREF(op->func_qualname);
-    return op->func_qualname;
-}
-static int
-__Pyx_CyFunction_set_qualname(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-#if PY_MAJOR_VERSION >= 3
-    if (unlikely(value == NULL || !PyUnicode_Check(value))) {
-#else
-    if (unlikely(value == NULL || !PyString_Check(value))) {
-#endif
-        PyErr_SetString(PyExc_TypeError,
-                        "__qualname__ must be set to a string object");
-        return -1;
-    }
-    tmp = op->func_qualname;
-    Py_INCREF(value);
-    op->func_qualname = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_self(__pyx_CyFunctionObject *m, CYTHON_UNUSED void *closure)
-{
-    PyObject *self;
-    self = m->func_closure;
-    if (self == NULL)
-        self = Py_None;
-    Py_INCREF(self);
-    return self;
-}
-static PyObject *
-__Pyx_CyFunction_get_dict(__pyx_CyFunctionObject *op)
-{
-    if (unlikely(op->func_dict == NULL)) {
-        op->func_dict = PyDict_New();
-        if (unlikely(op->func_dict == NULL))
-            return NULL;
-    }
-    Py_INCREF(op->func_dict);
-    return op->func_dict;
-}
-static int
-__Pyx_CyFunction_set_dict(__pyx_CyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-    if (unlikely(value == NULL)) {
-        PyErr_SetString(PyExc_TypeError,
-               "function's dictionary may not be deleted");
-        return -1;
-    }
-    if (unlikely(!PyDict_Check(value))) {
-        PyErr_SetString(PyExc_TypeError,
-               "setting function's dictionary to a non-dict");
-        return -1;
-    }
-    tmp = op->func_dict;
-    Py_INCREF(value);
-    op->func_dict = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_globals(__pyx_CyFunctionObject *op)
-{
-    Py_INCREF(op->func_globals);
-    return op->func_globals;
-}
-static PyObject *
-__Pyx_CyFunction_get_closure(CYTHON_UNUSED __pyx_CyFunctionObject *op)
-{
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-static PyObject *
-__Pyx_CyFunction_get_code(__pyx_CyFunctionObject *op)
-{
-    PyObject* result = (op->func_code) ? op->func_code : Py_None;
-    Py_INCREF(result);
-    return result;
-}
-static int
-__Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
-    int result = 0;
-    PyObject *res = op->defaults_getter((PyObject *) op);
-    if (unlikely(!res))
-        return -1;
-    #if CYTHON_COMPILING_IN_CPYTHON
-    op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
-    Py_INCREF(op->defaults_tuple);
-    op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
-    Py_INCREF(op->defaults_kwdict);
-    #else
-    op->defaults_tuple = PySequence_ITEM(res, 0);
-    if (unlikely(!op->defaults_tuple)) result = -1;
-    else {
-        op->defaults_kwdict = PySequence_ITEM(res, 1);
-        if (unlikely(!op->defaults_kwdict)) result = -1;
-    }
-    #endif
-    Py_DECREF(res);
-    return result;
-}
-static int
-__Pyx_CyFunction_set_defaults(__pyx_CyFunctionObject *op, PyObject* value) {
-    PyObject* tmp;
-    if (!value) {
-        value = Py_None;
-    } else if (value != Py_None && !PyTuple_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "__defaults__ must be set to a tuple object");
-        return -1;
-    }
-    Py_INCREF(value);
-    tmp = op->defaults_tuple;
-    op->defaults_tuple = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_defaults(__pyx_CyFunctionObject *op) {
-    PyObject* result = op->defaults_tuple;
-    if (unlikely(!result)) {
-        if (op->defaults_getter) {
-            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
-            result = op->defaults_tuple;
-        } else {
-            result = Py_None;
-        }
-    }
-    Py_INCREF(result);
-    return result;
-}
-static int
-__Pyx_CyFunction_set_kwdefaults(__pyx_CyFunctionObject *op, PyObject* value) {
-    PyObject* tmp;
-    if (!value) {
-        value = Py_None;
-    } else if (value != Py_None && !PyDict_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "__kwdefaults__ must be set to a dict object");
-        return -1;
-    }
-    Py_INCREF(value);
-    tmp = op->defaults_kwdict;
-    op->defaults_kwdict = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_kwdefaults(__pyx_CyFunctionObject *op) {
-    PyObject* result = op->defaults_kwdict;
-    if (unlikely(!result)) {
-        if (op->defaults_getter) {
-            if (__Pyx_CyFunction_init_defaults(op) < 0) return NULL;
-            result = op->defaults_kwdict;
-        } else {
-            result = Py_None;
-        }
-    }
-    Py_INCREF(result);
-    return result;
-}
-static int
-__Pyx_CyFunction_set_annotations(__pyx_CyFunctionObject *op, PyObject* value) {
-    PyObject* tmp;
-    if (!value || value == Py_None) {
-        value = NULL;
-    } else if (!PyDict_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "__annotations__ must be set to a dict object");
-        return -1;
-    }
-    Py_XINCREF(value);
-    tmp = op->func_annotations;
-    op->func_annotations = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-static PyObject *
-__Pyx_CyFunction_get_annotations(__pyx_CyFunctionObject *op) {
-    PyObject* result = op->func_annotations;
-    if (unlikely(!result)) {
-        result = PyDict_New();
-        if (unlikely(!result)) return NULL;
-        op->func_annotations = result;
-    }
-    Py_INCREF(result);
-    return result;
-}
-static PyGetSetDef __pyx_CyFunction_getsets[] = {
-    {(char *) "func_doc", (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
-    {(char *) "__doc__",  (getter)__Pyx_CyFunction_get_doc, (setter)__Pyx_CyFunction_set_doc, 0, 0},
-    {(char *) "func_name", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
-    {(char *) "__name__", (getter)__Pyx_CyFunction_get_name, (setter)__Pyx_CyFunction_set_name, 0, 0},
-    {(char *) "__qualname__", (getter)__Pyx_CyFunction_get_qualname, (setter)__Pyx_CyFunction_set_qualname, 0, 0},
-    {(char *) "__self__", (getter)__Pyx_CyFunction_get_self, 0, 0, 0},
-    {(char *) "func_dict", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
-    {(char *) "__dict__", (getter)__Pyx_CyFunction_get_dict, (setter)__Pyx_CyFunction_set_dict, 0, 0},
-    {(char *) "func_globals", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
-    {(char *) "__globals__", (getter)__Pyx_CyFunction_get_globals, 0, 0, 0},
-    {(char *) "func_closure", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
-    {(char *) "__closure__", (getter)__Pyx_CyFunction_get_closure, 0, 0, 0},
-    {(char *) "func_code", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
-    {(char *) "__code__", (getter)__Pyx_CyFunction_get_code, 0, 0, 0},
-    {(char *) "func_defaults", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
-    {(char *) "__defaults__", (getter)__Pyx_CyFunction_get_defaults, (setter)__Pyx_CyFunction_set_defaults, 0, 0},
-    {(char *) "__kwdefaults__", (getter)__Pyx_CyFunction_get_kwdefaults, (setter)__Pyx_CyFunction_set_kwdefaults, 0, 0},
-    {(char *) "__annotations__", (getter)__Pyx_CyFunction_get_annotations, (setter)__Pyx_CyFunction_set_annotations, 0, 0},
-    {0, 0, 0, 0, 0}
-};
-static PyMemberDef __pyx_CyFunction_members[] = {
-    {(char *) "__module__", T_OBJECT, offsetof(__pyx_CyFunctionObject, func.m_module), PY_WRITE_RESTRICTED, 0},
-    {0, 0, 0,  0, 0}
-};
-static PyObject *
-__Pyx_CyFunction_reduce(__pyx_CyFunctionObject *m, CYTHON_UNUSED PyObject *args)
-{
-#if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromString(m->func.m_ml->ml_name);
-#else
-    return PyString_FromString(m->func.m_ml->ml_name);
-#endif
-}
-static PyMethodDef __pyx_CyFunction_methods[] = {
-    {"__reduce__", (PyCFunction)__Pyx_CyFunction_reduce, METH_VARARGS, 0},
-    {0, 0, 0, 0}
-};
-#if PY_VERSION_HEX < 0x030500A0
-#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func_weakreflist)
-#else
-#define __Pyx_CyFunction_weakreflist(cyfunc) ((cyfunc)->func.m_weakreflist)
-#endif
-static PyObject *__Pyx_CyFunction_New(PyTypeObject *type, PyMethodDef *ml, int flags, PyObject* qualname,
-                                      PyObject *closure, PyObject *module, PyObject* globals, PyObject* code) {
-    __pyx_CyFunctionObject *op = PyObject_GC_New(__pyx_CyFunctionObject, type);
-    if (op == NULL)
-        return NULL;
-    op->flags = flags;
-    __Pyx_CyFunction_weakreflist(op) = NULL;
-    op->func.m_ml = ml;
-    op->func.m_self = (PyObject *) op;
-    Py_XINCREF(closure);
-    op->func_closure = closure;
-    Py_XINCREF(module);
-    op->func.m_module = module;
-    op->func_dict = NULL;
-    op->func_name = NULL;
-    Py_INCREF(qualname);
-    op->func_qualname = qualname;
-    op->func_doc = NULL;
-    op->func_classobj = NULL;
-    op->func_globals = globals;
-    Py_INCREF(op->func_globals);
-    Py_XINCREF(code);
-    op->func_code = code;
-    op->defaults_pyobjects = 0;
-    op->defaults = NULL;
-    op->defaults_tuple = NULL;
-    op->defaults_kwdict = NULL;
-    op->defaults_getter = NULL;
-    op->func_annotations = NULL;
-    PyObject_GC_Track(op);
-    return (PyObject *) op;
-}
-static int
-__Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
-{
-    Py_CLEAR(m->func_closure);
-    Py_CLEAR(m->func.m_module);
-    Py_CLEAR(m->func_dict);
-    Py_CLEAR(m->func_name);
-    Py_CLEAR(m->func_qualname);
-    Py_CLEAR(m->func_doc);
-    Py_CLEAR(m->func_globals);
-    Py_CLEAR(m->func_code);
-    Py_CLEAR(m->func_classobj);
-    Py_CLEAR(m->defaults_tuple);
-    Py_CLEAR(m->defaults_kwdict);
-    Py_CLEAR(m->func_annotations);
-    if (m->defaults) {
-        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
-        int i;
-        for (i = 0; i < m->defaults_pyobjects; i++)
-            Py_XDECREF(pydefaults[i]);
-        PyMem_Free(m->defaults);
-        m->defaults = NULL;
-    }
-    return 0;
-}
-static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
-{
-    PyObject_GC_UnTrack(m);
-    if (__Pyx_CyFunction_weakreflist(m) != NULL)
-        PyObject_ClearWeakRefs((PyObject *) m);
-    __Pyx_CyFunction_clear(m);
-    PyObject_GC_Del(m);
-}
-static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
-{
-    Py_VISIT(m->func_closure);
-    Py_VISIT(m->func.m_module);
-    Py_VISIT(m->func_dict);
-    Py_VISIT(m->func_name);
-    Py_VISIT(m->func_qualname);
-    Py_VISIT(m->func_doc);
-    Py_VISIT(m->func_globals);
-    Py_VISIT(m->func_code);
-    Py_VISIT(m->func_classobj);
-    Py_VISIT(m->defaults_tuple);
-    Py_VISIT(m->defaults_kwdict);
-    if (m->defaults) {
-        PyObject **pydefaults = __Pyx_CyFunction_Defaults(PyObject *, m);
-        int i;
-        for (i = 0; i < m->defaults_pyobjects; i++)
-            Py_VISIT(pydefaults[i]);
-    }
-    return 0;
-}
-static PyObject *__Pyx_CyFunction_descr_get(PyObject *func, PyObject *obj, PyObject *type)
-{
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    if (m->flags & __Pyx_CYFUNCTION_STATICMETHOD) {
-        Py_INCREF(func);
-        return func;
-    }
-    if (m->flags & __Pyx_CYFUNCTION_CLASSMETHOD) {
-        if (type == NULL)
-            type = (PyObject *)(Py_TYPE(obj));
-        return __Pyx_PyMethod_New(func, type, (PyObject *)(Py_TYPE(type)));
-    }
-    if (obj == Py_None)
-        obj = NULL;
-    return __Pyx_PyMethod_New(func, obj, type);
-}
-static PyObject*
-__Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
-{
-#if PY_MAJOR_VERSION >= 3
-    return PyUnicode_FromFormat("<cyfunction %U at %p>",
-                                op->func_qualname, (void *)op);
-#else
-    return PyString_FromFormat("<cyfunction %s at %p>",
-                               PyString_AsString(op->func_qualname), (void *)op);
-#endif
-}
-#if CYTHON_COMPILING_IN_PYPY
-static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-    PyCFunctionObject* f = (PyCFunctionObject*)func;
-    PyCFunction meth = f->m_ml->ml_meth;
-    PyObject *self = f->m_self;
-    Py_ssize_t size;
-    switch (f->m_ml->ml_flags & (METH_VARARGS | METH_KEYWORDS | METH_NOARGS | METH_O)) {
-    case METH_VARARGS:
-        if (likely(kw == NULL || PyDict_Size(kw) == 0))
-            return (*meth)(self, arg);
-        break;
-    case METH_VARARGS | METH_KEYWORDS:
-        return (*(PyCFunctionWithKeywords)meth)(self, arg, kw);
-    case METH_NOARGS:
-        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
-            size = PyTuple_GET_SIZE(arg);
-            if (likely(size == 0))
-                return (*meth)(self, NULL);
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes no arguments (%" CYTHON_FORMAT_SSIZE_T "d given)",
-                f->m_ml->ml_name, size);
-            return NULL;
-        }
-        break;
-    case METH_O:
-        if (likely(kw == NULL || PyDict_Size(kw) == 0)) {
-            size = PyTuple_GET_SIZE(arg);
-            if (likely(size == 1)) {
-                PyObject *result, *arg0 = PySequence_ITEM(arg, 0);
-                if (unlikely(!arg0)) return NULL;
-                result = (*meth)(self, arg0);
-                Py_DECREF(arg0);
-                return result;
+    } else {
+        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+        if (likely(m && m->sq_item)) {
+            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+                Py_ssize_t l = m->sq_length(o);
+                if (likely(l >= 0)) {
+                    i += l;
+                } else {
+                    if (PyErr_ExceptionMatches(PyExc_OverflowError))
+                        PyErr_Clear();
+                    else
+                        return NULL;
+                }
             }
-            PyErr_Format(PyExc_TypeError,
-                "%.200s() takes exactly one argument (%" CYTHON_FORMAT_SSIZE_T "d given)",
-                f->m_ml->ml_name, size);
-            return NULL;
+            return m->sq_item(o, i);
         }
-        break;
-    default:
-        PyErr_SetString(PyExc_SystemError, "Bad call flags in "
-                        "__Pyx_CyFunction_Call. METH_OLDARGS is no "
-                        "longer supported!");
-        return NULL;
     }
-    PyErr_Format(PyExc_TypeError, "%.200s() takes no keyword arguments",
-                 f->m_ml->ml_name);
-    return NULL;
-}
-#else
-static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
-	return PyCFunction_Call(func, arg, kw);
-}
-#endif
-static PyTypeObject __pyx_CyFunctionType_type = {
-    PyVarObject_HEAD_INIT(0, 0)
-    "cython_function_or_method",
-    sizeof(__pyx_CyFunctionObject),
-    0,
-    (destructor) __Pyx_CyFunction_dealloc,
-    0,
-    0,
-    0,
-#if PY_MAJOR_VERSION < 3
-    0,
-#else
-    0,
-#endif
-    (reprfunc) __Pyx_CyFunction_repr,
-    0,
-    0,
-    0,
-    0,
-    __Pyx_CyFunction_Call,
-    0,
-    0,
-    0,
-    0,
-    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,
-    0,
-    (traverseproc) __Pyx_CyFunction_traverse,
-    (inquiry) __Pyx_CyFunction_clear,
-    0,
-#if PY_VERSION_HEX < 0x030500A0
-    offsetof(__pyx_CyFunctionObject, func_weakreflist),
 #else
-    offsetof(PyCFunctionObject, m_weakreflist),
-#endif
-    0,
-    0,
-    __pyx_CyFunction_methods,
-    __pyx_CyFunction_members,
-    __pyx_CyFunction_getsets,
-    0,
-    0,
-    __Pyx_CyFunction_descr_get,
-    0,
-    offsetof(__pyx_CyFunctionObject, func_dict),
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-    0,
-#if PY_VERSION_HEX >= 0x030400a1
-    0,
-#endif
-};
-static int __pyx_CyFunction_init(void) {
-#if !CYTHON_COMPILING_IN_PYPY
-    __pyx_CyFunctionType_type.tp_call = PyCFunction_Call;
-#endif
-    __pyx_CyFunctionType = __Pyx_FetchCommonType(&__pyx_CyFunctionType_type);
-    if (__pyx_CyFunctionType == NULL) {
-        return -1;
+    if (is_list || PySequence_Check(o)) {
+        return PySequence_GetItem(o, i);
     }
-    return 0;
+#endif
+    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
 }
-static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *func, size_t size, int pyobjects) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults = PyMem_Malloc(size);
-    if (!m->defaults)
-        return PyErr_NoMemory();
-    memset(m->defaults, 0, size);
-    m->defaults_pyobjects = pyobjects;
-    return m->defaults;
-}
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *func, PyObject *tuple) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults_tuple = tuple;
-    Py_INCREF(tuple);
-}
-static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *func, PyObject *dict) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->defaults_kwdict = dict;
-    Py_INCREF(dict);
-}
-static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, PyObject *dict) {
-    __pyx_CyFunctionObject *m = (__pyx_CyFunctionObject *) func;
-    m->func_annotations = dict;
-    Py_INCREF(dict);
-}
-
-static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
-                                           PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
-    PyObject *ns;
-    if (metaclass) {
-        PyObject *prep = __Pyx_PyObject_GetAttrStr(metaclass, __pyx_n_s_prepare);
-        if (prep) {
-            PyObject *pargs = PyTuple_Pack(2, name, bases);
-            if (unlikely(!pargs)) {
-                Py_DECREF(prep);
-                return NULL;
-            }
-            ns = PyObject_Call(prep, pargs, mkw);
-            Py_DECREF(prep);
-            Py_DECREF(pargs);
-        } else {
-            if (unlikely(!PyErr_ExceptionMatches(PyExc_AttributeError)))
-                return NULL;
-            PyErr_Clear();
-            ns = PyDict_New();
-        }
-    } else {
-        ns = PyDict_New();
-    }
-    if (unlikely(!ns))
-        return NULL;
-    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_module, modname) < 0)) goto bad;
-    if (unlikely(PyObject_SetItem(ns, __pyx_n_s_qualname, qualname) < 0)) goto bad;
-    if (unlikely(doc && PyObject_SetItem(ns, __pyx_n_s_doc, doc) < 0)) goto bad;
-    return ns;
-bad:
-    Py_DECREF(ns);
-    return NULL;
+
+static void __Pyx_RaiseArgumentTypeInvalid(const char* name, PyObject *obj, PyTypeObject *type) {
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
 }
-static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObject *bases,
-                                      PyObject *dict, PyObject *mkw,
-                                      int calculate_metaclass, int allow_py2_metaclass) {
-    PyObject *result, *margs;
-    PyObject *owned_metaclass = NULL;
-    if (allow_py2_metaclass) {
-        owned_metaclass = PyObject_GetItem(dict, __pyx_n_s_metaclass);
-        if (owned_metaclass) {
-            metaclass = owned_metaclass;
-        } else if (likely(PyErr_ExceptionMatches(PyExc_KeyError))) {
-            PyErr_Clear();
-        } else {
-            return NULL;
-        }
+static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, int none_allowed,
+    const char *name, int exact)
+{
+    if (unlikely(!type)) {
+        PyErr_SetString(PyExc_SystemError, "Missing type object");
+        return 0;
     }
-    if (calculate_metaclass && (!metaclass || PyType_Check(metaclass))) {
-        metaclass = __Pyx_CalculateMetaclass((PyTypeObject*) metaclass, bases);
-        Py_XDECREF(owned_metaclass);
-        if (unlikely(!metaclass))
-            return NULL;
-        owned_metaclass = metaclass;
+    if (none_allowed && obj == Py_None) return 1;
+    else if (exact) {
+        if (likely(Py_TYPE(obj) == type)) return 1;
+        #if PY_MAJOR_VERSION == 2
+        else if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
+        #endif
     }
-    margs = PyTuple_Pack(3, name, bases, dict);
-    if (unlikely(!margs)) {
-        result = NULL;
-    } else {
-        result = PyObject_Call(metaclass, margs, mkw);
-        Py_DECREF(margs);
+    else {
+        if (likely(PyObject_TypeCheck(obj, type))) return 1;
     }
-    Py_XDECREF(owned_metaclass);
-    return result;
+    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
+    return 0;
+}
+
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
+    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
+        PyErr_Format(PyExc_ImportError,
+        #if PY_MAJOR_VERSION < 3
+            "cannot import name %.230s", PyString_AS_STRING(name));
+        #else
+            "cannot import name %S", name);
+        #endif
+    }
+    return value;
 }
 
 static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
@@ -10006,7 +8813,7 @@ static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int co
         return count;
     }
     while (start < end) {
-        mid = start + (end - start) / 2;
+        mid = (start + end) / 2;
         if (code_line < entries[mid].code_line) {
             end = mid;
         } else if (code_line > entries[mid].code_line) {
@@ -10159,33 +8966,102 @@ bad:
     Py_XDECREF(py_frame);
 }
 
-#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
-    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
-#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
-    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
-#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
-    {\
-        func_type value = func_value;\
-        if (sizeof(target_type) < sizeof(func_type)) {\
-            if (unlikely(value != (func_type) (target_type) value)) {\
-                func_type zero = 0;\
-                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
-                    return (target_type) -1;\
-                if (is_unsigned && unlikely(value < zero))\
-                    goto raise_neg_overflow;\
-                else\
-                    goto raise_overflow;\
-            }\
-        }\
-        return (target_type) value;\
-    }
-
-#if CYTHON_USE_PYLONG_INTERNALS
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0;
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
+        }
+    }
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)       \
+    {                                                                     \
+        func_type value = func_value;                                     \
+        if (sizeof(target_type) < sizeof(func_type)) {                    \
+            if (unlikely(value != (func_type) (target_type) value)) {     \
+                func_type zero = 0;                                       \
+                if (is_unsigned && unlikely(value < zero))                \
+                    goto raise_neg_overflow;                              \
+                else                                                      \
+                    goto raise_overflow;                                  \
+            }                                                             \
+        }                                                                 \
+        return (target_type) value;                                       \
+    }
+
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
   #include "longintrepr.h"
+ #endif
 #endif
 
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
-    const int neg_one = (int) -1, const_zero = (int) 0;
+    const int neg_one = (int) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -10202,125 +9078,36 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
             switch (Py_SIZE(x)) {
-                case  0: return (int) 0;
-                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
-                case 2:
-                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
-                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
-                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
-                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
-                        }
-                    }
-                    break;
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
+ #endif
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
-#else
-            {
-                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
-                if (unlikely(result < 0))
-                    return (int) -1;
-                if (unlikely(result == 1))
-                    goto raise_neg_overflow;
-            }
-#endif
             if (sizeof(int) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+                __PYX_VERIFY_RETURN_INT(int, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(int) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(int, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
             switch (Py_SIZE(x)) {
-                case  0: return (int) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) digits[0])
-                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
-                case -2:
-                    if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
-                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
-                        }
-                    }
-                    break;
-                case 2:
-                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
-                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
-                        }
-                    }
-                    break;
-                case -3:
-                    if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
-                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
-                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
-                        }
-                    }
-                    break;
-                case -4:
-                    if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
-                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
-                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
-                        }
-                    }
-                    break;
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
+ #endif
 #endif
             if (sizeof(int) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
-            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+                __PYX_VERIFY_RETURN_INT(int, long, PyLong_AsLong(x))
+            } else if (sizeof(int) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(int, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -10369,21 +9156,21 @@ raise_neg_overflow:
 }
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
-    const int neg_one = (int) -1, const_zero = (int) 0;
+    const int neg_one = (int) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
         if (sizeof(int) < sizeof(long)) {
             return PyInt_FromLong((long) value);
         } else if (sizeof(int) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        } else if (sizeof(int) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
     } else {
         if (sizeof(int) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
-        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        } else if (sizeof(int) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
         }
     }
     {
@@ -10394,34 +9181,8 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
     }
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MIX_InitFlags(MIX_InitFlags value) {
-    const MIX_InitFlags neg_one = (MIX_InitFlags) -1, const_zero = (MIX_InitFlags) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(MIX_InitFlags) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(MIX_InitFlags) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(MIX_InitFlags) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-        }
-    } else {
-        if (sizeof(MIX_InitFlags) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(MIX_InitFlags) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(MIX_InitFlags),
-                                     little, !is_unsigned);
-    }
-}
-
 static CYTHON_INLINE uint16_t __Pyx_PyInt_As_uint16_t(PyObject *x) {
-    const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0;
+    const uint16_t neg_one = (uint16_t) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -10438,125 +9199,36 @@ static CYTHON_INLINE uint16_t __Pyx_PyInt_As_uint16_t(PyObject *x) {
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
             switch (Py_SIZE(x)) {
-                case  0: return (uint16_t) 0;
-                case  1: __PYX_VERIFY_RETURN_INT(uint16_t, digit, digits[0])
-                case 2:
-                    if (8 * sizeof(uint16_t) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) >= 2 * PyLong_SHIFT) {
-                            return (uint16_t) (((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(uint16_t) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) >= 3 * PyLong_SHIFT) {
-                            return (uint16_t) (((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(uint16_t) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) >= 4 * PyLong_SHIFT) {
-                            return (uint16_t) (((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0]));
-                        }
-                    }
-                    break;
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(uint16_t, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
+ #endif
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
-#else
-            {
-                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
-                if (unlikely(result < 0))
-                    return (uint16_t) -1;
-                if (unlikely(result == 1))
-                    goto raise_neg_overflow;
-            }
-#endif
             if (sizeof(uint16_t) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(uint16_t, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(uint16_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+                __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(uint16_t) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
             switch (Py_SIZE(x)) {
-                case  0: return (uint16_t) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(uint16_t, sdigit, -(sdigit) digits[0])
-                case  1: __PYX_VERIFY_RETURN_INT(uint16_t,  digit, +digits[0])
-                case -2:
-                    if (8 * sizeof(uint16_t) - 1 > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) - 1 > 2 * PyLong_SHIFT) {
-                            return (uint16_t) (((uint16_t)-1)*(((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])));
-                        }
-                    }
-                    break;
-                case 2:
-                    if (8 * sizeof(uint16_t) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) - 1 > 2 * PyLong_SHIFT) {
-                            return (uint16_t) ((((((uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])));
-                        }
-                    }
-                    break;
-                case -3:
-                    if (8 * sizeof(uint16_t) - 1 > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) - 1 > 3 * PyLong_SHIFT) {
-                            return (uint16_t) (((uint16_t)-1)*(((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(uint16_t) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) - 1 > 3 * PyLong_SHIFT) {
-                            return (uint16_t) ((((((((uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])));
-                        }
-                    }
-                    break;
-                case -4:
-                    if (8 * sizeof(uint16_t) - 1 > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) - 1 > 4 * PyLong_SHIFT) {
-                            return (uint16_t) (((uint16_t)-1)*(((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(uint16_t) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(uint16_t, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(uint16_t) - 1 > 4 * PyLong_SHIFT) {
-                            return (uint16_t) ((((((((((uint16_t)digits[3]) << PyLong_SHIFT) | (uint16_t)digits[2]) << PyLong_SHIFT) | (uint16_t)digits[1]) << PyLong_SHIFT) | (uint16_t)digits[0])));
-                        }
-                    }
-                    break;
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(uint16_t,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(uint16_t, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
+ #endif
 #endif
             if (sizeof(uint16_t) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(uint16_t, long, PyLong_AsLong(x))
-            } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(uint16_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+                __PYX_VERIFY_RETURN_INT(uint16_t, long, PyLong_AsLong(x))
+            } else if (sizeof(uint16_t) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(uint16_t, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -10605,21 +9277,21 @@ raise_neg_overflow:
 }
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) {
-    const uint16_t neg_one = (uint16_t) -1, const_zero = (uint16_t) 0;
+    const uint16_t neg_one = (uint16_t) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
         if (sizeof(uint16_t) < sizeof(long)) {
             return PyInt_FromLong((long) value);
         } else if (sizeof(uint16_t) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(uint16_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        } else if (sizeof(uint16_t) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
     } else {
         if (sizeof(uint16_t) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
-        } else if (sizeof(uint16_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        } else if (sizeof(uint16_t) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
         }
     }
     {
@@ -10631,21 +9303,21 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_uint16_t(uint16_t value) {
 }
 
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
-    const long neg_one = (long) -1, const_zero = (long) 0;
+    const long neg_one = (long) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
         if (sizeof(long) < sizeof(long)) {
             return PyInt_FromLong((long) value);
         } else if (sizeof(long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        } else if (sizeof(long) <= sizeof(unsigned long long)) {
+            return PyLong_FromUnsignedLongLong((unsigned long long) value);
         }
     } else {
         if (sizeof(long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
-        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        } else if (sizeof(long) <= sizeof(long long)) {
+            return PyLong_FromLongLong((long long) value);
         }
     }
     {
@@ -10657,7 +9329,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
 }
 
 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
-    const long neg_one = (long) -1, const_zero = (long) 0;
+    const long neg_one = (long) -1, const_zero = 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
     if (likely(PyInt_Check(x))) {
@@ -10674,125 +9346,36 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
 #endif
     if (likely(PyLong_Check(x))) {
         if (is_unsigned) {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
             switch (Py_SIZE(x)) {
-                case  0: return (long) 0;
-                case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
-                case 2:
-                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
-                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
-                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
-                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
-                        }
-                    }
-                    break;
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long, digit, ((PyLongObject*)x)->ob_digit[0]);
             }
+ #endif
 #endif
-#if CYTHON_COMPILING_IN_CPYTHON
             if (unlikely(Py_SIZE(x) < 0)) {
                 goto raise_neg_overflow;
             }
-#else
-            {
-                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
-                if (unlikely(result < 0))
-                    return (long) -1;
-                if (unlikely(result == 1))
-                    goto raise_neg_overflow;
-            }
-#endif
             if (sizeof(long) <= sizeof(unsigned long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
-            } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+                __PYX_VERIFY_RETURN_INT(long, unsigned long, PyLong_AsUnsignedLong(x))
+            } else if (sizeof(long) <= sizeof(unsigned long long)) {
+                __PYX_VERIFY_RETURN_INT(long, unsigned long long, PyLong_AsUnsignedLongLong(x))
             }
         } else {
-#if CYTHON_USE_PYLONG_INTERNALS
-            const digit* digits = ((PyLongObject*)x)->ob_digit;
+#if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+ #if CYTHON_USE_PYLONG_INTERNALS
             switch (Py_SIZE(x)) {
-                case  0: return (long) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) digits[0])
-                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
-                case -2:
-                    if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
-                            return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
-                        }
-                    }
-                    break;
-                case 2:
-                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
-                            return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
-                        }
-                    }
-                    break;
-                case -3:
-                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
-                            return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
-                        }
-                    }
-                    break;
-                case 3:
-                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
-                            return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
-                        }
-                    }
-                    break;
-                case -4:
-                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
-                            return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
-                        }
-                    }
-                    break;
-                case 4:
-                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
-                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
-                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
-                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
-                            return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
-                        }
-                    }
-                    break;
+                case  0: return 0;
+                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +(((PyLongObject*)x)->ob_digit[0]));
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) ((PyLongObject*)x)->ob_digit[0]);
             }
+ #endif
 #endif
             if (sizeof(long) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
-            } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+                __PYX_VERIFY_RETURN_INT(long, long, PyLong_AsLong(x))
+            } else if (sizeof(long) <= sizeof(long long)) {
+                __PYX_VERIFY_RETURN_INT(long, long long, PyLong_AsLongLong(x))
             }
         }
         {
@@ -10963,7 +9546,7 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
     return __Pyx_PyObject_AsStringAndSize(o, &ignore);
 }
 static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
-#if CYTHON_COMPILING_IN_CPYTHON && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
     if (
 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
             __Pyx_sys_getdefaultencoding_not_ascii &&
@@ -11004,7 +9587,7 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
 #endif
     } else
 #endif
-#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
+#if !CYTHON_COMPILING_IN_PYPY
     if (PyByteArray_Check(o)) {
         *length = PyByteArray_GET_SIZE(o);
         return PyByteArray_AS_STRING(o);
@@ -11034,7 +9617,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
 #else
   if (PyLong_Check(x))
 #endif
-    return __Pyx_NewRef(x);
+    return Py_INCREF(x), x;
   m = Py_TYPE(x)->tp_as_number;
 #if PY_MAJOR_VERSION < 3
   if (m && m->nb_int) {
@@ -11074,55 +9657,18 @@ static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
   Py_ssize_t ival;
   PyObject *x;
 #if PY_MAJOR_VERSION < 3
-  if (likely(PyInt_CheckExact(b))) {
-    if (sizeof(Py_ssize_t) >= sizeof(long))
-        return PyInt_AS_LONG(b);
-    else
-        return PyInt_AsSsize_t(x);
-  }
+  if (likely(PyInt_CheckExact(b)))
+      return PyInt_AS_LONG(b);
 #endif
   if (likely(PyLong_CheckExact(b))) {
-    #if CYTHON_USE_PYLONG_INTERNALS
-    const digit* digits = ((PyLongObject*)b)->ob_digit;
-    const Py_ssize_t size = Py_SIZE(b);
-    if (likely(__Pyx_sst_abs(size) <= 1)) {
-        ival = likely(size) ? digits[0] : 0;
-        if (size == -1) ival = -ival;
-        return ival;
-    } else {
-      switch (size) {
-         case 2:
-           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
-             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
-           }
-           break;
-         case -2:
-           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
-             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
-           }
-           break;
-         case 3:
-           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
-             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
-           }
-           break;
-         case -3:
-           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
-             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
-           }
-           break;
-         case 4:
-           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
-             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
-           }
-           break;
-         case -4:
-           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
-             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
-           }
-           break;
-      }
-    }
+    #if CYTHON_COMPILING_IN_CPYTHON && PY_MAJOR_VERSION >= 3
+     #if CYTHON_USE_PYLONG_INTERNALS
+       switch (Py_SIZE(b)) {
+       case -1: return -(sdigit)((PyLongObject*)b)->ob_digit[0];
+       case  0: return 0;
+       case  1: return ((PyLongObject*)b)->ob_digit[0];
+       }
+     #endif
     #endif
     return PyLong_AsSsize_t(b);
   }
diff --git a/gen/pygame_sdl2.rwobject.c b/gen/pygame_sdl2.rwobject.c
index 1f5acd4..883f628 100644
--- a/gen/pygame_sdl2.rwobject.c
+++ b/gen/pygame_sdl2.rwobject.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.23.4 */
+/* Generated by Cython 0.23.5 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -7,7 +7,7 @@
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
     #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_23_4"
+#define CYTHON_ABI "0_23_5"
 #include <stddef.h>
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -2168,7 +2168,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
  *     elif whence == RW_SEEK_CUR:
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base             # <<<<<<<<<<<<<<
  *     elif whence == RW_SEEK_END:
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  */
     __pyx_v_sf->tell = (SDL_RWseek(__pyx_v_sf->rw, __pyx_v_seek, RW_SEEK_CUR) - __pyx_v_sf->base);
 
@@ -2185,7 +2185,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
  *     elif whence == RW_SEEK_CUR:
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base
  *     elif whence == RW_SEEK_END:             # <<<<<<<<<<<<<<
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  * 
  */
     case RW_SEEK_END:
@@ -2193,17 +2193,17 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
     /* "pygame_sdl2/rwobject.pyx":142
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base
  *     elif whence == RW_SEEK_END:
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base             # <<<<<<<<<<<<<<
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base             # <<<<<<<<<<<<<<
  * 
  *     return sf.tell
  */
-    __pyx_v_sf->tell = (SDL_RWseek(__pyx_v_sf->rw, ((__pyx_v_sf->base + __pyx_v_sf->length) + __pyx_v_seek), SEEK_END) - __pyx_v_sf->base);
+    __pyx_v_sf->tell = (SDL_RWseek(__pyx_v_sf->rw, ((__pyx_v_sf->base + __pyx_v_sf->length) + __pyx_v_seek), RW_SEEK_SET) - __pyx_v_sf->base);
 
     /* "pygame_sdl2/rwobject.pyx":141
  *     elif whence == RW_SEEK_CUR:
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base
  *     elif whence == RW_SEEK_END:             # <<<<<<<<<<<<<<
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  * 
  */
     break;
@@ -2211,7 +2211,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
   }
 
   /* "pygame_sdl2/rwobject.pyx":144
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  * 
  *     return sf.tell             # <<<<<<<<<<<<<<
  * 
@@ -2473,7 +2473,10 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   struct __pyx_t_11pygame_sdl2_8rwobject_SubFile *__pyx_v_sf;
   SDL_RWops *__pyx_v_rv;
   SDL_RWops *__pyx_v_rw;
+  char *__pyx_v_cname;
+  char *__pyx_v_cmode;
   PyObject *__pyx_v_name = NULL;
+  PyObject *__pyx_v_dname = NULL;
   PyObject *__pyx_v_base = NULL;
   PyObject *__pyx_v_length = NULL;
   SDL_RWops *__pyx_r;
@@ -2486,14 +2489,13 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  char const *__pyx_t_9;
-  char const *__pyx_t_10;
-  Py_ssize_t __pyx_t_11;
+  char *__pyx_t_9;
+  Py_ssize_t __pyx_t_10;
+  PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
-  PyObject *__pyx_t_14 = NULL;
-  Sint64 __pyx_t_15;
-  int __pyx_t_16;
+  Sint64 __pyx_t_14;
+  int __pyx_t_15;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -2506,37 +2508,37 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   __Pyx_INCREF(__pyx_v_filelike);
   __Pyx_INCREF(__pyx_v_mode);
 
-  /* "pygame_sdl2/rwobject.pyx":180
- *     cdef SDL_RWops *rw
+  /* "pygame_sdl2/rwobject.pyx":182
+ *     cdef char *cmode
  * 
  *     if not isinstance(mode, bytes_):             # <<<<<<<<<<<<<<
  *         mode = mode.encode("ascii")
  * 
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_mode, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_mode, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":181
+    /* "pygame_sdl2/rwobject.pyx":183
  * 
  *     if not isinstance(mode, bytes_):
  *         mode = mode.encode("ascii")             # <<<<<<<<<<<<<<
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mode, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mode, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_mode, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/rwobject.pyx":180
- *     cdef SDL_RWops *rw
+    /* "pygame_sdl2/rwobject.pyx":182
+ *     cdef char *cmode
  * 
  *     if not isinstance(mode, bytes_):             # <<<<<<<<<<<<<<
  *         mode = mode.encode("ascii")
@@ -2544,16 +2546,16 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":183
+  /* "pygame_sdl2/rwobject.pyx":185
  *         mode = mode.encode("ascii")
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":             # <<<<<<<<<<<<<<
  *         filelike = filelike.name
  * 
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_file_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_file_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_5 = (__pyx_t_2 != 0);
   if (__pyx_t_5) {
@@ -2561,24 +2563,24 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_t_3 = __pyx_t_5;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_5 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_3 = __pyx_t_5;
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":184
+    /* "pygame_sdl2/rwobject.pyx":186
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":
  *         filelike = filelike.name             # <<<<<<<<<<<<<<
  * 
  *     # Try to open as a file.
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_filelike, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/rwobject.pyx":183
+    /* "pygame_sdl2/rwobject.pyx":185
  *         mode = mode.encode("ascii")
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":             # <<<<<<<<<<<<<<
@@ -2587,30 +2589,30 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":187
+  /* "pygame_sdl2/rwobject.pyx":189
  * 
  *     # Try to open as a file.
  *     if isinstance(filelike, bytes_):             # <<<<<<<<<<<<<<
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_5 = (__pyx_t_3 != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/rwobject.pyx":188
+    /* "pygame_sdl2/rwobject.pyx":190
  *     # Try to open as a file.
  *     if isinstance(filelike, bytes_):
  *         name = filelike.decode(fsencoding)             # <<<<<<<<<<<<<<
  *     elif isinstance(filelike, unicode_):
  *         name = filelike
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -2623,17 +2625,17 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
@@ -2641,7 +2643,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_v_name = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/rwobject.pyx":187
+    /* "pygame_sdl2/rwobject.pyx":189
  * 
  *     # Try to open as a file.
  *     if isinstance(filelike, bytes_):             # <<<<<<<<<<<<<<
@@ -2651,21 +2653,21 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     goto __pyx_L7;
   }
 
-  /* "pygame_sdl2/rwobject.pyx":189
+  /* "pygame_sdl2/rwobject.pyx":191
  *     if isinstance(filelike, bytes_):
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):             # <<<<<<<<<<<<<<
  *         name = filelike
  *     else:
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_3 = (__pyx_t_5 != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":190
+    /* "pygame_sdl2/rwobject.pyx":192
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):
  *         name = filelike             # <<<<<<<<<<<<<<
@@ -2675,7 +2677,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __Pyx_INCREF(__pyx_v_filelike);
     __pyx_v_name = __pyx_v_filelike;
 
-    /* "pygame_sdl2/rwobject.pyx":189
+    /* "pygame_sdl2/rwobject.pyx":191
  *     if isinstance(filelike, bytes_):
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):             # <<<<<<<<<<<<<<
@@ -2685,7 +2687,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     goto __pyx_L7;
   }
 
-  /* "pygame_sdl2/rwobject.pyx":192
+  /* "pygame_sdl2/rwobject.pyx":194
  *         name = filelike
  *     else:
  *         name = None             # <<<<<<<<<<<<<<
@@ -2698,35 +2700,95 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   }
   __pyx_L7:;
 
-  /* "pygame_sdl2/rwobject.pyx":194
+  /* "pygame_sdl2/rwobject.pyx":196
  *         name = None
  * 
  *     if name:             # <<<<<<<<<<<<<<
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
  * 
+ *         dname = name.encode("utf-8")
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":195
- * 
+    /* "pygame_sdl2/rwobject.pyx":198
  *     if name:
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)             # <<<<<<<<<<<<<<
  * 
- *         if rv == NULL:
+ *         dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *         cname = dname
+ *         cmode = mode
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_v_mode); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rv = SDL_RWFromFile(__pyx_t_9, __pyx_t_10);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_dname = __pyx_t_1;
+    __pyx_t_1 = 0;
+
+    /* "pygame_sdl2/rwobject.pyx":199
+ * 
+ *         dname = name.encode("utf-8")
+ *         cname = dname             # <<<<<<<<<<<<<<
+ *         cmode = mode
+ * 
+ */
+    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_dname); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_cname = __pyx_t_9;
+
+    /* "pygame_sdl2/rwobject.pyx":200
+ *         dname = name.encode("utf-8")
+ *         cname = dname
+ *         cmode = mode             # <<<<<<<<<<<<<<
+ * 
+ *         with nogil:
+ */
+    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_mode); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 200; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_cmode = __pyx_t_9;
+
+    /* "pygame_sdl2/rwobject.pyx":202
+ *         cmode = mode
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             rv = SDL_RWFromFile(cname, cmode)
+ * 
+ */
+    {
+        #ifdef WITH_THREAD
+        PyThreadState *_save;
+        Py_UNBLOCK_THREADS
+        #endif
+        /*try:*/ {
 
-    /* "pygame_sdl2/rwobject.pyx":197
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
+          /* "pygame_sdl2/rwobject.pyx":203
+ * 
+ *         with nogil:
+ *             rv = SDL_RWFromFile(cname, cmode)             # <<<<<<<<<<<<<<
+ * 
+ *         if rv == NULL:
+ */
+          __pyx_v_rv = SDL_RWFromFile(__pyx_v_cname, __pyx_v_cmode);
+        }
+
+        /* "pygame_sdl2/rwobject.pyx":202
+ *         cmode = mode
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             rv = SDL_RWFromFile(cname, cmode)
+ * 
+ */
+        /*finally:*/ {
+          /*normal exit:*/{
+            #ifdef WITH_THREAD
+            Py_BLOCK_THREADS
+            #endif
+            goto __pyx_L11;
+          }
+          __pyx_L11:;
+        }
+    }
+
+    /* "pygame_sdl2/rwobject.pyx":205
+ *             rv = SDL_RWFromFile(cname, cmode)
  * 
  *         if rv == NULL:             # <<<<<<<<<<<<<<
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))
@@ -2735,19 +2797,19 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_t_3 = ((__pyx_v_rv == NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/rwobject.pyx":198
+      /* "pygame_sdl2/rwobject.pyx":206
  * 
  *         if rv == NULL:
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))             # <<<<<<<<<<<<<<
  * 
  *         return rv
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_Could_not_open_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_Could_not_open_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_8 = __Pyx_PyBytes_FromString(SDL_GetError()); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = __Pyx_PyBytes_FromString(SDL_GetError()); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_6 = NULL;
-      __pyx_t_11 = 0;
+      __pyx_t_10 = 0;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_6)) {
@@ -2755,38 +2817,38 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
           __Pyx_INCREF(__pyx_t_6);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_4, function);
-          __pyx_t_11 = 1;
+          __pyx_t_10 = 1;
         }
       }
-      __pyx_t_7 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       if (__pyx_t_6) {
         __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       }
       __Pyx_INCREF(__pyx_v_filelike);
       __Pyx_GIVEREF(__pyx_v_filelike);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_11, __pyx_v_filelike);
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_10, __pyx_v_filelike);
       __Pyx_GIVEREF(__pyx_t_8);
-      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_11, __pyx_t_8);
+      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_10, __pyx_t_8);
       __pyx_t_8 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_1, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/rwobject.pyx":197
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
+      /* "pygame_sdl2/rwobject.pyx":205
+ *             rv = SDL_RWFromFile(cname, cmode)
  * 
  *         if rv == NULL:             # <<<<<<<<<<<<<<
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))
@@ -2794,7 +2856,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
     }
 
-    /* "pygame_sdl2/rwobject.pyx":200
+    /* "pygame_sdl2/rwobject.pyx":208
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))
  * 
  *         return rv             # <<<<<<<<<<<<<<
@@ -2804,26 +2866,26 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_r = __pyx_v_rv;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/rwobject.pyx":194
+    /* "pygame_sdl2/rwobject.pyx":196
  *         name = None
  * 
  *     if name:             # <<<<<<<<<<<<<<
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
  * 
+ *         dname = name.encode("utf-8")
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":202
+  /* "pygame_sdl2/rwobject.pyx":210
  *         return rv
  * 
  *     if mode == b"rb":             # <<<<<<<<<<<<<<
  *         try:
  * 
  */
-  __pyx_t_3 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":203
+    /* "pygame_sdl2/rwobject.pyx":211
  * 
  *     if mode == b"rb":
  *         try:             # <<<<<<<<<<<<<<
@@ -2831,49 +2893,49 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  */
     {
-      __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
+      __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
+      __Pyx_XGOTREF(__pyx_t_11);
       __Pyx_XGOTREF(__pyx_t_12);
       __Pyx_XGOTREF(__pyx_t_13);
-      __Pyx_XGOTREF(__pyx_t_14);
       /*try:*/ {
 
-        /* "pygame_sdl2/rwobject.pyx":207
+        /* "pygame_sdl2/rwobject.pyx":215
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  *             # subfile, so use an optimized path.
  *             name = filelike.name             # <<<<<<<<<<<<<<
  *             base = filelike.base
  *             length = filelike.length
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
         __pyx_t_1 = 0;
 
-        /* "pygame_sdl2/rwobject.pyx":208
+        /* "pygame_sdl2/rwobject.pyx":216
  *             # subfile, so use an optimized path.
  *             name = filelike.name
  *             base = filelike.base             # <<<<<<<<<<<<<<
  *             length = filelike.length
  * 
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_v_base = __pyx_t_1;
         __pyx_t_1 = 0;
 
-        /* "pygame_sdl2/rwobject.pyx":209
+        /* "pygame_sdl2/rwobject.pyx":217
  *             name = filelike.name
  *             base = filelike.base
  *             length = filelike.length             # <<<<<<<<<<<<<<
  * 
  *             if name is not None:
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_length); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_length); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_v_length = __pyx_t_1;
         __pyx_t_1 = 0;
 
-        /* "pygame_sdl2/rwobject.pyx":211
+        /* "pygame_sdl2/rwobject.pyx":219
  *             length = filelike.length
  * 
  *             if name is not None:             # <<<<<<<<<<<<<<
@@ -2884,30 +2946,30 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
         __pyx_t_5 = (__pyx_t_3 != 0);
         if (__pyx_t_5) {
 
-          /* "pygame_sdl2/rwobject.pyx":213
+          /* "pygame_sdl2/rwobject.pyx":221
  *             if name is not None:
  * 
  *                 if not isinstance(name, unicode_):             # <<<<<<<<<<<<<<
  *                     name = name.decode(fsencoding)
  * 
  */
-          __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_5 = PyObject_IsInstance(__pyx_v_name, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_5 = PyObject_IsInstance(__pyx_v_name, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_t_3 = ((!(__pyx_t_5 != 0)) != 0);
           if (__pyx_t_3) {
 
-            /* "pygame_sdl2/rwobject.pyx":214
+            /* "pygame_sdl2/rwobject.pyx":222
  * 
  *                 if not isinstance(name, unicode_):
  *                     name = name.decode(fsencoding)             # <<<<<<<<<<<<<<
  * 
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")
+ *                 dname = name.encode("utf-8")
  */
-            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
             __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
             __Pyx_GOTREF(__pyx_t_7);
             __pyx_t_8 = NULL;
             if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -2920,17 +2982,17 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
               }
             }
             if (!__pyx_t_8) {
-              __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
               __Pyx_GOTREF(__pyx_t_1);
             } else {
-              __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
               __Pyx_GOTREF(__pyx_t_6);
               __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8); __pyx_t_8 = NULL;
               __Pyx_GIVEREF(__pyx_t_7);
               PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_7);
               __pyx_t_7 = 0;
-              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
               __Pyx_GOTREF(__pyx_t_1);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             }
@@ -2938,7 +3000,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
             __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
             __pyx_t_1 = 0;
 
-            /* "pygame_sdl2/rwobject.pyx":213
+            /* "pygame_sdl2/rwobject.pyx":221
  *             if name is not None:
  * 
  *                 if not isinstance(name, unicode_):             # <<<<<<<<<<<<<<
@@ -2947,24 +3009,75 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           }
 
-          /* "pygame_sdl2/rwobject.pyx":216
+          /* "pygame_sdl2/rwobject.pyx":224
  *                     name = name.decode(fsencoding)
  * 
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")             # <<<<<<<<<<<<<<
+ *                 dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *                 cname = dname
  * 
- *                 if not rw:
  */
-          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          __pyx_v_rw = SDL_RWFromFile(__pyx_t_9, __pyx_k_rb);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_dname = __pyx_t_4;
+          __pyx_t_4 = 0;
+
+          /* "pygame_sdl2/rwobject.pyx":225
+ * 
+ *                 dname = name.encode("utf-8")
+ *                 cname = dname             # <<<<<<<<<<<<<<
+ * 
+ *                 with nogil:
+ */
+          __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_dname); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
+          __pyx_v_cname = __pyx_t_9;
 
-          /* "pygame_sdl2/rwobject.pyx":218
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")
+          /* "pygame_sdl2/rwobject.pyx":227
+ *                 cname = dname
+ * 
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     rw = SDL_RWFromFile(cname, b"rb")
+ * 
+ */
+          {
+              #ifdef WITH_THREAD
+              PyThreadState *_save;
+              Py_UNBLOCK_THREADS
+              #endif
+              /*try:*/ {
+
+                /* "pygame_sdl2/rwobject.pyx":228
+ * 
+ *                 with nogil:
+ *                     rw = SDL_RWFromFile(cname, b"rb")             # <<<<<<<<<<<<<<
+ * 
+ *                 if not rw:
+ */
+                __pyx_v_rw = SDL_RWFromFile(__pyx_v_cname, __pyx_k_rb);
+              }
+
+              /* "pygame_sdl2/rwobject.pyx":227
+ *                 cname = dname
+ * 
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     rw = SDL_RWFromFile(cname, b"rb")
+ * 
+ */
+              /*finally:*/ {
+                /*normal exit:*/{
+                  #ifdef WITH_THREAD
+                  Py_BLOCK_THREADS
+                  #endif
+                  goto __pyx_L28;
+                }
+                __pyx_L28:;
+              }
+          }
+
+          /* "pygame_sdl2/rwobject.pyx":230
+ *                     rw = SDL_RWFromFile(cname, b"rb")
  * 
  *                 if not rw:             # <<<<<<<<<<<<<<
  *                     raise IOError("Could not open {!r}.".format(name))
@@ -2973,14 +3086,14 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
           __pyx_t_3 = ((!(__pyx_v_rw != 0)) != 0);
           if (__pyx_t_3) {
 
-            /* "pygame_sdl2/rwobject.pyx":219
+            /* "pygame_sdl2/rwobject.pyx":231
  * 
  *                 if not rw:
  *                     raise IOError("Could not open {!r}.".format(name))             # <<<<<<<<<<<<<<
  * 
  *                 SDL_RWseek(rw, base, RW_SEEK_SET);
  */
-            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_Could_not_open_r_2, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_Could_not_open_r_2, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
             __Pyx_GOTREF(__pyx_t_1);
             __pyx_t_6 = NULL;
             if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -2993,34 +3106,34 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
               }
             }
             if (!__pyx_t_6) {
-              __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
               __Pyx_GOTREF(__pyx_t_4);
             } else {
-              __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
               __Pyx_GOTREF(__pyx_t_7);
               __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
               __Pyx_INCREF(__pyx_v_name);
               __Pyx_GIVEREF(__pyx_v_name);
               PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_name);
-              __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
               __Pyx_GOTREF(__pyx_t_4);
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
             }
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_4);
             PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
             __pyx_t_4 = 0;
-            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
             __Pyx_GOTREF(__pyx_t_4);
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
             __Pyx_Raise(__pyx_t_4, 0, 0, 0);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 231; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
 
-            /* "pygame_sdl2/rwobject.pyx":218
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")
+            /* "pygame_sdl2/rwobject.pyx":230
+ *                     rw = SDL_RWFromFile(cname, b"rb")
  * 
  *                 if not rw:             # <<<<<<<<<<<<<<
  *                     raise IOError("Could not open {!r}.".format(name))
@@ -3028,17 +3141,17 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           }
 
-          /* "pygame_sdl2/rwobject.pyx":221
+          /* "pygame_sdl2/rwobject.pyx":233
  *                     raise IOError("Could not open {!r}.".format(name))
  * 
  *                 SDL_RWseek(rw, base, RW_SEEK_SET);             # <<<<<<<<<<<<<<
  * 
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)
  */
-          __pyx_t_15 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_15 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          SDL_RWseek(__pyx_v_rw, __pyx_t_15, RW_SEEK_SET);
+          __pyx_t_14 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_14 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
+          SDL_RWseek(__pyx_v_rw, __pyx_t_14, RW_SEEK_SET);
 
-          /* "pygame_sdl2/rwobject.pyx":223
+          /* "pygame_sdl2/rwobject.pyx":235
  *                 SDL_RWseek(rw, base, RW_SEEK_SET);
  * 
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)             # <<<<<<<<<<<<<<
@@ -3047,7 +3160,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_sf = ((struct __pyx_t_11pygame_sdl2_8rwobject_SubFile *)calloc((sizeof(struct __pyx_t_11pygame_sdl2_8rwobject_SubFile)), 1));
 
-          /* "pygame_sdl2/rwobject.pyx":224
+          /* "pygame_sdl2/rwobject.pyx":236
  * 
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)
  *                 sf.rw = rw             # <<<<<<<<<<<<<<
@@ -3056,27 +3169,27 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_sf->rw = __pyx_v_rw;
 
-          /* "pygame_sdl2/rwobject.pyx":225
+          /* "pygame_sdl2/rwobject.pyx":237
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)
  *                 sf.rw = rw
  *                 sf.base = base             # <<<<<<<<<<<<<<
  *                 sf.length = length
  *                 sf.tell = 0;
  */
-          __pyx_t_15 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_15 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          __pyx_v_sf->base = __pyx_t_15;
+          __pyx_t_14 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_14 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
+          __pyx_v_sf->base = __pyx_t_14;
 
-          /* "pygame_sdl2/rwobject.pyx":226
+          /* "pygame_sdl2/rwobject.pyx":238
  *                 sf.rw = rw
  *                 sf.base = base
  *                 sf.length = length             # <<<<<<<<<<<<<<
  *                 sf.tell = 0;
  * 
  */
-          __pyx_t_15 = __Pyx_PyInt_As_int64_t(__pyx_v_length); if (unlikely((__pyx_t_15 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          __pyx_v_sf->length = __pyx_t_15;
+          __pyx_t_14 = __Pyx_PyInt_As_int64_t(__pyx_v_length); if (unlikely((__pyx_t_14 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
+          __pyx_v_sf->length = __pyx_t_14;
 
-          /* "pygame_sdl2/rwobject.pyx":227
+          /* "pygame_sdl2/rwobject.pyx":239
  *                 sf.base = base
  *                 sf.length = length
  *                 sf.tell = 0;             # <<<<<<<<<<<<<<
@@ -3085,7 +3198,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_sf->tell = 0;
 
-          /* "pygame_sdl2/rwobject.pyx":229
+          /* "pygame_sdl2/rwobject.pyx":241
  *                 sf.tell = 0;
  * 
  *                 rv = SDL_AllocRW()             # <<<<<<<<<<<<<<
@@ -3094,7 +3207,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv = SDL_AllocRW();
 
-          /* "pygame_sdl2/rwobject.pyx":230
+          /* "pygame_sdl2/rwobject.pyx":242
  * 
  *                 rv = SDL_AllocRW()
  *                 rv.size = subfile_size             # <<<<<<<<<<<<<<
@@ -3103,7 +3216,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->size = __pyx_f_11pygame_sdl2_8rwobject_subfile_size;
 
-          /* "pygame_sdl2/rwobject.pyx":231
+          /* "pygame_sdl2/rwobject.pyx":243
  *                 rv = SDL_AllocRW()
  *                 rv.size = subfile_size
  *                 rv.seek = subfile_seek             # <<<<<<<<<<<<<<
@@ -3112,7 +3225,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->seek = __pyx_f_11pygame_sdl2_8rwobject_subfile_seek;
 
-          /* "pygame_sdl2/rwobject.pyx":232
+          /* "pygame_sdl2/rwobject.pyx":244
  *                 rv.size = subfile_size
  *                 rv.seek = subfile_seek
  *                 rv.read = subfile_read             # <<<<<<<<<<<<<<
@@ -3121,7 +3234,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->read = __pyx_f_11pygame_sdl2_8rwobject_subfile_read;
 
-          /* "pygame_sdl2/rwobject.pyx":233
+          /* "pygame_sdl2/rwobject.pyx":245
  *                 rv.seek = subfile_seek
  *                 rv.read = subfile_read
  *                 rv.write = NULL             # <<<<<<<<<<<<<<
@@ -3130,7 +3243,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->write = NULL;
 
-          /* "pygame_sdl2/rwobject.pyx":234
+          /* "pygame_sdl2/rwobject.pyx":246
  *                 rv.read = subfile_read
  *                 rv.write = NULL
  *                 rv.close = subfile_close             # <<<<<<<<<<<<<<
@@ -3139,7 +3252,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->close = __pyx_f_11pygame_sdl2_8rwobject_subfile_close;
 
-          /* "pygame_sdl2/rwobject.pyx":235
+          /* "pygame_sdl2/rwobject.pyx":247
  *                 rv.write = NULL
  *                 rv.close = subfile_close
  *                 rv.type = 0             # <<<<<<<<<<<<<<
@@ -3148,7 +3261,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->type = 0;
 
-          /* "pygame_sdl2/rwobject.pyx":236
+          /* "pygame_sdl2/rwobject.pyx":248
  *                 rv.close = subfile_close
  *                 rv.type = 0
  *                 rv.hidden.unknown.data1 = <void *> sf             # <<<<<<<<<<<<<<
@@ -3157,7 +3270,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->hidden.unknown.data1 = ((void *)__pyx_v_sf);
 
-          /* "pygame_sdl2/rwobject.pyx":238
+          /* "pygame_sdl2/rwobject.pyx":250
  *                 rv.hidden.unknown.data1 = <void *> sf
  * 
  *                 return rv             # <<<<<<<<<<<<<<
@@ -3165,9 +3278,9 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  *         except AttributeError:
  */
           __pyx_r = __pyx_v_rv;
-          goto __pyx_L15_try_return;
+          goto __pyx_L18_try_return;
 
-          /* "pygame_sdl2/rwobject.pyx":211
+          /* "pygame_sdl2/rwobject.pyx":219
  *             length = filelike.length
  * 
  *             if name is not None:             # <<<<<<<<<<<<<<
@@ -3176,7 +3289,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
         }
 
-        /* "pygame_sdl2/rwobject.pyx":203
+        /* "pygame_sdl2/rwobject.pyx":211
  * 
  *     if mode == b"rb":
  *         try:             # <<<<<<<<<<<<<<
@@ -3184,59 +3297,59 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  */
       }
+      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
       __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
-      goto __pyx_L18_try_end;
-      __pyx_L11_error:;
+      goto __pyx_L21_try_end;
+      __pyx_L14_error:;
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "pygame_sdl2/rwobject.pyx":240
+      /* "pygame_sdl2/rwobject.pyx":252
  *                 return rv
  * 
  *         except AttributeError:             # <<<<<<<<<<<<<<
  *             pass
  * 
  */
-      __pyx_t_16 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
-      if (__pyx_t_16) {
+      __pyx_t_15 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
+      if (__pyx_t_15) {
         PyErr_Restore(0,0,0);
-        goto __pyx_L12_exception_handled;
+        goto __pyx_L15_exception_handled;
       }
-      goto __pyx_L13_except_error;
-      __pyx_L13_except_error:;
+      goto __pyx_L16_except_error;
+      __pyx_L16_except_error:;
 
-      /* "pygame_sdl2/rwobject.pyx":203
+      /* "pygame_sdl2/rwobject.pyx":211
  * 
  *     if mode == b"rb":
  *         try:             # <<<<<<<<<<<<<<
  * 
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  */
+      __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_XGIVEREF(__pyx_t_13);
-      __Pyx_XGIVEREF(__pyx_t_14);
-      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
+      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
       goto __pyx_L1_error;
-      __pyx_L15_try_return:;
+      __pyx_L18_try_return:;
+      __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_XGIVEREF(__pyx_t_13);
-      __Pyx_XGIVEREF(__pyx_t_14);
-      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
+      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
       goto __pyx_L0;
-      __pyx_L12_exception_handled:;
+      __pyx_L15_exception_handled:;
+      __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_XGIVEREF(__pyx_t_13);
-      __Pyx_XGIVEREF(__pyx_t_14);
-      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
-      __pyx_L18_try_end:;
+      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
+      __pyx_L21_try_end:;
     }
 
-    /* "pygame_sdl2/rwobject.pyx":202
+    /* "pygame_sdl2/rwobject.pyx":210
  *         return rv
  * 
  *     if mode == b"rb":             # <<<<<<<<<<<<<<
@@ -3245,35 +3358,35 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":244
+  /* "pygame_sdl2/rwobject.pyx":256
  * 
  * 
  *     if not (hasattr(filelike, "read") or hasattr(filelike, "write")):             # <<<<<<<<<<<<<<
  *         raise IOError("{!r} is not a filename or file-like object.".format(filelike))
  * 
  */
-  __pyx_t_5 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_s_read); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_s_read); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = (__pyx_t_5 != 0);
   if (!__pyx_t_2) {
   } else {
     __pyx_t_3 = __pyx_t_2;
-    goto __pyx_L23_bool_binop_done;
+    goto __pyx_L31_bool_binop_done;
   }
-  __pyx_t_2 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_s_write); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_s_write); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_5 = (__pyx_t_2 != 0);
   __pyx_t_3 = __pyx_t_5;
-  __pyx_L23_bool_binop_done:;
+  __pyx_L31_bool_binop_done:;
   __pyx_t_5 = ((!__pyx_t_3) != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/rwobject.pyx":245
+    /* "pygame_sdl2/rwobject.pyx":257
  * 
  *     if not (hasattr(filelike, "read") or hasattr(filelike, "write")):
  *         raise IOError("{!r} is not a filename or file-like object.".format(filelike))             # <<<<<<<<<<<<<<
  * 
  *     Py_INCREF(filelike)
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_r_is_not_a_filename_or_file_lik, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_s_r_is_not_a_filename_or_file_lik, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_7 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -3286,33 +3399,33 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_filelike); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_filelike); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_INCREF(__pyx_v_filelike);
       __Pyx_GIVEREF(__pyx_v_filelike);
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_filelike);
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/rwobject.pyx":244
+    /* "pygame_sdl2/rwobject.pyx":256
  * 
  * 
  *     if not (hasattr(filelike, "read") or hasattr(filelike, "write")):             # <<<<<<<<<<<<<<
@@ -3321,7 +3434,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":247
+  /* "pygame_sdl2/rwobject.pyx":259
  *         raise IOError("{!r} is not a filename or file-like object.".format(filelike))
  * 
  *     Py_INCREF(filelike)             # <<<<<<<<<<<<<<
@@ -3330,7 +3443,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   Py_INCREF(__pyx_v_filelike);
 
-  /* "pygame_sdl2/rwobject.pyx":249
+  /* "pygame_sdl2/rwobject.pyx":261
  *     Py_INCREF(filelike)
  * 
  *     rv = SDL_AllocRW()             # <<<<<<<<<<<<<<
@@ -3339,7 +3452,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv = SDL_AllocRW();
 
-  /* "pygame_sdl2/rwobject.pyx":250
+  /* "pygame_sdl2/rwobject.pyx":262
  * 
  *     rv = SDL_AllocRW()
  *     rv.size = python_size             # <<<<<<<<<<<<<<
@@ -3348,7 +3461,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->size = __pyx_f_11pygame_sdl2_8rwobject_python_size;
 
-  /* "pygame_sdl2/rwobject.pyx":251
+  /* "pygame_sdl2/rwobject.pyx":263
  *     rv = SDL_AllocRW()
  *     rv.size = python_size
  *     rv.seek = python_seek             # <<<<<<<<<<<<<<
@@ -3357,7 +3470,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->seek = __pyx_f_11pygame_sdl2_8rwobject_python_seek;
 
-  /* "pygame_sdl2/rwobject.pyx":252
+  /* "pygame_sdl2/rwobject.pyx":264
  *     rv.size = python_size
  *     rv.seek = python_seek
  *     rv.read = python_read             # <<<<<<<<<<<<<<
@@ -3366,7 +3479,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->read = __pyx_f_11pygame_sdl2_8rwobject_python_read;
 
-  /* "pygame_sdl2/rwobject.pyx":253
+  /* "pygame_sdl2/rwobject.pyx":265
  *     rv.seek = python_seek
  *     rv.read = python_read
  *     rv.write = python_write             # <<<<<<<<<<<<<<
@@ -3375,7 +3488,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->write = __pyx_f_11pygame_sdl2_8rwobject_python_write;
 
-  /* "pygame_sdl2/rwobject.pyx":254
+  /* "pygame_sdl2/rwobject.pyx":266
  *     rv.read = python_read
  *     rv.write = python_write
  *     rv.close = python_close             # <<<<<<<<<<<<<<
@@ -3384,7 +3497,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->close = __pyx_f_11pygame_sdl2_8rwobject_python_close;
 
-  /* "pygame_sdl2/rwobject.pyx":255
+  /* "pygame_sdl2/rwobject.pyx":267
  *     rv.write = python_write
  *     rv.close = python_close
  *     rv.type = 0             # <<<<<<<<<<<<<<
@@ -3393,7 +3506,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->type = 0;
 
-  /* "pygame_sdl2/rwobject.pyx":256
+  /* "pygame_sdl2/rwobject.pyx":268
  *     rv.close = python_close
  *     rv.type = 0
  *     rv.hidden.unknown.data1 = <void *> filelike             # <<<<<<<<<<<<<<
@@ -3402,7 +3515,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->hidden.unknown.data1 = ((void *)__pyx_v_filelike);
 
-  /* "pygame_sdl2/rwobject.pyx":258
+  /* "pygame_sdl2/rwobject.pyx":270
  *     rv.hidden.unknown.data1 = <void *> filelike
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -3431,6 +3544,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XDECREF(__pyx_v_dname);
   __Pyx_XDECREF(__pyx_v_base);
   __Pyx_XDECREF(__pyx_v_length);
   __Pyx_XDECREF(__pyx_v_filelike);
@@ -3439,7 +3553,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   return __pyx_r;
 }
 
-/* "pygame_sdl2/rwobject.pyx":261
+/* "pygame_sdl2/rwobject.pyx":273
  * 
  * 
  * cdef api SDL_RWops *RWopsFromPython(filelike) except NULL:             # <<<<<<<<<<<<<<
@@ -3456,18 +3570,18 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_RWopsFromPython(PyObject *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("RWopsFromPython", 0);
 
-  /* "pygame_sdl2/rwobject.pyx":262
+  /* "pygame_sdl2/rwobject.pyx":274
  * 
  * cdef api SDL_RWops *RWopsFromPython(filelike) except NULL:
  *     return to_rwops(filelike)             # <<<<<<<<<<<<<<
  * 
  * PyEval_InitThreads()
  */
-  __pyx_t_1 = __pyx_f_11pygame_sdl2_8rwobject_to_rwops(__pyx_v_filelike, NULL); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11pygame_sdl2_8rwobject_to_rwops(__pyx_v_filelike, NULL); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/rwobject.pyx":261
+  /* "pygame_sdl2/rwobject.pyx":273
  * 
  * 
  * cdef api SDL_RWops *RWopsFromPython(filelike) except NULL:             # <<<<<<<<<<<<<<
@@ -3542,8 +3656,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
 };
 static int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -3564,36 +3678,36 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "pygame_sdl2/rwobject.pyx":181
+  /* "pygame_sdl2/rwobject.pyx":183
  * 
  *     if not isinstance(mode, bytes_):
  *         mode = mode.encode("ascii")             # <<<<<<<<<<<<<<
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":
  */
-  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_n_s_ascii); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_n_s_ascii); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "pygame_sdl2/rwobject.pyx":195
- * 
+  /* "pygame_sdl2/rwobject.pyx":198
  *     if name:
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)             # <<<<<<<<<<<<<<
  * 
- *         if rv == NULL:
+ *         dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *         cname = dname
+ *         cmode = mode
  */
-  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__3);
   __Pyx_GIVEREF(__pyx_tuple__3);
 
-  /* "pygame_sdl2/rwobject.pyx":216
+  /* "pygame_sdl2/rwobject.pyx":224
  *                     name = name.decode(fsencoding)
  * 
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")             # <<<<<<<<<<<<<<
+ *                 dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *                 cname = dname
  * 
- *                 if not rw:
  */
-  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_utf_8); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__4);
   __Pyx_GIVEREF(__pyx_tuple__4);
   __Pyx_RefNannyFinishContext();
@@ -3811,7 +3925,7 @@ PyMODINIT_FUNC PyInit_rwobject(void)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_fsencoding, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/rwobject.pyx":264
+  /* "pygame_sdl2/rwobject.pyx":276
  *     return to_rwops(filelike)
  * 
  * PyEval_InitThreads()             # <<<<<<<<<<<<<<
@@ -4684,7 +4798,7 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (int64_t) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(int64_t, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(int64_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(int64_t,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(int64_t) - 1 > 1 * PyLong_SHIFT) {
@@ -4946,7 +5060,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (long) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
@@ -5130,7 +5244,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (int) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
diff --git a/gen3/pygame_sdl2.display.c b/gen3/pygame_sdl2.display.c
index 986a2f1..64820e8 100644
--- a/gen3/pygame_sdl2.display.c
+++ b/gen3/pygame_sdl2.display.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.23.3 */
+/* Generated by Cython 0.23.5 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -7,7 +7,7 @@
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
     #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_23_3"
+#define CYTHON_ABI "0_23_5"
 #include <stddef.h>
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -189,7 +189,7 @@ typedef struct {
     #define CYTHON_RESTRICT
   #endif
 #endif
-#define __Pyx_void_to_None(void_result) (void_result, Py_INCREF(Py_None), Py_None)
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
 
 #ifndef CYTHON_INLINE
   #if defined(__GNUC__)
@@ -297,10 +297,10 @@ typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
     #define __Pyx_sst_abs(value) abs(value)
 #elif SIZEOF_LONG >= SIZEOF_SIZE_T
     #define __Pyx_sst_abs(value) labs(value)
-#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-    #define __Pyx_sst_abs(value) llabs(value)
 #elif defined (_MSC_VER) && defined (_M_X64)
     #define __Pyx_sst_abs(value) _abs64(value)
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define __Pyx_sst_abs(value) llabs(value)
 #elif defined (__GNUC__)
     #define __Pyx_sst_abs(value) __builtin_llabs(value)
 #else
@@ -650,6 +650,11 @@ static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyOb
 
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb);
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
+
 static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
 
 static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
@@ -680,9 +685,6 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j
 static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                      int is_list, int wraparound, int boundscheck);
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb);
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
-
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
 
 static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
@@ -700,8 +702,6 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
 
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
-
 #if CYTHON_COMPILING_IN_CPYTHON
 #define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o,n,NULL)
 static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
@@ -894,9 +894,9 @@ int __pyx_module_is_main_pygame_sdl2__display = 0;
 
 /* Implementation of 'pygame_sdl2.display' */
 static PyObject *__pyx_builtin_object;
+static PyObject *__pyx_builtin_ImportError;
 static PyObject *__pyx_builtin_MemoryError;
 static PyObject *__pyx_builtin_range;
-static PyObject *__pyx_builtin_ImportError;
 static char __pyx_k_0[] = "0";
 static char __pyx_k_i[] = "i";
 static char __pyx_k_t[] = "t";
@@ -1023,6 +1023,8 @@ static char __pyx_k_pygame_sdl2_error[] = "pygame_sdl2.error";
 static char __pyx_k_toggle_fullscreen[] = "toggle_fullscreen";
 static char __pyx_k_get_display_bounds[] = "get_display_bounds";
 static char __pyx_k_pygame_sdl2_locals[] = "pygame_sdl2.locals";
+static char __pyx_k_shown_first_window[] = "_shown_first_window";
+static char __pyx_k_before_first_window[] = "_before_first_window";
 static char __pyx_k_gl_reset_attributes[] = "gl_reset_attributes";
 static char __pyx_k_pygame_sdl2_display[] = "pygame_sdl2.display";
 static char __pyx_k_default_swap_control[] = "default_swap_control";
@@ -1044,6 +1046,7 @@ static PyObject *__pyx_n_u_PYGAME_IOS;
 static PyObject *__pyx_n_u_SDL_VIDEO_MAC_FULLSCREEN_SPACES;
 static PyObject *__pyx_n_s_SRCALPHA;
 static PyObject *__pyx_n_s_androidembed;
+static PyObject *__pyx_n_s_before_first_window;
 static PyObject *__pyx_n_s_bitsize;
 static PyObject *__pyx_n_s_blit_hw;
 static PyObject *__pyx_n_s_blit_hw_A;
@@ -1153,6 +1156,7 @@ static PyObject *__pyx_n_s_set_gamma_ramp;
 static PyObject *__pyx_n_s_set_icon;
 static PyObject *__pyx_n_s_set_mode;
 static PyObject *__pyx_n_s_shifts;
+static PyObject *__pyx_n_s_shown_first_window;
 static PyObject *__pyx_n_s_size;
 static PyObject *__pyx_n_s_surface;
 static PyObject *__pyx_n_s_t;
@@ -1169,6 +1173,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_sdl_main_init(CYTHON_UNUSED PyO
 static PyObject *__pyx_pf_11pygame_sdl2_7display_2init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_4quit(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6get_init(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_8_before_first_window(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self, PyObject *__pyx_v_title, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth, PyObject *__pyx_v_pos); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
@@ -1190,36 +1195,36 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
 static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_7surface___get__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
 static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_2__set__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
 static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_4__del__(struct __pyx_obj_11pygame_sdl2_7display_Window *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_10set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_surface(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_14get_window(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_16flip(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_18update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_driver(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value); /* proto */
-static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_wm_info(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_24get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_26list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_28mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_38gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_40get_active(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_42iconify(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_44toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_52set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_caption(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_60get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_62hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_11pygame_sdl2_7display_64get_platform(CYTHON_UNUSED PyObject *__pyx_self); /* proto */
 static PyObject *__pyx_tp_new_11pygame_sdl2_7display_Window(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_int_0;
 static PyObject *__pyx_int_1;
@@ -1237,57 +1242,59 @@ static PyObject *__pyx_tuple__8;
 static PyObject *__pyx_tuple__10;
 static PyObject *__pyx_tuple__11;
 static PyObject *__pyx_tuple__16;
-static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_tuple__18;
 static PyObject *__pyx_tuple__23;
 static PyObject *__pyx_tuple__25;
 static PyObject *__pyx_tuple__27;
-static PyObject *__pyx_tuple__30;
+static PyObject *__pyx_tuple__29;
 static PyObject *__pyx_tuple__32;
 static PyObject *__pyx_tuple__34;
-static PyObject *__pyx_tuple__37;
+static PyObject *__pyx_tuple__36;
 static PyObject *__pyx_tuple__39;
 static PyObject *__pyx_tuple__41;
-static PyObject *__pyx_tuple__47;
+static PyObject *__pyx_tuple__43;
 static PyObject *__pyx_tuple__49;
 static PyObject *__pyx_tuple__51;
 static PyObject *__pyx_tuple__53;
-static PyObject *__pyx_tuple__57;
+static PyObject *__pyx_tuple__55;
 static PyObject *__pyx_tuple__59;
 static PyObject *__pyx_tuple__61;
+static PyObject *__pyx_tuple__63;
 static PyObject *__pyx_codeobj__12;
 static PyObject *__pyx_codeobj__13;
 static PyObject *__pyx_codeobj__14;
 static PyObject *__pyx_codeobj__15;
 static PyObject *__pyx_codeobj__17;
-static PyObject *__pyx_codeobj__18;
 static PyObject *__pyx_codeobj__19;
 static PyObject *__pyx_codeobj__20;
+static PyObject *__pyx_codeobj__21;
 static PyObject *__pyx_codeobj__22;
 static PyObject *__pyx_codeobj__24;
 static PyObject *__pyx_codeobj__26;
 static PyObject *__pyx_codeobj__28;
-static PyObject *__pyx_codeobj__29;
+static PyObject *__pyx_codeobj__30;
 static PyObject *__pyx_codeobj__31;
 static PyObject *__pyx_codeobj__33;
 static PyObject *__pyx_codeobj__35;
-static PyObject *__pyx_codeobj__36;
+static PyObject *__pyx_codeobj__37;
 static PyObject *__pyx_codeobj__38;
 static PyObject *__pyx_codeobj__40;
 static PyObject *__pyx_codeobj__42;
-static PyObject *__pyx_codeobj__43;
 static PyObject *__pyx_codeobj__44;
 static PyObject *__pyx_codeobj__45;
 static PyObject *__pyx_codeobj__46;
+static PyObject *__pyx_codeobj__47;
 static PyObject *__pyx_codeobj__48;
 static PyObject *__pyx_codeobj__50;
 static PyObject *__pyx_codeobj__52;
 static PyObject *__pyx_codeobj__54;
-static PyObject *__pyx_codeobj__55;
 static PyObject *__pyx_codeobj__56;
+static PyObject *__pyx_codeobj__57;
 static PyObject *__pyx_codeobj__58;
 static PyObject *__pyx_codeobj__60;
 static PyObject *__pyx_codeobj__62;
-static PyObject *__pyx_codeobj__63;
+static PyObject *__pyx_codeobj__64;
+static PyObject *__pyx_codeobj__65;
 
 /* "pygame_sdl2/display.pyx":39
  * main_done = False
@@ -1864,7 +1871,219 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6get_init(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":95
+/* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_11pygame_sdl2_7display_9_before_first_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_9_before_first_window = {"_before_first_window", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_9_before_first_window, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_9_before_first_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("_before_first_window (wrapper)", 0);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_8_before_first_window(__pyx_self);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_11pygame_sdl2_7display_8_before_first_window(CYTHON_UNUSED PyObject *__pyx_self) {
+  PyObject *__pyx_v_androidembed = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_t_8;
+  int __pyx_lineno = 0;
+  const char *__pyx_filename = NULL;
+  int __pyx_clineno = 0;
+  __Pyx_RefNannySetupContext("_before_first_window", 0);
+
+  /* "pygame_sdl2/display.pyx":100
+ *     global _shown_first_window
+ * 
+ *     if _shown_first_window:             # <<<<<<<<<<<<<<
+ *         return
+ * 
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_shown_first_window); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  if (__pyx_t_2) {
+
+    /* "pygame_sdl2/display.pyx":101
+ * 
+ *     if _shown_first_window:
+ *         return             # <<<<<<<<<<<<<<
+ * 
+ *     _shown_first_window = True
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+    goto __pyx_L0;
+
+    /* "pygame_sdl2/display.pyx":100
+ *     global _shown_first_window
+ * 
+ *     if _shown_first_window:             # <<<<<<<<<<<<<<
+ *         return
+ * 
+ */
+  }
+
+  /* "pygame_sdl2/display.pyx":103
+ *         return
+ * 
+ *     _shown_first_window = True             # <<<<<<<<<<<<<<
+ * 
+ *     # If we're on android, we have to close the splash window before opening
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_shown_first_window, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "pygame_sdl2/display.pyx":107
+ *     # If we're on android, we have to close the splash window before opening
+ *     # our window.
+ *     try:             # <<<<<<<<<<<<<<
+ *         import androidembed
+ *         androidembed.close_window()
+ */
+  {
+    __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
+    __Pyx_XGOTREF(__pyx_t_3);
+    __Pyx_XGOTREF(__pyx_t_4);
+    __Pyx_XGOTREF(__pyx_t_5);
+    /*try:*/ {
+
+      /* "pygame_sdl2/display.pyx":108
+ *     # our window.
+ *     try:
+ *         import androidembed             # <<<<<<<<<<<<<<
+ *         androidembed.close_window()
+ *     except ImportError:
+ */
+      __pyx_t_1 = __Pyx_Import(__pyx_n_s_androidembed, 0, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_v_androidembed = __pyx_t_1;
+      __pyx_t_1 = 0;
+
+      /* "pygame_sdl2/display.pyx":109
+ *     try:
+ *         import androidembed
+ *         androidembed.close_window()             # <<<<<<<<<<<<<<
+ *     except ImportError:
+ *         pass
+ */
+      __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_androidembed, __pyx_n_s_close_window); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_7 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
+        if (likely(__pyx_t_7)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+          __Pyx_INCREF(__pyx_t_7);
+          __Pyx_INCREF(function);
+          __Pyx_DECREF_SET(__pyx_t_6, function);
+        }
+      }
+      if (__pyx_t_7) {
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      } else {
+        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      }
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+      /* "pygame_sdl2/display.pyx":107
+ *     # If we're on android, we have to close the splash window before opening
+ *     # our window.
+ *     try:             # <<<<<<<<<<<<<<
+ *         import androidembed
+ *         androidembed.close_window()
+ */
+    }
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    goto __pyx_L11_try_end;
+    __pyx_L4_error:;
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+    /* "pygame_sdl2/display.pyx":110
+ *         import androidembed
+ *         androidembed.close_window()
+ *     except ImportError:             # <<<<<<<<<<<<<<
+ *         pass
+ * 
+ */
+    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_ImportError);
+    if (__pyx_t_8) {
+      PyErr_Restore(0,0,0);
+      goto __pyx_L5_exception_handled;
+    }
+    goto __pyx_L6_except_error;
+    __pyx_L6_except_error:;
+
+    /* "pygame_sdl2/display.pyx":107
+ *     # If we're on android, we have to close the splash window before opening
+ *     # our window.
+ *     try:             # <<<<<<<<<<<<<<
+ *         import androidembed
+ *         androidembed.close_window()
+ */
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_XGIVEREF(__pyx_t_4);
+    __Pyx_XGIVEREF(__pyx_t_5);
+    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+    goto __pyx_L1_error;
+    __pyx_L5_exception_handled:;
+    __Pyx_XGIVEREF(__pyx_t_3);
+    __Pyx_XGIVEREF(__pyx_t_4);
+    __Pyx_XGIVEREF(__pyx_t_5);
+    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+    __pyx_L11_try_end:;
+  }
+
+  /* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("pygame_sdl2.display._before_first_window", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_androidembed);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "pygame_sdl2/display.pyx":116
  * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -1932,7 +2151,7 @@ static int __pyx_pw_11pygame_sdl2_7display_6Window_1__init__(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -1953,7 +2172,7 @@ static int __pyx_pw_11pygame_sdl2_7display_6Window_1__init__(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -1973,13 +2192,13 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Uint32 __pyx_t_5;
-  char const *__pyx_t_6;
-  int __pyx_t_7;
+  PyObject *__pyx_t_5 = NULL;
+  Uint32 __pyx_t_6;
+  char const *__pyx_t_7;
   int __pyx_t_8;
   int __pyx_t_9;
   int __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
+  int __pyx_t_11;
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
   PyObject *__pyx_t_14 = NULL;
@@ -1992,7 +2211,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "pygame_sdl2/display.pyx":97
+  /* "pygame_sdl2/display.pyx":118
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -2003,22 +2222,22 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":98
+    /* "pygame_sdl2/display.pyx":119
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
- *         self.create_flags = flags
+ *         _before_first_window()
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":97
+    /* "pygame_sdl2/display.pyx":118
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -2027,74 +2246,103 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
   }
 
-  /* "pygame_sdl2/display.pyx":100
+  /* "pygame_sdl2/display.pyx":121
  *             title = title.encode("utf-8")
  * 
+ *         _before_first_window()             # <<<<<<<<<<<<<<
+ * 
+ *         self.create_flags = flags
+ */
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_before_first_window); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_5 = NULL;
+  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
+    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
+    if (likely(__pyx_t_5)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_5);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_3, function);
+    }
+  }
+  if (__pyx_t_5) {
+    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else {
+    __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+  /* "pygame_sdl2/display.pyx":123
+ *         _before_first_window()
+ * 
  *         self.create_flags = flags             # <<<<<<<<<<<<<<
  * 
  *         self.window = SDL_CreateWindow(
  */
-  __pyx_t_5 = __Pyx_PyInt_As_uint32_t(__pyx_v_flags); if (unlikely((__pyx_t_5 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->create_flags = __pyx_t_5;
+  __pyx_t_6 = __Pyx_PyInt_As_uint32_t(__pyx_v_flags); if (unlikely((__pyx_t_6 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->create_flags = __pyx_t_6;
 
-  /* "pygame_sdl2/display.pyx":103
+  /* "pygame_sdl2/display.pyx":126
  * 
  *         self.window = SDL_CreateWindow(
  *             title,             # <<<<<<<<<<<<<<
  *             pos[0], pos[1],
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  */
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":104
+  /* "pygame_sdl2/display.pyx":127
  *         self.window = SDL_CreateWindow(
  *             title,
  *             pos[0], pos[1],             # <<<<<<<<<<<<<<
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  * 
  */
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_7 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_7 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_pos, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "pygame_sdl2/display.pyx":105
+  /* "pygame_sdl2/display.pyx":128
  *             title,
  *             pos[0], pos[1],
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)             # <<<<<<<<<<<<<<
  * 
  *         if not self.window:
  */
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  __pyx_t_4 = __Pyx_GetItemInt(__pyx_v_resolution, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyNumber_Or(__pyx_v_flags, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyNumber_Or(__pyx_v_flags, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_5 = __Pyx_PyInt_As_uint32_t(__pyx_t_3); if (unlikely((__pyx_t_5 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_As_uint32_t(__pyx_t_3); if (unlikely((__pyx_t_6 == (Uint32)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 128; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":102
+  /* "pygame_sdl2/display.pyx":125
  *         self.create_flags = flags
  * 
  *         self.window = SDL_CreateWindow(             # <<<<<<<<<<<<<<
  *             title,
  *             pos[0], pos[1],
  */
-  __pyx_v_self->window = SDL_CreateWindow(__pyx_t_6, __pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_5);
+  __pyx_v_self->window = SDL_CreateWindow(__pyx_t_7, __pyx_t_8, __pyx_t_9, __pyx_t_10, __pyx_t_11, __pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":107
+  /* "pygame_sdl2/display.pyx":130
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  * 
  *         if not self.window:             # <<<<<<<<<<<<<<
@@ -2104,38 +2352,38 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __pyx_t_2 = ((!(__pyx_v_self->window != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":108
+    /* "pygame_sdl2/display.pyx":131
  * 
  *         if not self.window:
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *         # From here on, the window exists. So we have to call self.destroy if
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_11 = NULL;
+    __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
-      __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
-      if (likely(__pyx_t_11)) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-        __Pyx_INCREF(__pyx_t_11);
+        __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_4, function);
       }
     }
-    if (__pyx_t_11) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    if (__pyx_t_5) {
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":107
+    /* "pygame_sdl2/display.pyx":130
  *             resolution[0], resolution[1], flags | SDL_WINDOW_OPENGL)
  * 
  *         if not self.window:             # <<<<<<<<<<<<<<
@@ -2144,7 +2392,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
   }
 
-  /* "pygame_sdl2/display.pyx":113
+  /* "pygame_sdl2/display.pyx":136
  *         # an exception occurs.
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -2158,23 +2406,23 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
     __Pyx_XGOTREF(__pyx_t_14);
     /*try:*/ {
 
-      /* "pygame_sdl2/display.pyx":115
+      /* "pygame_sdl2/display.pyx":138
  *         try:
  * 
  *             if flags & SDL_WINDOW_OPENGL:             # <<<<<<<<<<<<<<
  * 
  *                 self.gl_context = SDL_GL_CreateContext(self.window)
  */
-      __pyx_t_3 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_3 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyNumber_And(__pyx_v_flags, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_4 = PyNumber_And(__pyx_v_flags, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       if (__pyx_t_2) {
 
-        /* "pygame_sdl2/display.pyx":117
+        /* "pygame_sdl2/display.pyx":140
  *             if flags & SDL_WINDOW_OPENGL:
  * 
  *                 self.gl_context = SDL_GL_CreateContext(self.window)             # <<<<<<<<<<<<<<
@@ -2183,7 +2431,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
         __pyx_v_self->gl_context = SDL_GL_CreateContext(__pyx_v_self->window);
 
-        /* "pygame_sdl2/display.pyx":119
+        /* "pygame_sdl2/display.pyx":142
  *                 self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *                 if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -2193,38 +2441,38 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
         __pyx_t_2 = ((__pyx_v_self->gl_context == NULL) != 0);
         if (__pyx_t_2) {
 
-          /* "pygame_sdl2/display.pyx":120
+          /* "pygame_sdl2/display.pyx":143
  * 
  *                 if self.gl_context == NULL:
  *                     raise error()             # <<<<<<<<<<<<<<
  * 
  *                 if not ios:
  */
-          __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_11 = NULL;
+          __pyx_t_5 = NULL;
           if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
-            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_3);
-            if (likely(__pyx_t_11)) {
+            __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
+            if (likely(__pyx_t_5)) {
               PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
-              __Pyx_INCREF(__pyx_t_11);
+              __Pyx_INCREF(__pyx_t_5);
               __Pyx_INCREF(function);
               __Pyx_DECREF_SET(__pyx_t_3, function);
             }
           }
-          if (__pyx_t_11) {
-            __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_11); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
-            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+          if (__pyx_t_5) {
+            __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           } else {
-            __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           }
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_Raise(__pyx_t_4, 0, 0, 0);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          {__pyx_filename = __pyx_f[0]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
 
-          /* "pygame_sdl2/display.pyx":119
+          /* "pygame_sdl2/display.pyx":142
  *                 self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *                 if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -2233,51 +2481,51 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
         }
 
-        /* "pygame_sdl2/display.pyx":122
+        /* "pygame_sdl2/display.pyx":145
  *                     raise error()
  * 
  *                 if not ios:             # <<<<<<<<<<<<<<
  *                     # Try setting the swap interval - first positive, then negated
  *                     # to deal with the case where the negative interval isn't
  */
-        __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 122; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_1 = ((!__pyx_t_2) != 0);
         if (__pyx_t_1) {
 
-          /* "pygame_sdl2/display.pyx":126
+          /* "pygame_sdl2/display.pyx":149
  *                     # to deal with the case where the negative interval isn't
  *                     # supported. Then give up and carry on.
  *                     if SDL_GL_SetSwapInterval(default_swap_control):             # <<<<<<<<<<<<<<
  *                         SDL_GL_SetSwapInterval(-default_swap_control)
  * 
  */
-          __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_4); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          __pyx_t_1 = (SDL_GL_SetSwapInterval(__pyx_t_10) != 0);
+          __pyx_t_1 = (SDL_GL_SetSwapInterval(__pyx_t_11) != 0);
           if (__pyx_t_1) {
 
-            /* "pygame_sdl2/display.pyx":127
+            /* "pygame_sdl2/display.pyx":150
  *                     # supported. Then give up and carry on.
  *                     if SDL_GL_SetSwapInterval(default_swap_control):
  *                         SDL_GL_SetSwapInterval(-default_swap_control)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-            __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_swap_control); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
             __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_3 = PyNumber_Negative(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_3 = PyNumber_Negative(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
             __Pyx_GOTREF(__pyx_t_3);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-            __pyx_t_10 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_10 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+            __pyx_t_11 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_11 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-            SDL_GL_SetSwapInterval(__pyx_t_10);
+            SDL_GL_SetSwapInterval(__pyx_t_11);
 
-            /* "pygame_sdl2/display.pyx":126
+            /* "pygame_sdl2/display.pyx":149
  *                     # to deal with the case where the negative interval isn't
  *                     # supported. Then give up and carry on.
  *                     if SDL_GL_SetSwapInterval(default_swap_control):             # <<<<<<<<<<<<<<
@@ -2286,7 +2534,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
           }
 
-          /* "pygame_sdl2/display.pyx":122
+          /* "pygame_sdl2/display.pyx":145
  *                     raise error()
  * 
  *                 if not ios:             # <<<<<<<<<<<<<<
@@ -2295,7 +2543,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
         }
 
-        /* "pygame_sdl2/display.pyx":115
+        /* "pygame_sdl2/display.pyx":138
  *         try:
  * 
  *             if flags & SDL_WINDOW_OPENGL:             # <<<<<<<<<<<<<<
@@ -2304,36 +2552,36 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
       }
 
-      /* "pygame_sdl2/display.pyx":130
+      /* "pygame_sdl2/display.pyx":153
  * 
  * 
  *             self.create_surface()             # <<<<<<<<<<<<<<
  * 
  *         except:
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_11 = NULL;
+      __pyx_t_5 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
-        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
-        if (likely(__pyx_t_11)) {
+        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+        if (likely(__pyx_t_5)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_11);
+          __Pyx_INCREF(__pyx_t_5);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_4, function);
         }
       }
-      if (__pyx_t_11) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      if (__pyx_t_5) {
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
-        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
       }
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "pygame_sdl2/display.pyx":113
+      /* "pygame_sdl2/display.pyx":136
  *         # an exception occurs.
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -2346,11 +2594,11 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
     __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
     goto __pyx_L12_try_end;
     __pyx_L5_error:;
-    __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":132
+    /* "pygame_sdl2/display.pyx":155
  *             self.create_surface()
  * 
  *         except:             # <<<<<<<<<<<<<<
@@ -2359,19 +2607,19 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
     /*except:*/ {
       __Pyx_AddTraceback("pygame_sdl2.display.Window.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_11) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_GOTREF(__pyx_t_11);
+      __Pyx_GOTREF(__pyx_t_5);
 
-      /* "pygame_sdl2/display.pyx":133
+      /* "pygame_sdl2/display.pyx":156
  * 
  *         except:
  *             self.destroy()             # <<<<<<<<<<<<<<
  *             raise
  * 
  */
-      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_destroy); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      __pyx_t_16 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_destroy); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
       __Pyx_GOTREF(__pyx_t_16);
       __pyx_t_17 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_16))) {
@@ -2384,16 +2632,16 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
         }
       }
       if (__pyx_t_17) {
-        __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_15 = __Pyx_PyObject_CallOneArg(__pyx_t_16, __pyx_t_17); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
       } else {
-        __pyx_t_15 = __Pyx_PyObject_CallNoArg(__pyx_t_16); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 133; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_15 = __Pyx_PyObject_CallNoArg(__pyx_t_16); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 156; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
       }
       __Pyx_GOTREF(__pyx_t_15);
       __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
       __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
 
-      /* "pygame_sdl2/display.pyx":134
+      /* "pygame_sdl2/display.pyx":157
  *         except:
  *             self.destroy()
  *             raise             # <<<<<<<<<<<<<<
@@ -2402,14 +2650,14 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
  */
       __Pyx_GIVEREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_4);
-      __Pyx_XGIVEREF(__pyx_t_11);
-      __Pyx_ErrRestore(__pyx_t_3, __pyx_t_4, __pyx_t_11);
-      __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_11 = 0; 
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+      __Pyx_XGIVEREF(__pyx_t_5);
+      __Pyx_ErrRestore(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+      __pyx_t_3 = 0; __pyx_t_4 = 0; __pyx_t_5 = 0; 
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
     }
     __pyx_L7_except_error:;
 
-    /* "pygame_sdl2/display.pyx":113
+    /* "pygame_sdl2/display.pyx":136
  *         # an exception occurs.
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -2424,7 +2672,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
     __pyx_L12_try_end:;
   }
 
-  /* "pygame_sdl2/display.pyx":95
+  /* "pygame_sdl2/display.pyx":116
  * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -2438,7 +2686,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_15);
   __Pyx_XDECREF(__pyx_t_16);
   __Pyx_XDECREF(__pyx_t_17);
@@ -2450,7 +2698,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window___init__(struct __pyx_obj_11p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":136
+/* "pygame_sdl2/display.pyx":159
  *             raise
  * 
  *     def create_surface(self):             # <<<<<<<<<<<<<<
@@ -2487,7 +2735,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("create_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":142
+  /* "pygame_sdl2/display.pyx":165
  * 
  *         cdef int w, h
  *         SDL_GetWindowSize(self.window, &w, &h)             # <<<<<<<<<<<<<<
@@ -2496,7 +2744,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  */
   SDL_GetWindowSize(__pyx_v_self->window, (&__pyx_v_w), (&__pyx_v_h));
 
-  /* "pygame_sdl2/display.pyx":144
+  /* "pygame_sdl2/display.pyx":167
  *         SDL_GetWindowSize(self.window, &w, &h)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -2506,18 +2754,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   __pyx_t_1 = (__pyx_v_self->gl_context != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":149
+    /* "pygame_sdl2/display.pyx":172
  *             # TODO: Make this a bit less wasteful of memory, even if it means
  *             # we lie about the actual size of the pixel array.
  *             self.surface = Surface((w, h), SRCALPHA, 32)             # <<<<<<<<<<<<<<
  * 
  *         else:
  */
-    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -2525,9 +2773,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
     __pyx_t_2 = 0;
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_SRCALPHA); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
@@ -2538,7 +2786,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_int_32);
     __pyx_t_4 = 0;
     __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_GIVEREF(__pyx_t_3);
@@ -2547,7 +2795,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     __pyx_v_self->surface = ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":144
+    /* "pygame_sdl2/display.pyx":167
  *         SDL_GetWindowSize(self.window, &w, &h)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -2557,7 +2805,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":153
+  /* "pygame_sdl2/display.pyx":176
  *         else:
  * 
  *             self.window_surface = SDL_GetWindowSurface(self.window)             # <<<<<<<<<<<<<<
@@ -2567,7 +2815,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   /*else*/ {
     __pyx_v_self->window_surface = SDL_GetWindowSurface(__pyx_v_self->window);
 
-    /* "pygame_sdl2/display.pyx":157
+    /* "pygame_sdl2/display.pyx":180
  *             # If the surface is 32-bit, we can use it directly. Otherwise,
  *             # we need to create a 32-bit proxy surface.
  *             if self.window_surface.format.BitsPerPixel == 32:             # <<<<<<<<<<<<<<
@@ -2577,14 +2825,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
     __pyx_t_1 = ((__pyx_v_self->window_surface->format->BitsPerPixel == 32) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":159
+      /* "pygame_sdl2/display.pyx":182
  *             if self.window_surface.format.BitsPerPixel == 32:
  * 
  *                 self.surface = Surface(())             # <<<<<<<<<<<<<<
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False
  */
-      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GIVEREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_v_self->surface);
@@ -2592,7 +2840,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       __pyx_v_self->surface = ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)__pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "pygame_sdl2/display.pyx":160
+      /* "pygame_sdl2/display.pyx":183
  * 
  *                 self.surface = Surface(())
  *                 self.surface.surface = self.window_surface             # <<<<<<<<<<<<<<
@@ -2602,7 +2850,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       __pyx_t_5 = __pyx_v_self->window_surface;
       __pyx_v_self->surface->surface = __pyx_t_5;
 
-      /* "pygame_sdl2/display.pyx":161
+      /* "pygame_sdl2/display.pyx":184
  *                 self.surface = Surface(())
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False             # <<<<<<<<<<<<<<
@@ -2611,7 +2859,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  */
       __pyx_v_self->surface->owns_surface = 0;
 
-      /* "pygame_sdl2/display.pyx":162
+      /* "pygame_sdl2/display.pyx":185
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False
  *                 self.surface.window_surface = True             # <<<<<<<<<<<<<<
@@ -2620,7 +2868,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  */
       __pyx_v_self->surface->window_surface = 1;
 
-      /* "pygame_sdl2/display.pyx":157
+      /* "pygame_sdl2/display.pyx":180
  *             # If the surface is 32-bit, we can use it directly. Otherwise,
  *             # we need to create a 32-bit proxy surface.
  *             if self.window_surface.format.BitsPerPixel == 32:             # <<<<<<<<<<<<<<
@@ -2630,7 +2878,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       goto __pyx_L4;
     }
 
-    /* "pygame_sdl2/display.pyx":165
+    /* "pygame_sdl2/display.pyx":188
  * 
  *             else:
  *                 self.surface = Surface((w, h), 0, 32)             # <<<<<<<<<<<<<<
@@ -2638,11 +2886,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
  *         self.surface.get_window_flags = self.get_window_flags
  */
     /*else*/ {
-      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
@@ -2650,7 +2898,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
       __pyx_t_3 = 0;
       __pyx_t_2 = 0;
-      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
@@ -2661,7 +2909,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
       __Pyx_GIVEREF(__pyx_int_32);
       PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_int_32);
       __pyx_t_4 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7surface_Surface), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_GIVEREF(__pyx_t_4);
@@ -2674,14 +2922,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":167
+  /* "pygame_sdl2/display.pyx":190
  *                 self.surface = Surface((w, h), 0, 32)
  * 
  *         self.surface.get_window_flags = self.get_window_flags             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_window_flags); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_get_window_flags); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->surface->get_window_flags);
@@ -2689,7 +2937,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   __pyx_v_self->surface->get_window_flags = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "pygame_sdl2/display.pyx":136
+  /* "pygame_sdl2/display.pyx":159
  *             raise
  * 
  *     def create_surface(self):             # <<<<<<<<<<<<<<
@@ -2712,7 +2960,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_2create_surface(struct
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":170
+/* "pygame_sdl2/display.pyx":193
  * 
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -2743,7 +2991,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "pygame_sdl2/display.pyx":175
+  /* "pygame_sdl2/display.pyx":198
  *         """
  * 
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -2753,7 +3001,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_self->gl_context != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":176
+    /* "pygame_sdl2/display.pyx":199
  * 
  *         if self.gl_context != NULL:
  *             SDL_GL_DeleteContext(self.gl_context)             # <<<<<<<<<<<<<<
@@ -2762,7 +3010,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
     SDL_GL_DeleteContext(__pyx_v_self->gl_context);
 
-    /* "pygame_sdl2/display.pyx":175
+    /* "pygame_sdl2/display.pyx":198
  *         """
  * 
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -2771,17 +3019,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":178
+  /* "pygame_sdl2/display.pyx":201
  *             SDL_GL_DeleteContext(self.gl_context)
  * 
  *         if self.surface:             # <<<<<<<<<<<<<<
  * 
  *             # Break the cycle that prevents refcounting from collecting this
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self->surface)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_self->surface)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 201; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":182
+    /* "pygame_sdl2/display.pyx":205
  *             # Break the cycle that prevents refcounting from collecting this
  *             # object.
  *             self.surface.get_window_flags = None             # <<<<<<<<<<<<<<
@@ -2794,7 +3042,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
     __Pyx_DECREF(__pyx_v_self->surface->get_window_flags);
     __pyx_v_self->surface->get_window_flags = Py_None;
 
-    /* "pygame_sdl2/display.pyx":185
+    /* "pygame_sdl2/display.pyx":208
  * 
  *             # Necessary to collect the GL surface, doesn't hurt the window surface.
  *             self.surface = None             # <<<<<<<<<<<<<<
@@ -2807,7 +3055,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
     __Pyx_DECREF(((PyObject *)__pyx_v_self->surface));
     __pyx_v_self->surface = ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)Py_None);
 
-    /* "pygame_sdl2/display.pyx":178
+    /* "pygame_sdl2/display.pyx":201
  *             SDL_GL_DeleteContext(self.gl_context)
  * 
  *         if self.surface:             # <<<<<<<<<<<<<<
@@ -2816,7 +3064,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":187
+  /* "pygame_sdl2/display.pyx":210
  *             self.surface = None
  * 
  *         SDL_DestroyWindow(self.window)             # <<<<<<<<<<<<<<
@@ -2825,7 +3073,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
  */
   SDL_DestroyWindow(__pyx_v_self->window);
 
-  /* "pygame_sdl2/display.pyx":170
+  /* "pygame_sdl2/display.pyx":193
  * 
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -2845,7 +3093,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_4destroy(struct __pyx_o
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":189
+/* "pygame_sdl2/display.pyx":212
  *         SDL_DestroyWindow(self.window)
  * 
  *     def resize(self, size, opengl=False):             # <<<<<<<<<<<<<<
@@ -2890,7 +3138,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_7resize(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "resize") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -2905,7 +3153,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_7resize(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("resize", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("resize", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 212; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.resize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -2939,7 +3187,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("resize", 0);
 
-  /* "pygame_sdl2/display.pyx":197
+  /* "pygame_sdl2/display.pyx":220
  * 
  *         # Prevents a loop between the surface and this object.
  *         self.surface.get_window_flags = None             # <<<<<<<<<<<<<<
@@ -2952,7 +3200,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   __Pyx_DECREF(__pyx_v_self->surface->get_window_flags);
   __pyx_v_self->surface->get_window_flags = Py_None;
 
-  /* "pygame_sdl2/display.pyx":199
+  /* "pygame_sdl2/display.pyx":222
  *         self.surface.get_window_flags = None
  * 
  *         if self.gl_context and not opengl:             # <<<<<<<<<<<<<<
@@ -2965,13 +3213,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __pyx_t_1 = __pyx_t_2;
     goto __pyx_L4_bool_binop_done;
   }
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_3 = ((!__pyx_t_2) != 0);
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":200
+    /* "pygame_sdl2/display.pyx":223
  * 
  *         if self.gl_context and not opengl:
  *             SDL_GL_DeleteContext(self.gl_context)             # <<<<<<<<<<<<<<
@@ -2980,7 +3228,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     SDL_GL_DeleteContext(__pyx_v_self->gl_context);
 
-    /* "pygame_sdl2/display.pyx":201
+    /* "pygame_sdl2/display.pyx":224
  *         if self.gl_context and not opengl:
  *             SDL_GL_DeleteContext(self.gl_context)
  *             self.gl_context = NULL             # <<<<<<<<<<<<<<
@@ -2989,7 +3237,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     __pyx_v_self->gl_context = NULL;
 
-    /* "pygame_sdl2/display.pyx":199
+    /* "pygame_sdl2/display.pyx":222
  *         self.surface.get_window_flags = None
  * 
  *         if self.gl_context and not opengl:             # <<<<<<<<<<<<<<
@@ -2998,7 +3246,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   }
 
-  /* "pygame_sdl2/display.pyx":203
+  /* "pygame_sdl2/display.pyx":226
  *             self.gl_context = NULL
  * 
  *         cdef int cur_width = 0             # <<<<<<<<<<<<<<
@@ -3007,7 +3255,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   __pyx_v_cur_width = 0;
 
-  /* "pygame_sdl2/display.pyx":204
+  /* "pygame_sdl2/display.pyx":227
  * 
  *         cdef int cur_width = 0
  *         cdef int cur_height = 0             # <<<<<<<<<<<<<<
@@ -3016,7 +3264,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   __pyx_v_cur_height = 0;
 
-  /* "pygame_sdl2/display.pyx":206
+  /* "pygame_sdl2/display.pyx":229
  *         cdef int cur_height = 0
  * 
  *         width, height = size             # <<<<<<<<<<<<<<
@@ -3033,7 +3281,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -3046,21 +3294,21 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_t_5);
     #else
-    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     #endif
   } else {
     Py_ssize_t index = -1;
-    __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
     index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_4);
     index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L6_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_5);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_7 = NULL;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L7_unpacking_done;
@@ -3068,7 +3316,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L7_unpacking_done:;
   }
   __pyx_v_width = __pyx_t_4;
@@ -3076,7 +3324,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   __pyx_v_height = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":208
+  /* "pygame_sdl2/display.pyx":231
  *         width, height = size
  * 
  *         SDL_GetWindowSize(self.window, &cur_width, &cur_height)             # <<<<<<<<<<<<<<
@@ -3085,46 +3333,46 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   SDL_GetWindowSize(__pyx_v_self->window, (&__pyx_v_cur_width), (&__pyx_v_cur_height));
 
-  /* "pygame_sdl2/display.pyx":210
+  /* "pygame_sdl2/display.pyx":233
  *         SDL_GetWindowSize(self.window, &cur_width, &cur_height)
  * 
  *         if (cur_width != width) or (cur_height != height):             # <<<<<<<<<<<<<<
  *             SDL_SetWindowSize(self.window, width, height)
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_cur_width); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_cur_width); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_v_width, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_v_width, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   if (!__pyx_t_3) {
   } else {
     __pyx_t_1 = __pyx_t_3;
     goto __pyx_L9_bool_binop_done;
   }
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_cur_height); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_cur_height); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_v_height, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_v_height, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_1 = __pyx_t_3;
   __pyx_L9_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":211
+    /* "pygame_sdl2/display.pyx":234
  * 
  *         if (cur_width != width) or (cur_height != height):
  *             SDL_SetWindowSize(self.window, width, height)             # <<<<<<<<<<<<<<
  * 
  *         cdef int w, h
  */
-    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_width); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_height); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyInt_As_int(__pyx_v_width); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyInt_As_int(__pyx_v_height); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     SDL_SetWindowSize(__pyx_v_self->window, __pyx_t_8, __pyx_t_9);
 
-    /* "pygame_sdl2/display.pyx":210
+    /* "pygame_sdl2/display.pyx":233
  *         SDL_GetWindowSize(self.window, &cur_width, &cur_height)
  * 
  *         if (cur_width != width) or (cur_height != height):             # <<<<<<<<<<<<<<
@@ -3133,14 +3381,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   }
 
-  /* "pygame_sdl2/display.pyx":216
+  /* "pygame_sdl2/display.pyx":239
  * 
  *         # Create a missing GL context.
  *         if opengl and not self.gl_context:             # <<<<<<<<<<<<<<
  *             self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_opengl); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_3) {
   } else {
     __pyx_t_1 = __pyx_t_3;
@@ -3151,7 +3399,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   __pyx_L12_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":217
+    /* "pygame_sdl2/display.pyx":240
  *         # Create a missing GL context.
  *         if opengl and not self.gl_context:
  *             self.gl_context = SDL_GL_CreateContext(self.window)             # <<<<<<<<<<<<<<
@@ -3160,7 +3408,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     __pyx_v_self->gl_context = SDL_GL_CreateContext(__pyx_v_self->window);
 
-    /* "pygame_sdl2/display.pyx":219
+    /* "pygame_sdl2/display.pyx":242
  *             self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *             if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -3170,14 +3418,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     __pyx_t_1 = ((__pyx_v_self->gl_context == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":220
+      /* "pygame_sdl2/display.pyx":243
  * 
  *             if self.gl_context == NULL:
  *                 raise error()             # <<<<<<<<<<<<<<
  * 
  *         self.create_surface()
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -3190,18 +3438,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":219
+      /* "pygame_sdl2/display.pyx":242
  *             self.gl_context = SDL_GL_CreateContext(self.window)
  * 
  *             if self.gl_context == NULL:             # <<<<<<<<<<<<<<
@@ -3210,7 +3458,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
     }
 
-    /* "pygame_sdl2/display.pyx":216
+    /* "pygame_sdl2/display.pyx":239
  * 
  *         # Create a missing GL context.
  *         if opengl and not self.gl_context:             # <<<<<<<<<<<<<<
@@ -3219,14 +3467,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
  */
   }
 
-  /* "pygame_sdl2/display.pyx":222
+  /* "pygame_sdl2/display.pyx":245
  *                 raise error()
  * 
  *         self.create_surface()             # <<<<<<<<<<<<<<
  * 
  *     def get_window_flags(self):
  */
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_create_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_6 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3239,16 +3487,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
     }
   }
   if (__pyx_t_6) {
-    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   } else {
-    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":189
+  /* "pygame_sdl2/display.pyx":212
  *         SDL_DestroyWindow(self.window)
  * 
  *     def resize(self, size, opengl=False):             # <<<<<<<<<<<<<<
@@ -3273,7 +3521,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_6resize(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":224
+/* "pygame_sdl2/display.pyx":247
  *         self.create_surface()
  * 
  *     def get_window_flags(self):             # <<<<<<<<<<<<<<
@@ -3306,19 +3554,19 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_window_flags", 0);
 
-  /* "pygame_sdl2/display.pyx":225
+  /* "pygame_sdl2/display.pyx":248
  * 
  *     def get_window_flags(self):
  *         rv = SDL_GetWindowFlags(self.window)             # <<<<<<<<<<<<<<
  * 
  *         if self.gl_context:
  */
-  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(SDL_GetWindowFlags(__pyx_v_self->window)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_uint32_t(SDL_GetWindowFlags(__pyx_v_self->window)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rv = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/display.pyx":227
+  /* "pygame_sdl2/display.pyx":250
  *         rv = SDL_GetWindowFlags(self.window)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -3328,22 +3576,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   __pyx_t_2 = (__pyx_v_self->gl_context != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":228
+    /* "pygame_sdl2/display.pyx":251
  * 
  *         if self.gl_context:
  *             rv |= SDL_WINDOW_OPENGL             # <<<<<<<<<<<<<<
  *         else:
  *             rv &= ~SDL_WINDOW_OPENGL
  */
-    __pyx_t_1 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyNumber_InPlaceOr(__pyx_v_rv, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_InPlaceOr(__pyx_v_rv, __pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_rv, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":227
+    /* "pygame_sdl2/display.pyx":250
  *         rv = SDL_GetWindowFlags(self.window)
  * 
  *         if self.gl_context:             # <<<<<<<<<<<<<<
@@ -3353,7 +3601,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":230
+  /* "pygame_sdl2/display.pyx":253
  *             rv |= SDL_WINDOW_OPENGL
  *         else:
  *             rv &= ~SDL_WINDOW_OPENGL             # <<<<<<<<<<<<<<
@@ -3361,9 +3609,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
  *         return rv
  */
   /*else*/ {
-    __pyx_t_3 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyNumber_InPlaceAnd(__pyx_v_rv, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 230; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyNumber_InPlaceAnd(__pyx_v_rv, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_rv, __pyx_t_1);
@@ -3371,7 +3619,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":232
+  /* "pygame_sdl2/display.pyx":255
  *             rv &= ~SDL_WINDOW_OPENGL
  * 
  *         return rv             # <<<<<<<<<<<<<<
@@ -3383,7 +3631,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   __pyx_r = __pyx_v_rv;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":224
+  /* "pygame_sdl2/display.pyx":247
  *         self.create_surface()
  * 
  *     def get_window_flags(self):             # <<<<<<<<<<<<<<
@@ -3404,7 +3652,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_8get_window_flags(struc
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":234
+/* "pygame_sdl2/display.pyx":257
  *         return rv
  * 
  *     def proxy_window_surface(self):             # <<<<<<<<<<<<<<
@@ -3430,7 +3678,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_10proxy_window_surface(
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("proxy_window_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":235
+  /* "pygame_sdl2/display.pyx":258
  * 
  *     def proxy_window_surface(self):
  *         SDL_UpperBlit(self.surface.surface, NULL, self.window_surface, NULL)             # <<<<<<<<<<<<<<
@@ -3439,7 +3687,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_10proxy_window_surface(
  */
   SDL_UpperBlit(__pyx_v_self->surface->surface, NULL, __pyx_v_self->window_surface, NULL);
 
-  /* "pygame_sdl2/display.pyx":234
+  /* "pygame_sdl2/display.pyx":257
  *         return rv
  * 
  *     def proxy_window_surface(self):             # <<<<<<<<<<<<<<
@@ -3454,7 +3702,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_10proxy_window_surface(
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":237
+/* "pygame_sdl2/display.pyx":260
  *         SDL_UpperBlit(self.surface.surface, NULL, self.window_surface, NULL)
  * 
  *     def flip(self):             # <<<<<<<<<<<<<<
@@ -3487,7 +3735,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("flip", 0);
 
-  /* "pygame_sdl2/display.pyx":238
+  /* "pygame_sdl2/display.pyx":261
  * 
  *     def flip(self):
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -3497,7 +3745,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   __pyx_t_1 = ((__pyx_v_self->gl_context != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":239
+    /* "pygame_sdl2/display.pyx":262
  *     def flip(self):
  *         if self.gl_context != NULL:
  *             SDL_GL_SwapWindow(self.window)             # <<<<<<<<<<<<<<
@@ -3506,7 +3754,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
  */
     SDL_GL_SwapWindow(__pyx_v_self->window);
 
-    /* "pygame_sdl2/display.pyx":238
+    /* "pygame_sdl2/display.pyx":261
  * 
  *     def flip(self):
  *         if self.gl_context != NULL:             # <<<<<<<<<<<<<<
@@ -3516,7 +3764,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":242
+  /* "pygame_sdl2/display.pyx":265
  *         else:
  * 
  *             if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3527,14 +3775,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
     __pyx_t_1 = ((__pyx_v_self->surface->surface != __pyx_v_self->window_surface) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":243
+      /* "pygame_sdl2/display.pyx":266
  * 
  *             if self.surface.surface != self.window_surface:
  *                 self.proxy_window_surface()             # <<<<<<<<<<<<<<
  * 
  *             SDL_UpdateWindowSurface(self.window)
  */
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -3547,16 +3795,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "pygame_sdl2/display.pyx":242
+      /* "pygame_sdl2/display.pyx":265
  *         else:
  * 
  *             if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3565,7 +3813,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
  */
     }
 
-    /* "pygame_sdl2/display.pyx":245
+    /* "pygame_sdl2/display.pyx":268
  *                 self.proxy_window_surface()
  * 
  *             SDL_UpdateWindowSurface(self.window)             # <<<<<<<<<<<<<<
@@ -3576,7 +3824,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":237
+  /* "pygame_sdl2/display.pyx":260
  *         SDL_UpperBlit(self.surface.surface, NULL, self.window_surface, NULL)
  * 
  *     def flip(self):             # <<<<<<<<<<<<<<
@@ -3599,7 +3847,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_12flip(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":247
+/* "pygame_sdl2/display.pyx":270
  *             SDL_UpdateWindowSurface(self.window)
  * 
  *     def get_surface(self):             # <<<<<<<<<<<<<<
@@ -3625,7 +3873,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_14get_surface(struct __
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":248
+  /* "pygame_sdl2/display.pyx":271
  * 
  *     def get_surface(self):
  *         return self.surface             # <<<<<<<<<<<<<<
@@ -3637,7 +3885,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_14get_surface(struct __
   __pyx_r = ((PyObject *)__pyx_v_self->surface);
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":247
+  /* "pygame_sdl2/display.pyx":270
  *             SDL_UpdateWindowSurface(self.window)
  * 
  *     def get_surface(self):             # <<<<<<<<<<<<<<
@@ -3652,7 +3900,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_14get_surface(struct __
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":250
+/* "pygame_sdl2/display.pyx":273
  *         return self.surface
  * 
  *     def update(self, rectangles=None):             # <<<<<<<<<<<<<<
@@ -3691,7 +3939,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_17update(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -3704,7 +3952,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_17update(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -3745,7 +3993,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __Pyx_RefNannySetupContext("update", 0);
   __Pyx_INCREF(__pyx_v_rectangles);
 
-  /* "pygame_sdl2/display.pyx":253
+  /* "pygame_sdl2/display.pyx":276
  * 
  *         cdef SDL_Rect *rects
  *         cdef int count = 0             # <<<<<<<<<<<<<<
@@ -3754,7 +4002,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   __pyx_v_count = 0;
 
-  /* "pygame_sdl2/display.pyx":255
+  /* "pygame_sdl2/display.pyx":278
  *         cdef int count = 0
  * 
  *         if rectangles is None:             # <<<<<<<<<<<<<<
@@ -3765,14 +4013,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":256
+    /* "pygame_sdl2/display.pyx":279
  * 
  *         if rectangles is None:
  *             self.flip()             # <<<<<<<<<<<<<<
  *             return
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_flip); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_flip); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3785,16 +4033,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":257
+    /* "pygame_sdl2/display.pyx":280
  *         if rectangles is None:
  *             self.flip()
  *             return             # <<<<<<<<<<<<<<
@@ -3805,7 +4053,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":255
+    /* "pygame_sdl2/display.pyx":278
  *         cdef int count = 0
  * 
  *         if rectangles is None:             # <<<<<<<<<<<<<<
@@ -3814,7 +4062,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":259
+  /* "pygame_sdl2/display.pyx":282
  *             return
  * 
  *         if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3824,14 +4072,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_2 = ((__pyx_v_self->surface->surface != __pyx_v_self->window_surface) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":260
+    /* "pygame_sdl2/display.pyx":283
  * 
  *         if self.surface.surface != self.window_surface:
  *             self.proxy_window_surface()             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(rectangles, list):
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_proxy_window_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3844,16 +4092,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":259
+    /* "pygame_sdl2/display.pyx":282
  *             return
  * 
  *         if self.surface.surface != self.window_surface:             # <<<<<<<<<<<<<<
@@ -3862,7 +4110,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":262
+  /* "pygame_sdl2/display.pyx":285
  *             self.proxy_window_surface()
  * 
  *         if not isinstance(rectangles, list):             # <<<<<<<<<<<<<<
@@ -3873,14 +4121,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":263
+    /* "pygame_sdl2/display.pyx":286
  * 
  *         if not isinstance(rectangles, list):
  *             rectangles = [ rectangles ]             # <<<<<<<<<<<<<<
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  */
-    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_rectangles);
     __Pyx_GIVEREF(__pyx_v_rectangles);
@@ -3888,7 +4136,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     __Pyx_DECREF_SET(__pyx_v_rectangles, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":262
+    /* "pygame_sdl2/display.pyx":285
  *             self.proxy_window_surface()
  * 
  *         if not isinstance(rectangles, list):             # <<<<<<<<<<<<<<
@@ -3897,17 +4145,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":265
+  /* "pygame_sdl2/display.pyx":288
  *             rectangles = [ rectangles ]
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))             # <<<<<<<<<<<<<<
  *         if rects == NULL:
  *             raise MemoryError("Couldn't allocate rectangles.")
  */
-  __pyx_t_6 = PyObject_Length(__pyx_v_rectangles); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Length(__pyx_v_rectangles); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_rects = ((SDL_Rect *)calloc(__pyx_t_6, (sizeof(SDL_Rect))));
 
-  /* "pygame_sdl2/display.pyx":266
+  /* "pygame_sdl2/display.pyx":289
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:             # <<<<<<<<<<<<<<
@@ -3917,20 +4165,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_rects == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":267
+    /* "pygame_sdl2/display.pyx":290
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:
  *             raise MemoryError("Couldn't allocate rectangles.")             # <<<<<<<<<<<<<<
  * 
  *         try:
  */
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":266
+    /* "pygame_sdl2/display.pyx":289
  * 
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:             # <<<<<<<<<<<<<<
@@ -3939,7 +4187,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   }
 
-  /* "pygame_sdl2/display.pyx":269
+  /* "pygame_sdl2/display.pyx":292
  *             raise MemoryError("Couldn't allocate rectangles.")
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -3948,7 +4196,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
   /*try:*/ {
 
-    /* "pygame_sdl2/display.pyx":271
+    /* "pygame_sdl2/display.pyx":294
  *         try:
  * 
  *             for i in rectangles:             # <<<<<<<<<<<<<<
@@ -3959,26 +4207,26 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       __pyx_t_3 = __pyx_v_rectangles; __Pyx_INCREF(__pyx_t_3); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_rectangles); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_6 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_rectangles); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
     }
     for (;;) {
       if (likely(!__pyx_t_7)) {
         if (likely(PyList_CheckExact(__pyx_t_3))) {
           if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_3)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         } else {
           if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           #else
-          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+          __pyx_t_4 = PySequence_ITEM(__pyx_t_3, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           __Pyx_GOTREF(__pyx_t_4);
           #endif
         }
@@ -3988,7 +4236,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
             if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+            else {__pyx_filename = __pyx_f[0]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
           }
           break;
         }
@@ -3997,7 +4245,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "pygame_sdl2/display.pyx":272
+      /* "pygame_sdl2/display.pyx":295
  * 
  *             for i in rectangles:
  *                 if i is None:             # <<<<<<<<<<<<<<
@@ -4008,7 +4256,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
       __pyx_t_2 = (__pyx_t_1 != 0);
       if (__pyx_t_2) {
 
-        /* "pygame_sdl2/display.pyx":273
+        /* "pygame_sdl2/display.pyx":296
  *             for i in rectangles:
  *                 if i is None:
  *                     continue             # <<<<<<<<<<<<<<
@@ -4017,7 +4265,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
         goto __pyx_L10_continue;
 
-        /* "pygame_sdl2/display.pyx":272
+        /* "pygame_sdl2/display.pyx":295
  * 
  *             for i in rectangles:
  *                 if i is None:             # <<<<<<<<<<<<<<
@@ -4026,16 +4274,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
       }
 
-      /* "pygame_sdl2/display.pyx":275
+      /* "pygame_sdl2/display.pyx":298
  *                     continue
  * 
  *                 to_sdl_rect(i, &rects[count])             # <<<<<<<<<<<<<<
  *                 count += 1
  * 
  */
-      __pyx_t_8 = __pyx_f_11pygame_sdl2_4rect_to_sdl_rect(__pyx_v_i, (&(__pyx_v_rects[__pyx_v_count])), NULL); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_8 = __pyx_f_11pygame_sdl2_4rect_to_sdl_rect(__pyx_v_i, (&(__pyx_v_rects[__pyx_v_count])), NULL); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 298; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
 
-      /* "pygame_sdl2/display.pyx":276
+      /* "pygame_sdl2/display.pyx":299
  * 
  *                 to_sdl_rect(i, &rects[count])
  *                 count += 1             # <<<<<<<<<<<<<<
@@ -4044,7 +4292,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
  */
       __pyx_v_count = (__pyx_v_count + 1);
 
-      /* "pygame_sdl2/display.pyx":271
+      /* "pygame_sdl2/display.pyx":294
  *         try:
  * 
  *             for i in rectangles:             # <<<<<<<<<<<<<<
@@ -4055,7 +4303,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":278
+    /* "pygame_sdl2/display.pyx":301
  *                 count += 1
  * 
  *             SDL_UpdateWindowSurfaceRects(self.window, rects, count)             # <<<<<<<<<<<<<<
@@ -4065,7 +4313,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     SDL_UpdateWindowSurfaceRects(__pyx_v_self->window, __pyx_v_rects, __pyx_v_count);
   }
 
-  /* "pygame_sdl2/display.pyx":281
+  /* "pygame_sdl2/display.pyx":304
  * 
  *         finally:
  *             free(rects)             # <<<<<<<<<<<<<<
@@ -4112,7 +4360,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
     __pyx_L9:;
   }
 
-  /* "pygame_sdl2/display.pyx":250
+  /* "pygame_sdl2/display.pyx":273
  *         return self.surface
  * 
  *     def update(self, rectangles=None):             # <<<<<<<<<<<<<<
@@ -4137,7 +4385,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_16update(struct __pyx_o
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":283
+/* "pygame_sdl2/display.pyx":306
  *             free(rects)
  * 
  *     def get_wm_info(self):             # <<<<<<<<<<<<<<
@@ -4167,7 +4415,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_18get_wm_info(CYTHON_UN
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_wm_info", 0);
 
-  /* "pygame_sdl2/display.pyx":284
+  /* "pygame_sdl2/display.pyx":307
  * 
  *     def get_wm_info(self):
  *         return { }             # <<<<<<<<<<<<<<
@@ -4175,13 +4423,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_18get_wm_info(CYTHON_UN
  *     def get_active(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 284; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 307; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":283
+  /* "pygame_sdl2/display.pyx":306
  *             free(rects)
  * 
  *     def get_wm_info(self):             # <<<<<<<<<<<<<<
@@ -4200,7 +4448,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_18get_wm_info(CYTHON_UN
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":286
+/* "pygame_sdl2/display.pyx":309
  *         return { }
  * 
  *     def get_active(self):             # <<<<<<<<<<<<<<
@@ -4227,7 +4475,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("get_active", 0);
 
-  /* "pygame_sdl2/display.pyx":287
+  /* "pygame_sdl2/display.pyx":310
  * 
  *     def get_active(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED):             # <<<<<<<<<<<<<<
@@ -4237,7 +4485,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
   __pyx_t_1 = ((SDL_GetWindowFlags(__pyx_v_self->window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":288
+    /* "pygame_sdl2/display.pyx":311
  *     def get_active(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED):
  *             return False             # <<<<<<<<<<<<<<
@@ -4249,7 +4497,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
     __pyx_r = Py_False;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":287
+    /* "pygame_sdl2/display.pyx":310
  * 
  *     def get_active(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED):             # <<<<<<<<<<<<<<
@@ -4258,7 +4506,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
  */
   }
 
-  /* "pygame_sdl2/display.pyx":290
+  /* "pygame_sdl2/display.pyx":313
  *             return False
  *         else:
  *             return True             # <<<<<<<<<<<<<<
@@ -4272,7 +4520,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
     goto __pyx_L0;
   }
 
-  /* "pygame_sdl2/display.pyx":286
+  /* "pygame_sdl2/display.pyx":309
  *         return { }
  * 
  *     def get_active(self):             # <<<<<<<<<<<<<<
@@ -4287,7 +4535,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_20get_active(struct __p
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":292
+/* "pygame_sdl2/display.pyx":315
  *             return True
  * 
  *     def iconify(self):             # <<<<<<<<<<<<<<
@@ -4313,7 +4561,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("iconify", 0);
 
-  /* "pygame_sdl2/display.pyx":293
+  /* "pygame_sdl2/display.pyx":316
  * 
  *     def iconify(self):
  *         SDL_MinimizeWindow(self.window)             # <<<<<<<<<<<<<<
@@ -4322,7 +4570,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
  */
   SDL_MinimizeWindow(__pyx_v_self->window);
 
-  /* "pygame_sdl2/display.pyx":294
+  /* "pygame_sdl2/display.pyx":317
  *     def iconify(self):
  *         SDL_MinimizeWindow(self.window)
  *         return True             # <<<<<<<<<<<<<<
@@ -4334,7 +4582,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":292
+  /* "pygame_sdl2/display.pyx":315
  *             return True
  * 
  *     def iconify(self):             # <<<<<<<<<<<<<<
@@ -4349,7 +4597,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_22iconify(struct __pyx_
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":296
+/* "pygame_sdl2/display.pyx":319
  *         return True
  * 
  *     def toggle_fullscreen(self):             # <<<<<<<<<<<<<<
@@ -4382,7 +4630,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toggle_fullscreen", 0);
 
-  /* "pygame_sdl2/display.pyx":297
+  /* "pygame_sdl2/display.pyx":320
  * 
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4392,7 +4640,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   __pyx_t_1 = ((SDL_GetWindowFlags(__pyx_v_self->window) & SDL_WINDOW_FULLSCREEN_DESKTOP) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":298
+    /* "pygame_sdl2/display.pyx":321
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):
  *             if SDL_SetWindowFullscreen(self.window, 0):             # <<<<<<<<<<<<<<
@@ -4402,14 +4650,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
     __pyx_t_1 = (SDL_SetWindowFullscreen(__pyx_v_self->window, 0) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":299
+      /* "pygame_sdl2/display.pyx":322
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):
  *             if SDL_SetWindowFullscreen(self.window, 0):
  *                 raise error()             # <<<<<<<<<<<<<<
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -4422,18 +4670,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 299; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":298
+      /* "pygame_sdl2/display.pyx":321
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):
  *             if SDL_SetWindowFullscreen(self.window, 0):             # <<<<<<<<<<<<<<
@@ -4442,7 +4690,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
  */
     }
 
-    /* "pygame_sdl2/display.pyx":297
+    /* "pygame_sdl2/display.pyx":320
  * 
  *     def toggle_fullscreen(self):
  *         if SDL_GetWindowFlags(self.window) & (SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4452,7 +4700,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":301
+  /* "pygame_sdl2/display.pyx":324
  *                 raise error()
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4463,14 +4711,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
     __pyx_t_1 = (SDL_SetWindowFullscreen(__pyx_v_self->window, SDL_WINDOW_FULLSCREEN_DESKTOP) != 0);
     if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":302
+      /* "pygame_sdl2/display.pyx":325
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):
  *                 raise error()             # <<<<<<<<<<<<<<
  * 
  *         return True
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_t_4 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -4483,18 +4731,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
         }
       }
       if (__pyx_t_4) {
-        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else {
-        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 302; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":301
+      /* "pygame_sdl2/display.pyx":324
  *                 raise error()
  *         else:
  *             if SDL_SetWindowFullscreen(self.window, SDL_WINDOW_FULLSCREEN_DESKTOP):             # <<<<<<<<<<<<<<
@@ -4505,7 +4753,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":304
+  /* "pygame_sdl2/display.pyx":327
  *                 raise error()
  * 
  *         return True             # <<<<<<<<<<<<<<
@@ -4517,7 +4765,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":296
+  /* "pygame_sdl2/display.pyx":319
  *         return True
  * 
  *     def toggle_fullscreen(self):             # <<<<<<<<<<<<<<
@@ -4538,7 +4786,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_24toggle_fullscreen(str
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":306
+/* "pygame_sdl2/display.pyx":329
  *         return True
  * 
  *     def set_gamma(self, red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -4590,7 +4838,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_27set_gamma(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -4607,7 +4855,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_27set_gamma(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 306; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 329; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.set_gamma", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4636,7 +4884,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __Pyx_INCREF(__pyx_v_green);
   __Pyx_INCREF(__pyx_v_blue);
 
-  /* "pygame_sdl2/display.pyx":307
+  /* "pygame_sdl2/display.pyx":330
  * 
  *     def set_gamma(self, red, green=None, blue=None):
  *         if green is None:             # <<<<<<<<<<<<<<
@@ -4647,7 +4895,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":308
+    /* "pygame_sdl2/display.pyx":331
  *     def set_gamma(self, red, green=None, blue=None):
  *         if green is None:
  *             green = red             # <<<<<<<<<<<<<<
@@ -4657,7 +4905,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
     __Pyx_INCREF(__pyx_v_red);
     __Pyx_DECREF_SET(__pyx_v_green, __pyx_v_red);
 
-    /* "pygame_sdl2/display.pyx":307
+    /* "pygame_sdl2/display.pyx":330
  * 
  *     def set_gamma(self, red, green=None, blue=None):
  *         if green is None:             # <<<<<<<<<<<<<<
@@ -4666,7 +4914,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":309
+  /* "pygame_sdl2/display.pyx":332
  *         if green is None:
  *             green = red
  *         if blue is None:             # <<<<<<<<<<<<<<
@@ -4677,7 +4925,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":310
+    /* "pygame_sdl2/display.pyx":333
  *             green = red
  *         if blue is None:
  *             blue = red             # <<<<<<<<<<<<<<
@@ -4687,7 +4935,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
     __Pyx_INCREF(__pyx_v_red);
     __Pyx_DECREF_SET(__pyx_v_blue, __pyx_v_red);
 
-    /* "pygame_sdl2/display.pyx":309
+    /* "pygame_sdl2/display.pyx":332
  *         if green is None:
  *             green = red
  *         if blue is None:             # <<<<<<<<<<<<<<
@@ -4696,37 +4944,37 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":316
+  /* "pygame_sdl2/display.pyx":339
  *         cdef Uint16 blue_gamma[256]
  * 
  *         SDL_CalculateGammaRamp(red, red_gamma)             # <<<<<<<<<<<<<<
  *         SDL_CalculateGammaRamp(green, green_gamma)
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  */
-  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_red); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 316; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_red); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_CalculateGammaRamp(__pyx_t_3, __pyx_v_red_gamma);
 
-  /* "pygame_sdl2/display.pyx":317
+  /* "pygame_sdl2/display.pyx":340
  * 
  *         SDL_CalculateGammaRamp(red, red_gamma)
  *         SDL_CalculateGammaRamp(green, green_gamma)             # <<<<<<<<<<<<<<
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  * 
  */
-  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_green); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_green); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_CalculateGammaRamp(__pyx_t_3, __pyx_v_green_gamma);
 
-  /* "pygame_sdl2/display.pyx":318
+  /* "pygame_sdl2/display.pyx":341
  *         SDL_CalculateGammaRamp(red, red_gamma)
  *         SDL_CalculateGammaRamp(green, green_gamma)
  *         SDL_CalculateGammaRamp(blue, blue_gamma)             # <<<<<<<<<<<<<<
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  */
-  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_blue); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_v_blue); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_CalculateGammaRamp(__pyx_t_3, __pyx_v_blue_gamma);
 
-  /* "pygame_sdl2/display.pyx":320
+  /* "pygame_sdl2/display.pyx":343
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4736,7 +4984,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_t_1 = (SDL_SetWindowGammaRamp(__pyx_v_self->window, __pyx_v_red_gamma, __pyx_v_green_gamma, __pyx_v_blue_gamma) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":321
+    /* "pygame_sdl2/display.pyx":344
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  *             return False             # <<<<<<<<<<<<<<
@@ -4748,7 +4996,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
     __pyx_r = Py_False;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":320
+    /* "pygame_sdl2/display.pyx":343
  *         SDL_CalculateGammaRamp(blue, blue_gamma)
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4757,7 +5005,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":323
+  /* "pygame_sdl2/display.pyx":346
  *             return False
  * 
  *         return True             # <<<<<<<<<<<<<<
@@ -4769,7 +5017,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":306
+  /* "pygame_sdl2/display.pyx":329
  *         return True
  * 
  *     def set_gamma(self, red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -4789,7 +5037,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_26set_gamma(struct __py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":325
+/* "pygame_sdl2/display.pyx":348
  *         return True
  * 
  *     def set_gamma_ramp(self, red, green, blue):             # <<<<<<<<<<<<<<
@@ -4830,16 +5078,16 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_29set_gamma_ramp(PyObje
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -4854,7 +5102,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_29set_gamma_ramp(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.Window.set_gamma_ramp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -4883,7 +5131,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_gamma_ramp", 0);
 
-  /* "pygame_sdl2/display.pyx":331
+  /* "pygame_sdl2/display.pyx":354
  *         cdef Uint16 blue_gamma[256]
  * 
  *         for i in range(256):             # <<<<<<<<<<<<<<
@@ -4893,47 +5141,47 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   for (__pyx_t_1 = 0; __pyx_t_1 < 0x100; __pyx_t_1+=1) {
     __pyx_v_i = __pyx_t_1;
 
-    /* "pygame_sdl2/display.pyx":332
+    /* "pygame_sdl2/display.pyx":355
  * 
  *         for i in range(256):
  *             red_gamma[i] = red[i]             # <<<<<<<<<<<<<<
  *             green_gamma[i] = green[i]
  *             blue_gamma[i] = blue[i]
  */
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_red, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_red, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 332; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_red_gamma[__pyx_v_i]) = __pyx_t_3;
 
-    /* "pygame_sdl2/display.pyx":333
+    /* "pygame_sdl2/display.pyx":356
  *         for i in range(256):
  *             red_gamma[i] = red[i]
  *             green_gamma[i] = green[i]             # <<<<<<<<<<<<<<
  *             blue_gamma[i] = blue[i]
  * 
  */
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_green, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_green, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 333; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_green_gamma[__pyx_v_i]) = __pyx_t_3;
 
-    /* "pygame_sdl2/display.pyx":334
+    /* "pygame_sdl2/display.pyx":357
  *             red_gamma[i] = red[i]
  *             green_gamma[i] = green[i]
  *             blue_gamma[i] = blue[i]             # <<<<<<<<<<<<<<
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  */
-    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_blue, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_blue, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyInt_As_uint16_t(__pyx_t_2); if (unlikely((__pyx_t_3 == (Uint16)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     (__pyx_v_blue_gamma[__pyx_v_i]) = __pyx_t_3;
   }
 
-  /* "pygame_sdl2/display.pyx":336
+  /* "pygame_sdl2/display.pyx":359
  *             blue_gamma[i] = blue[i]
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4943,7 +5191,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   __pyx_t_4 = (SDL_SetWindowGammaRamp(__pyx_v_self->window, __pyx_v_red_gamma, __pyx_v_green_gamma, __pyx_v_blue_gamma) != 0);
   if (__pyx_t_4) {
 
-    /* "pygame_sdl2/display.pyx":337
+    /* "pygame_sdl2/display.pyx":360
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):
  *             return False             # <<<<<<<<<<<<<<
@@ -4955,7 +5203,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
     __pyx_r = Py_False;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":336
+    /* "pygame_sdl2/display.pyx":359
  *             blue_gamma[i] = blue[i]
  * 
  *         if SDL_SetWindowGammaRamp(self.window, red_gamma, green_gamma, blue_gamma):             # <<<<<<<<<<<<<<
@@ -4964,7 +5212,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
  */
   }
 
-  /* "pygame_sdl2/display.pyx":339
+  /* "pygame_sdl2/display.pyx":362
  *             return False
  * 
  *         return True             # <<<<<<<<<<<<<<
@@ -4976,7 +5224,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":325
+  /* "pygame_sdl2/display.pyx":348
  *         return True
  * 
  *     def set_gamma_ramp(self, red, green, blue):             # <<<<<<<<<<<<<<
@@ -4995,7 +5243,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_28set_gamma_ramp(struct
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":341
+/* "pygame_sdl2/display.pyx":364
  *         return True
  * 
  *     def set_icon(self, Surface surface):             # <<<<<<<<<<<<<<
@@ -5012,7 +5260,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_6Window_31set_icon(PyObject *__
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_icon (wrapper)", 0);
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_surface), __pyx_ptype_11pygame_sdl2_7surface_Surface, 1, "surface", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 341; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_surface), __pyx_ptype_11pygame_sdl2_7surface_Surface, 1, "surface", 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_v_self), ((struct __pyx_obj_11pygame_sdl2_7surface_Surface *)__pyx_v_surface));
 
   /* function exit code */
@@ -5029,7 +5277,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(struct __pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_icon", 0);
 
-  /* "pygame_sdl2/display.pyx":342
+  /* "pygame_sdl2/display.pyx":365
  * 
  *     def set_icon(self, Surface surface):
  *         SDL_SetWindowIcon(self.window, surface.surface)             # <<<<<<<<<<<<<<
@@ -5038,7 +5286,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(struct __pyx
  */
   SDL_SetWindowIcon(__pyx_v_self->window, __pyx_v_surface->surface);
 
-  /* "pygame_sdl2/display.pyx":341
+  /* "pygame_sdl2/display.pyx":364
  *         return True
  * 
  *     def set_icon(self, Surface surface):             # <<<<<<<<<<<<<<
@@ -5053,7 +5301,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_30set_icon(struct __pyx
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":344
+/* "pygame_sdl2/display.pyx":367
  *         SDL_SetWindowIcon(self.window, surface.surface)
  * 
  *     def set_caption(self, title):             # <<<<<<<<<<<<<<
@@ -5088,7 +5336,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
   __Pyx_RefNannySetupContext("set_caption", 0);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "pygame_sdl2/display.pyx":346
+  /* "pygame_sdl2/display.pyx":369
  *     def set_caption(self, title):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -5099,22 +5347,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":347
+    /* "pygame_sdl2/display.pyx":370
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *         SDL_SetWindowTitle(self.window, title)
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_title, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":346
+    /* "pygame_sdl2/display.pyx":369
  *     def set_caption(self, title):
  * 
  *         if not isinstance(title, bytes):             # <<<<<<<<<<<<<<
@@ -5123,17 +5371,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
  */
   }
 
-  /* "pygame_sdl2/display.pyx":349
+  /* "pygame_sdl2/display.pyx":372
  *             title = title.encode("utf-8")
  * 
  *         SDL_SetWindowTitle(self.window, title)             # <<<<<<<<<<<<<<
  * 
  *     def get_drawable_size(self):
  */
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_title); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_SetWindowTitle(__pyx_v_self->window, __pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":344
+  /* "pygame_sdl2/display.pyx":367
  *         SDL_SetWindowIcon(self.window, surface.surface)
  * 
  *     def set_caption(self, title):             # <<<<<<<<<<<<<<
@@ -5156,7 +5404,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_32set_caption(struct __
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":351
+/* "pygame_sdl2/display.pyx":374
  *         SDL_SetWindowTitle(self.window, title)
  * 
  *     def get_drawable_size(self):             # <<<<<<<<<<<<<<
@@ -5190,7 +5438,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_drawable_size", 0);
 
-  /* "pygame_sdl2/display.pyx":354
+  /* "pygame_sdl2/display.pyx":377
  *         cdef int w, h
  * 
  *         SDL_GL_GetDrawableSize(self.window, &w, &h)             # <<<<<<<<<<<<<<
@@ -5199,7 +5447,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
  */
   SDL_GL_GetDrawableSize(__pyx_v_self->window, (&__pyx_v_w), (&__pyx_v_h));
 
-  /* "pygame_sdl2/display.pyx":355
+  /* "pygame_sdl2/display.pyx":378
  * 
  *         SDL_GL_GetDrawableSize(self.window, &w, &h)
  *         return w, h             # <<<<<<<<<<<<<<
@@ -5207,11 +5455,11 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
  * # The icon that's used for new windows.
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_h); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
@@ -5223,7 +5471,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_6Window_34get_drawable_size(str
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":351
+  /* "pygame_sdl2/display.pyx":374
  *         SDL_SetWindowTitle(self.window, title)
  * 
  *     def get_drawable_size(self):             # <<<<<<<<<<<<<<
@@ -5352,7 +5600,7 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_4__del__(struct __py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":366
+/* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -5361,9 +5609,9 @@ static int __pyx_pf_11pygame_sdl2_7display_6Window_7surface_4__del__(struct __py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_9set_mode = {"set_mode", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_9set_mode, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_11set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_11set_mode = {"set_mode", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_11set_mode, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_11set_mode(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_resolution = 0;
   PyObject *__pyx_v_flags = 0;
   PyObject *__pyx_v_depth = 0;
@@ -5416,7 +5664,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_mode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_mode") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -5435,222 +5683,110 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_9set_mode(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_mode", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_mode", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_8set_mode(__pyx_self, __pyx_v_resolution, __pyx_v_flags, __pyx_v_depth, __pyx_v_pos);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_10set_mode(__pyx_self, __pyx_v_resolution, __pyx_v_flags, __pyx_v_depth, __pyx_v_pos);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos) {
-  PyObject *__pyx_v_androidembed = NULL;
+static PyObject *__pyx_pf_11pygame_sdl2_7display_10set_mode(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_resolution, PyObject *__pyx_v_flags, PyObject *__pyx_v_depth, PyObject *__pyx_v_pos) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  PyObject *__pyx_t_6 = NULL;
-  int __pyx_t_7;
+  Py_ssize_t __pyx_t_6;
+  PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
-  PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
-  int __pyx_t_12;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_mode", 0);
 
-  /* "pygame_sdl2/display.pyx":371
- *     # If we're on android, we have to close the splash window before opening
- *     # our window.
- *     try:             # <<<<<<<<<<<<<<
- *         import androidembed
- *         androidembed.close_window()
- */
-  {
-    __Pyx_ExceptionSave(&__pyx_t_1, &__pyx_t_2, &__pyx_t_3);
-    __Pyx_XGOTREF(__pyx_t_1);
-    __Pyx_XGOTREF(__pyx_t_2);
-    __Pyx_XGOTREF(__pyx_t_3);
-    /*try:*/ {
-
-      /* "pygame_sdl2/display.pyx":372
- *     # our window.
- *     try:
- *         import androidembed             # <<<<<<<<<<<<<<
- *         androidembed.close_window()
- *     except ImportError:
- */
-      __pyx_t_4 = __Pyx_Import(__pyx_n_s_androidembed, 0, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_v_androidembed = __pyx_t_4;
-      __pyx_t_4 = 0;
-
-      /* "pygame_sdl2/display.pyx":373
- *     try:
- *         import androidembed
- *         androidembed.close_window()             # <<<<<<<<<<<<<<
- *     except ImportError:
- *         pass
- */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_androidembed, __pyx_n_s_close_window); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
-        __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
-        if (likely(__pyx_t_6)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
-          __Pyx_INCREF(__pyx_t_6);
-          __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_5, function);
-        }
-      }
-      if (__pyx_t_6) {
-        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      } else {
-        __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-      }
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-
-      /* "pygame_sdl2/display.pyx":371
- *     # If we're on android, we have to close the splash window before opening
- *     # our window.
- *     try:             # <<<<<<<<<<<<<<
- *         import androidembed
- *         androidembed.close_window()
- */
-    }
-    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-    goto __pyx_L10_try_end;
-    __pyx_L3_error:;
-    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
-
-    /* "pygame_sdl2/display.pyx":374
- *         import androidembed
- *         androidembed.close_window()
- *     except ImportError:             # <<<<<<<<<<<<<<
- *         pass
- * 
- */
-    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_ImportError);
-    if (__pyx_t_7) {
-      PyErr_Restore(0,0,0);
-      goto __pyx_L4_exception_handled;
-    }
-    goto __pyx_L5_except_error;
-    __pyx_L5_except_error:;
-
-    /* "pygame_sdl2/display.pyx":371
- *     # If we're on android, we have to close the splash window before opening
- *     # our window.
- *     try:             # <<<<<<<<<<<<<<
- *         import androidembed
- *         androidembed.close_window()
- */
-    __Pyx_XGIVEREF(__pyx_t_1);
-    __Pyx_XGIVEREF(__pyx_t_2);
-    __Pyx_XGIVEREF(__pyx_t_3);
-    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-    goto __pyx_L1_error;
-    __pyx_L4_exception_handled:;
-    __Pyx_XGIVEREF(__pyx_t_1);
-    __Pyx_XGIVEREF(__pyx_t_2);
-    __Pyx_XGIVEREF(__pyx_t_3);
-    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-    __pyx_L10_try_end:;
-  }
-
-  /* "pygame_sdl2/display.pyx":377
- *         pass
+  /* "pygame_sdl2/display.pyx":392
+ *     global main_window
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):
  */
-  __pyx_t_8 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__pyx_t_8) {
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":379
+    /* "pygame_sdl2/display.pyx":394
  *     if main_window:
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):             # <<<<<<<<<<<<<<
  *             main_window.resize(resolution, flags & SDL_WINDOW_OPENGL)
  *             return main_window.surface
  */
-    __pyx_t_4 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyNumber_And(__pyx_v_flags, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyInt_From_uint32_t((__pyx_v_11pygame_sdl2_7display_main_window->create_flags & (~SDL_WINDOW_OPENGL))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = PyObject_RichCompare(__pyx_t_5, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __pyx_t_2 = __Pyx_PyInt_From_int((~SDL_WINDOW_OPENGL)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = PyNumber_And(__pyx_v_flags, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_2 = __Pyx_PyInt_From_uint32_t((__pyx_v_11pygame_sdl2_7display_main_window->create_flags & (~SDL_WINDOW_OPENGL))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 394; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_8 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    if (__pyx_t_8) {
+    if (__pyx_t_1) {
 
-      /* "pygame_sdl2/display.pyx":380
+      /* "pygame_sdl2/display.pyx":395
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):
  *             main_window.resize(resolution, flags & SDL_WINDOW_OPENGL)             # <<<<<<<<<<<<<<
  *             return main_window.surface
  * 
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_resize); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_resize); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_3 = __Pyx_PyInt_From_SDL_WindowFlags(SDL_WINDOW_OPENGL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_5 = PyNumber_And(__pyx_v_flags, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_9 = PyNumber_And(__pyx_v_flags, __pyx_t_5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_9);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_5 = NULL;
-      __pyx_t_10 = 0;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
-        __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
-        if (likely(__pyx_t_5)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_5);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_3 = NULL;
+      __pyx_t_6 = 0;
+      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+        __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+        if (likely(__pyx_t_3)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+          __Pyx_INCREF(__pyx_t_3);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_4, function);
-          __pyx_t_10 = 1;
+          __Pyx_DECREF_SET(__pyx_t_2, function);
+          __pyx_t_6 = 1;
         }
       }
-      __pyx_t_11 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_11);
-      if (__pyx_t_5) {
-        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      if (__pyx_t_3) {
+        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
       }
       __Pyx_INCREF(__pyx_v_resolution);
       __Pyx_GIVEREF(__pyx_v_resolution);
-      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_v_resolution);
-      __Pyx_GIVEREF(__pyx_t_9);
-      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_9);
-      __pyx_t_9 = 0;
-      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_resolution);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_t_5);
+      __pyx_t_5 = 0;
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-      /* "pygame_sdl2/display.pyx":381
+      /* "pygame_sdl2/display.pyx":396
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):
  *             main_window.resize(resolution, flags & SDL_WINDOW_OPENGL)
  *             return main_window.surface             # <<<<<<<<<<<<<<
@@ -5662,7 +5798,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
       __pyx_r = ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface);
       goto __pyx_L0;
 
-      /* "pygame_sdl2/display.pyx":379
+      /* "pygame_sdl2/display.pyx":394
  *     if main_window:
  * 
  *         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):             # <<<<<<<<<<<<<<
@@ -5671,7 +5807,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
     }
 
-    /* "pygame_sdl2/display.pyx":384
+    /* "pygame_sdl2/display.pyx":399
  * 
  *         else:
  *             main_window.destroy()             # <<<<<<<<<<<<<<
@@ -5679,31 +5815,31 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)
  */
     /*else*/ {
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_destroy); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_11 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
-        __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_4);
-        if (likely(__pyx_t_11)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
-          __Pyx_INCREF(__pyx_t_11);
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_destroy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_7 = NULL;
+      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_2);
+        if (likely(__pyx_t_7)) {
+          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+          __Pyx_INCREF(__pyx_t_7);
           __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_4, function);
+          __Pyx_DECREF_SET(__pyx_t_2, function);
         }
       }
-      if (__pyx_t_11) {
-        __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_11); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+      if (__pyx_t_7) {
+        __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       } else {
-        __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __Pyx_GOTREF(__pyx_t_6);
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
 
-    /* "pygame_sdl2/display.pyx":377
- *         pass
+    /* "pygame_sdl2/display.pyx":392
+ *     global main_window
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
  * 
@@ -5711,95 +5847,95 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
   }
 
-  /* "pygame_sdl2/display.pyx":386
+  /* "pygame_sdl2/display.pyx":401
  *             main_window.destroy()
  * 
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)             # <<<<<<<<<<<<<<
  * 
  *     if default_icon is not None:
  */
-  __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_2);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_4);
   __Pyx_INCREF(__pyx_v_resolution);
   __Pyx_GIVEREF(__pyx_v_resolution);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_resolution);
+  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_resolution);
   __Pyx_INCREF(__pyx_v_flags);
   __Pyx_GIVEREF(__pyx_v_flags);
-  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_flags);
+  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_flags);
   __Pyx_INCREF(__pyx_v_depth);
   __Pyx_GIVEREF(__pyx_v_depth);
-  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_depth);
-  __pyx_t_6 = 0;
-  __pyx_t_6 = PyDict_New(); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_6);
-  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pos, __pyx_v_pos) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7display_Window), __pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_11);
+  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_depth);
+  __pyx_t_4 = 0;
+  __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_pos, __pyx_v_pos) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11pygame_sdl2_7display_Window), __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_XGOTREF(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
-  __Pyx_DECREF_SET(__pyx_v_11pygame_sdl2_7display_main_window, ((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_t_11));
-  __Pyx_GIVEREF(__pyx_t_11);
-  __pyx_t_11 = 0;
+  __Pyx_DECREF_SET(__pyx_v_11pygame_sdl2_7display_main_window, ((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_t_7));
+  __Pyx_GIVEREF(__pyx_t_7);
+  __pyx_t_7 = 0;
 
-  /* "pygame_sdl2/display.pyx":388
+  /* "pygame_sdl2/display.pyx":403
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)
  * 
  *     if default_icon is not None:             # <<<<<<<<<<<<<<
  *         main_window.set_icon(default_icon)
  * 
  */
-  __pyx_t_11 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_8 = (__pyx_t_11 != Py_None);
-  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
-  __pyx_t_12 = (__pyx_t_8 != 0);
-  if (__pyx_t_12) {
+  __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_7);
+  __pyx_t_1 = (__pyx_t_7 != Py_None);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __pyx_t_8 = (__pyx_t_1 != 0);
+  if (__pyx_t_8) {
 
-    /* "pygame_sdl2/display.pyx":389
+    /* "pygame_sdl2/display.pyx":404
  * 
  *     if default_icon is not None:
  *         main_window.set_icon(default_icon)             # <<<<<<<<<<<<<<
  * 
  *     return main_window.surface
  */
-    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
-      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6);
-      if (likely(__pyx_t_9)) {
-        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
-        __Pyx_INCREF(__pyx_t_9);
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_5 = NULL;
+    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+      if (likely(__pyx_t_5)) {
+        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+        __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(function);
-        __Pyx_DECREF_SET(__pyx_t_6, function);
+        __Pyx_DECREF_SET(__pyx_t_4, function);
       }
     }
-    if (!__pyx_t_9) {
-      __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_4); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __Pyx_GOTREF(__pyx_t_11);
+    if (!__pyx_t_5) {
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9); __pyx_t_9 = NULL;
-      __Pyx_GIVEREF(__pyx_t_4);
-      PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_4);
-      __pyx_t_4 = 0;
-      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_5, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_11);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5); __pyx_t_5 = NULL;
+      __Pyx_GIVEREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_3, 0+1, __pyx_t_2);
+      __pyx_t_2 = 0;
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 404; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_7);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
-    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "pygame_sdl2/display.pyx":388
+    /* "pygame_sdl2/display.pyx":403
  *     main_window = Window(default_title, resolution, flags, depth, pos=pos)
  * 
  *     if default_icon is not None:             # <<<<<<<<<<<<<<
@@ -5808,7 +5944,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
   }
 
-  /* "pygame_sdl2/display.pyx":391
+  /* "pygame_sdl2/display.pyx":406
  *         main_window.set_icon(default_icon)
  * 
  *     return main_window.surface             # <<<<<<<<<<<<<<
@@ -5820,7 +5956,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
   __pyx_r = ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface);
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
@@ -5830,21 +5966,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
 
   /* function exit code */
   __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("pygame_sdl2.display.set_mode", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_androidembed);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":393
+/* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
@@ -5853,20 +5988,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_8set_mode(CYTHON_UNUSED PyObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_11get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_11get_surface = {"get_surface", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_11get_surface, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_11get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_13get_surface = {"get_surface", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_13get_surface, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_surface(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_surface (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_10get_surface(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_12get_surface(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_surface(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -5879,7 +6014,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_surface", 0);
 
-  /* "pygame_sdl2/display.pyx":394
+  /* "pygame_sdl2/display.pyx":409
  * 
  * def get_surface():
  *     if main_window is None:             # <<<<<<<<<<<<<<
@@ -5890,7 +6025,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":395
+    /* "pygame_sdl2/display.pyx":410
  * def get_surface():
  *     if main_window is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -5902,7 +6037,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
     __pyx_r = Py_None;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":394
+    /* "pygame_sdl2/display.pyx":409
  * 
  * def get_surface():
  *     if main_window is None:             # <<<<<<<<<<<<<<
@@ -5911,7 +6046,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
  */
   }
 
-  /* "pygame_sdl2/display.pyx":397
+  /* "pygame_sdl2/display.pyx":412
  *         return None
  * 
  *     return main_window.get_surface()             # <<<<<<<<<<<<<<
@@ -5919,7 +6054,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
  * def get_window():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_surface); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -5932,10 +6067,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
     }
   }
   if (__pyx_t_5) {
-    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else {
-    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -5943,7 +6078,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":393
+  /* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
@@ -5964,7 +6099,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":399
+/* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
@@ -5973,26 +6108,26 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_10get_surface(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_12get_window[] = "\n    Returns the Window created by set_mode, or None if no such window\n    exists.\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_13get_window = {"get_window", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_13get_window, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_12get_window};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_13get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_15get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_14get_window[] = "\n    Returns the Window created by set_mode, or None if no such window\n    exists.\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_15get_window = {"get_window", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_15get_window, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_14get_window};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_15get_window(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_window (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_12get_window(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_14get_window(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_14get_window(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_window", 0);
 
-  /* "pygame_sdl2/display.pyx":405
+  /* "pygame_sdl2/display.pyx":420
  *     """
  * 
  *     return main_window             # <<<<<<<<<<<<<<
@@ -6004,7 +6139,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyOb
   __pyx_r = ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window);
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":399
+  /* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
@@ -6019,7 +6154,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":407
+/* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
@@ -6028,20 +6163,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_12get_window(CYTHON_UNUSED PyOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_15flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_15flip = {"flip", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_15flip, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_15flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_17flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_17flip = {"flip", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_17flip, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_17flip(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("flip (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_14flip(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_16flip(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_16flip(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6053,24 +6188,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("flip", 0);
 
-  /* "pygame_sdl2/display.pyx":408
+  /* "pygame_sdl2/display.pyx":423
  * 
  * def flip():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         main_window.flip()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":409
+    /* "pygame_sdl2/display.pyx":424
  * def flip():
  *     if main_window:
  *         main_window.flip()             # <<<<<<<<<<<<<<
  * 
  * def update(rectangles=None):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_flip); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_flip); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -6083,16 +6218,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "pygame_sdl2/display.pyx":408
+    /* "pygame_sdl2/display.pyx":423
  * 
  * def flip():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -6101,7 +6236,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "pygame_sdl2/display.pyx":407
+  /* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
@@ -6124,7 +6259,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":411
+/* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
@@ -6133,9 +6268,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_14flip(CYTHON_UNUSED PyObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_17update = {"update", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_17update, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_19update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_19update = {"update", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_19update, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_19update(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rectangles = 0;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
@@ -6164,7 +6299,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -6177,20 +6312,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_17update(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_16update(__pyx_self, __pyx_v_rectangles);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_18update(__pyx_self, __pyx_v_rectangles);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_18update(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_rectangles) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -6203,24 +6338,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("update", 0);
 
-  /* "pygame_sdl2/display.pyx":412
+  /* "pygame_sdl2/display.pyx":427
  * 
  * def update(rectangles=None):
  *     if main_window:             # <<<<<<<<<<<<<<
  *         main_window.update(rectangles)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":413
+    /* "pygame_sdl2/display.pyx":428
  * def update(rectangles=None):
  *     if main_window:
  *         main_window.update(rectangles)             # <<<<<<<<<<<<<<
  * 
  * def get_driver():
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_update); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_update); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -6233,23 +6368,23 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
       }
     }
     if (!__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_rectangles); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_rectangles); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
       __Pyx_INCREF(__pyx_v_rectangles);
       __Pyx_GIVEREF(__pyx_v_rectangles);
       PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_v_rectangles);
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "pygame_sdl2/display.pyx":412
+    /* "pygame_sdl2/display.pyx":427
  * 
  * def update(rectangles=None):
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -6258,7 +6393,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
  */
   }
 
-  /* "pygame_sdl2/display.pyx":411
+  /* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
@@ -6282,7 +6417,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":415
+/* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
@@ -6291,20 +6426,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_16update(CYTHON_UNUSED PyObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_19get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_19get_driver = {"get_driver", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_19get_driver, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_19get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_21get_driver = {"get_driver", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_21get_driver, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_driver(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_driver (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_18get_driver(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_20get_driver(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_driver(CYTHON_UNUSED PyObject *__pyx_self) {
   char const *__pyx_v_driver;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -6317,7 +6452,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_driver", 0);
 
-  /* "pygame_sdl2/display.pyx":416
+  /* "pygame_sdl2/display.pyx":431
  * 
  * def get_driver():
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()             # <<<<<<<<<<<<<<
@@ -6326,7 +6461,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
  */
   __pyx_v_driver = SDL_GetCurrentVideoDriver();
 
-  /* "pygame_sdl2/display.pyx":418
+  /* "pygame_sdl2/display.pyx":433
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  *     if driver == NULL:             # <<<<<<<<<<<<<<
@@ -6336,14 +6471,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
   __pyx_t_1 = ((__pyx_v_driver == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":419
+    /* "pygame_sdl2/display.pyx":434
  * 
  *     if driver == NULL:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return driver
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -6356,18 +6491,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":418
+    /* "pygame_sdl2/display.pyx":433
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  *     if driver == NULL:             # <<<<<<<<<<<<<<
@@ -6376,7 +6511,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
  */
   }
 
-  /* "pygame_sdl2/display.pyx":421
+  /* "pygame_sdl2/display.pyx":436
  *         raise error()
  * 
  *     return driver             # <<<<<<<<<<<<<<
@@ -6384,13 +6519,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
  * class Info(object):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_driver); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 421; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromString(__pyx_v_driver); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":415
+  /* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
@@ -6411,7 +6546,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_18get_driver(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":425
+/* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
@@ -6450,7 +6585,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "pygame_sdl2/display.pyx":429
+  /* "pygame_sdl2/display.pyx":444
  *         cdef SDL_PixelFormat *format
  * 
  *         if SDL_GetCurrentDisplayMode(0, &dm):             # <<<<<<<<<<<<<<
@@ -6460,14 +6595,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_1 = (SDL_GetCurrentDisplayMode(0, (&__pyx_v_dm)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":430
+    /* "pygame_sdl2/display.pyx":445
  * 
  *         if SDL_GetCurrentDisplayMode(0, &dm):
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *         format = SDL_AllocFormat(dm.format)
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -6480,18 +6615,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":429
+    /* "pygame_sdl2/display.pyx":444
  *         cdef SDL_PixelFormat *format
  * 
  *         if SDL_GetCurrentDisplayMode(0, &dm):             # <<<<<<<<<<<<<<
@@ -6500,7 +6635,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":432
+  /* "pygame_sdl2/display.pyx":447
  *             raise error()
  * 
  *         format = SDL_AllocFormat(dm.format)             # <<<<<<<<<<<<<<
@@ -6509,7 +6644,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   __pyx_v_format = SDL_AllocFormat(__pyx_v_dm.format);
 
-  /* "pygame_sdl2/display.pyx":433
+  /* "pygame_sdl2/display.pyx":448
  * 
  *         format = SDL_AllocFormat(dm.format)
  *         if format == NULL:             # <<<<<<<<<<<<<<
@@ -6519,14 +6654,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_1 = ((__pyx_v_format == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":434
+    /* "pygame_sdl2/display.pyx":449
  *         format = SDL_AllocFormat(dm.format)
  *         if format == NULL:
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  *         self.bitsize = format.BitsPerPixel
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -6539,18 +6674,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":433
+    /* "pygame_sdl2/display.pyx":448
  * 
  *         format = SDL_AllocFormat(dm.format)
  *         if format == NULL:             # <<<<<<<<<<<<<<
@@ -6559,78 +6694,78 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   }
 
-  /* "pygame_sdl2/display.pyx":436
+  /* "pygame_sdl2/display.pyx":451
  *             raise error()
  * 
  *         self.bitsize = format.BitsPerPixel             # <<<<<<<<<<<<<<
  *         self.bytesize = format.BytesPerPixel
  * 
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BitsPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BitsPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bitsize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bitsize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/display.pyx":437
+  /* "pygame_sdl2/display.pyx":452
  * 
  *         self.bitsize = format.BitsPerPixel
  *         self.bytesize = format.BytesPerPixel             # <<<<<<<<<<<<<<
  * 
  *         self.masks = (
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BytesPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->BytesPerPixel); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bytesize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_bytesize, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/display.pyx":440
+  /* "pygame_sdl2/display.pyx":455
  * 
  *         self.masks = (
  *             format.Rmask,             # <<<<<<<<<<<<<<
  *             format.Gmask,
  *             format.Bmask,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Rmask); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Rmask); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "pygame_sdl2/display.pyx":441
+  /* "pygame_sdl2/display.pyx":456
  *         self.masks = (
  *             format.Rmask,
  *             format.Gmask,             # <<<<<<<<<<<<<<
  *             format.Bmask,
  *             format.Amask,
  */
-  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Gmask); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Gmask); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "pygame_sdl2/display.pyx":442
+  /* "pygame_sdl2/display.pyx":457
  *             format.Rmask,
  *             format.Gmask,
  *             format.Bmask,             # <<<<<<<<<<<<<<
  *             format.Amask,
  *             )
  */
-  __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Bmask); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Bmask); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "pygame_sdl2/display.pyx":443
+  /* "pygame_sdl2/display.pyx":458
  *             format.Gmask,
  *             format.Bmask,
  *             format.Amask,             # <<<<<<<<<<<<<<
  *             )
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Amask); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_uint32_t(__pyx_v_format->Amask); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":440
+  /* "pygame_sdl2/display.pyx":455
  * 
  *         self.masks = (
  *             format.Rmask,             # <<<<<<<<<<<<<<
  *             format.Gmask,
  *             format.Bmask,
  */
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -6645,64 +6780,64 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_4 = 0;
   __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":439
+  /* "pygame_sdl2/display.pyx":454
  *         self.bytesize = format.BytesPerPixel
  * 
  *         self.masks = (             # <<<<<<<<<<<<<<
  *             format.Rmask,
  *             format.Gmask,
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_masks, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_masks, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":447
+  /* "pygame_sdl2/display.pyx":462
  * 
  *         self.shifts = (
  *             format.Rshift,             # <<<<<<<<<<<<<<
  *             format.Gshift,
  *             format.Bshift,
  */
-  __pyx_t_6 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rshift); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rshift); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":448
+  /* "pygame_sdl2/display.pyx":463
  *         self.shifts = (
  *             format.Rshift,
  *             format.Gshift,             # <<<<<<<<<<<<<<
  *             format.Bshift,
  *             format.Ashift,
  */
-  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gshift); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gshift); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":449
+  /* "pygame_sdl2/display.pyx":464
  *             format.Rshift,
  *             format.Gshift,
  *             format.Bshift,             # <<<<<<<<<<<<<<
  *             format.Ashift,
  *             )
  */
-  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bshift); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bshift); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "pygame_sdl2/display.pyx":450
+  /* "pygame_sdl2/display.pyx":465
  *             format.Gshift,
  *             format.Bshift,
  *             format.Ashift,             # <<<<<<<<<<<<<<
  *             )
  * 
  */
-  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Ashift); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Ashift); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "pygame_sdl2/display.pyx":447
+  /* "pygame_sdl2/display.pyx":462
  * 
  *         self.shifts = (
  *             format.Rshift,             # <<<<<<<<<<<<<<
  *             format.Gshift,
  *             format.Bshift,
  */
-  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_6);
@@ -6717,64 +6852,64 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_4 = 0;
   __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":446
+  /* "pygame_sdl2/display.pyx":461
  *             )
  * 
  *         self.shifts = (             # <<<<<<<<<<<<<<
  *             format.Rshift,
  *             format.Gshift,
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_shifts, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_shifts, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/display.pyx":454
+  /* "pygame_sdl2/display.pyx":469
  * 
  *         self.losses = (
  *             format.Rloss,             # <<<<<<<<<<<<<<
  *             format.Gloss,
  *             format.Bloss,
  */
-  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rloss); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Rloss); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
 
-  /* "pygame_sdl2/display.pyx":455
+  /* "pygame_sdl2/display.pyx":470
  *         self.losses = (
  *             format.Rloss,
  *             format.Gloss,             # <<<<<<<<<<<<<<
  *             format.Bloss,
  *             format.Aloss,
  */
-  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gloss); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Gloss); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "pygame_sdl2/display.pyx":456
+  /* "pygame_sdl2/display.pyx":471
  *             format.Rloss,
  *             format.Gloss,
  *             format.Bloss,             # <<<<<<<<<<<<<<
  *             format.Aloss,
  *             )
  */
-  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bloss); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Bloss); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "pygame_sdl2/display.pyx":457
+  /* "pygame_sdl2/display.pyx":472
  *             format.Gloss,
  *             format.Bloss,
  *             format.Aloss,             # <<<<<<<<<<<<<<
  *             )
  * 
  */
-  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Aloss); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_uint8_t(__pyx_v_format->Aloss); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
 
-  /* "pygame_sdl2/display.pyx":454
+  /* "pygame_sdl2/display.pyx":469
  * 
  *         self.losses = (
  *             format.Rloss,             # <<<<<<<<<<<<<<
  *             format.Gloss,
  *             format.Bloss,
  */
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -6789,17 +6924,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   __pyx_t_4 = 0;
   __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":453
+  /* "pygame_sdl2/display.pyx":468
  *             )
  * 
  *         self.losses = (             # <<<<<<<<<<<<<<
  *             format.Rloss,
  *             format.Gloss,
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_losses, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_losses, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":460
+  /* "pygame_sdl2/display.pyx":475
  *             )
  * 
  *         SDL_FreeFormat(format)             # <<<<<<<<<<<<<<
@@ -6808,24 +6943,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  */
   SDL_FreeFormat(__pyx_v_format);
 
-  /* "pygame_sdl2/display.pyx":462
+  /* "pygame_sdl2/display.pyx":477
  *         SDL_FreeFormat(format)
  * 
  *         if main_window:             # <<<<<<<<<<<<<<
  *             self.current_w, self.current_h = main_window.surface.get_size()
  *         else:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 462; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":463
+    /* "pygame_sdl2/display.pyx":478
  * 
  *         if main_window:
  *             self.current_w, self.current_h = main_window.surface.get_size()             # <<<<<<<<<<<<<<
  *         else:
  * 
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface), __pyx_n_s_get_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window->surface), __pyx_n_s_get_size); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -6838,10 +6973,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -6855,7 +6990,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -6868,15 +7003,15 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       #endif
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext;
@@ -6884,7 +7019,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       __Pyx_GOTREF(__pyx_t_5);
       index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       goto __pyx_L7_unpacking_done;
@@ -6892,15 +7027,15 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L7_unpacking_done:;
     }
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":462
+    /* "pygame_sdl2/display.pyx":477
  *         SDL_FreeFormat(format)
  * 
  *         if main_window:             # <<<<<<<<<<<<<<
@@ -6910,7 +7045,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
     goto __pyx_L5;
   }
 
-  /* "pygame_sdl2/display.pyx":466
+  /* "pygame_sdl2/display.pyx":481
  *         else:
  * 
  *             self.current_w = dm.w             # <<<<<<<<<<<<<<
@@ -6918,119 +7053,119 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
  * 
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.w); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.w); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_w, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "pygame_sdl2/display.pyx":467
+    /* "pygame_sdl2/display.pyx":482
  * 
  *             self.current_w = dm.w
  *             self.current_h = dm.h             # <<<<<<<<<<<<<<
  * 
  *         self.refresh_rate = dm.refresh_rate
  */
-    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.h); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.h); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_current_h, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
   __pyx_L5:;
 
-  /* "pygame_sdl2/display.pyx":469
+  /* "pygame_sdl2/display.pyx":484
  *             self.current_h = dm.h
  * 
  *         self.refresh_rate = dm.refresh_rate             # <<<<<<<<<<<<<<
  * 
  *         # The rest of these are just guesses.
  */
-  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.refresh_rate); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_dm.refresh_rate); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_refresh_rate, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 469; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_refresh_rate, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":472
+  /* "pygame_sdl2/display.pyx":487
  * 
  *         # The rest of these are just guesses.
  *         self.hw = False             # <<<<<<<<<<<<<<
  *         self.wm = True
  *         self.video_mem = 256 * 1024 * 1024
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 487; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":473
+  /* "pygame_sdl2/display.pyx":488
  *         # The rest of these are just guesses.
  *         self.hw = False
  *         self.wm = True             # <<<<<<<<<<<<<<
  *         self.video_mem = 256 * 1024 * 1024
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wm, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_wm, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":474
+  /* "pygame_sdl2/display.pyx":489
  *         self.hw = False
  *         self.wm = True
  *         self.video_mem = 256 * 1024 * 1024             # <<<<<<<<<<<<<<
  * 
  *         self.blit_hw = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_video_mem, __pyx_int_268435456) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_video_mem, __pyx_int_268435456) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":476
+  /* "pygame_sdl2/display.pyx":491
  *         self.video_mem = 256 * 1024 * 1024
  * 
  *         self.blit_hw = False             # <<<<<<<<<<<<<<
  *         self.blit_hw_CC = False
  *         self.blit_hw_A = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":477
+  /* "pygame_sdl2/display.pyx":492
  * 
  *         self.blit_hw = False
  *         self.blit_hw_CC = False             # <<<<<<<<<<<<<<
  *         self.blit_hw_A = False
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":478
+  /* "pygame_sdl2/display.pyx":493
  *         self.blit_hw = False
  *         self.blit_hw_CC = False
  *         self.blit_hw_A = False             # <<<<<<<<<<<<<<
  * 
  *         self.blit_sw = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_hw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":480
+  /* "pygame_sdl2/display.pyx":495
  *         self.blit_hw_A = False
  * 
  *         self.blit_sw = False             # <<<<<<<<<<<<<<
  *         self.blit_sw_CC = False
  *         self.blit_sw_A = False
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":481
+  /* "pygame_sdl2/display.pyx":496
  * 
  *         self.blit_sw = False
  *         self.blit_sw_CC = False             # <<<<<<<<<<<<<<
  *         self.blit_sw_A = False
  * 
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_CC, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":482
+  /* "pygame_sdl2/display.pyx":497
  *         self.blit_sw = False
  *         self.blit_sw_CC = False
  *         self.blit_sw_A = False             # <<<<<<<<<<<<<<
  * 
  *     def __repr__(self):
  */
-  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_blit_sw_A, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":425
+  /* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
@@ -7055,7 +7190,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info___init__(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":484
+/* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -7090,7 +7225,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__repr__", 0);
 
-  /* "pygame_sdl2/display.pyx":485
+  /* "pygame_sdl2/display.pyx":500
  * 
  *     def __repr__(self):
  *         return "<Info({!r})>".format(self.__dict__)             # <<<<<<<<<<<<<<
@@ -7098,9 +7233,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Info_r, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Info_r, __pyx_n_s_format); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_self, __pyx_n_s_dict); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -7113,17 +7248,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
     }
   }
   if (!__pyx_t_4) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4); __pyx_t_4 = NULL;
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_5, 0+1, __pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 485; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
@@ -7132,7 +7267,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":484
+  /* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
@@ -7155,7 +7290,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":488
+/* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
@@ -7164,20 +7299,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_4Info_2__repr__(CYTHON_UNUSED P
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_21get_wm_info = {"get_wm_info", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_21get_wm_info, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_21get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_23get_wm_info = {"get_wm_info", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_23get_wm_info, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_wm_info(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_wm_info (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_20get_wm_info(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_22get_wm_info(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_wm_info(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -7189,17 +7324,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_wm_info", 0);
 
-  /* "pygame_sdl2/display.pyx":489
+  /* "pygame_sdl2/display.pyx":504
  * 
  * def get_wm_info():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.get_wm_info()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 489; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":490
+    /* "pygame_sdl2/display.pyx":505
  * def get_wm_info():
  *     if main_window:
  *         return main_window.get_wm_info()             # <<<<<<<<<<<<<<
@@ -7207,7 +7342,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  *     return {}
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_wm_info); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_wm_info); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -7220,10 +7355,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -7231,7 +7366,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":489
+    /* "pygame_sdl2/display.pyx":504
  * 
  * def get_wm_info():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -7240,7 +7375,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  */
   }
 
-  /* "pygame_sdl2/display.pyx":492
+  /* "pygame_sdl2/display.pyx":507
  *         return main_window.get_wm_info()
  * 
  *     return {}             # <<<<<<<<<<<<<<
@@ -7248,13 +7383,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 507; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":488
+  /* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
@@ -7275,7 +7410,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":495
+/* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -7284,21 +7419,21 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_20get_wm_info(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_22get_num_video_displays[] = "\n    Returns the number of video displays connected to the system.\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_23get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_23get_num_video_displays, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_22get_num_video_displays};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_23get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_25get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_24get_num_video_displays[] = "\n    Returns the number of video displays connected to the system.\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_25get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_25get_num_video_displays, METH_NOARGS, __pyx_doc_11pygame_sdl2_7display_24get_num_video_displays};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_25get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_num_video_displays (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_24get_num_video_displays(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_24get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
   int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -7311,7 +7446,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_num_video_displays", 0);
 
-  /* "pygame_sdl2/display.pyx":500
+  /* "pygame_sdl2/display.pyx":515
  *     """
  * 
  *     rv = SDL_GetNumVideoDisplays()             # <<<<<<<<<<<<<<
@@ -7320,7 +7455,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  */
   __pyx_v_rv = SDL_GetNumVideoDisplays();
 
-  /* "pygame_sdl2/display.pyx":502
+  /* "pygame_sdl2/display.pyx":517
  *     rv = SDL_GetNumVideoDisplays()
  * 
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -7330,14 +7465,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
   __pyx_t_1 = ((__pyx_v_rv < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":503
+    /* "pygame_sdl2/display.pyx":518
  * 
  *     if rv < 0:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -7350,18 +7485,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":502
+    /* "pygame_sdl2/display.pyx":517
  *     rv = SDL_GetNumVideoDisplays()
  * 
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -7370,7 +7505,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  */
   }
 
-  /* "pygame_sdl2/display.pyx":505
+  /* "pygame_sdl2/display.pyx":520
  *         raise error()
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -7378,13 +7513,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":495
+  /* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -7405,7 +7540,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":508
+/* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
@@ -7414,10 +7549,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_22get_num_video_displays(CYTHON
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_24list_modes[] = "\n    Returns a list of possible display modes for the display `display`.\n\n    `depth` and `flags` are ignored.\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_25list_modes = {"list_modes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_25list_modes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_24list_modes};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_27list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_26list_modes[] = "\n    Returns a list of possible display modes for the display `display`.\n\n    `depth` and `flags` are ignored.\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_27list_modes = {"list_modes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_27list_modes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_26list_modes};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_27list_modes(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   CYTHON_UNUSED PyObject *__pyx_v_depth = 0;
   CYTHON_UNUSED PyObject *__pyx_v_flags = 0;
   PyObject *__pyx_v_display = 0;
@@ -7462,7 +7597,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_modes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "list_modes") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -7479,20 +7614,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_25list_modes(PyObject *__pyx_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("list_modes", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("list_modes", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.list_modes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_24list_modes(__pyx_self, __pyx_v_depth, __pyx_v_flags, __pyx_v_display);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_26list_modes(__pyx_self, __pyx_v_depth, __pyx_v_flags, __pyx_v_display);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_26list_modes(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_depth, CYTHON_UNUSED PyObject *__pyx_v_flags, PyObject *__pyx_v_display) {
   int __pyx_v_num_modes;
   int __pyx_v_i;
   SDL_DisplayMode __pyx_v_mode;
@@ -7513,29 +7648,29 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("list_modes", 0);
 
-  /* "pygame_sdl2/display.pyx":518
+  /* "pygame_sdl2/display.pyx":533
  *     cdef SDL_DisplayMode mode
  * 
  *     rv = [ ]             # <<<<<<<<<<<<<<
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rv = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/display.pyx":520
+  /* "pygame_sdl2/display.pyx":535
  *     rv = [ ]
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)             # <<<<<<<<<<<<<<
  *     if num_modes < 0:
  *         raise error()
  */
-  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_num_modes = SDL_GetNumDisplayModes(__pyx_t_2);
 
-  /* "pygame_sdl2/display.pyx":521
+  /* "pygame_sdl2/display.pyx":536
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)
  *     if num_modes < 0:             # <<<<<<<<<<<<<<
@@ -7545,14 +7680,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   __pyx_t_3 = ((__pyx_v_num_modes < 0) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":522
+    /* "pygame_sdl2/display.pyx":537
  *     num_modes = SDL_GetNumDisplayModes(display)
  *     if num_modes < 0:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     for 0 <= i < num_modes:
  */
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -7565,18 +7700,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":521
+    /* "pygame_sdl2/display.pyx":536
  * 
  *     num_modes = SDL_GetNumDisplayModes(display)
  *     if num_modes < 0:             # <<<<<<<<<<<<<<
@@ -7585,7 +7720,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
  */
   }
 
-  /* "pygame_sdl2/display.pyx":524
+  /* "pygame_sdl2/display.pyx":539
  *         raise error()
  * 
  *     for 0 <= i < num_modes:             # <<<<<<<<<<<<<<
@@ -7595,29 +7730,29 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   __pyx_t_2 = __pyx_v_num_modes;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_2; __pyx_v_i++) {
 
-    /* "pygame_sdl2/display.pyx":525
+    /* "pygame_sdl2/display.pyx":540
  * 
  *     for 0 <= i < num_modes:
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:             # <<<<<<<<<<<<<<
  *             t = (mode.w, mode.h)
  *             if t not in rv:
  */
-    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_As_int(__pyx_v_display); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_3 = ((SDL_GetDisplayMode(__pyx_t_6, __pyx_v_i, (&__pyx_v_mode)) == 0) != 0);
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/display.pyx":526
+      /* "pygame_sdl2/display.pyx":541
  *     for 0 <= i < num_modes:
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:
  *             t = (mode.w, mode.h)             # <<<<<<<<<<<<<<
  *             if t not in rv:
  *                 rv.append(t)
  */
-      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_mode.w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_mode.w); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_mode.h); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_mode.h); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -7628,27 +7763,27 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
       __Pyx_XDECREF_SET(__pyx_v_t, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "pygame_sdl2/display.pyx":527
+      /* "pygame_sdl2/display.pyx":542
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:
  *             t = (mode.w, mode.h)
  *             if t not in rv:             # <<<<<<<<<<<<<<
  *                 rv.append(t)
  * 
  */
-      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_t, __pyx_v_rv, Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_t, __pyx_v_rv, Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_7 = (__pyx_t_3 != 0);
       if (__pyx_t_7) {
 
-        /* "pygame_sdl2/display.pyx":528
+        /* "pygame_sdl2/display.pyx":543
  *             t = (mode.w, mode.h)
  *             if t not in rv:
  *                 rv.append(t)             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-        __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_rv, __pyx_v_t); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_rv, __pyx_v_t); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-        /* "pygame_sdl2/display.pyx":527
+        /* "pygame_sdl2/display.pyx":542
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:
  *             t = (mode.w, mode.h)
  *             if t not in rv:             # <<<<<<<<<<<<<<
@@ -7657,7 +7792,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
  */
       }
 
-      /* "pygame_sdl2/display.pyx":525
+      /* "pygame_sdl2/display.pyx":540
  * 
  *     for 0 <= i < num_modes:
  *         if SDL_GetDisplayMode(display, i, &mode) == 0:             # <<<<<<<<<<<<<<
@@ -7667,7 +7802,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
     }
   }
 
-  /* "pygame_sdl2/display.pyx":530
+  /* "pygame_sdl2/display.pyx":545
  *                 rv.append(t)
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -7679,7 +7814,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   __pyx_r = __pyx_v_rv;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":508
+  /* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
@@ -7702,7 +7837,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":533
+/* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
@@ -7711,10 +7846,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_24list_modes(CYTHON_UNUSED PyOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_11pygame_sdl2_7display_26mode_ok[] = "\n    Returns true if size is in the result of list_modes().\n    ";
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_27mode_ok = {"mode_ok", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_27mode_ok, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_26mode_ok};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_29mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_11pygame_sdl2_7display_28mode_ok[] = "\n    Returns true if size is in the result of list_modes().\n    ";
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_29mode_ok = {"mode_ok", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_29mode_ok, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11pygame_sdl2_7display_28mode_ok};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_29mode_ok(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_size = 0;
   CYTHON_UNUSED PyObject *__pyx_v_flags = 0;
   CYTHON_UNUSED PyObject *__pyx_v_depth = 0;
@@ -7756,7 +7891,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mode_ok") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mode_ok") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -7773,20 +7908,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_27mode_ok(PyObject *__pyx_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("mode_ok", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("mode_ok", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.mode_ok", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_26mode_ok(__pyx_self, __pyx_v_size, __pyx_v_flags, __pyx_v_depth);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_28mode_ok(__pyx_self, __pyx_v_size, __pyx_v_flags, __pyx_v_depth);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_28mode_ok(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_size, CYTHON_UNUSED PyObject *__pyx_v_flags, CYTHON_UNUSED PyObject *__pyx_v_depth) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -7799,7 +7934,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("mode_ok", 0);
 
-  /* "pygame_sdl2/display.pyx":538
+  /* "pygame_sdl2/display.pyx":553
  *     """
  * 
  *     return tuple(size) in list_modes()             # <<<<<<<<<<<<<<
@@ -7807,9 +7942,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
  * def gl_reset_attributes():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PySequence_Tuple(__pyx_v_size); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_list_modes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_list_modes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -7822,23 +7957,23 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
     }
   }
   if (__pyx_t_4) {
-    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else {
-    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":533
+  /* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
@@ -7860,7 +7995,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":540
+/* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
@@ -7869,25 +8004,25 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_26mode_ok(CYTHON_UNUSED PyObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_29gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_29gl_reset_attributes = {"gl_reset_attributes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_29gl_reset_attributes, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_29gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_31gl_reset_attributes = {"gl_reset_attributes", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_31gl_reset_attributes, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_reset_attributes(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_reset_attributes (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_30gl_reset_attributes(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_reset_attributes(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_reset_attributes", 0);
 
-  /* "pygame_sdl2/display.pyx":541
+  /* "pygame_sdl2/display.pyx":556
  * 
  * def gl_reset_attributes():
  *     SDL_GL_ResetAttributes()             # <<<<<<<<<<<<<<
@@ -7896,7 +8031,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UN
  */
   SDL_GL_ResetAttributes();
 
-  /* "pygame_sdl2/display.pyx":540
+  /* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
@@ -7911,7 +8046,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UN
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":543
+/* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
@@ -7920,9 +8055,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_28gl_reset_attributes(CYTHON_UN
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_31gl_set_attribute = {"gl_set_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_33gl_set_attribute = {"gl_set_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_33gl_set_attribute, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_set_attribute(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_v_value = 0;
   int __pyx_lineno = 0;
@@ -7951,11 +8086,11 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gl_set_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gl_set_attribute") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -7968,20 +8103,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_31gl_set_attribute(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("gl_set_attribute", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.gl_set_attribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(__pyx_self, __pyx_v_flag, __pyx_v_value);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_32gl_set_attribute(__pyx_self, __pyx_v_flag, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_set_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_value) {
   CYTHON_UNUSED PyObject *__pyx_v_default_swap_control = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -7996,35 +8131,35 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("gl_set_attribute", 0);
 
-  /* "pygame_sdl2/display.pyx":545
+  /* "pygame_sdl2/display.pyx":560
  * def gl_set_attribute(flag, value):
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
  *         if ios:
  *             return
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 545; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":546
+    /* "pygame_sdl2/display.pyx":561
  * 
  *     if flag == GL_SWAP_CONTROL:
  *         if ios:             # <<<<<<<<<<<<<<
  *             return
  * 
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_ios); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/display.pyx":547
+      /* "pygame_sdl2/display.pyx":562
  *     if flag == GL_SWAP_CONTROL:
  *         if ios:
  *             return             # <<<<<<<<<<<<<<
@@ -8035,7 +8170,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
       __pyx_r = Py_None; __Pyx_INCREF(Py_None);
       goto __pyx_L0;
 
-      /* "pygame_sdl2/display.pyx":546
+      /* "pygame_sdl2/display.pyx":561
  * 
  *     if flag == GL_SWAP_CONTROL:
  *         if ios:             # <<<<<<<<<<<<<<
@@ -8044,31 +8179,31 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
     }
 
-    /* "pygame_sdl2/display.pyx":552
+    /* "pygame_sdl2/display.pyx":567
  *         # to deal with the case where the negative interval isn't
  *         # supported. Then give up and carry on.
  *         if SDL_GL_SetSwapInterval(value):             # <<<<<<<<<<<<<<
  *             SDL_GL_SetSwapInterval(-value)
  * 
  */
-    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_3 = (SDL_GL_SetSwapInterval(__pyx_t_4) != 0);
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/display.pyx":553
+      /* "pygame_sdl2/display.pyx":568
  *         # supported. Then give up and carry on.
  *         if SDL_GL_SetSwapInterval(value):
  *             SDL_GL_SetSwapInterval(-value)             # <<<<<<<<<<<<<<
  * 
  *         default_swap_control = value
  */
-      __pyx_t_2 = PyNumber_Negative(__pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyNumber_Negative(__pyx_v_value); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       SDL_GL_SetSwapInterval(__pyx_t_4);
 
-      /* "pygame_sdl2/display.pyx":552
+      /* "pygame_sdl2/display.pyx":567
  *         # to deal with the case where the negative interval isn't
  *         # supported. Then give up and carry on.
  *         if SDL_GL_SetSwapInterval(value):             # <<<<<<<<<<<<<<
@@ -8077,7 +8212,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
     }
 
-    /* "pygame_sdl2/display.pyx":555
+    /* "pygame_sdl2/display.pyx":570
  *             SDL_GL_SetSwapInterval(-value)
  * 
  *         default_swap_control = value             # <<<<<<<<<<<<<<
@@ -8087,7 +8222,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
     __Pyx_INCREF(__pyx_v_value);
     __pyx_v_default_swap_control = __pyx_v_value;
 
-    /* "pygame_sdl2/display.pyx":556
+    /* "pygame_sdl2/display.pyx":571
  * 
  *         default_swap_control = value
  *         return             # <<<<<<<<<<<<<<
@@ -8098,7 +8233,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
     __pyx_r = Py_None; __Pyx_INCREF(Py_None);
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":545
+    /* "pygame_sdl2/display.pyx":560
  * def gl_set_attribute(flag, value):
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
@@ -8107,26 +8242,26 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":558
+  /* "pygame_sdl2/display.pyx":573
  *         return
  * 
  *     if SDL_GL_SetAttribute(flag, value):             # <<<<<<<<<<<<<<
  *         raise error()
  * 
  */
-  __pyx_t_5 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_3 = (SDL_GL_SetAttribute(__pyx_t_5, __pyx_t_4) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":559
+    /* "pygame_sdl2/display.pyx":574
  * 
  *     if SDL_GL_SetAttribute(flag, value):
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  * def gl_get_attribute(flag):
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_6 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) {
@@ -8139,18 +8274,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
       }
     }
     if (__pyx_t_6) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 574; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":558
+    /* "pygame_sdl2/display.pyx":573
  *         return
  * 
  *     if SDL_GL_SetAttribute(flag, value):             # <<<<<<<<<<<<<<
@@ -8159,7 +8294,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":543
+  /* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
@@ -8183,7 +8318,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":561
+/* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
@@ -8192,20 +8327,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_30gl_set_attribute(CYTHON_UNUSE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_33gl_get_attribute = {"gl_get_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_33gl_get_attribute, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_33gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_35gl_get_attribute = {"gl_get_attribute", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_35gl_get_attribute, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_get_attribute(PyObject *__pyx_self, PyObject *__pyx_v_flag) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_get_attribute (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(__pyx_self, ((PyObject *)__pyx_v_flag));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_34gl_get_attribute(__pyx_self, ((PyObject *)__pyx_v_flag));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_get_attribute(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_flag) {
   int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -8219,22 +8354,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("gl_get_attribute", 0);
 
-  /* "pygame_sdl2/display.pyx":564
+  /* "pygame_sdl2/display.pyx":579
  *     cdef int rv
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
  *         return SDL_GL_GetSwapInterval()
  * 
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_RichCompare(__pyx_v_flag, __pyx_t_1, Py_EQ); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":565
+    /* "pygame_sdl2/display.pyx":580
  * 
  *     if flag == GL_SWAP_CONTROL:
  *         return SDL_GL_GetSwapInterval()             # <<<<<<<<<<<<<<
@@ -8242,13 +8377,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  *     if SDL_GL_GetAttribute(flag, &rv):
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __Pyx_PyInt_From_int(SDL_GL_GetSwapInterval()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyInt_From_int(SDL_GL_GetSwapInterval()); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":564
+    /* "pygame_sdl2/display.pyx":579
  *     cdef int rv
  * 
  *     if flag == GL_SWAP_CONTROL:             # <<<<<<<<<<<<<<
@@ -8257,25 +8392,25 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":567
+  /* "pygame_sdl2/display.pyx":582
  *         return SDL_GL_GetSwapInterval()
  * 
  *     if SDL_GL_GetAttribute(flag, &rv):             # <<<<<<<<<<<<<<
  *         raise error()
  * 
  */
-  __pyx_t_4 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((SDL_GLattr)__Pyx_PyInt_As_SDL_GLattr(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_3 = (SDL_GL_GetAttribute(__pyx_t_4, (&__pyx_v_rv)) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/display.pyx":568
+    /* "pygame_sdl2/display.pyx":583
  * 
  *     if SDL_GL_GetAttribute(flag, &rv):
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) {
@@ -8288,18 +8423,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
       }
     }
     if (__pyx_t_5) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":567
+    /* "pygame_sdl2/display.pyx":582
  *         return SDL_GL_GetSwapInterval()
  * 
  *     if SDL_GL_GetAttribute(flag, &rv):             # <<<<<<<<<<<<<<
@@ -8308,7 +8443,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  */
   }
 
-  /* "pygame_sdl2/display.pyx":570
+  /* "pygame_sdl2/display.pyx":585
  *         raise error()
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -8316,13 +8451,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  * def gl_load_library(path):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":561
+  /* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
@@ -8343,7 +8478,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":572
+/* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
@@ -8352,20 +8487,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_32gl_get_attribute(CYTHON_UNUSE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_35gl_load_library = {"gl_load_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_35gl_load_library, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_35gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_37gl_load_library = {"gl_load_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_37gl_load_library, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_load_library(PyObject *__pyx_self, PyObject *__pyx_v_path) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_load_library (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_34gl_load_library(__pyx_self, ((PyObject *)__pyx_v_path));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_36gl_load_library(__pyx_self, ((PyObject *)__pyx_v_path));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_load_library(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_path) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8379,7 +8514,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("gl_load_library", 0);
 
-  /* "pygame_sdl2/display.pyx":573
+  /* "pygame_sdl2/display.pyx":588
  * 
  * def gl_load_library(path):
  *     if path is None:             # <<<<<<<<<<<<<<
@@ -8390,7 +8525,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":574
+    /* "pygame_sdl2/display.pyx":589
  * def gl_load_library(path):
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):             # <<<<<<<<<<<<<<
@@ -8400,14 +8535,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
     __pyx_t_2 = (SDL_GL_LoadLibrary(NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "pygame_sdl2/display.pyx":575
+      /* "pygame_sdl2/display.pyx":590
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):
  *             raise error()             # <<<<<<<<<<<<<<
  *     else:
  *         if SDL_GL_LoadLibrary(path):
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -8420,18 +8555,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
         }
       }
       if (__pyx_t_5) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
-        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":574
+      /* "pygame_sdl2/display.pyx":589
  * def gl_load_library(path):
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):             # <<<<<<<<<<<<<<
@@ -8440,7 +8575,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
  */
     }
 
-    /* "pygame_sdl2/display.pyx":573
+    /* "pygame_sdl2/display.pyx":588
  * 
  * def gl_load_library(path):
  *     if path is None:             # <<<<<<<<<<<<<<
@@ -8450,7 +8585,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "pygame_sdl2/display.pyx":577
+  /* "pygame_sdl2/display.pyx":592
  *             raise error()
  *     else:
  *         if SDL_GL_LoadLibrary(path):             # <<<<<<<<<<<<<<
@@ -8458,18 +8593,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
  * 
  */
   /*else*/ {
-    __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_path); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_path); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_2 = (SDL_GL_LoadLibrary(__pyx_t_6) != 0);
     if (__pyx_t_2) {
 
-      /* "pygame_sdl2/display.pyx":578
+      /* "pygame_sdl2/display.pyx":593
  *     else:
  *         if SDL_GL_LoadLibrary(path):
  *             raise error()             # <<<<<<<<<<<<<<
  * 
  * def gl_unload_library():
  */
-      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_5 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
@@ -8482,18 +8617,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
         }
       }
       if (__pyx_t_5) {
-        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else {
-        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "pygame_sdl2/display.pyx":577
+      /* "pygame_sdl2/display.pyx":592
  *             raise error()
  *     else:
  *         if SDL_GL_LoadLibrary(path):             # <<<<<<<<<<<<<<
@@ -8504,7 +8639,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   }
   __pyx_L3:;
 
-  /* "pygame_sdl2/display.pyx":572
+  /* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
@@ -8527,7 +8662,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":580
+/* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
@@ -8536,25 +8671,25 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_34gl_load_library(CYTHON_UNUSED
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_37gl_unload_library = {"gl_unload_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_37gl_unload_library, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_37gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_39gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_39gl_unload_library = {"gl_unload_library", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_39gl_unload_library, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_39gl_unload_library(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_unload_library (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_36gl_unload_library(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_38gl_unload_library(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_38gl_unload_library(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("gl_unload_library", 0);
 
-  /* "pygame_sdl2/display.pyx":581
+  /* "pygame_sdl2/display.pyx":596
  * 
  * def gl_unload_library():
  *     SDL_GL_UnloadLibrary()             # <<<<<<<<<<<<<<
@@ -8563,7 +8698,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUS
  */
   SDL_GL_UnloadLibrary();
 
-  /* "pygame_sdl2/display.pyx":580
+  /* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
@@ -8578,7 +8713,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":583
+/* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
@@ -8587,20 +8722,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_36gl_unload_library(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_39get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_39get_active = {"get_active", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_39get_active, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_39get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_41get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_41get_active = {"get_active", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_41get_active, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_41get_active(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_active (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_38get_active(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_40get_active(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_40get_active(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8612,17 +8747,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_active", 0);
 
-  /* "pygame_sdl2/display.pyx":584
+  /* "pygame_sdl2/display.pyx":599
  * 
  * def get_active():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.get_active()
  *     return False
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":585
+    /* "pygame_sdl2/display.pyx":600
  * def get_active():
  *     if main_window:
  *         return main_window.get_active()             # <<<<<<<<<<<<<<
@@ -8630,7 +8765,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_active); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_active); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -8643,10 +8778,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8654,7 +8789,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":584
+    /* "pygame_sdl2/display.pyx":599
  * 
  * def get_active():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -8663,7 +8798,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
  */
   }
 
-  /* "pygame_sdl2/display.pyx":586
+  /* "pygame_sdl2/display.pyx":601
  *     if main_window:
  *         return main_window.get_active()
  *     return False             # <<<<<<<<<<<<<<
@@ -8675,7 +8810,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":583
+  /* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
@@ -8696,7 +8831,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":588
+/* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
@@ -8705,20 +8840,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_38get_active(CYTHON_UNUSED PyOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_41iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_41iconify = {"iconify", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_41iconify, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_41iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_43iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_43iconify = {"iconify", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_43iconify, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_43iconify(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("iconify (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_40iconify(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_42iconify(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_42iconify(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8730,17 +8865,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("iconify", 0);
 
-  /* "pygame_sdl2/display.pyx":589
+  /* "pygame_sdl2/display.pyx":604
  * 
  * def iconify():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.iconify()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":590
+    /* "pygame_sdl2/display.pyx":605
  * def iconify():
  *     if main_window:
  *         return main_window.iconify()             # <<<<<<<<<<<<<<
@@ -8748,7 +8883,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
  *     return False
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_iconify); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_iconify); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -8761,10 +8896,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8772,7 +8907,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":589
+    /* "pygame_sdl2/display.pyx":604
  * 
  * def iconify():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -8781,7 +8916,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
  */
   }
 
-  /* "pygame_sdl2/display.pyx":592
+  /* "pygame_sdl2/display.pyx":607
  *         return main_window.iconify()
  * 
  *     return False             # <<<<<<<<<<<<<<
@@ -8793,7 +8928,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":588
+  /* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
@@ -8814,7 +8949,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":594
+/* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
@@ -8823,20 +8958,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_40iconify(CYTHON_UNUSED PyObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_43toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_43toggle_fullscreen = {"toggle_fullscreen", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_43toggle_fullscreen, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_43toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_45toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_45toggle_fullscreen = {"toggle_fullscreen", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_45toggle_fullscreen, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_45toggle_fullscreen(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("toggle_fullscreen (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_44toggle_fullscreen(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_44toggle_fullscreen(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -8848,17 +8983,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("toggle_fullscreen", 0);
 
-  /* "pygame_sdl2/display.pyx":595
+  /* "pygame_sdl2/display.pyx":610
  * 
  * def toggle_fullscreen():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.toggle_fullscreen()
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":596
+    /* "pygame_sdl2/display.pyx":611
  * def toggle_fullscreen():
  *     if main_window:
  *         return main_window.toggle_fullscreen()             # <<<<<<<<<<<<<<
@@ -8866,7 +9001,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
  *     return True
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_toggle_fullscreen); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_toggle_fullscreen); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -8879,10 +9014,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 596; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8890,7 +9025,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":595
+    /* "pygame_sdl2/display.pyx":610
  * 
  * def toggle_fullscreen():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -8899,7 +9034,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
  */
   }
 
-  /* "pygame_sdl2/display.pyx":598
+  /* "pygame_sdl2/display.pyx":613
  *         return main_window.toggle_fullscreen()
  * 
  *     return True             # <<<<<<<<<<<<<<
@@ -8911,7 +9046,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
   __pyx_r = Py_True;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":594
+  /* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
@@ -8932,7 +9067,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":600
+/* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -8941,9 +9076,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_42toggle_fullscreen(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_45set_gamma = {"set_gamma", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_45set_gamma, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_47set_gamma = {"set_gamma", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_47set_gamma, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_red = 0;
   PyObject *__pyx_v_green = 0;
   PyObject *__pyx_v_blue = 0;
@@ -8985,7 +9120,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -9002,20 +9137,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_45set_gamma(PyObject *__pyx_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_gamma", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_44set_gamma(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_46set_gamma(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9029,17 +9164,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_gamma", 0);
 
-  /* "pygame_sdl2/display.pyx":601
+  /* "pygame_sdl2/display.pyx":616
  * 
  * def set_gamma(red, green=None, blue=None):
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.set_gamma(red, green, blue)
  *     return False
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":602
+    /* "pygame_sdl2/display.pyx":617
  * def set_gamma(red, green=None, blue=None):
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)             # <<<<<<<<<<<<<<
@@ -9047,7 +9182,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     __pyx_t_5 = 0;
@@ -9061,7 +9196,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
         __pyx_t_5 = 1;
       }
     }
-    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -9075,7 +9210,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
     __Pyx_INCREF(__pyx_v_blue);
     __Pyx_GIVEREF(__pyx_v_blue);
     PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_blue);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 602; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -9083,7 +9218,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":601
+    /* "pygame_sdl2/display.pyx":616
  * 
  * def set_gamma(red, green=None, blue=None):
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9092,7 +9227,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
  */
   }
 
-  /* "pygame_sdl2/display.pyx":603
+  /* "pygame_sdl2/display.pyx":618
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)
  *     return False             # <<<<<<<<<<<<<<
@@ -9104,7 +9239,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":600
+  /* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
@@ -9126,7 +9261,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":605
+/* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
@@ -9135,9 +9270,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_44set_gamma(CYTHON_UNUSED PyObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_47set_gamma_ramp = {"set_gamma_ramp", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_49set_gamma_ramp = {"set_gamma_ramp", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_49set_gamma_ramp, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_gamma_ramp(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_red = 0;
   PyObject *__pyx_v_green = 0;
   PyObject *__pyx_v_blue = 0;
@@ -9168,16 +9303,16 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_green)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_blue)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, 2); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_gamma_ramp") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -9192,20 +9327,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_47set_gamma_ramp(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_gamma_ramp", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_gamma_ramp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_48set_gamma_ramp(__pyx_self, __pyx_v_red, __pyx_v_green, __pyx_v_blue);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_gamma_ramp(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_red, PyObject *__pyx_v_green, PyObject *__pyx_v_blue) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9219,17 +9354,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_gamma_ramp", 0);
 
-  /* "pygame_sdl2/display.pyx":606
+  /* "pygame_sdl2/display.pyx":621
  * 
  * def set_gamma_ramp(red, green, blue):
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.set_gamma_ramp(red, green, blue)
  *     return False
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":607
+    /* "pygame_sdl2/display.pyx":622
  * def set_gamma_ramp(red, green, blue):
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)             # <<<<<<<<<<<<<<
@@ -9237,7 +9372,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma_ramp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_gamma_ramp); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     __pyx_t_5 = 0;
@@ -9251,7 +9386,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
         __pyx_t_5 = 1;
       }
     }
-    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     if (__pyx_t_4) {
       __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
@@ -9265,7 +9400,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
     __Pyx_INCREF(__pyx_v_blue);
     __Pyx_GIVEREF(__pyx_v_blue);
     PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_blue);
-    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -9273,7 +9408,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":606
+    /* "pygame_sdl2/display.pyx":621
  * 
  * def set_gamma_ramp(red, green, blue):
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9282,7 +9417,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
  */
   }
 
-  /* "pygame_sdl2/display.pyx":608
+  /* "pygame_sdl2/display.pyx":623
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)
  *     return False             # <<<<<<<<<<<<<<
@@ -9294,7 +9429,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
   __pyx_r = Py_False;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":605
+  /* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
@@ -9316,7 +9451,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":610
+/* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
@@ -9325,20 +9460,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_46set_gamma_ramp(CYTHON_UNUSED
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_49set_icon = {"set_icon", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_49set_icon, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_49set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_51set_icon = {"set_icon", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_51set_icon, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_icon(PyObject *__pyx_self, PyObject *__pyx_v_surface) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_icon (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_48set_icon(__pyx_self, ((PyObject *)__pyx_v_surface));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_50set_icon(__pyx_self, ((PyObject *)__pyx_v_surface));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_icon(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_surface) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -9353,14 +9488,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_icon", 0);
 
-  /* "pygame_sdl2/display.pyx":613
+  /* "pygame_sdl2/display.pyx":628
  *     global default_icon
  * 
  *     default_icon = surface.copy()             # <<<<<<<<<<<<<<
  * 
  *     if main_window is not None:
  */
-  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_surface, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -9373,17 +9508,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "pygame_sdl2/display.pyx":615
+  /* "pygame_sdl2/display.pyx":630
  *     default_icon = surface.copy()
  * 
  *     if main_window is not None:             # <<<<<<<<<<<<<<
@@ -9394,16 +9529,16 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/display.pyx":616
+    /* "pygame_sdl2/display.pyx":631
  * 
  *     if main_window is not None:
  *         main_window.set_icon(default_icon)             # <<<<<<<<<<<<<<
  * 
  * def set_caption(title, icontitle = None):
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_icon); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_icon); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_6 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
@@ -9416,24 +9551,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
       }
     }
     if (!__pyx_t_6) {
-      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       __Pyx_GIVEREF(__pyx_t_3);
       PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_t_3);
       __pyx_t_3 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "pygame_sdl2/display.pyx":615
+    /* "pygame_sdl2/display.pyx":630
  *     default_icon = surface.copy()
  * 
  *     if main_window is not None:             # <<<<<<<<<<<<<<
@@ -9442,7 +9577,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
  */
   }
 
-  /* "pygame_sdl2/display.pyx":610
+  /* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
@@ -9467,7 +9602,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":618
+/* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
@@ -9476,9 +9611,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_48set_icon(CYTHON_UNUSED PyObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_51set_caption = {"set_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_51set_caption, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_53set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_53set_caption = {"set_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_53set_caption, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_53set_caption(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_title = 0;
   CYTHON_UNUSED PyObject *__pyx_v_icontitle = 0;
   int __pyx_lineno = 0;
@@ -9512,7 +9647,7 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_caption") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_caption") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -9527,20 +9662,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_51set_caption(PyObject *__pyx_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_caption", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_caption", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.set_caption", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_50set_caption(__pyx_self, __pyx_v_title, __pyx_v_icontitle);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_52set_caption(__pyx_self, __pyx_v_title, __pyx_v_icontitle);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_52set_caption(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_title, CYTHON_UNUSED PyObject *__pyx_v_icontitle) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9554,35 +9689,35 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_caption", 0);
 
-  /* "pygame_sdl2/display.pyx":621
+  /* "pygame_sdl2/display.pyx":636
  *     global default_title
  * 
  *     default_title = title             # <<<<<<<<<<<<<<
  * 
  *     if main_window:
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_v_title) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_v_title) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":623
+  /* "pygame_sdl2/display.pyx":638
  *     default_title = title
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
  *         main_window.set_caption(default_title)
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":624
+    /* "pygame_sdl2/display.pyx":639
  * 
  *     if main_window:
  *         main_window.set_caption(default_title)             # <<<<<<<<<<<<<<
  * 
  * def get_caption():
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_caption); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_set_caption); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -9595,24 +9730,24 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
       }
     }
     if (!__pyx_t_5) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_4);
       __pyx_t_4 = 0;
-      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-    /* "pygame_sdl2/display.pyx":623
+    /* "pygame_sdl2/display.pyx":638
  *     default_title = title
  * 
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9621,7 +9756,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
  */
   }
 
-  /* "pygame_sdl2/display.pyx":618
+  /* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
@@ -9646,7 +9781,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":626
+/* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
@@ -9655,20 +9790,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_50set_caption(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_53get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_53get_caption = {"get_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_53get_caption, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_53get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_55get_caption = {"get_caption", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_55get_caption, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_caption(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_caption (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_52get_caption(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_54get_caption(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_caption(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -9677,7 +9812,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_caption", 0);
 
-  /* "pygame_sdl2/display.pyx":627
+  /* "pygame_sdl2/display.pyx":642
  * 
  * def get_caption():
  *     return default_title             # <<<<<<<<<<<<<<
@@ -9685,13 +9820,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
  * def get_drawable_size():
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_default_title); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 642; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":626
+  /* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
@@ -9710,7 +9845,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":629
+/* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
@@ -9719,20 +9854,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_52get_caption(CYTHON_UNUSED PyO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_55get_drawable_size = {"get_drawable_size", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_55get_drawable_size, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_55get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_57get_drawable_size = {"get_drawable_size", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_57get_drawable_size, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_drawable_size(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_drawable_size (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_54get_drawable_size(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_56get_drawable_size(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_drawable_size(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -9744,17 +9879,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_drawable_size", 0);
 
-  /* "pygame_sdl2/display.pyx":630
+  /* "pygame_sdl2/display.pyx":645
  * 
  * def get_drawable_size():
  *     if main_window:             # <<<<<<<<<<<<<<
  *         return main_window.get_drawable_size()
  *     return None
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":631
+    /* "pygame_sdl2/display.pyx":646
  * def get_drawable_size():
  *     if main_window:
  *         return main_window.get_drawable_size()             # <<<<<<<<<<<<<<
@@ -9762,7 +9897,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_drawable_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window), __pyx_n_s_get_drawable_size); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
@@ -9775,10 +9910,10 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -9786,7 +9921,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":630
+    /* "pygame_sdl2/display.pyx":645
  * 
  * def get_drawable_size():
  *     if main_window:             # <<<<<<<<<<<<<<
@@ -9795,7 +9930,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
  */
   }
 
-  /* "pygame_sdl2/display.pyx":632
+  /* "pygame_sdl2/display.pyx":647
  *     if main_window:
  *         return main_window.get_drawable_size()
  *     return None             # <<<<<<<<<<<<<<
@@ -9807,7 +9942,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":629
+  /* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
@@ -9828,7 +9963,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":634
+/* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -9837,20 +9972,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_54get_drawable_size(CYTHON_UNUS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_57get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_57get_num_video_displays, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_57get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_59get_num_video_displays = {"get_num_video_displays", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_59get_num_video_displays, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_num_video_displays(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_num_video_displays (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_58get_num_video_displays(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_num_video_displays(CYTHON_UNUSED PyObject *__pyx_self) {
   int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -9863,7 +9998,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_num_video_displays", 0);
 
-  /* "pygame_sdl2/display.pyx":635
+  /* "pygame_sdl2/display.pyx":650
  * 
  * def get_num_video_displays():
  *     rv = SDL_GetNumVideoDisplays()             # <<<<<<<<<<<<<<
@@ -9872,7 +10007,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  */
   __pyx_v_rv = SDL_GetNumVideoDisplays();
 
-  /* "pygame_sdl2/display.pyx":636
+  /* "pygame_sdl2/display.pyx":651
  * def get_num_video_displays():
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -9882,14 +10017,14 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
   __pyx_t_1 = ((__pyx_v_rv < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":637
+    /* "pygame_sdl2/display.pyx":652
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:
  *         raise error()             # <<<<<<<<<<<<<<
  * 
  *     return rv
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
@@ -9902,18 +10037,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
       }
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     } else {
-      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 637; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 652; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "pygame_sdl2/display.pyx":636
+    /* "pygame_sdl2/display.pyx":651
  * def get_num_video_displays():
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:             # <<<<<<<<<<<<<<
@@ -9922,7 +10057,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  */
   }
 
-  /* "pygame_sdl2/display.pyx":639
+  /* "pygame_sdl2/display.pyx":654
  *         raise error()
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -9930,13 +10065,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  * def get_display_bounds(index):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 639; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rv); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 654; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":634
+  /* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
@@ -9957,7 +10092,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":641
+/* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
@@ -9966,20 +10101,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_56get_num_video_displays(CYTHON
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_59get_display_bounds = {"get_display_bounds", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_59get_display_bounds, METH_O, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_59get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_61get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_61get_display_bounds = {"get_display_bounds", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_61get_display_bounds, METH_O, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_61get_display_bounds(PyObject *__pyx_self, PyObject *__pyx_v_index) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_display_bounds (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_58get_display_bounds(__pyx_self, ((PyObject *)__pyx_v_index));
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_60get_display_bounds(__pyx_self, ((PyObject *)__pyx_v_index));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_60get_display_bounds(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_index) {
   SDL_Rect __pyx_v_rect;
   CYTHON_UNUSED int __pyx_v_rv;
   PyObject *__pyx_r = NULL;
@@ -9995,17 +10130,17 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_display_bounds", 0);
 
-  /* "pygame_sdl2/display.pyx":643
+  /* "pygame_sdl2/display.pyx":658
  * def get_display_bounds(index):
  *     cdef SDL_Rect rect
  *     rv = SDL_GetDisplayBounds(index, &rect)             # <<<<<<<<<<<<<<
  * 
  *     return (rect.x, rect.y, rect.w, rect.h)
  */
-  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_index); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_index); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_rv = SDL_GetDisplayBounds(__pyx_t_1, (&__pyx_v_rect));
 
-  /* "pygame_sdl2/display.pyx":645
+  /* "pygame_sdl2/display.pyx":660
  *     rv = SDL_GetDisplayBounds(index, &rect)
  * 
  *     return (rect.x, rect.y, rect.w, rect.h)             # <<<<<<<<<<<<<<
@@ -10013,15 +10148,15 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
  * def hint(hint, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rect.x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_rect.x); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rect.y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_rect.y); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_rect.w); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_rect.w); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_rect.h); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_rect.h); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -10039,7 +10174,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":641
+  /* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
@@ -10062,7 +10197,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":647
+/* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
@@ -10071,9 +10206,9 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_58get_display_bounds(CYTHON_UNU
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_61hint = {"hint", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_61hint, METH_VARARGS|METH_KEYWORDS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_63hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_63hint = {"hint", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_63hint, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_63hint(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_hint = 0;
   PyObject *__pyx_v_value = 0;
   int __pyx_lineno = 0;
@@ -10102,11 +10237,11 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, Py
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, 1); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hint") < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -10119,20 +10254,20 @@ static PyObject *__pyx_pw_11pygame_sdl2_7display_61hint(PyObject *__pyx_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("hint", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("pygame_sdl2.display.hint", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_60hint(__pyx_self, __pyx_v_hint, __pyx_v_value);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_62hint(__pyx_self, __pyx_v_hint, __pyx_v_value);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_62hint(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_hint, PyObject *__pyx_v_value) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -10148,7 +10283,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   __Pyx_INCREF(__pyx_v_hint);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "pygame_sdl2/display.pyx":649
+  /* "pygame_sdl2/display.pyx":664
  * def hint(hint, value):
  * 
  *     if not isinstance(hint, bytes):             # <<<<<<<<<<<<<<
@@ -10159,22 +10294,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":650
+    /* "pygame_sdl2/display.pyx":665
  * 
  *     if not isinstance(hint, bytes):
  *         hint = hint.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(value, bytes):
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_hint, __pyx_n_s_encode); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_hint, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/display.pyx":649
+    /* "pygame_sdl2/display.pyx":664
  * def hint(hint, value):
  * 
  *     if not isinstance(hint, bytes):             # <<<<<<<<<<<<<<
@@ -10183,7 +10318,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "pygame_sdl2/display.pyx":652
+  /* "pygame_sdl2/display.pyx":667
  *         hint = hint.encode("utf-8")
  * 
  *     if not isinstance(value, bytes):             # <<<<<<<<<<<<<<
@@ -10194,22 +10329,22 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   __pyx_t_1 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":653
+    /* "pygame_sdl2/display.pyx":668
  * 
  *     if not isinstance(value, bytes):
  *         value = value.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     SDL_SetHint(hint, value)
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "pygame_sdl2/display.pyx":652
+    /* "pygame_sdl2/display.pyx":667
  *         hint = hint.encode("utf-8")
  * 
  *     if not isinstance(value, bytes):             # <<<<<<<<<<<<<<
@@ -10218,18 +10353,18 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
  */
   }
 
-  /* "pygame_sdl2/display.pyx":655
+  /* "pygame_sdl2/display.pyx":670
  *         value = value.encode("utf-8")
  * 
  *     SDL_SetHint(hint, value)             # <<<<<<<<<<<<<<
  * 
  * def get_platform():
  */
-  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_hint); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_value); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 655; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_AsString(__pyx_v_hint); if (unlikely((!__pyx_t_5) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_value); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   SDL_SetHint(__pyx_t_5, __pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":647
+  /* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
@@ -10253,7 +10388,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":657
+/* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
@@ -10262,20 +10397,20 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_60hint(CYTHON_UNUSED PyObject *
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_11pygame_sdl2_7display_63get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
-static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_63get_platform = {"get_platform", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_63get_platform, METH_NOARGS, 0};
-static PyObject *__pyx_pw_11pygame_sdl2_7display_63get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
+static PyObject *__pyx_pw_11pygame_sdl2_7display_65get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyMethodDef __pyx_mdef_11pygame_sdl2_7display_65get_platform = {"get_platform", (PyCFunction)__pyx_pw_11pygame_sdl2_7display_65get_platform, METH_NOARGS, 0};
+static PyObject *__pyx_pw_11pygame_sdl2_7display_65get_platform(PyObject *__pyx_self, CYTHON_UNUSED PyObject *unused) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("get_platform (wrapper)", 0);
-  __pyx_r = __pyx_pf_11pygame_sdl2_7display_62get_platform(__pyx_self);
+  __pyx_r = __pyx_pf_11pygame_sdl2_7display_64get_platform(__pyx_self);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED PyObject *__pyx_self) {
+static PyObject *__pyx_pf_11pygame_sdl2_7display_64get_platform(CYTHON_UNUSED PyObject *__pyx_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -10284,7 +10419,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED Py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_platform", 0);
 
-  /* "pygame_sdl2/display.pyx":658
+  /* "pygame_sdl2/display.pyx":673
  * 
  * def get_platform():
  *     return SDL_GetPlatform()             # <<<<<<<<<<<<<<
@@ -10292,13 +10427,13 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED Py
  * cdef api SDL_Window *PyWindow_AsWindow(window):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyBytes_FromString(SDL_GetPlatform()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBytes_FromString(SDL_GetPlatform()); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":657
+  /* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
@@ -10317,7 +10452,7 @@ static PyObject *__pyx_pf_11pygame_sdl2_7display_62get_platform(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "pygame_sdl2/display.pyx":660
+/* "pygame_sdl2/display.pyx":675
  *     return SDL_GetPlatform()
  * 
  * cdef api SDL_Window *PyWindow_AsWindow(window):             # <<<<<<<<<<<<<<
@@ -10333,7 +10468,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __Pyx_RefNannySetupContext("PyWindow_AsWindow", 0);
   __Pyx_INCREF(__pyx_v_window);
 
-  /* "pygame_sdl2/display.pyx":667
+  /* "pygame_sdl2/display.pyx":682
  *     """
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10344,7 +10479,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "pygame_sdl2/display.pyx":668
+    /* "pygame_sdl2/display.pyx":683
  * 
  *     if window is None:
  *         window = main_window             # <<<<<<<<<<<<<<
@@ -10354,7 +10489,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
     __Pyx_INCREF(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
     __Pyx_DECREF_SET(__pyx_v_window, ((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
 
-    /* "pygame_sdl2/display.pyx":667
+    /* "pygame_sdl2/display.pyx":682
  *     """
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10363,7 +10498,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
  */
   }
 
-  /* "pygame_sdl2/display.pyx":670
+  /* "pygame_sdl2/display.pyx":685
  *         window = main_window
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10374,7 +10509,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "pygame_sdl2/display.pyx":671
+    /* "pygame_sdl2/display.pyx":686
  * 
  *     if window is None:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -10384,7 +10519,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
     __pyx_r = NULL;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/display.pyx":670
+    /* "pygame_sdl2/display.pyx":685
  *         window = main_window
  * 
  *     if window is None:             # <<<<<<<<<<<<<<
@@ -10393,7 +10528,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
  */
   }
 
-  /* "pygame_sdl2/display.pyx":673
+  /* "pygame_sdl2/display.pyx":688
  *         return NULL
  * 
  *     return (<Window> window).window             # <<<<<<<<<<<<<<
@@ -10401,7 +10536,7 @@ static SDL_Window *__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow(PyObject *__
   __pyx_r = ((struct __pyx_obj_11pygame_sdl2_7display_Window *)__pyx_v_window)->window;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/display.pyx":660
+  /* "pygame_sdl2/display.pyx":675
  *     return SDL_GetPlatform()
  * 
  * cdef api SDL_Window *PyWindow_AsWindow(window):             # <<<<<<<<<<<<<<
@@ -10594,6 +10729,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_u_SDL_VIDEO_MAC_FULLSCREEN_SPACES, __pyx_k_SDL_VIDEO_MAC_FULLSCREEN_SPACES, sizeof(__pyx_k_SDL_VIDEO_MAC_FULLSCREEN_SPACES), 0, 1, 0, 1},
   {&__pyx_n_s_SRCALPHA, __pyx_k_SRCALPHA, sizeof(__pyx_k_SRCALPHA), 0, 0, 1, 1},
   {&__pyx_n_s_androidembed, __pyx_k_androidembed, sizeof(__pyx_k_androidembed), 0, 0, 1, 1},
+  {&__pyx_n_s_before_first_window, __pyx_k_before_first_window, sizeof(__pyx_k_before_first_window), 0, 0, 1, 1},
   {&__pyx_n_s_bitsize, __pyx_k_bitsize, sizeof(__pyx_k_bitsize), 0, 0, 1, 1},
   {&__pyx_n_s_blit_hw, __pyx_k_blit_hw, sizeof(__pyx_k_blit_hw), 0, 0, 1, 1},
   {&__pyx_n_s_blit_hw_A, __pyx_k_blit_hw_A, sizeof(__pyx_k_blit_hw_A), 0, 0, 1, 1},
@@ -10703,6 +10839,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_set_icon, __pyx_k_set_icon, sizeof(__pyx_k_set_icon), 0, 0, 1, 1},
   {&__pyx_n_s_set_mode, __pyx_k_set_mode, sizeof(__pyx_k_set_mode), 0, 0, 1, 1},
   {&__pyx_n_s_shifts, __pyx_k_shifts, sizeof(__pyx_k_shifts), 0, 0, 1, 1},
+  {&__pyx_n_s_shown_first_window, __pyx_k_shown_first_window, sizeof(__pyx_k_shown_first_window), 0, 0, 1, 1},
   {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
   {&__pyx_n_s_surface, __pyx_k_surface, sizeof(__pyx_k_surface), 0, 0, 1, 1},
   {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1},
@@ -10718,10 +10855,10 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_object = __Pyx_GetBuiltinName(__pyx_n_s_object); if (!__pyx_builtin_object) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_ImportError = __Pyx_GetBuiltinName(__pyx_n_s_ImportError); if (!__pyx_builtin_ImportError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -10742,91 +10879,91 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "pygame_sdl2/display.pyx":95
+  /* "pygame_sdl2/display.pyx":116
  * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(title, bytes):
  */
-  __pyx_tuple__2 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__2 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "pygame_sdl2/display.pyx":98
+  /* "pygame_sdl2/display.pyx":119
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
- *         self.create_flags = flags
+ *         _before_first_window()
  */
-  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 119; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__4);
   __Pyx_GIVEREF(__pyx_tuple__4);
 
-  /* "pygame_sdl2/display.pyx":159
+  /* "pygame_sdl2/display.pyx":182
  *             if self.window_surface.format.BitsPerPixel == 32:
  * 
  *                 self.surface = Surface(())             # <<<<<<<<<<<<<<
  *                 self.surface.surface = self.window_surface
  *                 self.surface.owns_surface = False
  */
-  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_empty_tuple); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_empty_tuple); if (unlikely(!__pyx_tuple__5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__5);
   __Pyx_GIVEREF(__pyx_tuple__5);
 
-  /* "pygame_sdl2/display.pyx":267
+  /* "pygame_sdl2/display.pyx":290
  *         rects = <SDL_Rect *> calloc(len(rectangles), sizeof(SDL_Rect))
  *         if rects == NULL:
  *             raise MemoryError("Couldn't allocate rectangles.")             # <<<<<<<<<<<<<<
  * 
  *         try:
  */
-  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Couldn_t_allocate_rectangles); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_Couldn_t_allocate_rectangles); if (unlikely(!__pyx_tuple__6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 290; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_GIVEREF(__pyx_tuple__6);
 
-  /* "pygame_sdl2/display.pyx":347
+  /* "pygame_sdl2/display.pyx":370
  * 
  *         if not isinstance(title, bytes):
  *             title = title.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *         SDL_SetWindowTitle(self.window, title)
  */
-  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 347; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__7);
   __Pyx_GIVEREF(__pyx_tuple__7);
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  *     global main_window
  * 
  */
-  __pyx_tuple__8 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__8 = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple__8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__8);
   __Pyx_GIVEREF(__pyx_tuple__8);
 
-  /* "pygame_sdl2/display.pyx":650
+  /* "pygame_sdl2/display.pyx":665
  * 
  *     if not isinstance(hint, bytes):
  *         hint = hint.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(value, bytes):
  */
-  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__10);
   __Pyx_GIVEREF(__pyx_tuple__10);
 
-  /* "pygame_sdl2/display.pyx":653
+  /* "pygame_sdl2/display.pyx":668
  * 
  *     if not isinstance(value, bytes):
  *         value = value.encode("utf-8")             # <<<<<<<<<<<<<<
  * 
  *     SDL_SetHint(hint, value)
  */
-  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 653; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__11);
   __Pyx_GIVEREF(__pyx_tuple__11);
 
@@ -10866,329 +11003,341 @@ static int __Pyx_InitCachedConstants(void) {
  */
   __pyx_codeobj__15 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_init, 87, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__15)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_n_s_androidembed); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__16);
+  __Pyx_GIVEREF(__pyx_tuple__16);
+  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_before_first_window, 97, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  *     global main_window
  * 
  */
-  __pyx_tuple__16 = PyTuple_Pack(5, __pyx_n_s_resolution, __pyx_n_s_flags, __pyx_n_s_depth, __pyx_n_s_pos, __pyx_n_s_androidembed); if (unlikely(!__pyx_tuple__16)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__16);
-  __Pyx_GIVEREF(__pyx_tuple__16);
-  __pyx_codeobj__17 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__16, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_mode, 366, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__17)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__18 = PyTuple_Pack(4, __pyx_n_s_resolution, __pyx_n_s_flags, __pyx_n_s_depth, __pyx_n_s_pos); if (unlikely(!__pyx_tuple__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__18);
+  __Pyx_GIVEREF(__pyx_tuple__18);
+  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__18, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_mode, 389, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":393
+  /* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
  *     if main_window is None:
  *         return None
  */
-  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_surface, 393, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_surface, 408, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":399
+  /* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the Window created by set_mode, or None if no such window
  */
-  __pyx_codeobj__19 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_window, 399, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__19)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__21 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_window, 414, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":407
+  /* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.flip()
  */
-  __pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_flip, 407, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_flip, 422, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":411
+  /* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.update(rectangles)
  */
-  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_n_s_rectangles); if (unlikely(!__pyx_tuple__21)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__21);
-  __Pyx_GIVEREF(__pyx_tuple__21);
-  __pyx_codeobj__22 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__21, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_update, 411, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__22)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_rectangles); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__23);
+  __Pyx_GIVEREF(__pyx_tuple__23);
+  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_update, 426, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":415
+  /* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  */
-  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_n_s_driver); if (unlikely(!__pyx_tuple__23)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__23);
-  __Pyx_GIVEREF(__pyx_tuple__23);
-  __pyx_codeobj__24 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__23, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_driver, 415, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__24)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__25 = PyTuple_Pack(1, __pyx_n_s_driver); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__25);
+  __Pyx_GIVEREF(__pyx_tuple__25);
+  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_driver, 430, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":425
+  /* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
  *         cdef SDL_DisplayMode dm
  *         cdef SDL_PixelFormat *format
  */
-  __pyx_tuple__25 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_dm, __pyx_n_s_format); if (unlikely(!__pyx_tuple__25)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__25);
-  __Pyx_GIVEREF(__pyx_tuple__25);
-  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__25, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_init_2, 425, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__27 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_dm, __pyx_n_s_format); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__27);
+  __Pyx_GIVEREF(__pyx_tuple__27);
+  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_init_2, 440, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":484
+  /* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
  *         return "<Info({!r})>".format(self.__dict__)
  * 
  */
-  __pyx_tuple__27 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__27)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__27);
-  __Pyx_GIVEREF(__pyx_tuple__27);
-  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__27, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_repr, 484, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__29 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__29);
+  __Pyx_GIVEREF(__pyx_tuple__29);
+  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__29, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_repr, 499, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":488
+  /* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_wm_info()
  */
-  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_wm_info, 488, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_wm_info, 503, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":495
+  /* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the number of video displays connected to the system.
  */
-  __pyx_tuple__30 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__30)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__30);
-  __Pyx_GIVEREF(__pyx_tuple__30);
-  __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__30, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 495, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__32 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__32);
+  __Pyx_GIVEREF(__pyx_tuple__32);
+  __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 510, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":508
+  /* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns a list of possible display modes for the display `display`.
  */
-  __pyx_tuple__32 = PyTuple_Pack(8, __pyx_n_s_depth, __pyx_n_s_flags, __pyx_n_s_display, __pyx_n_s_num_modes, __pyx_n_s_i, __pyx_n_s_mode, __pyx_n_s_rv, __pyx_n_s_t); if (unlikely(!__pyx_tuple__32)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__32);
-  __Pyx_GIVEREF(__pyx_tuple__32);
-  __pyx_codeobj__33 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__32, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_list_modes, 508, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__33)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__34 = PyTuple_Pack(8, __pyx_n_s_depth, __pyx_n_s_flags, __pyx_n_s_display, __pyx_n_s_num_modes, __pyx_n_s_i, __pyx_n_s_mode, __pyx_n_s_rv, __pyx_n_s_t); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__34);
+  __Pyx_GIVEREF(__pyx_tuple__34);
+  __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(3, 0, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_list_modes, 523, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":533
+  /* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns true if size is in the result of list_modes().
  */
-  __pyx_tuple__34 = PyTuple_Pack(3, __pyx_n_s_size, __pyx_n_s_flags, __pyx_n_s_depth); if (unlikely(!__pyx_tuple__34)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__34);
-  __Pyx_GIVEREF(__pyx_tuple__34);
-  __pyx_codeobj__35 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__34, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_mode_ok, 533, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__35)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__36 = PyTuple_Pack(3, __pyx_n_s_size, __pyx_n_s_flags, __pyx_n_s_depth); if (unlikely(!__pyx_tuple__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__36);
+  __Pyx_GIVEREF(__pyx_tuple__36);
+  __pyx_codeobj__37 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__36, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_mode_ok, 548, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":540
+  /* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
  *     SDL_GL_ResetAttributes()
  * 
  */
-  __pyx_codeobj__36 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_reset_attributes, 540, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__36)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_reset_attributes, 555, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":543
+  /* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
  * 
  *     if flag == GL_SWAP_CONTROL:
  */
-  __pyx_tuple__37 = PyTuple_Pack(3, __pyx_n_s_flag, __pyx_n_s_value, __pyx_n_s_default_swap_control); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__37);
-  __Pyx_GIVEREF(__pyx_tuple__37);
-  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_set_attribute, 543, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__39 = PyTuple_Pack(3, __pyx_n_s_flag, __pyx_n_s_value, __pyx_n_s_default_swap_control); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__39);
+  __Pyx_GIVEREF(__pyx_tuple__39);
+  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_set_attribute, 558, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":561
+  /* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
  *     cdef int rv
  * 
  */
-  __pyx_tuple__39 = PyTuple_Pack(2, __pyx_n_s_flag, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__39);
-  __Pyx_GIVEREF(__pyx_tuple__39);
-  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_get_attribute, 561, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__41 = PyTuple_Pack(2, __pyx_n_s_flag, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__41);
+  __Pyx_GIVEREF(__pyx_tuple__41);
+  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_get_attribute, 576, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":572
+  /* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):
  */
-  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_n_s_path); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__41);
-  __Pyx_GIVEREF(__pyx_tuple__41);
-  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_load_library, 572, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_n_s_path); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__43);
+  __Pyx_GIVEREF(__pyx_tuple__43);
+  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_load_library, 587, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":580
+  /* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
  *     SDL_GL_UnloadLibrary()
  * 
  */
-  __pyx_codeobj__43 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_unload_library, 580, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_gl_unload_library, 595, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":583
+  /* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_active()
  */
-  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_active, 583, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_active, 598, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":588
+  /* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.iconify()
  */
-  __pyx_codeobj__45 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_iconify, 588, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__45)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__47 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_iconify, 603, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":594
+  /* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.toggle_fullscreen()
  */
-  __pyx_codeobj__46 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_toggle_fullscreen, 594, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__46)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_toggle_fullscreen, 609, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":600
+  /* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)
  */
-  __pyx_tuple__47 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__47);
-  __Pyx_GIVEREF(__pyx_tuple__47);
-  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma, 600, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__49 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__49);
+  __Pyx_GIVEREF(__pyx_tuple__49);
+  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma, 615, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":605
+  /* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)
  */
-  __pyx_tuple__49 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__49);
-  __Pyx_GIVEREF(__pyx_tuple__49);
-  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma_ramp, 605, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__51 = PyTuple_Pack(3, __pyx_n_s_red, __pyx_n_s_green, __pyx_n_s_blue); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__51);
+  __Pyx_GIVEREF(__pyx_tuple__51);
+  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_gamma_ramp, 620, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":610
+  /* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
  *     global default_icon
  * 
  */
-  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_n_s_surface); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__51);
-  __Pyx_GIVEREF(__pyx_tuple__51);
-  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_icon, 610, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_n_s_surface); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__53);
+  __Pyx_GIVEREF(__pyx_tuple__53);
+  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_icon, 625, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":618
+  /* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
  *     global default_title
  * 
  */
-  __pyx_tuple__53 = PyTuple_Pack(2, __pyx_n_s_title, __pyx_n_s_icontitle); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__53);
-  __Pyx_GIVEREF(__pyx_tuple__53);
-  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_caption, 618, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__55 = PyTuple_Pack(2, __pyx_n_s_title, __pyx_n_s_icontitle); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__55);
+  __Pyx_GIVEREF(__pyx_tuple__55);
+  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_set_caption, 633, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":626
+  /* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
  *     return default_title
  * 
  */
-  __pyx_codeobj__55 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_caption, 626, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__57 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_caption, 641, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":629
+  /* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_drawable_size()
  */
-  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_drawable_size, 629, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_drawable_size, 644, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":634
+  /* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:
  */
-  __pyx_tuple__57 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__57);
-  __Pyx_GIVEREF(__pyx_tuple__57);
-  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 634, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__59 = PyTuple_Pack(1, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__59);
+  __Pyx_GIVEREF(__pyx_tuple__59);
+  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(0, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_num_video_displays, 649, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":641
+  /* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
  *     cdef SDL_Rect rect
  *     rv = SDL_GetDisplayBounds(index, &rect)
  */
-  __pyx_tuple__59 = PyTuple_Pack(3, __pyx_n_s_index, __pyx_n_s_rect, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__59)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__59);
-  __Pyx_GIVEREF(__pyx_tuple__59);
-  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_display_bounds, 641, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__61 = PyTuple_Pack(3, __pyx_n_s_index, __pyx_n_s_rect, __pyx_n_s_rv); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__61);
+  __Pyx_GIVEREF(__pyx_tuple__61);
+  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_display_bounds, 656, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":647
+  /* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(hint, bytes):
  */
-  __pyx_tuple__61 = PyTuple_Pack(2, __pyx_n_s_hint, __pyx_n_s_value); if (unlikely(!__pyx_tuple__61)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_tuple__61);
-  __Pyx_GIVEREF(__pyx_tuple__61);
-  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_hint, 647, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__63 = PyTuple_Pack(2, __pyx_n_s_hint, __pyx_n_s_value); if (unlikely(!__pyx_tuple__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_tuple__63);
+  __Pyx_GIVEREF(__pyx_tuple__63);
+  __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_hint, 662, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":657
+  /* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
  *     return SDL_GetPlatform()
  * 
  */
-  __pyx_codeobj__63 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_platform, 657, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__63)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__65 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_tom_ab_pygame_sdl2_src_pyg, __pyx_n_s_get_platform, 672, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__65)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -11302,9 +11451,9 @@ PyMODINIT_FUNC PyInit_display(void)
   /*--- Function export code ---*/
   if (__Pyx_ExportFunction("PyWindow_AsWindow", (void (*)(void))__pyx_f_11pygame_sdl2_7display_PyWindow_AsWindow, "SDL_Window *(PyObject *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   /*--- Type init code ---*/
-  if (PyType_Ready(&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_11pygame_sdl2_7display_Window.tp_print = 0;
-  if (PyObject_SetAttrString(__pyx_m, "Window", (PyObject *)&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetAttrString(__pyx_m, "Window", (PyObject *)&__pyx_type_11pygame_sdl2_7display_Window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_type_11pygame_sdl2_7display_Window.tp_weaklistoffset == 0) __pyx_type_11pygame_sdl2_7display_Window.tp_weaklistoffset = offsetof(struct __pyx_obj_11pygame_sdl2_7display_Window, __weakref__);
   __pyx_ptype_11pygame_sdl2_7display_Window = &__pyx_type_11pygame_sdl2_7display_Window;
   /*--- Type import code ---*/
@@ -11574,7 +11723,7 @@ PyMODINIT_FUNC PyInit_display(void)
  * # The window that is used by the various module globals.
  * main_window = None             # <<<<<<<<<<<<<<
  * 
- * cdef class Window:
+ * # Have we shown the first window?
  */
   __Pyx_INCREF(Py_None);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_11pygame_sdl2_7display_main_window));
@@ -11583,16 +11732,37 @@ PyMODINIT_FUNC PyInit_display(void)
 
   /* "pygame_sdl2/display.pyx":95
  * 
+ * # Have we shown the first window?
+ * _shown_first_window = False             # <<<<<<<<<<<<<<
+ * 
+ * def _before_first_window():
+ */
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_shown_first_window, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "pygame_sdl2/display.pyx":97
+ * _shown_first_window = False
+ * 
+ * def _before_first_window():             # <<<<<<<<<<<<<<
+ *     global _shown_first_window
+ * 
+ */
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_9_before_first_window, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_before_first_window, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "pygame_sdl2/display.pyx":116
+ * 
  * cdef class Window:
  *     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  * 
  *         if not isinstance(title, bytes):
  */
-  __pyx_t_3 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -11604,45 +11774,45 @@ PyMODINIT_FUNC PyInit_display(void)
   __Pyx_GIVEREF(__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "pygame_sdl2/display.pyx":358
+  /* "pygame_sdl2/display.pyx":381
  * 
  * # The icon that's used for new windows.
  * default_icon = None             # <<<<<<<<<<<<<<
  * 
  * # The title that's used for new windows.
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_icon, Py_None) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":361
+  /* "pygame_sdl2/display.pyx":384
  * 
  * # The title that's used for new windows.
  * default_title = "pygame window"             # <<<<<<<<<<<<<<
  * 
  * # The default gl_swap_control
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_kp_u_pygame_window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_title, __pyx_kp_u_pygame_window) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":364
+  /* "pygame_sdl2/display.pyx":387
  * 
  * # The default gl_swap_control
  * default_swap_control = 1             # <<<<<<<<<<<<<<
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_swap_control, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_default_swap_control, __pyx_int_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "pygame_sdl2/display.pyx":366
+  /* "pygame_sdl2/display.pyx":389
  * default_swap_control = 1
  * 
  * def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):             # <<<<<<<<<<<<<<
  *     global main_window
  * 
  */
-  __pyx_t_6 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyInt_From_int(SDL_WINDOWPOS_UNDEFINED); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_6);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6);
@@ -11653,389 +11823,389 @@ PyMODINIT_FUNC PyInit_display(void)
   __pyx_k__9 = __pyx_t_3;
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_9set_mode, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_11set_mode, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_mode, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_mode, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":393
+  /* "pygame_sdl2/display.pyx":408
  *     return main_window.surface
  * 
  * def get_surface():             # <<<<<<<<<<<<<<
  *     if main_window is None:
  *         return None
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_11get_surface, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_13get_surface, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_surface, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_surface, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":399
+  /* "pygame_sdl2/display.pyx":414
  *     return main_window.get_surface()
  * 
  * def get_window():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the Window created by set_mode, or None if no such window
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_13get_window, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_15get_window, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_window, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 399; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_window, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 414; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":407
+  /* "pygame_sdl2/display.pyx":422
  *     return main_window
  * 
  * def flip():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.flip()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_15flip, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_17flip, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_flip, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_flip, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":411
+  /* "pygame_sdl2/display.pyx":426
  *         main_window.flip()
  * 
  * def update(rectangles=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         main_window.update(rectangles)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_17update, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_19update, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_update, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_update, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":415
+  /* "pygame_sdl2/display.pyx":430
  *         main_window.update(rectangles)
  * 
  * def get_driver():             # <<<<<<<<<<<<<<
  *     cdef const char *driver = SDL_GetCurrentVideoDriver()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_19get_driver, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_21get_driver, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_driver, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_driver, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":423
+  /* "pygame_sdl2/display.pyx":438
  *     return driver
  * 
  * class Info(object):             # <<<<<<<<<<<<<<
  * 
  *     def __init__(self):
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_builtin_object);
   __Pyx_GIVEREF(__pyx_builtin_object);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_builtin_object);
-  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_CalculateMetaclass(NULL, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_3, __pyx_n_s_Info, __pyx_n_s_Info, (PyObject *) NULL, __pyx_n_s_pygame_sdl2_display, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_Py3MetaclassPrepare(__pyx_t_7, __pyx_t_3, __pyx_n_s_Info, __pyx_n_s_Info, (PyObject *) NULL, __pyx_n_s_pygame_sdl2_display, (PyObject *) NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "pygame_sdl2/display.pyx":425
+  /* "pygame_sdl2/display.pyx":440
  * class Info(object):
  * 
  *     def __init__(self):             # <<<<<<<<<<<<<<
  *         cdef SDL_DisplayMode dm
  *         cdef SDL_PixelFormat *format
  */
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_1__init__, 0, __pyx_n_s_Info___init, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_1__init__, 0, __pyx_n_s_Info___init, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init_2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_init_2, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":484
+  /* "pygame_sdl2/display.pyx":499
  *         self.blit_sw_A = False
  * 
  *     def __repr__(self):             # <<<<<<<<<<<<<<
  *         return "<Info({!r})>".format(self.__dict__)
  * 
  */
-  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_3__repr__, 0, __pyx_n_s_Info___repr, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_CyFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_4Info_3__repr__, 0, __pyx_n_s_Info___repr, NULL, __pyx_n_s_pygame_sdl2_display, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_repr, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyObject_SetItem(__pyx_t_6, __pyx_n_s_repr, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "pygame_sdl2/display.pyx":423
+  /* "pygame_sdl2/display.pyx":438
  *     return driver
  * 
  * class Info(object):             # <<<<<<<<<<<<<<
  * 
  *     def __init__(self):
  */
-  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_Info, __pyx_t_3, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_Py3ClassCreate(__pyx_t_7, __pyx_n_s_Info, __pyx_t_3, __pyx_t_6, NULL, 0, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Info, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 423; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Info, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":488
+  /* "pygame_sdl2/display.pyx":503
  * 
  * 
  * def get_wm_info():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_wm_info()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_21get_wm_info, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_23get_wm_info, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_wm_info, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_wm_info, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":495
+  /* "pygame_sdl2/display.pyx":510
  * 
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     """
  *     Returns the number of video displays connected to the system.
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_23get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_25get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":508
+  /* "pygame_sdl2/display.pyx":523
  * 
  * 
  * def list_modes(depth=0, flags=0, display=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns a list of possible display modes for the display `display`.
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_25list_modes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_27list_modes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_modes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_list_modes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":533
+  /* "pygame_sdl2/display.pyx":548
  * 
  * 
  * def mode_ok(size, flags=0, depth=0):             # <<<<<<<<<<<<<<
  *     """
  *     Returns true if size is in the result of list_modes().
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_27mode_ok, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_29mode_ok, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mode_ok, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_mode_ok, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":540
+  /* "pygame_sdl2/display.pyx":555
  *     return tuple(size) in list_modes()
  * 
  * def gl_reset_attributes():             # <<<<<<<<<<<<<<
  *     SDL_GL_ResetAttributes()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_29gl_reset_attributes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_31gl_reset_attributes, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_reset_attributes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 540; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_reset_attributes, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":543
+  /* "pygame_sdl2/display.pyx":558
  *     SDL_GL_ResetAttributes()
  * 
  * def gl_set_attribute(flag, value):             # <<<<<<<<<<<<<<
  * 
  *     if flag == GL_SWAP_CONTROL:
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_31gl_set_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_33gl_set_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_set_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_set_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":561
+  /* "pygame_sdl2/display.pyx":576
  *         raise error()
  * 
  * def gl_get_attribute(flag):             # <<<<<<<<<<<<<<
  *     cdef int rv
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_33gl_get_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_35gl_get_attribute, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_get_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_get_attribute, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":572
+  /* "pygame_sdl2/display.pyx":587
  *     return rv
  * 
  * def gl_load_library(path):             # <<<<<<<<<<<<<<
  *     if path is None:
  *         if SDL_GL_LoadLibrary(NULL):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_35gl_load_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_37gl_load_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_load_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_load_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":580
+  /* "pygame_sdl2/display.pyx":595
  *             raise error()
  * 
  * def gl_unload_library():             # <<<<<<<<<<<<<<
  *     SDL_GL_UnloadLibrary()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_37gl_unload_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_39gl_unload_library, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_unload_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_gl_unload_library, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":583
+  /* "pygame_sdl2/display.pyx":598
  *     SDL_GL_UnloadLibrary()
  * 
  * def get_active():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_active()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_39get_active, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_41get_active, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_active, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 583; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_active, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":588
+  /* "pygame_sdl2/display.pyx":603
  *     return False
  * 
  * def iconify():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.iconify()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_41iconify, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_43iconify, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_iconify, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_iconify, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":594
+  /* "pygame_sdl2/display.pyx":609
  *     return False
  * 
  * def toggle_fullscreen():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.toggle_fullscreen()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_43toggle_fullscreen, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_45toggle_fullscreen, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_toggle_fullscreen, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_toggle_fullscreen, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":600
+  /* "pygame_sdl2/display.pyx":615
  *     return True
  * 
  * def set_gamma(red, green=None, blue=None):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma(red, green, blue)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_45set_gamma, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_47set_gamma, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":605
+  /* "pygame_sdl2/display.pyx":620
  *     return False
  * 
  * def set_gamma_ramp(red, green, blue):             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.set_gamma_ramp(red, green, blue)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_47set_gamma_ramp, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_49set_gamma_ramp, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma_ramp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_gamma_ramp, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":610
+  /* "pygame_sdl2/display.pyx":625
  *     return False
  * 
  * def set_icon(surface):             # <<<<<<<<<<<<<<
  *     global default_icon
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_49set_icon, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_51set_icon, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_icon, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_icon, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":618
+  /* "pygame_sdl2/display.pyx":633
  *         main_window.set_icon(default_icon)
  * 
  * def set_caption(title, icontitle = None):             # <<<<<<<<<<<<<<
  *     global default_title
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_51set_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_53set_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":626
+  /* "pygame_sdl2/display.pyx":641
  *         main_window.set_caption(default_title)
  * 
  * def get_caption():             # <<<<<<<<<<<<<<
  *     return default_title
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_53get_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_55get_caption, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_caption, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":629
+  /* "pygame_sdl2/display.pyx":644
  *     return default_title
  * 
  * def get_drawable_size():             # <<<<<<<<<<<<<<
  *     if main_window:
  *         return main_window.get_drawable_size()
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_55get_drawable_size, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_57get_drawable_size, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_drawable_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_drawable_size, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":634
+  /* "pygame_sdl2/display.pyx":649
  *     return None
  * 
  * def get_num_video_displays():             # <<<<<<<<<<<<<<
  *     rv = SDL_GetNumVideoDisplays()
  *     if rv < 0:
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_57get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_59get_num_video_displays, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_num_video_displays, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":641
+  /* "pygame_sdl2/display.pyx":656
  *     return rv
  * 
  * def get_display_bounds(index):             # <<<<<<<<<<<<<<
  *     cdef SDL_Rect rect
  *     rv = SDL_GetDisplayBounds(index, &rect)
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_59get_display_bounds, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_61get_display_bounds, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_display_bounds, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_display_bounds, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":647
+  /* "pygame_sdl2/display.pyx":662
  *     return (rect.x, rect.y, rect.w, rect.h)
  * 
  * def hint(hint, value):             # <<<<<<<<<<<<<<
  * 
  *     if not isinstance(hint, bytes):
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_61hint, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_63hint, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_hint, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 647; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_hint, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 662; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "pygame_sdl2/display.pyx":657
+  /* "pygame_sdl2/display.pyx":672
  *     SDL_SetHint(hint, value)
  * 
  * def get_platform():             # <<<<<<<<<<<<<<
  *     return SDL_GetPlatform()
  * 
  */
-  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_63get_platform, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyCFunction_NewEx(&__pyx_mdef_11pygame_sdl2_7display_65get_platform, NULL, __pyx_n_s_pygame_sdl2_display); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_platform, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 657; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_platform, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "pygame_sdl2/display.pyx":1
@@ -12185,8 +12355,12 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 }
 #else
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
-    PyObject* args = PyTuple_Pack(1, arg);
-    return (likely(args)) ? __Pyx_PyObject_Call(func, args, NULL) : NULL;
+    PyObject *result;
+    PyObject *args = PyTuple_Pack(1, arg);
+    if (unlikely(!args)) return NULL;
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
 }
 #endif
 
@@ -12396,6 +12570,110 @@ bad:
 }
 #endif
 
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    PyObject *empty_list = 0;
+    PyObject *module = 0;
+    PyObject *global_dict = 0;
+    PyObject *empty_dict = 0;
+    PyObject *list;
+    #if PY_VERSION_HEX < 0x03030000
+    PyObject *py_import;
+    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+    if (!py_import)
+        goto bad;
+    #endif
+    if (from_list)
+        list = from_list;
+    else {
+        empty_list = PyList_New(0);
+        if (!empty_list)
+            goto bad;
+        list = empty_list;
+    }
+    global_dict = PyModule_GetDict(__pyx_m);
+    if (!global_dict)
+        goto bad;
+    empty_dict = PyDict_New();
+    if (!empty_dict)
+        goto bad;
+    {
+        #if PY_MAJOR_VERSION >= 3
+        if (level == -1) {
+            if (strchr(__Pyx_MODULE_NAME, '.')) {
+                #if PY_VERSION_HEX < 0x03030000
+                PyObject *py_level = PyInt_FromLong(1);
+                if (!py_level)
+                    goto bad;
+                module = PyObject_CallFunctionObjArgs(py_import,
+                    name, global_dict, empty_dict, list, py_level, NULL);
+                Py_DECREF(py_level);
+                #else
+                module = PyImport_ImportModuleLevelObject(
+                    name, global_dict, empty_dict, list, 1);
+                #endif
+                if (!module) {
+                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
+                        goto bad;
+                    PyErr_Clear();
+                }
+            }
+            level = 0;
+        }
+        #endif
+        if (!module) {
+            #if PY_VERSION_HEX < 0x03030000
+            PyObject *py_level = PyInt_FromLong(level);
+            if (!py_level)
+                goto bad;
+            module = PyObject_CallFunctionObjArgs(py_import,
+                name, global_dict, empty_dict, list, py_level, NULL);
+            Py_DECREF(py_level);
+            #else
+            module = PyImport_ImportModuleLevelObject(
+                name, global_dict, empty_dict, list, level);
+            #endif
+        }
+    }
+bad:
+    #if PY_VERSION_HEX < 0x03030000
+    Py_XDECREF(py_import);
+    #endif
+    Py_XDECREF(empty_list);
+    Py_XDECREF(empty_dict);
+    return module;
+}
+
+static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyThreadState *tstate = PyThreadState_GET();
+    *type = tstate->exc_type;
+    *value = tstate->exc_value;
+    *tb = tstate->exc_traceback;
+    Py_XINCREF(*type);
+    Py_XINCREF(*value);
+    Py_XINCREF(*tb);
+#else
+    PyErr_GetExcInfo(type, value, tb);
+#endif
+}
+static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
+    PyThreadState *tstate = PyThreadState_GET();
+    tmp_type = tstate->exc_type;
+    tmp_value = tstate->exc_value;
+    tmp_tb = tstate->exc_traceback;
+    tstate->exc_type = type;
+    tstate->exc_value = value;
+    tstate->exc_traceback = tb;
+    Py_XDECREF(tmp_type);
+    Py_XDECREF(tmp_value);
+    Py_XDECREF(tmp_tb);
+#else
+    PyErr_SetExcInfo(type, value, tb);
+#endif
+}
+
 static void __Pyx_RaiseDoubleKeywordsError(
     const char* func_name,
     PyObject* kw_name)
@@ -12616,37 +12894,6 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
     return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
 }
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
-    *type = tstate->exc_type;
-    *value = tstate->exc_value;
-    *tb = tstate->exc_traceback;
-    Py_XINCREF(*type);
-    Py_XINCREF(*value);
-    Py_XINCREF(*tb);
-#else
-    PyErr_GetExcInfo(type, value, tb);
-#endif
-}
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
-    tmp_type = tstate->exc_type;
-    tmp_value = tstate->exc_value;
-    tmp_tb = tstate->exc_traceback;
-    tstate->exc_type = type;
-    tstate->exc_value = value;
-    tstate->exc_traceback = tb;
-    Py_XDECREF(tmp_type);
-    Py_XDECREF(tmp_value);
-    Py_XDECREF(tmp_tb);
-#else
-    PyErr_SetExcInfo(type, value, tb);
-#endif
-}
-
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
     PyObject *local_type, *local_value, *local_tb;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -12817,79 +13064,6 @@ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
     return 0;
 }
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
-    PyObject *empty_list = 0;
-    PyObject *module = 0;
-    PyObject *global_dict = 0;
-    PyObject *empty_dict = 0;
-    PyObject *list;
-    #if PY_VERSION_HEX < 0x03030000
-    PyObject *py_import;
-    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
-    if (!py_import)
-        goto bad;
-    #endif
-    if (from_list)
-        list = from_list;
-    else {
-        empty_list = PyList_New(0);
-        if (!empty_list)
-            goto bad;
-        list = empty_list;
-    }
-    global_dict = PyModule_GetDict(__pyx_m);
-    if (!global_dict)
-        goto bad;
-    empty_dict = PyDict_New();
-    if (!empty_dict)
-        goto bad;
-    {
-        #if PY_MAJOR_VERSION >= 3
-        if (level == -1) {
-            if (strchr(__Pyx_MODULE_NAME, '.')) {
-                #if PY_VERSION_HEX < 0x03030000
-                PyObject *py_level = PyInt_FromLong(1);
-                if (!py_level)
-                    goto bad;
-                module = PyObject_CallFunctionObjArgs(py_import,
-                    name, global_dict, empty_dict, list, py_level, NULL);
-                Py_DECREF(py_level);
-                #else
-                module = PyImport_ImportModuleLevelObject(
-                    name, global_dict, empty_dict, list, 1);
-                #endif
-                if (!module) {
-                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
-                        goto bad;
-                    PyErr_Clear();
-                }
-            }
-            level = 0;
-        }
-        #endif
-        if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
-            PyObject *py_level = PyInt_FromLong(level);
-            if (!py_level)
-                goto bad;
-            module = PyObject_CallFunctionObjArgs(py_import,
-                name, global_dict, empty_dict, list, py_level, NULL);
-            Py_DECREF(py_level);
-            #else
-            module = PyImport_ImportModuleLevelObject(
-                name, global_dict, empty_dict, list, level);
-            #endif
-        }
-    }
-bad:
-    #if PY_VERSION_HEX < 0x03030000
-    Py_XDECREF(py_import);
-    #endif
-    Py_XDECREF(empty_list);
-    Py_XDECREF(empty_dict);
-    return module;
-}
-
 static void* __Pyx_GetVtable(PyObject *dict) {
     void* ptr;
     PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
@@ -13915,7 +14089,7 @@ static CYTHON_INLINE uint32_t __Pyx_PyInt_As_uint32_t(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (uint32_t) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(uint32_t, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(uint32_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(uint32_t,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(uint32_t) - 1 > 1 * PyLong_SHIFT) {
@@ -14151,7 +14325,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (int) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
@@ -14361,7 +14535,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (long) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
@@ -14545,7 +14719,7 @@ static CYTHON_INLINE uint16_t __Pyx_PyInt_As_uint16_t(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (uint16_t) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(uint16_t, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(uint16_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(uint16_t,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(uint16_t) - 1 > 1 * PyLong_SHIFT) {
@@ -14755,7 +14929,7 @@ static CYTHON_INLINE SDL_GLattr __Pyx_PyInt_As_SDL_GLattr(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (SDL_GLattr) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(SDL_GLattr, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(SDL_GLattr, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(SDL_GLattr,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(SDL_GLattr) - 1 > 1 * PyLong_SHIFT) {
diff --git a/gen3/pygame_sdl2.rwobject.c b/gen3/pygame_sdl2.rwobject.c
index 5c05926..a34fc2c 100644
--- a/gen3/pygame_sdl2.rwobject.c
+++ b/gen3/pygame_sdl2.rwobject.c
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.23.3 */
+/* Generated by Cython 0.24 */
 
 #define PY_SSIZE_T_CLEAN
 #include "Python.h"
@@ -7,10 +7,10 @@
 #elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03020000)
     #error Cython requires Python 2.6+ or Python 3.2+.
 #else
-#define CYTHON_ABI "0_23_3"
+#define CYTHON_ABI "0_24"
 #include <stddef.h>
 #ifndef offsetof
-#define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #endif
 #if !defined(WIN32) && !defined(MS_WINDOWS)
   #ifndef __stdcall
@@ -36,17 +36,23 @@
   #define Py_HUGE_VAL HUGE_VAL
 #endif
 #ifdef PYPY_VERSION
-#define CYTHON_COMPILING_IN_PYPY 1
-#define CYTHON_COMPILING_IN_CPYTHON 0
+  #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_CPYTHON 0
 #else
-#define CYTHON_COMPILING_IN_PYPY 0
-#define CYTHON_COMPILING_IN_CPYTHON 1
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_CPYTHON 1
 #endif
 #if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
-#define CYTHON_USE_PYLONG_INTERNALS 1
+  #define CYTHON_USE_PYLONG_INTERNALS 1
+#endif
+#if CYTHON_USE_PYLONG_INTERNALS
+  #include "longintrepr.h"
+  #undef SHIFT
+  #undef BASE
+  #undef MASK
 #endif
 #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
-#define Py_OptimizeFlag 0
+  #define Py_OptimizeFlag 0
 #endif
 #define __PYX_BUILD_PY_SSIZE_T "n"
 #define CYTHON_FORMAT_SSIZE_T "z"
@@ -82,6 +88,7 @@
   #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
   #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
   #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
 #else
   #define CYTHON_PEP393_ENABLED 0
   #define __Pyx_PyUnicode_READY(op)       (0)
@@ -90,6 +97,7 @@
   #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
   #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
   #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
 #endif
 #if CYTHON_COMPILING_IN_PYPY
   #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
@@ -102,6 +110,14 @@
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
   #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
 #endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
+  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+  #define PyObject_Malloc(s)   PyMem_Malloc(s)
+  #define PyObject_Free(p)     PyMem_Free(p)
+  #define PyObject_Realloc(p)  PyMem_Realloc(p)
+#endif
 #define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
 #if PY_MAJOR_VERSION >= 3
@@ -109,6 +125,9 @@
 #else
   #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
 #endif
+#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+  #define PyObject_ASCII(o)            PyObject_Repr(o)
+#endif
 #if PY_MAJOR_VERSION >= 3
   #define PyBaseString_Type            PyUnicode_Type
   #define PyStringObject               PyUnicodeObject
@@ -189,7 +208,7 @@ typedef struct {
     #define CYTHON_RESTRICT
   #endif
 #endif
-#define __Pyx_void_to_None(void_result) (void_result, Py_INCREF(Py_None), Py_None)
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
 
 #ifndef CYTHON_INLINE
   #if defined(__GNUC__)
@@ -218,6 +237,11 @@ static CYTHON_INLINE float __PYX_NAN() {
 #endif
 
 
+#define __PYX_ERR(f_index, lineno, Ln_error) \
+{ \
+  __pyx_filename = __pyx_f[f_index]; __pyx_lineno = lineno; __pyx_clineno = __LINE__; goto Ln_error; \
+}
+
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
   #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
@@ -270,7 +294,7 @@ static CYTHON_INLINE float __PYX_NAN() {
 #  define CYTHON_NCP_UNUSED CYTHON_UNUSED
 # endif
 #endif
-typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
+typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
                 const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
 
 #define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
@@ -297,10 +321,10 @@ typedef struct {PyObject **p; char *s; const Py_ssize_t n; const char* encoding;
     #define __Pyx_sst_abs(value) abs(value)
 #elif SIZEOF_LONG >= SIZEOF_SIZE_T
     #define __Pyx_sst_abs(value) labs(value)
-#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
-    #define __Pyx_sst_abs(value) llabs(value)
 #elif defined (_MSC_VER) && defined (_M_X64)
     #define __Pyx_sst_abs(value) _abs64(value)
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+    #define __Pyx_sst_abs(value) llabs(value)
 #elif defined (__GNUC__)
     #define __Pyx_sst_abs(value) __builtin_llabs(value)
 #else
@@ -344,7 +368,7 @@ static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
 #define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
 #define __Pyx_PyBool_FromLong(b) ((b) ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False))
 static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
-static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
 static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
 static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -353,6 +377,12 @@ static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
 #endif
 #define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+#else
+#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+#endif
+#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
 #if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
 static int __Pyx_sys_getdefaultencoding_not_ascii;
 static int __Pyx_init_sys_getdefaultencoding_params(void) {
@@ -443,6 +473,7 @@ static PyObject *__pyx_d;
 static PyObject *__pyx_b;
 static PyObject *__pyx_empty_tuple;
 static PyObject *__pyx_empty_bytes;
+static PyObject *__pyx_empty_unicode;
 static int __pyx_lineno;
 static int __pyx_clineno = 0;
 static const char * __pyx_cfilenm= __FILE__;
@@ -484,6 +515,7 @@ struct __pyx_t_11pygame_sdl2_8rwobject_SubFile {
 };
 
 /* --- Runtime support code (head) --- */
+/* Refnanny.proto */
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -546,6 +578,7 @@ struct __pyx_t_11pygame_sdl2_8rwobject_SubFile {
 #define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
 #define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
 
+/* PyObjectGetAttrStr.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
     PyTypeObject* tp = Py_TYPE(obj);
@@ -561,59 +594,122 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 #define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
 #endif
 
+/* GetBuiltinName.proto */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
+/* PyObjectCall.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
 #else
 #define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
 #endif
 
+/* ForceInitThreads.proto */
 #ifndef __PYX_FORCE_INIT_THREADS
   #define __PYX_FORCE_INIT_THREADS 0
 #endif
 
+/* PyObjectCallMethO.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
 #endif
 
+/* PyObjectCallOneArg.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
 
+/* PyObjectCallNoArg.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #else
 #define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
 #endif
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb);
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb);
+/* PyThreadStateGet.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
+#define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
+#else
+#define __Pyx_PyThreadState_declare
+#define __Pyx_PyThreadState_assign
+#endif
+
+/* SaveResetException.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+#else
+#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
+#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
+#endif
 
+/* GetException.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+#endif
 
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb);
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb);
+/* PyErrFetchRestore.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
+#endif
 
+/* WriteUnraisableException.proto */
 static void __Pyx_WriteUnraisable(const char *name, int clineno,
                                   int lineno, const char *filename,
                                   int full_traceback, int nogil);
 
+/* PyErrExceptionMatches.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
+#endif
+
+/* SwapException.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
 static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
+#endif
 
+/* GetModuleGlobalName.proto */
 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name);
 
+/* IncludeStringH.proto */
 #include <string.h>
 
+/* BytesEquals.proto */
 static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
 
+/* RaiseException.proto */
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
+/* Import.proto */
 static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
 
+/* ImportFrom.proto */
 static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
 
+/* CodeObjectCache.proto */
 typedef struct {
-    int code_line;
     PyCodeObject* code_object;
+    int code_line;
 } __Pyx_CodeObjectCacheEntry;
 struct __Pyx_CodeObjectCache {
     int count;
@@ -625,25 +721,35 @@ static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int co
 static PyCodeObject *__pyx_find_code_object(int code_line);
 static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
 
+/* AddTraceback.proto */
 static void __Pyx_AddTraceback(const char *funcname, int c_line,
                                int py_line, const char *filename);
 
-static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *);
-
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value);
 
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
 
+/* CIntFromPy.proto */
+static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 
+/* CIntFromPy.proto */
 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
+/* CIntFromPy.proto */
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
 
+/* CheckBinaryVersion.proto */
 static int __Pyx_check_binary_version(void);
 
+/* FunctionExport.proto */
 static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig);
 
+/* PyIdentifierFromString.proto */
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_PyIdentifier_FromString(s) PyString_FromString(s)
@@ -652,10 +758,13 @@ static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *s
 #endif
 #endif
 
+/* ModuleImport.proto */
 static PyObject *__Pyx_ImportModule(const char *name);
 
+/* TypeImport.proto */
 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name, size_t size, int strict);
 
+/* InitStrings.proto */
 static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
 
 
@@ -702,37 +811,36 @@ int __pyx_module_is_main_pygame_sdl2__rwobject = 0;
 static PyObject *__pyx_builtin_Exception;
 static PyObject *__pyx_builtin_IOError;
 static PyObject *__pyx_builtin_AttributeError;
-static char __pyx_k_s[] = "%s";
-static char __pyx_k_rb[] = "rb";
-static char __pyx_k_sys[] = "sys";
-static char __pyx_k_base[] = "base";
-static char __pyx_k_main[] = "__main__";
-static char __pyx_k_name[] = "name";
-static char __pyx_k_read[] = "read";
-static char __pyx_k_seek[] = "seek";
-static char __pyx_k_tell[] = "tell";
-static char __pyx_k_test[] = "__test__";
-static char __pyx_k_ascii[] = "ascii";
-static char __pyx_k_bytes[] = "bytes_";
-static char __pyx_k_close[] = "close";
-static char __pyx_k_utf_8[] = "utf-8";
-static char __pyx_k_write[] = "write";
-static char __pyx_k_decode[] = "decode";
-static char __pyx_k_encode[] = "encode";
-static char __pyx_k_format[] = "format";
-static char __pyx_k_import[] = "__import__";
-static char __pyx_k_length[] = "length";
-static char __pyx_k_IOError[] = "IOError";
-static char __pyx_k_unicode[] = "unicode_";
-static char __pyx_k_Exception[] = "Exception";
-static char __pyx_k_file_type[] = "file_type";
-static char __pyx_k_fsencoding[] = "fsencoding";
-static char __pyx_k_AttributeError[] = "AttributeError";
-static char __pyx_k_Could_not_open_r[] = "Could not open {!r}: {}";
-static char __pyx_k_Could_not_open_r_2[] = "Could not open {!r}.";
-static char __pyx_k_pygame_sdl2_compat[] = "pygame_sdl2.compat";
-static char __pyx_k_getfilesystemencoding[] = "getfilesystemencoding";
-static char __pyx_k_r_is_not_a_filename_or_file_lik[] = "{!r} is not a filename or file-like object.";
+static const char __pyx_k_rb[] = "rb";
+static const char __pyx_k_sys[] = "sys";
+static const char __pyx_k_base[] = "base";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_name[] = "name";
+static const char __pyx_k_read[] = "read";
+static const char __pyx_k_seek[] = "seek";
+static const char __pyx_k_tell[] = "tell";
+static const char __pyx_k_test[] = "__test__";
+static const char __pyx_k_ascii[] = "ascii";
+static const char __pyx_k_bytes[] = "bytes_";
+static const char __pyx_k_close[] = "close";
+static const char __pyx_k_utf_8[] = "utf-8";
+static const char __pyx_k_write[] = "write";
+static const char __pyx_k_decode[] = "decode";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_format[] = "format";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_length[] = "length";
+static const char __pyx_k_IOError[] = "IOError";
+static const char __pyx_k_unicode[] = "unicode_";
+static const char __pyx_k_Exception[] = "Exception";
+static const char __pyx_k_file_type[] = "file_type";
+static const char __pyx_k_fsencoding[] = "fsencoding";
+static const char __pyx_k_AttributeError[] = "AttributeError";
+static const char __pyx_k_Could_not_open_r[] = "Could not open {!r}: {}";
+static const char __pyx_k_Could_not_open_r_2[] = "Could not open {!r}.";
+static const char __pyx_k_pygame_sdl2_compat[] = "pygame_sdl2.compat";
+static const char __pyx_k_getfilesystemencoding[] = "getfilesystemencoding";
+static const char __pyx_k_r_is_not_a_filename_or_file_lik[] = "{!r} is not a filename or file-like object.";
 static PyObject *__pyx_n_s_AttributeError;
 static PyObject *__pyx_kp_u_Could_not_open_r;
 static PyObject *__pyx_kp_u_Could_not_open_r_2;
@@ -788,9 +896,6 @@ static PyObject *__pyx_f_11pygame_sdl2_8rwobject_set_error(PyObject *__pyx_v_e)
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   char *__pyx_t_3;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("set_error", 0);
   __Pyx_INCREF(__pyx_v_e);
 
@@ -801,12 +906,12 @@ static PyObject *__pyx_f_11pygame_sdl2_8rwobject_set_error(PyObject *__pyx_v_e)
  *     msg = <char *> e
  *     SDL_SetError("%s", msg)
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_e);
   __Pyx_GIVEREF(__pyx_v_e);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_e);
-  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyUnicode_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyUnicode_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF_SET(__pyx_v_e, __pyx_t_2);
@@ -819,7 +924,7 @@ static PyObject *__pyx_f_11pygame_sdl2_8rwobject_set_error(PyObject *__pyx_v_e)
  *     SDL_SetError("%s", msg)
  * 
  */
-  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_v_e); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_AsString(__pyx_v_e); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 59, __pyx_L1_error)
   __pyx_v_msg = ((char *)__pyx_t_3);
 
   /* "pygame_sdl2/rwobject.pyx":60
@@ -829,7 +934,7 @@ static PyObject *__pyx_f_11pygame_sdl2_8rwobject_set_error(PyObject *__pyx_v_e)
  * 
  * cdef Sint64 python_size(SDL_RWops *context) with gil:
  */
-  SDL_SetError(__pyx_k_s, __pyx_v_msg);
+  SDL_SetError(((char const *)"%s"), __pyx_v_msg);
 
   /* "pygame_sdl2/rwobject.pyx":56
  * 
@@ -877,9 +982,6 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
   Py_ssize_t __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   Sint64 __pyx_t_9;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -905,6 +1007,8 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  *         f.seek(0, 2)
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_2);
     __Pyx_XGOTREF(__pyx_t_3);
@@ -918,7 +1022,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  *         f.seek(0, 2)
  *         rv = f.tell()
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_tell); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_tell); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 66, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -931,10 +1035,10 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L3_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L3_error)
       }
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -948,9 +1052,9 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  *         rv = f.tell()
  *         f.seek(cur, 0)
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_seek); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_seek); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 67, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -962,7 +1066,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  *         f.seek(cur, 0)
  *     except:
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_tell); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_tell); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -975,10 +1079,10 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 68, __pyx_L3_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 68; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 68, __pyx_L3_error)
       }
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -992,7 +1096,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  *     except:
  *         return -1
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_seek); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_seek); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 69, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_1);
       __pyx_t_6 = NULL;
       __pyx_t_7 = 0;
@@ -1006,7 +1110,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
           __pyx_t_7 = 1;
         }
       }
-      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 69, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_8);
       if (__pyx_t_6) {
         __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
@@ -1017,7 +1121,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
       __Pyx_INCREF(__pyx_int_0);
       __Pyx_GIVEREF(__pyx_int_0);
       PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_int_0);
-      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 69, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -1036,6 +1140,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L10_try_end;
     __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -1050,7 +1155,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  */
     /*except:*/ {
       __Pyx_AddTraceback("pygame_sdl2.rwobject.python_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 70; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_1, &__pyx_t_8) < 0) __PYX_ERR(0, 70, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_8);
@@ -1077,12 +1182,14 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  *         cur = f.tell()
  *         f.seek(0, 2)
  */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
     goto __pyx_L1_error;
     __pyx_L6_except_return:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
@@ -1098,7 +1205,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_size(SDL_RWops *__pyx_v_con
  * 
  * cdef Sint64 python_seek(SDL_RWops *context, Sint64 seek, int whence) with gil:
  */
-  __pyx_t_9 = __Pyx_PyInt_As_int64_t(__pyx_v_rv); if (unlikely((__pyx_t_9 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 73; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyInt_As_int64_t(__pyx_v_rv); if (unlikely((__pyx_t_9 == (Sint64)-1) && PyErr_Occurred())) __PYX_ERR(0, 73, __pyx_L1_error)
   __pyx_r = __pyx_t_9;
   goto __pyx_L0;
 
@@ -1163,9 +1270,6 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
   PyObject *__pyx_t_18 = NULL;
   PyObject *__pyx_t_19 = NULL;
   Sint64 __pyx_t_20;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -1191,6 +1295,8 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  *         rv = f.tell()
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_2);
     __Pyx_XGOTREF(__pyx_t_3);
@@ -1204,11 +1310,11 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  *         rv = f.tell()
  *     except Exception as e:
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_seek); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_seek); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 79, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = __Pyx_PyInt_From_int64_t(__pyx_v_seek); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_6 = __Pyx_PyInt_From_int64_t(__pyx_v_seek); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 79, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_whence); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_7 = __Pyx_PyInt_From_int(__pyx_v_whence); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 79, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_8 = NULL;
       __pyx_t_9 = 0;
@@ -1222,7 +1328,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
           __pyx_t_9 = 1;
         }
       }
-      __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 79, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_10);
       if (__pyx_t_8) {
         __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_8); __pyx_t_8 = NULL;
@@ -1233,7 +1339,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
       PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_7);
       __pyx_t_6 = 0;
       __pyx_t_7 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 79, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -1246,7 +1352,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  *     except Exception as e:
  *         set_error(e)
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_tell); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_tell); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 80, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_10 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -1259,10 +1365,10 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
         }
       }
       if (__pyx_t_10) {
-        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_10); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L3_error)
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       } else {
-        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 80, __pyx_L3_error)
       }
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -1282,6 +1388,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L10_try_end;
     __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -1296,10 +1403,10 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  *         set_error(e)
  *         return -1
  */
-    __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_Exception);
+    __pyx_t_11 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_Exception);
     if (__pyx_t_11) {
       __Pyx_AddTraceback("pygame_sdl2.rwobject.python_seek", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_10) < 0) __PYX_ERR(0, 81, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_10);
@@ -1314,7 +1421,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  *         return -1
  * 
  */
-        __pyx_t_7 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 82; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
+        __pyx_t_7 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 82, __pyx_L16_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
@@ -1341,8 +1448,10 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  */
       /*finally:*/ {
         /*exception exit:*/{
+          __Pyx_PyThreadState_declare
           __pyx_L16_error:;
           __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
+          __Pyx_PyThreadState_assign
           __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
           __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -1359,6 +1468,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
             __Pyx_DECREF(__pyx_v_e);
             __pyx_v_e = NULL;
           }
+          __Pyx_PyThreadState_assign
           if (PY_MAJOR_VERSION >= 3) {
             __Pyx_XGIVEREF(__pyx_t_17);
             __Pyx_XGIVEREF(__pyx_t_18);
@@ -1392,12 +1502,14 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  *         f.seek(seek, whence)
  *         rv = f.tell()
  */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
     goto __pyx_L1_error;
     __pyx_L6_except_return:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
@@ -1413,7 +1525,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_python_seek(SDL_RWops *__pyx_v_con
  * 
  * cdef size_t python_read(SDL_RWops *context, void *ptr, size_t size, size_t maxnum) with gil:
  */
-  __pyx_t_20 = __Pyx_PyInt_As_int64_t(__pyx_v_rv); if (unlikely((__pyx_t_20 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_20 = __Pyx_PyInt_As_int64_t(__pyx_v_rv); if (unlikely((__pyx_t_20 == (Sint64)-1) && PyErr_Occurred())) __PYX_ERR(0, 85, __pyx_L1_error)
   __pyx_r = __pyx_t_20;
   goto __pyx_L0;
 
@@ -1480,9 +1592,6 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
   size_t __pyx_t_18;
   char *__pyx_t_19;
   Py_ssize_t __pyx_t_20;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -1508,6 +1617,8 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  *     except Exception as e:
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_2);
     __Pyx_XGOTREF(__pyx_t_3);
@@ -1521,9 +1632,9 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  *     except Exception as e:
  *         set_error(e)
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 91, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = __Pyx_PyInt_FromSize_t((__pyx_v_size * __pyx_v_maxnum)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_6 = __Pyx_PyInt_FromSize_t((__pyx_v_size * __pyx_v_maxnum)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 91, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_7 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -1536,17 +1647,17 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
         }
       }
       if (!__pyx_t_7) {
-        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L3_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_GOTREF(__pyx_t_1);
       } else {
-        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 91, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
         __Pyx_GIVEREF(__pyx_t_6);
         PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_6);
         __pyx_t_6 = 0;
-        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 91, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       }
@@ -1567,6 +1678,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L10_try_end;
     __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
@@ -1580,10 +1692,10 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  *         set_error(e)
  *         return -1
  */
-    __pyx_t_9 = PyErr_ExceptionMatches(__pyx_builtin_Exception);
+    __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_Exception);
     if (__pyx_t_9) {
       __Pyx_AddTraceback("pygame_sdl2.rwobject.python_read", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_8) < 0) __PYX_ERR(0, 92, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_8);
@@ -1598,7 +1710,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  *         return -1
  * 
  */
-        __pyx_t_6 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
+        __pyx_t_6 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 93, __pyx_L16_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
@@ -1625,8 +1737,10 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  */
       /*finally:*/ {
         /*exception exit:*/{
+          __Pyx_PyThreadState_declare
           __pyx_L16_error:;
           __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
+          __Pyx_PyThreadState_assign
           __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
           __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
           if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
@@ -1642,6 +1756,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
             __Pyx_DECREF(__pyx_v_e);
             __pyx_v_e = NULL;
           }
+          __Pyx_PyThreadState_assign
           if (PY_MAJOR_VERSION >= 3) {
             __Pyx_XGIVEREF(__pyx_t_15);
             __Pyx_XGIVEREF(__pyx_t_16);
@@ -1675,12 +1790,14 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  *         data = f.read(size * maxnum)
  *     except Exception as e:
  */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
     goto __pyx_L1_error;
     __pyx_L6_except_return:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
@@ -1696,8 +1813,8 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  *     return len(data)
  * 
  */
-  __pyx_t_19 = __Pyx_PyObject_AsString(__pyx_v_data); if (unlikely((!__pyx_t_19) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_20 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_20 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_19 = __Pyx_PyObject_AsString(__pyx_v_data); if (unlikely((!__pyx_t_19) && PyErr_Occurred())) __PYX_ERR(0, 96, __pyx_L1_error)
+  __pyx_t_20 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 96, __pyx_L1_error)
   memcpy(__pyx_v_ptr, ((void *)((char *)__pyx_t_19)), __pyx_t_20);
 
   /* "pygame_sdl2/rwobject.pyx":97
@@ -1707,7 +1824,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_read(SDL_RWops *__pyx_v_con
  * 
  * cdef size_t python_write(SDL_RWops *context, const void *ptr, size_t size, size_t maxnum) with gil:
  */
-  __pyx_t_20 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_20 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_20 = PyObject_Length(__pyx_v_data); if (unlikely(__pyx_t_20 == -1)) __PYX_ERR(0, 97, __pyx_L1_error)
   __pyx_r = __pyx_t_20;
   goto __pyx_L0;
 
@@ -1771,9 +1888,6 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
   PyObject *__pyx_t_16 = NULL;
   size_t __pyx_t_17;
   Py_ssize_t __pyx_t_18;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -1798,7 +1912,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  * 
  *     try:
  */
-  __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(((char *)__pyx_v_ptr) + 0, (__pyx_v_size * __pyx_v_maxnum) - 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(((char *)__pyx_v_ptr) + 0, (__pyx_v_size * __pyx_v_maxnum) - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_data = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -1811,6 +1925,8 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  *     except Exception as e:
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_2);
     __Pyx_XGOTREF(__pyx_t_3);
@@ -1824,7 +1940,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  *     except Exception as e:
  *         set_error(e)
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_write); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 104, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -1837,16 +1953,16 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
         }
       }
       if (!__pyx_t_6) {
-        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_data); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_1);
       } else {
-        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 104, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
         __Pyx_INCREF(__pyx_v_data);
         __Pyx_GIVEREF(__pyx_v_data);
         PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_data);
-        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 104, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       }
@@ -1866,6 +1982,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L10_try_end;
     __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -1878,10 +1995,10 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  *         set_error(e)
  *         return -1
  */
-    __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_Exception);
+    __pyx_t_8 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_Exception);
     if (__pyx_t_8) {
       __Pyx_AddTraceback("pygame_sdl2.rwobject.python_write", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_7) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_7) < 0) __PYX_ERR(0, 105, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_7);
@@ -1896,7 +2013,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  *         return -1
  * 
  */
-        __pyx_t_6 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
+        __pyx_t_6 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 106, __pyx_L16_error)
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
@@ -1923,8 +2040,10 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  */
       /*finally:*/ {
         /*exception exit:*/{
+          __Pyx_PyThreadState_declare
           __pyx_L16_error:;
           __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
+          __Pyx_PyThreadState_assign
           __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
           if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
           if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
@@ -1939,6 +2058,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
             __Pyx_DECREF(__pyx_v_e);
             __pyx_v_e = NULL;
           }
+          __Pyx_PyThreadState_assign
           if (PY_MAJOR_VERSION >= 3) {
             __Pyx_XGIVEREF(__pyx_t_14);
             __Pyx_XGIVEREF(__pyx_t_15);
@@ -1972,12 +2092,14 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  *         f.write(data)
  *     except Exception as e:
  */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
     goto __pyx_L1_error;
     __pyx_L6_except_return:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
@@ -1993,7 +2115,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_python_write(SDL_RWops *__pyx_v_co
  * 
  * cdef int python_close(SDL_RWops *context) with gil:
  */
-  __pyx_t_18 = PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_18 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_18 = PyBytes_GET_SIZE(__pyx_v_data); if (unlikely(__pyx_t_18 == -1)) __PYX_ERR(0, 109, __pyx_L1_error)
   __pyx_r = __pyx_t_18;
   goto __pyx_L0;
 
@@ -2053,9 +2175,6 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
   PyObject *__pyx_t_14 = NULL;
   PyObject *__pyx_t_15 = NULL;
   PyObject *__pyx_t_16 = NULL;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   #ifdef WITH_THREAD
   PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
   #endif
@@ -2081,6 +2200,8 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
  *     except Exception as e:
  */
   {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
     __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
     __Pyx_XGOTREF(__pyx_t_2);
     __Pyx_XGOTREF(__pyx_t_3);
@@ -2094,7 +2215,7 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
  *     except Exception as e:
  *         set_error(e)
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 115, __pyx_L3_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_6 = NULL;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
@@ -2107,10 +2228,10 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
         }
       }
       if (__pyx_t_6) {
-        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L3_error)
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       } else {
-        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 115, __pyx_L3_error)
       }
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -2129,6 +2250,7 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L10_try_end;
     __pyx_L3_error:;
+    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -2140,10 +2262,10 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
  *         set_error(e)
  *         return -1
  */
-    __pyx_t_7 = PyErr_ExceptionMatches(__pyx_builtin_Exception);
+    __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_Exception);
     if (__pyx_t_7) {
       __Pyx_AddTraceback("pygame_sdl2.rwobject.python_close", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6) < 0) __PYX_ERR(0, 116, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_6);
@@ -2158,7 +2280,7 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
  *         return -1
  * 
  */
-        __pyx_t_8 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 117; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
+        __pyx_t_8 = __pyx_f_11pygame_sdl2_8rwobject_set_error(__pyx_v_e); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 117, __pyx_L16_error)
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
@@ -2185,8 +2307,10 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
  */
       /*finally:*/ {
         /*exception exit:*/{
+          __Pyx_PyThreadState_declare
           __pyx_L16_error:;
           __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
+          __Pyx_PyThreadState_assign
           __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
           if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
           if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
@@ -2201,6 +2325,7 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
             __Pyx_DECREF(__pyx_v_e);
             __pyx_v_e = NULL;
           }
+          __Pyx_PyThreadState_assign
           if (PY_MAJOR_VERSION >= 3) {
             __Pyx_XGIVEREF(__pyx_t_14);
             __Pyx_XGIVEREF(__pyx_t_15);
@@ -2234,12 +2359,14 @@ static int __pyx_f_11pygame_sdl2_8rwobject_python_close(SDL_RWops *__pyx_v_conte
  *         f.close()
  *     except Exception as e:
  */
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
     goto __pyx_L1_error;
     __pyx_L6_except_return:;
+    __Pyx_PyThreadState_assign
     __Pyx_XGIVEREF(__pyx_t_2);
     __Pyx_XGIVEREF(__pyx_t_3);
     __Pyx_XGIVEREF(__pyx_t_4);
@@ -2409,7 +2536,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
  *     elif whence == RW_SEEK_CUR:
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base             # <<<<<<<<<<<<<<
  *     elif whence == RW_SEEK_END:
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  */
     __pyx_v_sf->tell = (SDL_RWseek(__pyx_v_sf->rw, __pyx_v_seek, RW_SEEK_CUR) - __pyx_v_sf->base);
 
@@ -2426,7 +2553,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
  *     elif whence == RW_SEEK_CUR:
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base
  *     elif whence == RW_SEEK_END:             # <<<<<<<<<<<<<<
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  * 
  */
     case RW_SEEK_END:
@@ -2434,17 +2561,17 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
     /* "pygame_sdl2/rwobject.pyx":142
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base
  *     elif whence == RW_SEEK_END:
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base             # <<<<<<<<<<<<<<
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base             # <<<<<<<<<<<<<<
  * 
  *     return sf.tell
  */
-    __pyx_v_sf->tell = (SDL_RWseek(__pyx_v_sf->rw, ((__pyx_v_sf->base + __pyx_v_sf->length) + __pyx_v_seek), SEEK_END) - __pyx_v_sf->base);
+    __pyx_v_sf->tell = (SDL_RWseek(__pyx_v_sf->rw, ((__pyx_v_sf->base + __pyx_v_sf->length) + __pyx_v_seek), RW_SEEK_SET) - __pyx_v_sf->base);
 
     /* "pygame_sdl2/rwobject.pyx":141
  *     elif whence == RW_SEEK_CUR:
  *         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base
  *     elif whence == RW_SEEK_END:             # <<<<<<<<<<<<<<
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  * 
  */
     break;
@@ -2452,7 +2579,7 @@ static Sint64 __pyx_f_11pygame_sdl2_8rwobject_subfile_seek(SDL_RWops *__pyx_v_co
   }
 
   /* "pygame_sdl2/rwobject.pyx":144
- *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+ *         sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
  * 
  *     return sf.tell             # <<<<<<<<<<<<<<
  * 
@@ -2488,9 +2615,6 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_subfile_read(SDL_RWops *__pyx_v_co
   size_t __pyx_v_rv;
   size_t __pyx_r;
   int __pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
 
   /* "pygame_sdl2/rwobject.pyx":147
  * 
@@ -2535,7 +2659,7 @@ static size_t __pyx_f_11pygame_sdl2_8rwobject_subfile_read(SDL_RWops *__pyx_v_co
       #ifdef WITH_THREAD
       PyGILState_Release(__pyx_gilstate_save);
       #endif
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 153, __pyx_L1_error)
     }
     __pyx_v_maxnum = (__pyx_v_left / __pyx_v_size);
 
@@ -2714,7 +2838,10 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   struct __pyx_t_11pygame_sdl2_8rwobject_SubFile *__pyx_v_sf;
   SDL_RWops *__pyx_v_rv;
   SDL_RWops *__pyx_v_rw;
+  char *__pyx_v_cname;
+  char *__pyx_v_cmode;
   PyObject *__pyx_v_name = NULL;
+  PyObject *__pyx_v_dname = NULL;
   PyObject *__pyx_v_base = NULL;
   PyObject *__pyx_v_length = NULL;
   SDL_RWops *__pyx_r;
@@ -2727,17 +2854,13 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  char const *__pyx_t_9;
-  char const *__pyx_t_10;
-  Py_ssize_t __pyx_t_11;
+  char *__pyx_t_9;
+  Py_ssize_t __pyx_t_10;
+  PyObject *__pyx_t_11 = NULL;
   PyObject *__pyx_t_12 = NULL;
   PyObject *__pyx_t_13 = NULL;
-  PyObject *__pyx_t_14 = NULL;
-  Sint64 __pyx_t_15;
-  int __pyx_t_16;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
+  Sint64 __pyx_t_14;
+  int __pyx_t_15;
   __Pyx_RefNannySetupContext("to_rwops", 0);
   if (__pyx_optional_args) {
     if (__pyx_optional_args->__pyx_n > 0) {
@@ -2747,37 +2870,37 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   __Pyx_INCREF(__pyx_v_filelike);
   __Pyx_INCREF(__pyx_v_mode);
 
-  /* "pygame_sdl2/rwobject.pyx":180
- *     cdef SDL_RWops *rw
+  /* "pygame_sdl2/rwobject.pyx":182
+ *     cdef char *cmode
  * 
  *     if not isinstance(mode, bytes_):             # <<<<<<<<<<<<<<
  *         mode = mode.encode("ascii")
  * 
  */
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 182, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_mode, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_mode, __pyx_t_1); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 182, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":181
+    /* "pygame_sdl2/rwobject.pyx":183
  * 
  *     if not isinstance(mode, bytes_):
  *         mode = mode.encode("ascii")             # <<<<<<<<<<<<<<
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mode, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_mode, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 183, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_mode, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/rwobject.pyx":180
- *     cdef SDL_RWops *rw
+    /* "pygame_sdl2/rwobject.pyx":182
+ *     cdef char *cmode
  * 
  *     if not isinstance(mode, bytes_):             # <<<<<<<<<<<<<<
  *         mode = mode.encode("ascii")
@@ -2785,16 +2908,16 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":183
+  /* "pygame_sdl2/rwobject.pyx":185
  *         mode = mode.encode("ascii")
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":             # <<<<<<<<<<<<<<
  *         filelike = filelike.name
  * 
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_file_type); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_file_type); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 185, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 185, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_5 = (__pyx_t_2 != 0);
   if (__pyx_t_5) {
@@ -2802,24 +2925,24 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_t_3 = __pyx_t_5;
     goto __pyx_L5_bool_binop_done;
   }
-  __pyx_t_5 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 185, __pyx_L1_error)
   __pyx_t_3 = __pyx_t_5;
   __pyx_L5_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":184
+    /* "pygame_sdl2/rwobject.pyx":186
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":
  *         filelike = filelike.name             # <<<<<<<<<<<<<<
  * 
  *     # Try to open as a file.
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_filelike, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/rwobject.pyx":183
+    /* "pygame_sdl2/rwobject.pyx":185
  *         mode = mode.encode("ascii")
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":             # <<<<<<<<<<<<<<
@@ -2828,30 +2951,30 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":187
+  /* "pygame_sdl2/rwobject.pyx":189
  * 
  *     # Try to open as a file.
  *     if isinstance(filelike, bytes_):             # <<<<<<<<<<<<<<
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_bytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 189, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_5 = (__pyx_t_3 != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/rwobject.pyx":188
+    /* "pygame_sdl2/rwobject.pyx":190
  *     # Try to open as a file.
  *     if isinstance(filelike, bytes_):
  *         name = filelike.decode(fsencoding)             # <<<<<<<<<<<<<<
  *     elif isinstance(filelike, unicode_):
  *         name = filelike
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -2864,17 +2987,17 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 190, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 190, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_GIVEREF(__pyx_t_6);
       PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 190, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     }
@@ -2882,7 +3005,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_v_name = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "pygame_sdl2/rwobject.pyx":187
+    /* "pygame_sdl2/rwobject.pyx":189
  * 
  *     # Try to open as a file.
  *     if isinstance(filelike, bytes_):             # <<<<<<<<<<<<<<
@@ -2892,21 +3015,21 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     goto __pyx_L7;
   }
 
-  /* "pygame_sdl2/rwobject.pyx":189
+  /* "pygame_sdl2/rwobject.pyx":191
  *     if isinstance(filelike, bytes_):
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):             # <<<<<<<<<<<<<<
  *         name = filelike
  *     else:
  */
-  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_IsInstance(__pyx_v_filelike, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 191, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_3 = (__pyx_t_5 != 0);
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":190
+    /* "pygame_sdl2/rwobject.pyx":192
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):
  *         name = filelike             # <<<<<<<<<<<<<<
@@ -2916,7 +3039,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __Pyx_INCREF(__pyx_v_filelike);
     __pyx_v_name = __pyx_v_filelike;
 
-    /* "pygame_sdl2/rwobject.pyx":189
+    /* "pygame_sdl2/rwobject.pyx":191
  *     if isinstance(filelike, bytes_):
  *         name = filelike.decode(fsencoding)
  *     elif isinstance(filelike, unicode_):             # <<<<<<<<<<<<<<
@@ -2926,7 +3049,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     goto __pyx_L7;
   }
 
-  /* "pygame_sdl2/rwobject.pyx":192
+  /* "pygame_sdl2/rwobject.pyx":194
  *         name = filelike
  *     else:
  *         name = None             # <<<<<<<<<<<<<<
@@ -2939,35 +3062,95 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   }
   __pyx_L7:;
 
-  /* "pygame_sdl2/rwobject.pyx":194
+  /* "pygame_sdl2/rwobject.pyx":196
  *         name = None
  * 
  *     if name:             # <<<<<<<<<<<<<<
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
  * 
+ *         dname = name.encode("utf-8")
  */
-  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 194; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 196, __pyx_L1_error)
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":195
- * 
+    /* "pygame_sdl2/rwobject.pyx":198
  *     if name:
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)             # <<<<<<<<<<<<<<
  * 
- *         if rv == NULL:
+ *         dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *         cname = dname
+ *         cmode = mode
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 198, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 198, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_t_1); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_10 = __Pyx_PyObject_AsString(__pyx_v_mode); if (unlikely((!__pyx_t_10) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_v_rv = SDL_RWFromFile(__pyx_t_9, __pyx_t_10);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_v_dname = __pyx_t_1;
+    __pyx_t_1 = 0;
+
+    /* "pygame_sdl2/rwobject.pyx":199
+ * 
+ *         dname = name.encode("utf-8")
+ *         cname = dname             # <<<<<<<<<<<<<<
+ *         cmode = mode
+ * 
+ */
+    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_dname); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 199, __pyx_L1_error)
+    __pyx_v_cname = __pyx_t_9;
+
+    /* "pygame_sdl2/rwobject.pyx":200
+ *         dname = name.encode("utf-8")
+ *         cname = dname
+ *         cmode = mode             # <<<<<<<<<<<<<<
+ * 
+ *         with nogil:
+ */
+    __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_mode); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 200, __pyx_L1_error)
+    __pyx_v_cmode = __pyx_t_9;
 
-    /* "pygame_sdl2/rwobject.pyx":197
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
+    /* "pygame_sdl2/rwobject.pyx":202
+ *         cmode = mode
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             rv = SDL_RWFromFile(cname, cmode)
+ * 
+ */
+    {
+        #ifdef WITH_THREAD
+        PyThreadState *_save;
+        Py_UNBLOCK_THREADS
+        #endif
+        /*try:*/ {
+
+          /* "pygame_sdl2/rwobject.pyx":203
+ * 
+ *         with nogil:
+ *             rv = SDL_RWFromFile(cname, cmode)             # <<<<<<<<<<<<<<
+ * 
+ *         if rv == NULL:
+ */
+          __pyx_v_rv = SDL_RWFromFile(__pyx_v_cname, __pyx_v_cmode);
+        }
+
+        /* "pygame_sdl2/rwobject.pyx":202
+ *         cmode = mode
+ * 
+ *         with nogil:             # <<<<<<<<<<<<<<
+ *             rv = SDL_RWFromFile(cname, cmode)
+ * 
+ */
+        /*finally:*/ {
+          /*normal exit:*/{
+            #ifdef WITH_THREAD
+            Py_BLOCK_THREADS
+            #endif
+            goto __pyx_L11;
+          }
+          __pyx_L11:;
+        }
+    }
+
+    /* "pygame_sdl2/rwobject.pyx":205
+ *             rv = SDL_RWFromFile(cname, cmode)
  * 
  *         if rv == NULL:             # <<<<<<<<<<<<<<
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))
@@ -2976,19 +3159,19 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_t_3 = ((__pyx_v_rv == NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "pygame_sdl2/rwobject.pyx":198
+      /* "pygame_sdl2/rwobject.pyx":206
  * 
  *         if rv == NULL:
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))             # <<<<<<<<<<<<<<
  * 
  *         return rv
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Could_not_open_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Could_not_open_r, __pyx_n_s_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 206, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_8 = __Pyx_PyBytes_FromString(SDL_GetError()); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = __Pyx_PyBytes_FromString(SDL_GetError()); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 206, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __pyx_t_6 = NULL;
-      __pyx_t_11 = 0;
+      __pyx_t_10 = 0;
       if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_6)) {
@@ -2996,38 +3179,38 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
           __Pyx_INCREF(__pyx_t_6);
           __Pyx_INCREF(function);
           __Pyx_DECREF_SET(__pyx_t_4, function);
-          __pyx_t_11 = 1;
+          __pyx_t_10 = 1;
         }
       }
-      __pyx_t_7 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(2+__pyx_t_10); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 206, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       if (__pyx_t_6) {
         __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
       }
       __Pyx_INCREF(__pyx_v_filelike);
       __Pyx_GIVEREF(__pyx_v_filelike);
-      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_11, __pyx_v_filelike);
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_10, __pyx_v_filelike);
       __Pyx_GIVEREF(__pyx_t_8);
-      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_11, __pyx_t_8);
+      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_10, __pyx_t_8);
       __pyx_t_8 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 206, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GIVEREF(__pyx_t_1);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_Raise(__pyx_t_1, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __PYX_ERR(0, 206, __pyx_L1_error)
 
-      /* "pygame_sdl2/rwobject.pyx":197
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
+      /* "pygame_sdl2/rwobject.pyx":205
+ *             rv = SDL_RWFromFile(cname, cmode)
  * 
  *         if rv == NULL:             # <<<<<<<<<<<<<<
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))
@@ -3035,7 +3218,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
     }
 
-    /* "pygame_sdl2/rwobject.pyx":200
+    /* "pygame_sdl2/rwobject.pyx":208
  *             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))
  * 
  *         return rv             # <<<<<<<<<<<<<<
@@ -3045,26 +3228,26 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
     __pyx_r = __pyx_v_rv;
     goto __pyx_L0;
 
-    /* "pygame_sdl2/rwobject.pyx":194
+    /* "pygame_sdl2/rwobject.pyx":196
  *         name = None
  * 
  *     if name:             # <<<<<<<<<<<<<<
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)
  * 
+ *         dname = name.encode("utf-8")
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":202
+  /* "pygame_sdl2/rwobject.pyx":210
  *         return rv
  * 
  *     if mode == b"rb":             # <<<<<<<<<<<<<<
  *         try:
  * 
  */
-  __pyx_t_3 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = (__Pyx_PyBytes_Equals(__pyx_v_mode, __pyx_n_b_rb, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 210, __pyx_L1_error)
   if (__pyx_t_3) {
 
-    /* "pygame_sdl2/rwobject.pyx":203
+    /* "pygame_sdl2/rwobject.pyx":211
  * 
  *     if mode == b"rb":
  *         try:             # <<<<<<<<<<<<<<
@@ -3072,49 +3255,51 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  */
     {
-      __Pyx_ExceptionSave(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
+      __Pyx_PyThreadState_declare
+      __Pyx_PyThreadState_assign
+      __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
+      __Pyx_XGOTREF(__pyx_t_11);
       __Pyx_XGOTREF(__pyx_t_12);
       __Pyx_XGOTREF(__pyx_t_13);
-      __Pyx_XGOTREF(__pyx_t_14);
       /*try:*/ {
 
-        /* "pygame_sdl2/rwobject.pyx":207
+        /* "pygame_sdl2/rwobject.pyx":215
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  *             # subfile, so use an optimized path.
  *             name = filelike.name             # <<<<<<<<<<<<<<
  *             base = filelike.base
  *             length = filelike.length
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 215, __pyx_L14_error)
         __Pyx_GOTREF(__pyx_t_1);
         __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
         __pyx_t_1 = 0;
 
-        /* "pygame_sdl2/rwobject.pyx":208
+        /* "pygame_sdl2/rwobject.pyx":216
  *             # subfile, so use an optimized path.
  *             name = filelike.name
  *             base = filelike.base             # <<<<<<<<<<<<<<
  *             length = filelike.length
  * 
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 216, __pyx_L14_error)
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_v_base = __pyx_t_1;
         __pyx_t_1 = 0;
 
-        /* "pygame_sdl2/rwobject.pyx":209
+        /* "pygame_sdl2/rwobject.pyx":217
  *             name = filelike.name
  *             base = filelike.base
  *             length = filelike.length             # <<<<<<<<<<<<<<
  * 
  *             if name is not None:
  */
-        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_length); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_filelike, __pyx_n_s_length); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 217, __pyx_L14_error)
         __Pyx_GOTREF(__pyx_t_1);
         __pyx_v_length = __pyx_t_1;
         __pyx_t_1 = 0;
 
-        /* "pygame_sdl2/rwobject.pyx":211
+        /* "pygame_sdl2/rwobject.pyx":219
  *             length = filelike.length
  * 
  *             if name is not None:             # <<<<<<<<<<<<<<
@@ -3125,30 +3310,30 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
         __pyx_t_5 = (__pyx_t_3 != 0);
         if (__pyx_t_5) {
 
-          /* "pygame_sdl2/rwobject.pyx":213
+          /* "pygame_sdl2/rwobject.pyx":221
  *             if name is not None:
  * 
  *                 if not isinstance(name, unicode_):             # <<<<<<<<<<<<<<
  *                     name = name.decode(fsencoding)
  * 
  */
-          __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L14_error)
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_5 = PyObject_IsInstance(__pyx_v_name, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 213; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_5 = PyObject_IsInstance(__pyx_v_name, __pyx_t_1); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 221, __pyx_L14_error)
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_t_3 = ((!(__pyx_t_5 != 0)) != 0);
           if (__pyx_t_3) {
 
-            /* "pygame_sdl2/rwobject.pyx":214
+            /* "pygame_sdl2/rwobject.pyx":222
  * 
  *                 if not isinstance(name, unicode_):
  *                     name = name.decode(fsencoding)             # <<<<<<<<<<<<<<
  * 
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")
+ *                 dname = name.encode("utf-8")
  */
-            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 222, __pyx_L14_error)
             __Pyx_GOTREF(__pyx_t_4);
-            __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_fsencoding); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 222, __pyx_L14_error)
             __Pyx_GOTREF(__pyx_t_7);
             __pyx_t_8 = NULL;
             if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
@@ -3161,17 +3346,17 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
               }
             }
             if (!__pyx_t_8) {
-              __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L14_error)
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
               __Pyx_GOTREF(__pyx_t_1);
             } else {
-              __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 222, __pyx_L14_error)
               __Pyx_GOTREF(__pyx_t_6);
               __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_8); __pyx_t_8 = NULL;
               __Pyx_GIVEREF(__pyx_t_7);
               PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_7);
               __pyx_t_7 = 0;
-              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 222, __pyx_L14_error)
               __Pyx_GOTREF(__pyx_t_1);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             }
@@ -3179,7 +3364,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
             __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
             __pyx_t_1 = 0;
 
-            /* "pygame_sdl2/rwobject.pyx":213
+            /* "pygame_sdl2/rwobject.pyx":221
  *             if name is not None:
  * 
  *                 if not isinstance(name, unicode_):             # <<<<<<<<<<<<<<
@@ -3188,24 +3373,75 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           }
 
-          /* "pygame_sdl2/rwobject.pyx":216
+          /* "pygame_sdl2/rwobject.pyx":224
  *                     name = name.decode(fsencoding)
  * 
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")             # <<<<<<<<<<<<<<
+ *                 dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *                 cname = dname
  * 
- *                 if not rw:
  */
-          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 224, __pyx_L14_error)
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 224, __pyx_L14_error)
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_t_4); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          __pyx_v_rw = SDL_RWFromFile(__pyx_t_9, __pyx_k_rb);
-          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+          __pyx_v_dname = __pyx_t_4;
+          __pyx_t_4 = 0;
+
+          /* "pygame_sdl2/rwobject.pyx":225
+ * 
+ *                 dname = name.encode("utf-8")
+ *                 cname = dname             # <<<<<<<<<<<<<<
+ * 
+ *                 with nogil:
+ */
+          __pyx_t_9 = __Pyx_PyObject_AsString(__pyx_v_dname); if (unlikely((!__pyx_t_9) && PyErr_Occurred())) __PYX_ERR(0, 225, __pyx_L14_error)
+          __pyx_v_cname = __pyx_t_9;
+
+          /* "pygame_sdl2/rwobject.pyx":227
+ *                 cname = dname
+ * 
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     rw = SDL_RWFromFile(cname, b"rb")
+ * 
+ */
+          {
+              #ifdef WITH_THREAD
+              PyThreadState *_save;
+              Py_UNBLOCK_THREADS
+              #endif
+              /*try:*/ {
 
-          /* "pygame_sdl2/rwobject.pyx":218
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")
+                /* "pygame_sdl2/rwobject.pyx":228
+ * 
+ *                 with nogil:
+ *                     rw = SDL_RWFromFile(cname, b"rb")             # <<<<<<<<<<<<<<
+ * 
+ *                 if not rw:
+ */
+                __pyx_v_rw = SDL_RWFromFile(__pyx_v_cname, ((char const *)"rb"));
+              }
+
+              /* "pygame_sdl2/rwobject.pyx":227
+ *                 cname = dname
+ * 
+ *                 with nogil:             # <<<<<<<<<<<<<<
+ *                     rw = SDL_RWFromFile(cname, b"rb")
+ * 
+ */
+              /*finally:*/ {
+                /*normal exit:*/{
+                  #ifdef WITH_THREAD
+                  Py_BLOCK_THREADS
+                  #endif
+                  goto __pyx_L28;
+                }
+                __pyx_L28:;
+              }
+          }
+
+          /* "pygame_sdl2/rwobject.pyx":230
+ *                     rw = SDL_RWFromFile(cname, b"rb")
  * 
  *                 if not rw:             # <<<<<<<<<<<<<<
  *                     raise IOError("Could not open {!r}.".format(name))
@@ -3214,14 +3450,14 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
           __pyx_t_3 = ((!(__pyx_v_rw != 0)) != 0);
           if (__pyx_t_3) {
 
-            /* "pygame_sdl2/rwobject.pyx":219
+            /* "pygame_sdl2/rwobject.pyx":231
  * 
  *                 if not rw:
  *                     raise IOError("Could not open {!r}.".format(name))             # <<<<<<<<<<<<<<
  * 
  *                 SDL_RWseek(rw, base, RW_SEEK_SET);
  */
-            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Could_not_open_r_2, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_Could_not_open_r_2, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L14_error)
             __Pyx_GOTREF(__pyx_t_1);
             __pyx_t_6 = NULL;
             if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -3234,34 +3470,34 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
               }
             }
             if (!__pyx_t_6) {
-              __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_name); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L14_error)
               __Pyx_GOTREF(__pyx_t_4);
             } else {
-              __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 231, __pyx_L14_error)
               __Pyx_GOTREF(__pyx_t_7);
               __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL;
               __Pyx_INCREF(__pyx_v_name);
               __Pyx_GIVEREF(__pyx_v_name);
               PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_name);
-              __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+              __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L14_error)
               __Pyx_GOTREF(__pyx_t_4);
               __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
             }
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L14_error)
             __Pyx_GOTREF(__pyx_t_1);
             __Pyx_GIVEREF(__pyx_t_4);
             PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
             __pyx_t_4 = 0;
-            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 231, __pyx_L14_error)
             __Pyx_GOTREF(__pyx_t_4);
             __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
             __Pyx_Raise(__pyx_t_4, 0, 0, 0);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-            {__pyx_filename = __pyx_f[0]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+            __PYX_ERR(0, 231, __pyx_L14_error)
 
-            /* "pygame_sdl2/rwobject.pyx":218
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")
+            /* "pygame_sdl2/rwobject.pyx":230
+ *                     rw = SDL_RWFromFile(cname, b"rb")
  * 
  *                 if not rw:             # <<<<<<<<<<<<<<
  *                     raise IOError("Could not open {!r}.".format(name))
@@ -3269,17 +3505,17 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           }
 
-          /* "pygame_sdl2/rwobject.pyx":221
+          /* "pygame_sdl2/rwobject.pyx":233
  *                     raise IOError("Could not open {!r}.".format(name))
  * 
  *                 SDL_RWseek(rw, base, RW_SEEK_SET);             # <<<<<<<<<<<<<<
  * 
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)
  */
-          __pyx_t_15 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_15 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          SDL_RWseek(__pyx_v_rw, __pyx_t_15, RW_SEEK_SET);
+          __pyx_t_14 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_14 == (Sint64)-1) && PyErr_Occurred())) __PYX_ERR(0, 233, __pyx_L14_error)
+          SDL_RWseek(__pyx_v_rw, __pyx_t_14, RW_SEEK_SET);
 
-          /* "pygame_sdl2/rwobject.pyx":223
+          /* "pygame_sdl2/rwobject.pyx":235
  *                 SDL_RWseek(rw, base, RW_SEEK_SET);
  * 
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)             # <<<<<<<<<<<<<<
@@ -3288,7 +3524,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_sf = ((struct __pyx_t_11pygame_sdl2_8rwobject_SubFile *)calloc((sizeof(struct __pyx_t_11pygame_sdl2_8rwobject_SubFile)), 1));
 
-          /* "pygame_sdl2/rwobject.pyx":224
+          /* "pygame_sdl2/rwobject.pyx":236
  * 
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)
  *                 sf.rw = rw             # <<<<<<<<<<<<<<
@@ -3297,27 +3533,27 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_sf->rw = __pyx_v_rw;
 
-          /* "pygame_sdl2/rwobject.pyx":225
+          /* "pygame_sdl2/rwobject.pyx":237
  *                 sf = <SubFile *> calloc(sizeof(SubFile), 1)
  *                 sf.rw = rw
  *                 sf.base = base             # <<<<<<<<<<<<<<
  *                 sf.length = length
  *                 sf.tell = 0;
  */
-          __pyx_t_15 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_15 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          __pyx_v_sf->base = __pyx_t_15;
+          __pyx_t_14 = __Pyx_PyInt_As_int64_t(__pyx_v_base); if (unlikely((__pyx_t_14 == (Sint64)-1) && PyErr_Occurred())) __PYX_ERR(0, 237, __pyx_L14_error)
+          __pyx_v_sf->base = __pyx_t_14;
 
-          /* "pygame_sdl2/rwobject.pyx":226
+          /* "pygame_sdl2/rwobject.pyx":238
  *                 sf.rw = rw
  *                 sf.base = base
  *                 sf.length = length             # <<<<<<<<<<<<<<
  *                 sf.tell = 0;
  * 
  */
-          __pyx_t_15 = __Pyx_PyInt_As_int64_t(__pyx_v_length); if (unlikely((__pyx_t_15 == (Sint64)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
-          __pyx_v_sf->length = __pyx_t_15;
+          __pyx_t_14 = __Pyx_PyInt_As_int64_t(__pyx_v_length); if (unlikely((__pyx_t_14 == (Sint64)-1) && PyErr_Occurred())) __PYX_ERR(0, 238, __pyx_L14_error)
+          __pyx_v_sf->length = __pyx_t_14;
 
-          /* "pygame_sdl2/rwobject.pyx":227
+          /* "pygame_sdl2/rwobject.pyx":239
  *                 sf.base = base
  *                 sf.length = length
  *                 sf.tell = 0;             # <<<<<<<<<<<<<<
@@ -3326,7 +3562,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_sf->tell = 0;
 
-          /* "pygame_sdl2/rwobject.pyx":229
+          /* "pygame_sdl2/rwobject.pyx":241
  *                 sf.tell = 0;
  * 
  *                 rv = SDL_AllocRW()             # <<<<<<<<<<<<<<
@@ -3335,7 +3571,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv = SDL_AllocRW();
 
-          /* "pygame_sdl2/rwobject.pyx":230
+          /* "pygame_sdl2/rwobject.pyx":242
  * 
  *                 rv = SDL_AllocRW()
  *                 rv.size = subfile_size             # <<<<<<<<<<<<<<
@@ -3344,7 +3580,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->size = __pyx_f_11pygame_sdl2_8rwobject_subfile_size;
 
-          /* "pygame_sdl2/rwobject.pyx":231
+          /* "pygame_sdl2/rwobject.pyx":243
  *                 rv = SDL_AllocRW()
  *                 rv.size = subfile_size
  *                 rv.seek = subfile_seek             # <<<<<<<<<<<<<<
@@ -3353,7 +3589,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->seek = __pyx_f_11pygame_sdl2_8rwobject_subfile_seek;
 
-          /* "pygame_sdl2/rwobject.pyx":232
+          /* "pygame_sdl2/rwobject.pyx":244
  *                 rv.size = subfile_size
  *                 rv.seek = subfile_seek
  *                 rv.read = subfile_read             # <<<<<<<<<<<<<<
@@ -3362,7 +3598,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->read = __pyx_f_11pygame_sdl2_8rwobject_subfile_read;
 
-          /* "pygame_sdl2/rwobject.pyx":233
+          /* "pygame_sdl2/rwobject.pyx":245
  *                 rv.seek = subfile_seek
  *                 rv.read = subfile_read
  *                 rv.write = NULL             # <<<<<<<<<<<<<<
@@ -3371,7 +3607,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->write = NULL;
 
-          /* "pygame_sdl2/rwobject.pyx":234
+          /* "pygame_sdl2/rwobject.pyx":246
  *                 rv.read = subfile_read
  *                 rv.write = NULL
  *                 rv.close = subfile_close             # <<<<<<<<<<<<<<
@@ -3380,7 +3616,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->close = __pyx_f_11pygame_sdl2_8rwobject_subfile_close;
 
-          /* "pygame_sdl2/rwobject.pyx":235
+          /* "pygame_sdl2/rwobject.pyx":247
  *                 rv.write = NULL
  *                 rv.close = subfile_close
  *                 rv.type = 0             # <<<<<<<<<<<<<<
@@ -3389,7 +3625,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->type = 0;
 
-          /* "pygame_sdl2/rwobject.pyx":236
+          /* "pygame_sdl2/rwobject.pyx":248
  *                 rv.close = subfile_close
  *                 rv.type = 0
  *                 rv.hidden.unknown.data1 = <void *> sf             # <<<<<<<<<<<<<<
@@ -3398,7 +3634,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
           __pyx_v_rv->hidden.unknown.data1 = ((void *)__pyx_v_sf);
 
-          /* "pygame_sdl2/rwobject.pyx":238
+          /* "pygame_sdl2/rwobject.pyx":250
  *                 rv.hidden.unknown.data1 = <void *> sf
  * 
  *                 return rv             # <<<<<<<<<<<<<<
@@ -3406,9 +3642,9 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  *         except AttributeError:
  */
           __pyx_r = __pyx_v_rv;
-          goto __pyx_L15_try_return;
+          goto __pyx_L18_try_return;
 
-          /* "pygame_sdl2/rwobject.pyx":211
+          /* "pygame_sdl2/rwobject.pyx":219
  *             length = filelike.length
  * 
  *             if name is not None:             # <<<<<<<<<<<<<<
@@ -3417,7 +3653,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
         }
 
-        /* "pygame_sdl2/rwobject.pyx":203
+        /* "pygame_sdl2/rwobject.pyx":211
  * 
  *     if mode == b"rb":
  *         try:             # <<<<<<<<<<<<<<
@@ -3425,59 +3661,63 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  */
       }
+      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
       __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
       __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
-      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
-      goto __pyx_L18_try_end;
-      __pyx_L11_error:;
+      goto __pyx_L21_try_end;
+      __pyx_L14_error:;
+      __Pyx_PyThreadState_assign
       __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "pygame_sdl2/rwobject.pyx":240
+      /* "pygame_sdl2/rwobject.pyx":252
  *                 return rv
  * 
  *         except AttributeError:             # <<<<<<<<<<<<<<
  *             pass
  * 
  */
-      __pyx_t_16 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
-      if (__pyx_t_16) {
-        PyErr_Restore(0,0,0);
-        goto __pyx_L12_exception_handled;
+      __pyx_t_15 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
+      if (__pyx_t_15) {
+        __Pyx_ErrRestore(0,0,0);
+        goto __pyx_L15_exception_handled;
       }
-      goto __pyx_L13_except_error;
-      __pyx_L13_except_error:;
+      goto __pyx_L16_except_error;
+      __pyx_L16_except_error:;
 
-      /* "pygame_sdl2/rwobject.pyx":203
+      /* "pygame_sdl2/rwobject.pyx":211
  * 
  *     if mode == b"rb":
  *         try:             # <<<<<<<<<<<<<<
  * 
  *             # If we have these properties, we're either an APK asset or a Ren'Py-style
  */
+      __Pyx_PyThreadState_assign
+      __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_XGIVEREF(__pyx_t_13);
-      __Pyx_XGIVEREF(__pyx_t_14);
-      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
+      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
       goto __pyx_L1_error;
-      __pyx_L15_try_return:;
+      __pyx_L18_try_return:;
+      __Pyx_PyThreadState_assign
+      __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_XGIVEREF(__pyx_t_13);
-      __Pyx_XGIVEREF(__pyx_t_14);
-      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
+      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
       goto __pyx_L0;
-      __pyx_L12_exception_handled:;
+      __pyx_L15_exception_handled:;
+      __Pyx_PyThreadState_assign
+      __Pyx_XGIVEREF(__pyx_t_11);
       __Pyx_XGIVEREF(__pyx_t_12);
       __Pyx_XGIVEREF(__pyx_t_13);
-      __Pyx_XGIVEREF(__pyx_t_14);
-      __Pyx_ExceptionReset(__pyx_t_12, __pyx_t_13, __pyx_t_14);
-      __pyx_L18_try_end:;
+      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
+      __pyx_L21_try_end:;
     }
 
-    /* "pygame_sdl2/rwobject.pyx":202
+    /* "pygame_sdl2/rwobject.pyx":210
  *         return rv
  * 
  *     if mode == b"rb":             # <<<<<<<<<<<<<<
@@ -3486,35 +3726,35 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":244
+  /* "pygame_sdl2/rwobject.pyx":256
  * 
  * 
  *     if not (hasattr(filelike, "read") or hasattr(filelike, "write")):             # <<<<<<<<<<<<<<
  *         raise IOError("{!r} is not a filename or file-like object.".format(filelike))
  * 
  */
-  __pyx_t_5 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_u_read); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_u_read); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 256, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_5 != 0);
   if (!__pyx_t_2) {
   } else {
     __pyx_t_3 = __pyx_t_2;
-    goto __pyx_L23_bool_binop_done;
+    goto __pyx_L31_bool_binop_done;
   }
-  __pyx_t_2 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_u_write); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_HasAttr(__pyx_v_filelike, __pyx_n_u_write); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 256, __pyx_L1_error)
   __pyx_t_5 = (__pyx_t_2 != 0);
   __pyx_t_3 = __pyx_t_5;
-  __pyx_L23_bool_binop_done:;
+  __pyx_L31_bool_binop_done:;
   __pyx_t_5 = ((!__pyx_t_3) != 0);
   if (__pyx_t_5) {
 
-    /* "pygame_sdl2/rwobject.pyx":245
+    /* "pygame_sdl2/rwobject.pyx":257
  * 
  *     if not (hasattr(filelike, "read") or hasattr(filelike, "write")):
  *         raise IOError("{!r} is not a filename or file-like object.".format(filelike))             # <<<<<<<<<<<<<<
  * 
  *     Py_INCREF(filelike)
  */
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_r_is_not_a_filename_or_file_lik, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_kp_u_r_is_not_a_filename_or_file_lik, __pyx_n_s_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_t_7 = NULL;
     if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
@@ -3527,33 +3767,33 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
       }
     }
     if (!__pyx_t_7) {
-      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_filelike); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_filelike); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL;
       __Pyx_INCREF(__pyx_v_filelike);
       __Pyx_GIVEREF(__pyx_v_filelike);
       PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_v_filelike);
-      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[0]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __PYX_ERR(0, 257, __pyx_L1_error)
 
-    /* "pygame_sdl2/rwobject.pyx":244
+    /* "pygame_sdl2/rwobject.pyx":256
  * 
  * 
  *     if not (hasattr(filelike, "read") or hasattr(filelike, "write")):             # <<<<<<<<<<<<<<
@@ -3562,7 +3802,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   }
 
-  /* "pygame_sdl2/rwobject.pyx":247
+  /* "pygame_sdl2/rwobject.pyx":259
  *         raise IOError("{!r} is not a filename or file-like object.".format(filelike))
  * 
  *     Py_INCREF(filelike)             # <<<<<<<<<<<<<<
@@ -3571,7 +3811,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   Py_INCREF(__pyx_v_filelike);
 
-  /* "pygame_sdl2/rwobject.pyx":249
+  /* "pygame_sdl2/rwobject.pyx":261
  *     Py_INCREF(filelike)
  * 
  *     rv = SDL_AllocRW()             # <<<<<<<<<<<<<<
@@ -3580,7 +3820,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv = SDL_AllocRW();
 
-  /* "pygame_sdl2/rwobject.pyx":250
+  /* "pygame_sdl2/rwobject.pyx":262
  * 
  *     rv = SDL_AllocRW()
  *     rv.size = python_size             # <<<<<<<<<<<<<<
@@ -3589,7 +3829,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->size = __pyx_f_11pygame_sdl2_8rwobject_python_size;
 
-  /* "pygame_sdl2/rwobject.pyx":251
+  /* "pygame_sdl2/rwobject.pyx":263
  *     rv = SDL_AllocRW()
  *     rv.size = python_size
  *     rv.seek = python_seek             # <<<<<<<<<<<<<<
@@ -3598,7 +3838,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->seek = __pyx_f_11pygame_sdl2_8rwobject_python_seek;
 
-  /* "pygame_sdl2/rwobject.pyx":252
+  /* "pygame_sdl2/rwobject.pyx":264
  *     rv.size = python_size
  *     rv.seek = python_seek
  *     rv.read = python_read             # <<<<<<<<<<<<<<
@@ -3607,7 +3847,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->read = __pyx_f_11pygame_sdl2_8rwobject_python_read;
 
-  /* "pygame_sdl2/rwobject.pyx":253
+  /* "pygame_sdl2/rwobject.pyx":265
  *     rv.seek = python_seek
  *     rv.read = python_read
  *     rv.write = python_write             # <<<<<<<<<<<<<<
@@ -3616,7 +3856,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->write = __pyx_f_11pygame_sdl2_8rwobject_python_write;
 
-  /* "pygame_sdl2/rwobject.pyx":254
+  /* "pygame_sdl2/rwobject.pyx":266
  *     rv.read = python_read
  *     rv.write = python_write
  *     rv.close = python_close             # <<<<<<<<<<<<<<
@@ -3625,7 +3865,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->close = __pyx_f_11pygame_sdl2_8rwobject_python_close;
 
-  /* "pygame_sdl2/rwobject.pyx":255
+  /* "pygame_sdl2/rwobject.pyx":267
  *     rv.write = python_write
  *     rv.close = python_close
  *     rv.type = 0             # <<<<<<<<<<<<<<
@@ -3634,7 +3874,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->type = 0;
 
-  /* "pygame_sdl2/rwobject.pyx":256
+  /* "pygame_sdl2/rwobject.pyx":268
  *     rv.close = python_close
  *     rv.type = 0
  *     rv.hidden.unknown.data1 = <void *> filelike             # <<<<<<<<<<<<<<
@@ -3643,7 +3883,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
  */
   __pyx_v_rv->hidden.unknown.data1 = ((void *)__pyx_v_filelike);
 
-  /* "pygame_sdl2/rwobject.pyx":258
+  /* "pygame_sdl2/rwobject.pyx":270
  *     rv.hidden.unknown.data1 = <void *> filelike
  * 
  *     return rv             # <<<<<<<<<<<<<<
@@ -3672,6 +3912,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XDECREF(__pyx_v_dname);
   __Pyx_XDECREF(__pyx_v_base);
   __Pyx_XDECREF(__pyx_v_length);
   __Pyx_XDECREF(__pyx_v_filelike);
@@ -3680,7 +3921,7 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_to_rwops(PyObject *__pyx_v_fil
   return __pyx_r;
 }
 
-/* "pygame_sdl2/rwobject.pyx":261
+/* "pygame_sdl2/rwobject.pyx":273
  * 
  * 
  * cdef api SDL_RWops *RWopsFromPython(filelike) except NULL:             # <<<<<<<<<<<<<<
@@ -3692,23 +3933,20 @@ static SDL_RWops *__pyx_f_11pygame_sdl2_8rwobject_RWopsFromPython(PyObject *__py
   SDL_RWops *__pyx_r;
   __Pyx_RefNannyDeclarations
   SDL_RWops *__pyx_t_1;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("RWopsFromPython", 0);
 
-  /* "pygame_sdl2/rwobject.pyx":262
+  /* "pygame_sdl2/rwobject.pyx":274
  * 
  * cdef api SDL_RWops *RWopsFromPython(filelike) except NULL:
  *     return to_rwops(filelike)             # <<<<<<<<<<<<<<
  * 
  * PyEval_InitThreads()
  */
-  __pyx_t_1 = __pyx_f_11pygame_sdl2_8rwobject_to_rwops(__pyx_v_filelike, NULL); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_11pygame_sdl2_8rwobject_to_rwops(__pyx_v_filelike, NULL); if (unlikely(__pyx_t_1 == NULL)) __PYX_ERR(0, 274, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "pygame_sdl2/rwobject.pyx":261
+  /* "pygame_sdl2/rwobject.pyx":273
  * 
  * 
  * cdef api SDL_RWops *RWopsFromPython(filelike) except NULL:             # <<<<<<<<<<<<<<
@@ -3784,9 +4022,9 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {0, 0, 0, 0, 0, 0, 0}
 };
 static int __Pyx_InitCachedBuiltins(void) {
-  __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 81; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_Exception = __Pyx_GetBuiltinName(__pyx_n_s_Exception); if (!__pyx_builtin_Exception) __PYX_ERR(0, 81, __pyx_L1_error)
+  __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) __PYX_ERR(0, 206, __pyx_L1_error)
+  __pyx_builtin_AttributeError = __Pyx_GetBuiltinName(__pyx_n_s_AttributeError); if (!__pyx_builtin_AttributeError) __PYX_ERR(0, 252, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -3803,40 +4041,40 @@ static int __Pyx_InitCachedConstants(void) {
  *         rv = f.tell()
  *         f.seek(cur, 0)
  */
-  __pyx_tuple_ = PyTuple_Pack(2, __pyx_int_0, __pyx_int_2); if (unlikely(!__pyx_tuple_)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 67; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple_ = PyTuple_Pack(2, __pyx_int_0, __pyx_int_2); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 67, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple_);
   __Pyx_GIVEREF(__pyx_tuple_);
 
-  /* "pygame_sdl2/rwobject.pyx":181
+  /* "pygame_sdl2/rwobject.pyx":183
  * 
  *     if not isinstance(mode, bytes_):
  *         mode = mode.encode("ascii")             # <<<<<<<<<<<<<<
  * 
  *     if isinstance(filelike, file_type) and mode == b"rb":
  */
-  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_n_u_ascii); if (unlikely(!__pyx_tuple__2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_n_u_ascii); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "pygame_sdl2/rwobject.pyx":195
- * 
+  /* "pygame_sdl2/rwobject.pyx":198
  *     if name:
- *         rv = SDL_RWFromFile(name.encode("utf-8"), mode)             # <<<<<<<<<<<<<<
  * 
- *         if rv == NULL:
+ *         dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *         cname = dname
+ *         cmode = mode
  */
-  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 195; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__3);
   __Pyx_GIVEREF(__pyx_tuple__3);
 
-  /* "pygame_sdl2/rwobject.pyx":216
+  /* "pygame_sdl2/rwobject.pyx":224
  *                     name = name.decode(fsencoding)
  * 
- *                 rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")             # <<<<<<<<<<<<<<
+ *                 dname = name.encode("utf-8")             # <<<<<<<<<<<<<<
+ *                 cname = dname
  * 
- *                 if not rw:
  */
-  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_utf_8); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__4);
   __Pyx_GIVEREF(__pyx_tuple__4);
   __Pyx_RefNannyFinishContext();
@@ -3847,9 +4085,9 @@ static int __Pyx_InitCachedConstants(void) {
 }
 
 static int __Pyx_InitGlobals(void) {
-  if (__Pyx_InitStrings(__pyx_string_tab) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
-  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -3868,9 +4106,6 @@ PyMODINIT_FUNC PyInit_rwobject(void)
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  int __pyx_lineno = 0;
-  const char *__pyx_filename = NULL;
-  int __pyx_clineno = 0;
   __Pyx_RefNannyDeclarations
   #if CYTHON_REFNANNY
   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
@@ -3882,23 +4117,24 @@ PyMODINIT_FUNC PyInit_rwobject(void)
   }
   #endif
   __Pyx_RefNannySetupContext("PyMODINIT_FUNC PyInit_rwobject(void)", 0);
-  if (__Pyx_check_binary_version() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
   #ifdef __Pyx_CyFunction_USED
-  if (__pyx_CyFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_FusedFunction_USED
-  if (__pyx_FusedFunction_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_Coroutine_USED
-  if (__pyx_Coroutine_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_Generator_USED
-  if (__pyx_Generator_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   #ifdef __Pyx_StopAsyncIteration_USED
-  if (__pyx_StopAsyncIteration_init() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   /*--- Library function declarations ---*/
   /*--- Threads initialization code ---*/
@@ -3913,39 +4149,39 @@ PyMODINIT_FUNC PyInit_rwobject(void)
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
-  if (unlikely(!__pyx_m)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
+  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
   Py_INCREF(__pyx_d);
-  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
   #if CYTHON_COMPILING_IN_PYPY
   Py_INCREF(__pyx_b);
   #endif
-  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
   /*--- Initialize various global constants etc. ---*/
-  if (__Pyx_InitGlobals() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
-  if (__Pyx_init_sys_getdefaultencoding_params() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
   if (__pyx_module_is_main_pygame_sdl2__rwobject) {
-    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyObject_SetAttrString(__pyx_m, "__name__", __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   }
   #if PY_MAJOR_VERSION >= 3
   {
-    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
     if (!PyDict_GetItemString(modules, "pygame_sdl2.rwobject")) {
-      if (unlikely(PyDict_SetItemString(modules, "pygame_sdl2.rwobject", __pyx_m) < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(PyDict_SetItemString(modules, "pygame_sdl2.rwobject", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
     }
   }
   #endif
   /*--- Builtin init code ---*/
-  if (__Pyx_InitCachedBuiltins() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Constants init code ---*/
-  if (__Pyx_InitCachedConstants() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Global init code ---*/
   /*--- Variable export code ---*/
   /*--- Function export code ---*/
-  if (__Pyx_ExportFunction("to_rwops", (void (*)(void))__pyx_f_11pygame_sdl2_8rwobject_to_rwops, "SDL_RWops *(PyObject *, struct __pyx_opt_args_11pygame_sdl2_8rwobject_to_rwops *__pyx_optional_args)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_ExportFunction("RWopsFromPython", (void (*)(void))__pyx_f_11pygame_sdl2_8rwobject_RWopsFromPython, "SDL_RWops *(PyObject *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_ExportFunction("to_rwops", (void (*)(void))__pyx_f_11pygame_sdl2_8rwobject_to_rwops, "SDL_RWops *(PyObject *, struct __pyx_opt_args_11pygame_sdl2_8rwobject_to_rwops *__pyx_optional_args)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+  if (__Pyx_ExportFunction("RWopsFromPython", (void (*)(void))__pyx_f_11pygame_sdl2_8rwobject_RWopsFromPython, "SDL_RWops *(PyObject *)") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   /*--- Type init code ---*/
   /*--- Type import code ---*/
   __pyx_ptype_7cpython_4type_type = __Pyx_ImportType(__Pyx_BUILTIN_MODULE_NAME, "type", 
@@ -3954,12 +4190,12 @@ PyMODINIT_FUNC PyInit_rwobject(void)
   #else
   sizeof(PyHeapTypeObject),
   #endif
-  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 9; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  0); if (unlikely(!__pyx_ptype_7cpython_4type_type)) __PYX_ERR(1, 9, __pyx_L1_error)
   /*--- Variable import code ---*/
   /*--- Function import code ---*/
   /*--- Execution code ---*/
   #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
-  if (__Pyx_patch_abc() < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
 
   /* "pygame_sdl2/rwobject.pyx":25
@@ -3969,7 +4205,7 @@ PyMODINIT_FUNC PyInit_rwobject(void)
  * 
  * import sys
  */
-  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_n_s_file_type);
   __Pyx_GIVEREF(__pyx_n_s_file_type);
@@ -3980,20 +4216,20 @@ PyMODINIT_FUNC PyInit_rwobject(void)
   __Pyx_INCREF(__pyx_n_s_unicode);
   __Pyx_GIVEREF(__pyx_n_s_unicode);
   PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_unicode);
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pygame_sdl2_compat, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pygame_sdl2_compat, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_file_type); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_file_type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_file_type, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_file_type, __pyx_t_1) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_bytes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_bytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bytes, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_bytes, __pyx_t_1) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_unicode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_unicode); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unicode, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_unicode, __pyx_t_1) < 0) __PYX_ERR(0, 25, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
@@ -4004,9 +4240,9 @@ PyMODINIT_FUNC PyInit_rwobject(void)
  * 
  * # The fsencoding.
  */
-  __pyx_t_2 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_sys, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_sys, __pyx_t_2) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /* "pygame_sdl2/rwobject.pyx":30
@@ -4016,9 +4252,9 @@ PyMODINIT_FUNC PyInit_rwobject(void)
  * 
  * cdef extern from "SDL.h" nogil:
  */
-  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_sys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = NULL;
@@ -4032,14 +4268,14 @@ PyMODINIT_FUNC PyInit_rwobject(void)
     }
   }
   if (__pyx_t_3) {
-    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 30, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 30, __pyx_L1_error)
   if (!__pyx_t_5) {
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else {
@@ -4051,10 +4287,10 @@ PyMODINIT_FUNC PyInit_rwobject(void)
   __Pyx_INCREF(__pyx_kp_u_utf_8);
   __pyx_t_2 = __pyx_kp_u_utf_8;
   __pyx_L2_bool_binop_done:;
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fsencoding, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_fsencoding, __pyx_t_2) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "pygame_sdl2/rwobject.pyx":264
+  /* "pygame_sdl2/rwobject.pyx":276
  *     return to_rwops(filelike)
  * 
  * PyEval_InitThreads()             # <<<<<<<<<<<<<<
@@ -4066,9 +4302,9 @@ PyMODINIT_FUNC PyInit_rwobject(void)
  * #
  * # This software is provided 'as-is', without any express or implied
  */
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_2) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
   /*--- Wrapped vars code ---*/
@@ -4097,6 +4333,7 @@ PyMODINIT_FUNC PyInit_rwobject(void)
 }
 
 /* --- Runtime support code --- */
+/* Refnanny */
 #if CYTHON_REFNANNY
 static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
     PyObject *m = NULL, *p = NULL;
@@ -4113,6 +4350,7 @@ end:
 }
 #endif
 
+/* GetBuiltinName */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
     if (unlikely(!result)) {
@@ -4126,6 +4364,7 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
     return result;
 }
 
+/* PyObjectCall */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
     PyObject *result;
@@ -4145,6 +4384,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg
 }
 #endif
 
+/* PyObjectCallMethO */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
     PyObject *self, *result;
@@ -4164,6 +4404,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject
 }
 #endif
 
+/* PyObjectCallOneArg */
 #if CYTHON_COMPILING_IN_CPYTHON
 static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
     PyObject *result;
@@ -4189,12 +4430,17 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 }
 #else
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
-    PyObject* args = PyTuple_Pack(1, arg);
-    return (likely(args)) ? __Pyx_PyObject_Call(func, args, NULL) : NULL;
+    PyObject *result;
+    PyObject *args = PyTuple_Pack(1, arg);
+    if (unlikely(!args)) return NULL;
+    result = __Pyx_PyObject_Call(func, args, NULL);
+    Py_DECREF(args);
+    return result;
 }
 #endif
 
-#if CYTHON_COMPILING_IN_CPYTHON
+/* PyObjectCallNoArg */
+  #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
 #ifdef __Pyx_CyFunction_USED
     if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
@@ -4209,23 +4455,18 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
 }
 #endif
 
-static CYTHON_INLINE void __Pyx_ExceptionSave(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
+/* SaveResetException */
+    #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
     *type = tstate->exc_type;
     *value = tstate->exc_value;
     *tb = tstate->exc_traceback;
     Py_XINCREF(*type);
     Py_XINCREF(*value);
     Py_XINCREF(*tb);
-#else
-    PyErr_GetExcInfo(type, value, tb);
-#endif
 }
-static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
@@ -4235,16 +4476,18 @@ static void __Pyx_ExceptionReset(PyObject *type, PyObject *value, PyObject *tb)
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
-#else
-    PyErr_SetExcInfo(type, value, tb);
-#endif
 }
+#endif
 
+/* GetException */
+    #if CYTHON_COMPILING_IN_CPYTHON
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+#else
 static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) {
+#endif
     PyObject *local_type, *local_value, *local_tb;
 #if CYTHON_COMPILING_IN_CPYTHON
     PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
     local_type = tstate->curexc_type;
     local_value = tstate->curexc_value;
     local_tb = tstate->curexc_traceback;
@@ -4297,10 +4540,10 @@ bad:
     return -1;
 }
 
-static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
+/* PyErrFetchRestore */
+      #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
-    PyThreadState *tstate = PyThreadState_GET();
     tmp_type = tstate->curexc_type;
     tmp_value = tstate->curexc_value;
     tmp_tb = tstate->curexc_traceback;
@@ -4310,34 +4553,33 @@ static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyOb
     Py_XDECREF(tmp_type);
     Py_XDECREF(tmp_value);
     Py_XDECREF(tmp_tb);
-#else
-    PyErr_Restore(type, value, tb);
-#endif
 }
-static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
     *type = tstate->curexc_type;
     *value = tstate->curexc_value;
     *tb = tstate->curexc_traceback;
     tstate->curexc_type = 0;
     tstate->curexc_value = 0;
     tstate->curexc_traceback = 0;
-#else
-    PyErr_Fetch(type, value, tb);
-#endif
 }
+#endif
 
-static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+/* WriteUnraisableException */
+      static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
                                   CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename,
                                   int full_traceback, CYTHON_UNUSED int nogil) {
     PyObject *old_exc, *old_val, *old_tb;
     PyObject *ctx;
+    __Pyx_PyThreadState_declare
 #ifdef WITH_THREAD
     PyGILState_STATE state;
     if (nogil)
         state = PyGILState_Ensure();
+#ifdef _MSC_VER
+    else state = (PyGILState_STATE)-1;
 #endif
+#endif
+    __Pyx_PyThreadState_assign
     __Pyx_ErrFetch(&old_exc, &old_val, &old_tb);
     if (full_traceback) {
         Py_XINCREF(old_exc);
@@ -4364,26 +4606,43 @@ static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
 #endif
 }
 
-static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
+/* PyErrExceptionMatches */
+      #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
+    PyObject *exc_type = tstate->curexc_type;
+    if (exc_type == err) return 1;
+    if (unlikely(!exc_type)) return 0;
+    return PyErr_GivenExceptionMatches(exc_type, err);
+}
+#endif
+
+/* SwapException */
+      #if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
     PyObject *tmp_type, *tmp_value, *tmp_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
     tstate->exc_type = *type;
     tstate->exc_value = *value;
     tstate->exc_traceback = *tb;
+    *type = tmp_type;
+    *value = tmp_value;
+    *tb = tmp_tb;
+}
 #else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
+    PyObject *tmp_type, *tmp_value, *tmp_tb;
     PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
     PyErr_SetExcInfo(*type, *value, *tb);
-#endif
     *type = tmp_type;
     *value = tmp_value;
     *tb = tmp_tb;
 }
+#endif
 
-static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
+/* GetModuleGlobalName */
+      static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
 #if CYTHON_COMPILING_IN_CPYTHON
     result = PyDict_GetItem(__pyx_d, name);
@@ -4400,7 +4659,8 @@ static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     return result;
 }
 
-static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+/* BytesEquals */
+        static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
 #if CYTHON_COMPILING_IN_PYPY
     return PyObject_RichCompareBool(s1, s2, equals);
 #else
@@ -4437,9 +4697,11 @@ static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int eq
 #endif
 }
 
-#if PY_MAJOR_VERSION < 3
+/* RaiseException */
+        #if PY_MAJOR_VERSION < 3
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                         CYTHON_UNUSED PyObject *cause) {
+    __Pyx_PyThreadState_declare
     Py_XINCREF(type);
     if (!value || value == Py_None)
         value = NULL;
@@ -4478,6 +4740,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
             goto raise_error;
         }
     }
+    __Pyx_PyThreadState_assign
     __Pyx_ErrRestore(type, value, tb);
     return;
 raise_error:
@@ -4597,7 +4860,8 @@ bad:
 }
 #endif
 
-static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+/* Import */
+          static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
     PyObject *empty_list = 0;
     PyObject *module = 0;
     PyObject *global_dict = 0;
@@ -4670,7 +4934,8 @@ bad:
     return module;
 }
 
-static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+/* ImportFrom */
+          static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
     PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
     if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
         PyErr_Format(PyExc_ImportError,
@@ -4683,7 +4948,8 @@ static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
     return value;
 }
 
-static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+/* CodeObjectCache */
+          static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
     int start = 0, mid = 0, end = count - 1;
     if (end >= 0 && code_line > entries[end].code_line) {
         return count;
@@ -4762,7 +5028,8 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
     Py_INCREF(code_object);
 }
 
-#include "compile.h"
+/* AddTraceback */
+          #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
@@ -4842,7 +5109,8 @@ bad:
     Py_XDECREF(py_frame);
 }
 
-#define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+/* CIntFromPyVerify */
+          #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
 #define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
     __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
@@ -4863,11 +5131,62 @@ bad:
         return (target_type) value;\
     }
 
-#if CYTHON_USE_PYLONG_INTERNALS
-  #include "longintrepr.h"
-#endif
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
+    const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(int64_t) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(int64_t) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
+                                     little, !is_unsigned);
+    }
+}
 
-static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+    const int neg_one = (int) -1, const_zero = (int) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(int) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+        }
+    } else {
+        if (sizeof(int) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(int),
+                                     little, !is_unsigned);
+    }
+}
+
+/* CIntFromPy */
+          static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
     const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -4942,7 +5261,7 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (int64_t) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(int64_t, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(int64_t, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(int64_t,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(int64_t) - 1 > 1 * PyLong_SHIFT) {
@@ -5012,7 +5331,7 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
             int64_t val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -5035,7 +5354,7 @@ static CYTHON_INLINE int64_t __Pyx_PyInt_As_int64_t(PyObject *x) {
         }
     } else {
         int64_t val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
         if (!tmp) return (int64_t) -1;
         val = __Pyx_PyInt_As_int64_t(tmp);
         Py_DECREF(tmp);
@@ -5051,59 +5370,8 @@ raise_neg_overflow:
     return (int64_t) -1;
 }
 
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int64_t(int64_t value) {
-    const int64_t neg_one = (int64_t) -1, const_zero = (int64_t) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(int64_t) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(int64_t) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(int64_t) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-        }
-    } else {
-        if (sizeof(int64_t) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(int64_t) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(int64_t),
-                                     little, !is_unsigned);
-    }
-}
-
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
-    const int neg_one = (int) -1, const_zero = (int) 0;
-    const int is_unsigned = neg_one > const_zero;
-    if (is_unsigned) {
-        if (sizeof(int) < sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(int) <= sizeof(unsigned long)) {
-            return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
-            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
-        }
-    } else {
-        if (sizeof(int) <= sizeof(long)) {
-            return PyInt_FromLong((long) value);
-        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
-            return PyLong_FromLongLong((PY_LONG_LONG) value);
-        }
-    }
-    {
-        int one = 1; int little = (int)*(unsigned char *)&one;
-        unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(int),
-                                     little, !is_unsigned);
-    }
-}
-
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+/* CIntToPy */
+          static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
     const long neg_one = (long) -1, const_zero = (long) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
@@ -5129,7 +5397,8 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
     }
 }
 
-static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+/* CIntFromPy */
+          static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
     const long neg_one = (long) -1, const_zero = (long) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -5204,7 +5473,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (long) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
@@ -5274,7 +5543,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
             long val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -5297,7 +5566,7 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
         }
     } else {
         long val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
         if (!tmp) return (long) -1;
         val = __Pyx_PyInt_As_long(tmp);
         Py_DECREF(tmp);
@@ -5313,7 +5582,8 @@ raise_neg_overflow:
     return (long) -1;
 }
 
-static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+/* CIntFromPy */
+          static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
     const int neg_one = (int) -1, const_zero = (int) 0;
     const int is_unsigned = neg_one > const_zero;
 #if PY_MAJOR_VERSION < 3
@@ -5388,7 +5658,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
             const digit* digits = ((PyLongObject*)x)->ob_digit;
             switch (Py_SIZE(x)) {
                 case  0: return (int) 0;
-                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, -(sdigit) digits[0])
+                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
                 case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
                 case -2:
                     if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
@@ -5458,7 +5728,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
             int val;
-            PyObject *v = __Pyx_PyNumber_Int(x);
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
                 PyObject *tmp = v;
@@ -5481,7 +5751,7 @@ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
         }
     } else {
         int val;
-        PyObject *tmp = __Pyx_PyNumber_Int(x);
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
         if (!tmp) return (int) -1;
         val = __Pyx_PyInt_As_int(tmp);
         Py_DECREF(tmp);
@@ -5497,7 +5767,8 @@ raise_neg_overflow:
     return (int) -1;
 }
 
-static int __Pyx_check_binary_version(void) {
+/* CheckBinaryVersion */
+          static int __Pyx_check_binary_version(void) {
     char ctversion[4], rtversion[4];
     PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
     PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
@@ -5512,7 +5783,8 @@ static int __Pyx_check_binary_version(void) {
     return 0;
 }
 
-static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
+/* FunctionExport */
+          static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
     PyObject *d = 0;
     PyObject *cobj = 0;
     union {
@@ -5548,7 +5820,8 @@ bad:
     return -1;
 }
 
-#ifndef __PYX_HAVE_RT_ImportModule
+/* ModuleImport */
+          #ifndef __PYX_HAVE_RT_ImportModule
 #define __PYX_HAVE_RT_ImportModule
 static PyObject *__Pyx_ImportModule(const char *name) {
     PyObject *py_name = 0;
@@ -5565,7 +5838,8 @@ bad:
 }
 #endif
 
-#ifndef __PYX_HAVE_RT_ImportType
+/* TypeImport */
+          #ifndef __PYX_HAVE_RT_ImportType
 #define __PYX_HAVE_RT_ImportType
 static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class_name,
     size_t size, int strict)
@@ -5611,14 +5885,14 @@ static PyTypeObject *__Pyx_ImportType(const char *module_name, const char *class
 #endif
     if (!strict && (size_t)basicsize > size) {
         PyOS_snprintf(warning, sizeof(warning),
-            "%s.%s size changed, may indicate binary incompatibility",
-            module_name, class_name);
+            "%s.%s size changed, may indicate binary incompatibility. Expected %zd, got %zd",
+            module_name, class_name, basicsize, size);
         if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
     }
     else if ((size_t)basicsize != size) {
         PyErr_Format(PyExc_ValueError,
-            "%.200s.%.200s has the wrong size, try recompiling",
-            module_name, class_name);
+            "%.200s.%.200s has the wrong size, try recompiling. Expected %zd, got %zd",
+            module_name, class_name, basicsize, size);
         goto bad;
     }
     return (PyTypeObject *)result;
@@ -5629,7 +5903,8 @@ bad:
 }
 #endif
 
-static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+/* InitStrings */
+          static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     while (t->p) {
         #if PY_MAJOR_VERSION < 3
         if (t->is_unicode) {
@@ -5729,7 +6004,7 @@ static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
    if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
    else return PyObject_IsTrue(x);
 }
-static CYTHON_INLINE PyObject* __Pyx_PyNumber_Int(PyObject* x) {
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
   PyNumberMethods *m;
   const char *name = NULL;
   PyObject *res = NULL;
diff --git a/pygame_sdl2.egg-info/PKG-INFO b/pygame_sdl2.egg-info/PKG-INFO
index 2ef2b51..882edd9 100644
--- a/pygame_sdl2.egg-info/PKG-INFO
+++ b/pygame_sdl2.egg-info/PKG-INFO
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: pygame-sdl2
-Version: 2.1.0-for-renpy-6.99.11
+Version: 2.1.0-for-renpy-6.99.12
 Summary: UNKNOWN
 Home-page: https://github.com/renpy/pygame_sdl2
 Author: Tom Rothamel
diff --git a/setup.cfg b/setup.cfg
index 9fb0b9f..f3589d6 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,5 +1,5 @@
 [egg_info]
-tag_build = -for-renpy-6.99.11
+tag_build = -for-renpy-6.99.12
 tag_date = 0
 tag_svn_revision = 0
 
diff --git a/setup.py b/setup.py
index 2e7dd45..4c87404 100755
--- a/setup.py
+++ b/setup.py
@@ -31,6 +31,18 @@ import platform
 import shutil
 import sys
 
+
+def setup_env(name):
+    # If PYGAME_SDL2_CC or PYGAME_SDL2_LD are in the environment, and CC or LD are not, use them.
+
+    renpy_name = "PYGAME_SDL2_" + name
+    if (renpy_name in os.environ) and (name not in os.environ):
+        os.environ[name] = os.environ[renpy_name]
+
+setup_env("CC")
+setup_env("LD")
+setup_env("CXX")
+
 temporary_package_data = [ ]
 
 if android or ios:
@@ -138,5 +150,3 @@ if __name__ == "__main__":
 
     for i in temporary_package_data:
         os.unlink(os.path.join(os.path.dirname(__file__), "src", "pygame_sdl2", i))
-
-
diff --git a/src/SDL_gfxPrimitives.c b/src/SDL_gfxPrimitives.c
index df64658..792fbba 100644
--- a/src/SDL_gfxPrimitives.c
+++ b/src/SDL_gfxPrimitives.c
@@ -6584,7 +6584,7 @@ void _murphyWideline(SDL_gfxMurphyIterator *m, Sint16 x1, Sint16 y1, Sint16 x2,
 		x2 = temp;
 		temp = y1;
 		y1 = y2;
-		y1 = temp;
+		y2 = temp;
 		m->u *= -1;
 		m->v *= -1;
 	}
diff --git a/src/pygame_sdl2/display.pyx b/src/pygame_sdl2/display.pyx
index dd8461f..629cd85 100644
--- a/src/pygame_sdl2/display.pyx
+++ b/src/pygame_sdl2/display.pyx
@@ -91,12 +91,35 @@ def get_init():
 # The window that is used by the various module globals.
 main_window = None
 
+# Have we shown the first window?
+_shown_first_window = False
+
+def _before_first_window():
+    global _shown_first_window
+
+    if _shown_first_window:
+        return
+
+    _shown_first_window = True
+
+    # If we're on android, we have to close the splash window before opening
+    # our window.
+    try:
+        import androidembed
+        androidembed.close_window()
+    except ImportError:
+        pass
+
+
+
 cdef class Window:
     def __init__(self, title, resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
 
         if not isinstance(title, bytes):
             title = title.encode("utf-8")
 
+        _before_first_window()
+
         self.create_flags = flags
 
         self.window = SDL_CreateWindow(
@@ -366,14 +389,6 @@ default_swap_control = 1
 def set_mode(resolution=(0, 0), flags=0, depth=0, pos=(SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED)):
     global main_window
 
-    # If we're on android, we have to close the splash window before opening
-    # our window.
-    try:
-        import androidembed
-        androidembed.close_window()
-    except ImportError:
-        pass
-
     if main_window:
 
         if (flags & ~SDL_WINDOW_OPENGL) == (main_window.create_flags & ~SDL_WINDOW_OPENGL):
diff --git a/src/pygame_sdl2/mixer.pyx b/src/pygame_sdl2/mixer.pyx
index 96daa24..3c5e185 100644
--- a/src/pygame_sdl2/mixer.pyx
+++ b/src/pygame_sdl2/mixer.pyx
@@ -53,7 +53,8 @@ def _play_current(int channel):
         channel_queued[channel] = None
 
     if next_sound:
-        Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)
+        with nogil:
+            Mix_PlayChannelTimed(channel, next_sound.chunk, 0, -1)
 
 
 cdef void channel_callback(int channel) with gil:
@@ -117,16 +118,21 @@ def get_init():
         return frequency, format, channels
 
 def stop():
-    Mix_HaltChannel(-1)
+    with nogil:
+        Mix_HaltChannel(-1)
 
 def pause():
-    Mix_Pause(-1)
+    with nogil:
+        Mix_Pause(-1)
 
 def unpause():
-    Mix_Resume(-1)
+    with nogil:
+        Mix_Resume(-1)
 
 def fadeout(time):
-    Mix_FadeOutChannel(-1, time)
+    cdef int ms = time
+    with nogil:
+        Mix_FadeOutChannel(-1, ms)
 
 def set_num_channels(count):
     Mix_AllocateChannels(count)
@@ -169,10 +175,15 @@ cdef class Sound:
 
     def play(self, loops=0, maxtime=-1, fade_ms=0):
         cdef int cid
-        if fade_ms != 0:
-            cid = Mix_FadeInChannelTimed(-1, self.chunk, loops, fade_ms, maxtime)
-        else:
-            cid = Mix_PlayChannelTimed(-1, self.chunk, loops, maxtime)
+        cdef int _loops = loops
+        cdef int _maxtime = maxtime
+        cdef int _fade_ms = fade_ms
+
+        with nogil:
+            if _fade_ms != 0:
+                cid = Mix_FadeInChannelTimed(-1, self.chunk, _loops, _fade_ms, _maxtime)
+            else:
+                cid = Mix_PlayChannelTimed(-1, self.chunk, _loops, _maxtime)
 
         if cid == -1:
             raise error()
@@ -182,28 +193,33 @@ cdef class Sound:
         cdef int i = 0
         while i < Mix_AllocateChannels(-1):
             if Mix_GetChunk(i) == self.chunk:
-                Mix_HaltChannel(i)
+                with nogil:
+                    Mix_HaltChannel(i)
             i += 1
 
     def pause(self):
         cdef int i = 0
         while i < Mix_AllocateChannels(-1):
             if Mix_GetChunk(i) == self.chunk:
-                Mix_Pause(i)
+                with nogil:
+                    Mix_Pause(i)
             i += 1
 
     def unpause(self):
         cdef int i = 0
         while i < Mix_AllocateChannels(-1):
             if Mix_GetChunk(i) == self.chunk:
-                Mix_Resume(i)
+                with nogil:
+                    Mix_Resume(i)
             i += 1
 
     def fadeout(self, time):
         cdef int i = 0
+        cdef int ms = time
         while i < Mix_AllocateChannels(-1):
             if Mix_GetChunk(i) == self.chunk:
-                Mix_FadeOutChannel(i, time)
+                with nogil:
+                    Mix_FadeOutChannel(i, ms)
             i += 1
 
     def set_volume(self, value):
@@ -230,15 +246,22 @@ cdef class Sound:
         raise error("Not implemented.")
 
 
-class Channel(object):
+cdef class Channel(object):
+    cdef int cid
+
     def __init__(self, cid):
         self.cid = cid
 
     def play(self, Sound sound not None, loops=0, maxtime=-1, fade_ms=0):
-        if fade_ms != 0:
-            cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, loops, fade_ms, maxtime)
-        else:
-            cid = Mix_PlayChannelTimed(self.cid, sound.chunk, loops, maxtime)
+        cdef int _loops = loops
+        cdef int _maxtime = maxtime
+        cdef int _fade_ms = fade_ms
+
+        with nogil:
+            if _fade_ms != 0:
+                cid = Mix_FadeInChannelTimed(self.cid, sound.chunk, _loops, _fade_ms, _maxtime)
+            else:
+                cid = Mix_PlayChannelTimed(self.cid, sound.chunk, _loops, _maxtime)
 
         if cid == -1:
             raise error()
@@ -247,16 +270,21 @@ class Channel(object):
             current_sounds[self.cid] = sound
 
     def stop(self):
-        Mix_HaltChannel(self.cid)
+        with nogil:
+            Mix_HaltChannel(self.cid)
 
     def pause(self):
-        Mix_Pause(self.cid)
+        with nogil:
+            Mix_Pause(self.cid)
 
     def unpause(self):
-        Mix_Resume(self.cid)
+        with nogil:
+            Mix_Resume(self.cid)
 
     def fadeout(self, time):
-        Mix_FadeOutChannel(self.cid, time)
+        cdef int ms = time
+        with nogil:
+            Mix_FadeOutChannel(self.cid, ms)
 
     def set_volume(self, volume):
         Mix_Volume(self.cid, int(MIX_MAX_VOLUME * volume))
diff --git a/src/pygame_sdl2/rwobject.pyx b/src/pygame_sdl2/rwobject.pyx
index 25a4559..2085db7 100644
--- a/src/pygame_sdl2/rwobject.pyx
+++ b/src/pygame_sdl2/rwobject.pyx
@@ -139,7 +139,7 @@ cdef Sint64 subfile_seek(SDL_RWops *context, Sint64 seek, int whence) nogil:
     elif whence == RW_SEEK_CUR:
         sf.tell = SDL_RWseek(sf.rw, seek, RW_SEEK_CUR) - sf.base
     elif whence == RW_SEEK_END:
-        sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, SEEK_END) - sf.base
+        sf.tell = SDL_RWseek(sf.rw, sf.base + sf.length + seek, RW_SEEK_SET) - sf.base
 
     return sf.tell
 
@@ -176,6 +176,8 @@ cdef SDL_RWops *to_rwops(filelike, mode="rb") except NULL:
     cdef SubFile *sf
     cdef SDL_RWops *rv
     cdef SDL_RWops *rw
+    cdef char *cname
+    cdef char *cmode
 
     if not isinstance(mode, bytes_):
         mode = mode.encode("ascii")
@@ -192,7 +194,13 @@ cdef SDL_RWops *to_rwops(filelike, mode="rb") except NULL:
         name = None
 
     if name:
-        rv = SDL_RWFromFile(name.encode("utf-8"), mode)
+
+        dname = name.encode("utf-8")
+        cname = dname
+        cmode = mode
+
+        with nogil:
+            rv = SDL_RWFromFile(cname, cmode)
 
         if rv == NULL:
             raise IOError("Could not open {!r}: {}".format(filelike, SDL_GetError()))
@@ -213,7 +221,11 @@ cdef SDL_RWops *to_rwops(filelike, mode="rb") except NULL:
                 if not isinstance(name, unicode_):
                     name = name.decode(fsencoding)
 
-                rw = SDL_RWFromFile(name.encode("utf-8"), b"rb")
+                dname = name.encode("utf-8")
+                cname = dname
+
+                with nogil:
+                    rw = SDL_RWFromFile(cname, b"rb")
 
                 if not rw:
                     raise IOError("Could not open {!r}.".format(name))

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/pygame-sdl2.git



More information about the Pkg-games-commits mailing list