示例#1
0
文件: app.py 项目: roberpot/pyxel
    def _toggle_fullscreen(self):
        if glfw.get_window_monitor(self._window):  # fullscreen to window
            glfw.set_window_monitor(self._window, None, *self._window_info, 0)
        else:  # window to fullscreen
            info = [0] * 4
            info[0], info[1] = glfw.get_window_pos(self._window)
            info[2], info[3] = glfw.get_window_size(self._window)
            self._window_info = info

            monitor = glfw.get_primary_monitor()
            size = glfw.get_video_mode(monitor)[0]
            glfw.set_window_monitor(self._window, monitor, 0, 0, *size, 0)
示例#2
0
文件: glfw.py 项目: marcan/blitzloop
    def toggle_fullscreen(self):
        if self.fullscreen:
            glfw.set_window_monitor(self.window, None, *self.saved_size,
                                    util.get_opts().fps)
        else:
            self.saved_size = self.x, self.y, self.win_width, self.win_height
            monitor = glfw.get_primary_monitor()
            mode = glfw.get_video_mode(monitor)
            glfw.set_window_monitor(self.window, monitor, 0, 0,
                                    mode.size.width, mode.size.height,
                                    mode.refresh_rate)

        self.fullscreen = not self.fullscreen
示例#3
0
    def toggle_fullscreen(self):
        if self.fullscreen:
            glfw.set_window_monitor(self.window, None, *self.saved_size,
                                    util.get_opts().fps)
        else:
            self.saved_size = self.x, self.y, self.win_width, self.win_height
            monitor = glfw.get_primary_monitor()
            mode = glfw.get_video_mode(monitor)
            glfw.set_window_monitor(self.window, monitor, 0, 0,
                                    mode.size.width, mode.size.height,
                                    mode.refresh_rate)

        self.fullscreen = not self.fullscreen
示例#4
0
    def open_output_window(self):
        self._pause_event_loop()

        # Select monitor
        self._select_monitor()

        # Open window
        if self.monitor:
            # Fullscreen
            self._select_video_mode()
            x, y = glfw.get_monitor_pos(self.monitor)
            logger.info("Output selected : {} on {} at {},{}".format(
                str(self.video_mode), glfw.get_monitor_name(self.monitor), x,
                y))
            w, h = self.video_mode[0]
            self.pano_renderer.setViewport(w, h)
            self.pano_renderer.setRefreshRate(
                self._convert_rate(30), self._convert_rate(self.video_mode[2]))
            if self.output_window:
                glfw.set_window_monitor(self.output_window, self.monitor, x, y,
                                        w, h, self.video_mode[2])
                glfw.show_window(self.output_window)
                self.pano_renderer.enableOutput(True)
            else:
                self._open_output_window(w, h, self.monitor, self.video_mode)
        else:
            # No monitor available or windowed
            w = self.width / 4
            h = self.height / 4
            self.pano_renderer.setViewport(w, h)

            monitor = glfw.get_primary_monitor()
            if monitor:
                rate = glfw.get_video_mode(monitor)[2]
                self.pano_renderer.setRefreshRate(self._convert_rate(30),
                                                  self._convert_rate(rate))

            if self.output_window:
                self.pano_renderer.enableOutput(True)
                glfw.show_window(self.output_window)
            else:
                self._open_output_window(w, h)
                if not SETTINGS.display in ["window", "windowed"]:
                    # No monitor available
                    glfw.hide_window(self.output_window)

        self._unpause_event_loop()
示例#5
0
def 定位(window, p):
    x = p[3] - p[2]
    y = p[1] - p[0]
    y1, x1 = 图.shape[:2]
    if x1 / y1 < x / y:
        xx = int(y / y1 * x1)
        glViewport((x - xx) // 2, 0, xx, y)
    else:
        yy = int(x / x1 * y1)
        glViewport(0, (y - yy) // 2, x, yy)
    glfw.set_window_monitor(window,
                            None,
                            xpos=p[2],
                            ypos=p[0],
                            width=p[3] - p[2],
                            height=p[1] - p[0],
                            refresh_rate=glfw.DONT_CARE)
示例#6
0
    def _set_fullscreen(self, value: bool) -> None:
        monitor = glfw.get_primary_monitor()
        mode = glfw.get_video_mode(monitor)
        refresh_rate = mode.refresh_rate if self.vsync else glfw.DONT_CARE
        self.resizable = not value
        glfw.window_hint(glfw.RESIZABLE, self.resizable)

        if value:
            # enable fullscreen
            self._non_fullscreen_size = self.width, self.height
            self._non_fullscreen_position = self.position
            glfw.set_window_monitor(
                self._window,
                monitor,
                0,
                0,
                mode.size.width,
                mode.size.height,
                refresh_rate,
            )

            glfw.window_hint(glfw.RED_BITS, mode.bits.red)
            glfw.window_hint(glfw.GREEN_BITS, mode.bits.green)
            glfw.window_hint(glfw.BLUE_BITS, mode.bits.blue)
            glfw.window_hint(glfw.REFRESH_RATE, mode.refresh_rate)

        else:
            # disable fullscreen
            glfw.set_window_monitor(
                self._window,
                None,
                *self._non_fullscreen_position,
                *self._non_fullscreen_size,
                refresh_rate
            )

        if self.vsync:
            glfw.swap_interval(1)
        else:
            glfw.swap_interval(0)
示例#7
0
 def enable_full_screen(window):
   display = glfw.get_primary_monitor()
   videomode = glfw.get_video_mode(display)
   glfw.set_window_monitor(window, display, 0, 0, videomode[0][0],
                           videomode[0][1], videomode[2])
示例#8
0
    def open(
        self,
        gui_monitor: GUIMonitor,
        title: str,
        is_fullscreen: bool = False,
        size: T.Tuple[int, int] = None,
        position: T.Tuple[int, int] = None,
    ):
        if self.is_open:
            # TODO: Warn that the window is already open
            return

        if not gui_monitor.is_available:
            raise ValueError(f"Window requires an available monitor.")

        has_fixed_size = ((size is not None) and (len(size) == 2)
                          and (size[0] > 0) and (size[1] > 0))
        if is_fullscreen and has_fixed_size:
            raise ValueError(
                f"Fullscreen is mutually exclusive to having a fixed size.")

        if position is None:
            if platform.system() == "Windows":
                position = (8, 90)
            else:
                position = (0, 0)

        if is_fullscreen:
            size = gui_monitor.size

        # NOTE: Always creating windowed window here, even if in fullscreen mode. On
        # windows you might experience a black screen for up to 1 sec when creating
        # a blank window directly in fullscreen mode. By creating it windowed and
        # then switching to fullscreen it will stay white the entire time.
        self.__gl_handle = glfw.create_window(*size, title, None,
                                              glfw.get_current_context())

        if not is_fullscreen:
            glfw.set_window_pos(self.__gl_handle, *position)

        # Register callbacks
        glfw.set_framebuffer_size_callback(self.__gl_handle, self.on_resize)
        glfw.set_key_callback(self.__gl_handle, self.on_key)
        glfw.set_mouse_button_callback(self.__gl_handle, self.on_mouse_button)
        self.on_resize(self.__gl_handle,
                       *glfw.get_framebuffer_size(self.__gl_handle))

        # gl_state settings
        with self._switch_to_current_context():
            gl_utils.basic_gl_setup()
            glfw.swap_interval(0)

        if is_fullscreen:
            # Switch to full screen here. See NOTE above at glfw.create_window().
            glfw.set_window_monitor(
                self.__gl_handle,
                gui_monitor.unsafe_handle,
                0,
                0,
                *gui_monitor.size,
                gui_monitor.refresh_rate,
            )
示例#9
0
    def setFullScr(self, value):
        """Sets the window to/from full-screen mode.

        Parameters
        ----------
        value : bool or int
            If `True`, resize the window to be fullscreen.

        """
        # convert value to correct type
        value = bool(value)
        # get monitor handle for the window
        monitor = glfw.get_window_monitor(self.winHandle)
        # get the video mode for the monitor
        # get monitors, with GLFW the primary display is ALWAYS at index 0
        allScrs = glfw.get_monitors()
        if len(allScrs) < int(self.win.screen) + 1:
            logging.warn("Requested an unavailable screen number - "
                         "using first available.")
            self.win.screen = 0

        thisScreen = allScrs[self.win.screen]
        if self.win.autoLog:
            logging.info('configured GLFW screen %i' % self.win.screen)

        # get monitor information
        nativeVidmode = glfw.get_video_mode(thisScreen)
        refreshRateHz = nativeVidmode.refresh_rate
        scrWidth, scrHeight = nativeVidmode.size
        winWidth, winHeight = nativeVidmode.size if value else self.win.windowedSize

        # set the monitor
        # glfw.window_hint(glfw.DECORATED, glfw.FALSE)
        glfw.set_window_monitor(
            self.winHandle,
            monitor if value else None,  # if `None` windowed, else fullscreen
            0, 0,  # position keep zero and set later
            nativeVidmode.size[0] if value else self.win.windowedSize[0],
            nativeVidmode.size[1] if value else self.win.windowedSize[1],
            refreshRateHz)

        if not value:  # extra stuff for non-fullscreen
            # if no window position is specified, centre it on-screen
            if self.win.pos is None:
                self.win.pos = [
                    (scrWidth - winWidth) / 2.0,
                    (scrHeight - winHeight) / 2.0]

            # get the virtual position of the monitor, apply offset to the
            # window position
            px, py = glfw.get_monitor_pos(thisScreen)
            glfw.set_window_pos(
                self.winHandle,
                int(self.win.pos[0] + px),
                int(self.win.pos[1] + py))

        # get the reported client size
        self.win.clientSize[:] = glfw.get_window_size(self.winHandle)
        self.frameBufferSize[:] = glfw.get_framebuffer_size(self.winHandle)
        self.win.viewport = (
            0, 0,
            self._frameBufferSize[0],
            self._frameBufferSize[1])
        self.win.scissor = (
            0, 0,
            self._frameBufferSize[0],
            self._frameBufferSize[1])

        self.win.resetEyeTransform()