def getSharedWidget(): if not GLWidget.sharedWidget: fmt = QtOpenGL.QGLFormat() fmt.setRgba(True) fmt.setAlpha(True) fmt.setDepth(True) fmt.setDoubleBuffer(True) fmt.setSampleBuffers(True) fmt.setSwapInterval(0) QtOpenGL.QGLFormat.setDefaultFormat(fmt) hiddenWindow = QtOpenGL.QGLWidget(QtOpenGL.QGLContext(fmt)) GLWidget.sharedWidget = hiddenWindow hiddenWindow.makeCurrent() return GLWidget.sharedWidget
def __init__(self, width=256, height=256, title=None, visible=True, aspect=None, decoration=True, fullscreen=False, config=None, context=None, color=(0, 0, 0, 1), vsync=False): window.Window.__init__(self, width=width, height=height, title=title, visible=visible, aspect=aspect, decoration=decoration, fullscreen=fullscreen, config=config, context=context, color=color) if config is None: config = configuration.Configuration() set_configuration(config) __glformat__.setSwapInterval(1 if vsync else 0) self._native_app = QtWidgets.QApplication.instance() if self._native_app is None: self._native_app = QtWidgets.QApplication(sys.argv) context = QtOpenGL.QGLContext(__glformat__) if context.isValid(): self._native_window = QtOpenGL.QGLWidget(context) else: self._native_window = QtOpenGL.QGLWidget(__glformat__) self._native_window.resize(width, height) self._native_window.makeCurrent() self._native_window.setAutoBufferSwap(False) self._native_window.setMouseTracking(True) self._native_window.setWindowTitle(self._title) def paint_gl(): self.dispatch_event("on_draw", 0.0) self._native_window.paintGL = paint_gl def resize_gl(width, height): self.dispatch_event("on_resize", width, height) self._native_window.resizeGL = resize_gl def close_event(event): __windows__.remove(self) for i in range(len(self._timer_stack)): handler, interval = self._timer_stack[i] self._clock.unschedule(handler) self.dispatch_event("on_close") self._native_window.closeEvent = close_event def mouse_press_event(event): x = event.pos().x() y = event.pos().y() button = __mouse_map__.get(event.button(), window.mouse.UNKNOWN) self._button = button self._mouse_x = x self._mouse_y = y self.dispatch_event("on_mouse_press", x, y, button) self._native_window.mousePressEvent = mouse_press_event def mouse_release_event(event): x = event.pos().x() y = event.pos().y() button = __mouse_map__.get(event.button(), window.mouse.UNKNOWN) self._button = window.mouse.NONE self._mouse_x = x self._mouse_y = y self.dispatch_event("on_mouse_release", x, y, button) self._native_window.mouseReleaseEvent = mouse_release_event def mouse_move_event(event): x = event.pos().x() y = event.pos().y() dx = x - self._mouse_x dy = y - self._mouse_y self._mouse_x = x self._mouse_y = y if self._button is not window.mouse.NONE: self.dispatch_event('on_mouse_drag', x, y, dx, dy, self._button) else: self.dispatch_event('on_mouse_motion', x, y, dx, dy) self._native_window.mouseMoveEvent = mouse_move_event def wheel_event(event): offset_x = event.angleDelta().x() offset_y = event.angleDelta().y() x = event.pos().x() y = event.pos().y() self.dispatch_event("on_mouse_scroll", x, y, offset_x / 10.0, offset_y / 10.0) self._native_window.wheelEvent = wheel_event def key_press_event(event): code = self._keyboard_translate(event.key()) modifiers = self._modifiers_translate(event.modifiers()) self.dispatch_event("on_key_press", code, modifiers) self.dispatch_event("on_character", event.text()) self._native_window.keyPressEvent = key_press_event def key_release_event(event): code = self._keyboard_translate(event.key()) modifiers = self._modifiers_translate(event.modifiers()) self.dispatch_event("on_key_release", code, modifiers) self._native_window.keyReleaseEvent = key_release_event self._native_window.show() __windows__.append(self)