def invalidate(self, invalid_rcs, draw_mouse=True): assert all(isinstance(rc, Rect) for rc in invalid_rcs) update_rcs = map(Rect, invalid_rcs) self.debug('invalidate', {'rects': update_rcs}) wnds_to_draw = [] for wnd in reversed(self.wnds): new_invalid_rcs = [] for invalid_rc in invalid_rcs: draw_rc = invalid_rc.intersected( wnd.window_rect_in_screen_coord()) if draw_rc.is_empty(): new_invalid_rcs.append(invalid_rc) else: wnds_to_draw.append((wnd, draw_rc)) if wnd.attr() & WND_TRANSPARENT: new_invalid_rcs.append(invalid_rc) else: new_invalid_rcs.extend(invalid_rc - draw_rc) invalid_rcs = new_invalid_rcs painter = Painter(self.screen) for wnd, rc in reversed(wnds_to_draw): self.blit_window(painter, wnd, rc) if draw_mouse: painter.draw_bitmap(self.mouse_x, self.mouse_y, self.mouse_img) for rc in update_rcs: self.update_screen(rc)
def on_paint(self, ev): painter = Painter(self) painter.draw_bitmap(0, 0, self.im) for i, icon in enumerate(self.icons): x = ICON_MARGIN y = ICON_MARGIN + i * (ICON_SIZE + ICON_MARGIN) if i == self.cur_icon: rc = Rect(x, y, ICON_SIZE, ICON_SIZE) dx = ICON_SIZE / 10 rc.adjust(-dx, -dx, dx, dx) painter.fill_rect(rc, SteelBlue) painter.draw_bitmap(x, y, icon)
def on_paint(self, ev): painter = Painter(self) painter.draw_bitmap(0, 0, self.im)
def update_screen(self, rc): painter = Painter(Bitmap(self.video_mem)) painter.draw_bitmap(rc, self.screen, rc)