def _recreate_immediate(self): # The actual _recreate function. changes = self._recreate_deferred self._recreate_deferred = None if "context" in changes: agl.aglSetDrawable(self._agl_context, None) if "fullscreen" in changes and not self._fullscreen and self._fullscreen_restore: # Leaving fullscreen -- destroy everything before the window. self._remove_track_region() self._remove_event_handlers() agl.aglSetDrawable(self._agl_context, None) # EndFullScreen disposes _window. quicktime.EndFullScreen(self._fullscreen_restore, 0) self._window = None self._create()
def _recreate_immediate(self): # The actual _recreate function. changes = self._recreate_deferred self._recreate_deferred = None if ('context' in changes): agl.aglSetDrawable(self._agl_context, None) if ('fullscreen' in changes and not self._fullscreen and self._fullscreen_restore): # Leaving fullscreen -- destroy everything before the window. self._remove_track_region() self._remove_event_handlers() agl.aglSetDrawable(self._agl_context, None) # EndFullScreen disposes _window. quicktime.EndFullScreen(self._fullscreen_restore, 0) self._window = None self._create()
def attach(self, canvas): if self.config._requires_gl_3(): raise ContextException('AGL does not support OpenGL 3') super(CarbonContext, self).attach(canvas) if isinstance(canvas, CarbonFullScreenCanvas): # XXX not used any more (cannot use AGL_BUFFER_RECT) agl.aglEnable(self._context, agl.AGL_FS_CAPTURE_SINGLE) agl.aglSetFullScreen(self._context, canvas.width, canvas.height, canvas.screen._refresh_rate, 0) else: agl.aglSetDrawable(self._context, cast(canvas.drawable, agl.AGLDrawable)) agl.aglSetCurrentContext(self._context) if canvas.bounds is not None: bounds = (gl.GLint * 4)(*canvas.bounds) agl.aglSetInteger(self._context, agl.AGL_BUFFER_RECT, bounds) agl.aglEnable(self._context, agl.AGL_BUFFER_RECT) else: agl.aglDisable(self._context, agl.AGL_BUFFER_RECT) _aglcheck() self.set_current()
def _create(self): self._agl_context = self.context._context if self._window: # The window is about to be recreated; destroy everything # associated with the old window, then the window itself. self._remove_track_region() self._remove_event_handlers() agl.aglSetDrawable(self._agl_context, None) carbon.DisposeWindow(self._window) self._window = None self._window = WindowRef() if self._fullscreen: # Switch to fullscreen mode with QuickTime fs_width = c_short(0) fs_height = c_short(0) self._fullscreen_restore = c_void_p() quicktime.BeginFullScreen(byref(self._fullscreen_restore), self.screen.get_gdevice(), byref(fs_width), byref(fs_height), byref(self._window), None, 0) # the following may be used for debugging if you have a second # monitor - only the main monitor will go fullscreen agl.aglEnable(self._agl_context, agl.AGL_FS_CAPTURE_SINGLE) self._width = fs_width.value self._height = fs_height.value #self._width = self.screen.width #self._height = self.screen.height agl.aglSetFullScreen(self._agl_context, self._width, self._height, self.screen._refresh_rate, 0) self._mouse_in_window = True self.dispatch_event('on_resize', self._width, self._height) self.dispatch_event('on_show') self.dispatch_event('on_expose') else: # Create floating window rect = Rect() location = None # TODO if location is not None: rect.left = location[0] rect.top = location[1] else: rect.top = rect.left = 0 rect.right = rect.left + self._width rect.bottom = rect.top + self._height styles = { self.WINDOW_STYLE_DEFAULT: (kDocumentWindowClass, kWindowCloseBoxAttribute | kWindowCollapseBoxAttribute), self.WINDOW_STYLE_DIALOG: (kDocumentWindowClass, kWindowCloseBoxAttribute), self.WINDOW_STYLE_TOOL: (kUtilityWindowClass, kWindowCloseBoxAttribute), self.WINDOW_STYLE_BORDERLESS: (kSimpleWindowClass, kWindowNoAttributes) } window_class, window_attributes = \ styles.get(self._style, kDocumentWindowClass) if self._resizable: window_attributes |= (kWindowFullZoomAttribute | kWindowLiveResizeAttribute | kWindowResizableAttribute) r = carbon.CreateNewWindow(window_class, window_attributes, byref(rect), byref(self._window)) _oscheck(r) if location is None: carbon.RepositionWindow(self._window, c_void_p(), kWindowCascadeOnMainScreen) agl.aglSetDrawable(self._agl_context, carbon.GetWindowPort(self._window)) _aglcheck() self.set_caption(self._caption) # Get initial state self._event_dispatcher = carbon.GetEventDispatcherTarget() self._current_modifiers = carbon.GetCurrentKeyModifiers().value self._mapped_modifiers = self._map_modifiers(self._current_modifiers) # (re)install Carbon event handlers self._install_event_handlers() self._create_track_region() self.switch_to() self.set_vsync(self._vsync) if self._visible: self.set_visible(True)
def detach(self): super(CarbonContext, self).detach() agl.aglSetDrawable(self._context, None) _aglcheck()