Beispiel #1
0
    def on_system_paint(self, ev):
        bitmap = self.bitmap
        painter = Painter(self.bitmap)
        border = self.border_width()
        width = self.window_width()
        height = self.window_height()
        caption_color = SteelBlue if self.active() else LightSteelBlue
        border_color = 0xaaffffff & caption_color
        if self.attr() & WND_TRANSPARENT:
            painter.clear()
        else:
            painter.fill_rect(self.margin_left(), self.margin_top(),
                              self.width(), self.height(), White)
        if self.attr() & WND_FRAME:
            rc = Rect(0, 0, self.window_width() - 1, self.window_height() - 1)
            max_alpha = 40 if self.active() else 20
            dalpha = max_alpha / DEFAULT_BORDER_WIDTH
            for i in xrange(DEFAULT_BORDER_WIDTH - 1):
                painter.set_pen_color(i * dalpha << 24)
                painter.draw_rect(rc)
                rc.adjust(1, 1, -1, -1)
            painter.set_pen_color(caption_color)
            painter.draw_rect(rc)
        if self.attr() & WND_CAPTION:
            # fill caption
            caption_color &= 0xddffffff
            caption_rc = Rect(border, border, width - 2 * border,
                              self.caption_height())
            painter.fill_rect(rc, caption_color)

            # draw title
            painter.set_pen_color(White)
            rc = caption_rc.translated(10, 0)
            painter.draw_text(rc, Painter.AlignLeft | Painter.AlignVCenter,
                              self.title_)

            # draw close/maximize/minimize
            painter.save()
            painter.set_pen_color(DarkWhite)
            painter.set_render_hint(Painter.Antialiasing)
            # close
            painter.set_pen_width(2)
            rc = Rect(self.close_rect())
            painter.draw_line(rc.top_left(), rc.bottom_right())
            painter.draw_line(rc.top_right(), rc.bottom_left())
            # maximize
            painter.draw_rect(Rect(self.maximize_rect()))
            # minimize
            rc = Rect(self.minimize_rect())
            painter.draw_line(rc.bottom_left(), rc.bottom_right())
            painter.restore()