コード例 #1
0
ファイル: output.py プロジェクト: stonewell/qtile
    def _render_surface(self, surface: Surface, sx: int, sy: int,
                        rdata: Tuple) -> None:
        texture = surface.get_texture()
        if texture is None:
            return

        now, window, wx, wy, opacity, scale = rdata
        x = (wx + sx) * scale
        y = (wy + sy) * scale
        width = surface.current.width * scale
        height = surface.current.height * scale
        transform_matrix = self.transform_matrix

        if window.borderwidth:
            bw = int(window.borderwidth * scale)

            if surface == window.surface.surface:
                outer_w = width + bw * 2
                outer_h = height + bw * 2
                num = len(window.bordercolor)
                bws = [bw // num] * num
                for i in range(bw % num):
                    bws[i] += 1
                coord = 0
                for i, bc in enumerate(window.bordercolor):
                    border = Box(
                        int(x + coord),
                        int(y + coord),
                        int(outer_w - coord * 2),
                        int(bws[i]),
                    )
                    self.renderer.render_rect(border, bc,
                                              transform_matrix)  # Top border
                    border.y = int(y + outer_h - bws[i] - coord)
                    self.renderer.render_rect(
                        border, bc, transform_matrix)  # Bottom border
                    border.y = int(y + coord)
                    border.width = int(bws[i])
                    border.height = int(outer_h - coord * 2)
                    self.renderer.render_rect(border, bc,
                                              transform_matrix)  # Left border
                    border.x = int(x + outer_w - bws[i] - coord)
                    self.renderer.render_rect(border, bc,
                                              transform_matrix)  # Right border
                    coord += bws[i]

            x += bw
            y += bw

        box = Box(
            int(x),
            int(y),
            int(width),
            int(height),
        )

        inverse = wlrOutput.transform_invert(surface.current.transform)
        matrix = Matrix.project_box(box, inverse, 0, transform_matrix)
        self.renderer.render_texture_with_matrix(texture, matrix, opacity)
        surface.send_frame_done(now)
コード例 #2
0
ファイル: server.py プロジェクト: SimpleAccess/pywlroots
    def _render_surface(
        self, surface: Surface, sx: int, sy: int, data: Tuple[Output, View, Timespec]
    ) -> None:
        output, view, now = data

        texture = surface.get_texture()
        if texture is None:
            return

        ox, oy = self._output_layout.output_coords(output)
        ox += view.x + sx
        oy += view.y + sy
        box = Box(
            int(ox * output.scale),
            int(oy * output.scale),
            int(surface.current.width * output.scale),
            int(surface.current.height * output.scale),
        )

        transform = surface.current.transform
        inverse = Output.transform_invert(transform)

        matrix = Matrix.project_box(box, inverse, 0, output.transform_matrix)

        self._renderer.render_texture_with_matrix(texture, matrix, 1)
        surface.send_frame_done(now)
コード例 #3
0
ファイル: output.py プロジェクト: stonewell/qtile
    def __init__(self, core: Core, wlr_output: wlrOutput):
        self.core = core
        self.renderer = core.renderer
        self.wlr_output = wlr_output
        wlr_output.data = self
        self.output_layout = self.core.output_layout
        self._damage: OutputDamage = OutputDamage(wlr_output)
        self.wallpaper = None
        self.transform_matrix = wlr_output.transform_matrix
        self.x, self.y = self.output_layout.output_coords(wlr_output)

        self.add_listener(wlr_output.destroy_event, self._on_destroy)
        self.add_listener(self._damage.frame_event, self._on_frame)

        # The layers enum indexes into this list to get a list of surfaces
        self.layers: List[List[Static]] = [
            [] for _ in range(len(LayerShellV1Layer))
        ]

        # This is run during tests, when we want to fix the output's geometry
        if wlr_output.is_headless and "PYTEST_CURRENT_TEST" in os.environ:
            assert len(core.outputs) < 2, "This should not be reached"
            if not core.outputs:
                # First test output
                wlr_output.set_custom_mode(800, 600, 0)
            else:
                # Secound test output
                wlr_output.set_custom_mode(640, 480, 0)
            wlr_output.commit()
コード例 #4
0
ファイル: server.py プロジェクト: flacjacket/pywlroots
    def server_new_output(self, listener, output: Output) -> None:
        output.init_render(self._allocator, self._renderer)

        if output.modes != []:
            mode = output.preferred_mode()
            if mode is None:
                logger.error("Got no output mode")
                return
            output.set_mode(mode)
            output.enable()
            output.commit()

        self.outputs.append(output)
        self._output_layout.add_auto(output)

        output.frame_event.add(Listener(self.output_frame))
コード例 #5
0
    def _render_surface(self, surface: Surface, sx: int, sy: int,
                        rdata: Tuple) -> None:
        texture = surface.get_texture()
        if texture is None:
            return

        now, window, wx, wy, opacity, scale = rdata
        x = (wx + sx) * scale
        y = (wy + sy) * scale
        width = surface.current.width * scale
        height = surface.current.height * scale
        transform_matrix = self.transform_matrix

        if window.borderwidth:
            bw = window.borderwidth * scale

            if surface == window.surface.surface:
                bc = window.bordercolor
                border = Box(
                    int(x),
                    int(y),
                    int(width + bw * 2),
                    int(bw),
                )
                x += bw
                y += bw
                self.renderer.render_rect(border, bc,
                                          transform_matrix)  # Top border
                border.y = int(y + height)
                self.renderer.render_rect(border, bc,
                                          transform_matrix)  # Bottom border
                border.y = int(y - bw)
                border.width = int(bw)
                border.height = int(height + bw * 2)
                self.renderer.render_rect(border, bc,
                                          transform_matrix)  # Left border
                border.x = int(x + width)
                self.renderer.render_rect(border, bc,
                                          transform_matrix)  # Right border
            else:
                x += bw
                y += bw

        box = Box(
            int(x),
            int(y),
            int(width),
            int(height),
        )

        inverse = wlrOutput.transform_invert(surface.current.transform)
        matrix = Matrix.project_box(box, inverse, 0, transform_matrix)
        self.renderer.render_texture_with_matrix(texture, matrix, opacity)
        surface.send_frame_done(now)
コード例 #6
0
    def _on_new_output(self, _listener, wlr_output: wlrOutput):
        logger.debug("Signal: backend new_output_event")
        if wlr_output.modes != []:
            mode = wlr_output.preferred_mode()
            if mode is None:
                logger.error("New output has no output mode")
                return
            wlr_output.set_mode(mode)
            wlr_output.enable()
            wlr_output.commit()

        self.outputs.append(output.Output(self, wlr_output))
        self.output_layout.add_auto(wlr_output)
コード例 #7
0
    def _on_new_output(self, _listener, wlr_output: wlrOutput):
        logger.debug("Signal: backend new_output_event")

        wlr_output.init_render(self._allocator, self.renderer)

        if wlr_output.modes != []:
            mode = wlr_output.preferred_mode()
            if mode is None:
                logger.error("New output has no output mode")
                return
            wlr_output.set_mode(mode)
            wlr_output.enable()
            wlr_output.commit()

        self.outputs.append(Output(self, wlr_output))
        # Put new output at far right
        layout_geo = self.output_layout.get_box()
        self.output_layout.add(wlr_output, layout_geo.width, 0)

        if not self._current_output:
            self._current_output = self.outputs[0]
コード例 #8
0
ファイル: output.py プロジェクト: hschauhan/qtile
    def __init__(self, core: Core, wlr_output: wlrOutput):
        self.core = core
        self.renderer = core.renderer
        self.wlr_output = wlr_output
        wlr_output.data = self
        self.output_layout = self.core.output_layout
        self.damage: OutputDamage = OutputDamage(wlr_output)
        self.wallpaper = None
        self.transform_matrix = wlr_output.transform_matrix
        self.x, self.y = self.output_layout.output_coords(wlr_output)

        self.add_listener(wlr_output.destroy_event, self._on_destroy)
        self.add_listener(self.damage.frame_event, self._on_frame)

        # The layers enum indexes into this list to get a list of surfaces
        self.layers: List[List[Static]] = [[]] * len(LayerShellV1Layer)
コード例 #9
0
ファイル: output.py プロジェクト: m-col/qtile
 def _render_dnd_icon(
     self, dnd: Dnd, now: Timespec, scale: float, transform_matrix: Matrix
 ) -> None:
     """Render the drag-n-drop icon if there is one."""
     icon = dnd.wlr_drag.icon
     if icon.mapped:
         texture = icon.surface.get_texture()
         if texture:
             box = Box(
                 int((dnd.x - self.x) * scale),
                 int((dnd.y - self.y) * scale),
                 int(icon.surface.current.width * scale),
                 int(icon.surface.current.height * scale),
             )
             inverse = wlrOutput.transform_invert(icon.surface.current.transform)
             matrix = Matrix.project_box(box, inverse, 0, transform_matrix)
             self.renderer.render_texture_with_matrix(texture, matrix, 1)
             icon.surface.send_frame_done(now)
コード例 #10
0
ファイル: server.py プロジェクト: SimpleAccess/pywlroots
    def server_new_output(self, listener, output: Output) -> None:
        if output.modes != []:
            mode = output.preferred_mode()
            if mode is None:
                logger.error("Got no output mode")
                return
            output.set_mode(mode)
            output.enable()

            if not output.commit():
                logger.error("Unable to commit output")
                return

        self.outputs.append(output)
        self._output_layout.add_auto(output)

        output.frame_event.add(Listener(self.output_frame))