def update_gui(self, event=None): """Repaint the amount of the GUI that needs repainting. Compute the dirty rectangle from the union of self.repaint_hexlabels and the event's area. """ if not self.area or not self.area.get_window(): return if event is None: if not self.repaint_hexlabels: return else: clip_rect = self.bounding_rect_for_hexlabels( self.repaint_hexlabels) else: if self.repaint_hexlabels: clip_rect = guiutils.combine_rectangles( event.area, self.bounding_rect_for_hexlabels(self.repaint_hexlabels)) else: clip_rect = event.area x, y, width, height = self.allocation surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ctx = cairo.Context(surface) ctx.set_line_width(round(0.2 * self.scale)) ctx.rectangle(*clip_rect) ctx.clip() # white background, only when we get an event if event is not None: ctx.set_source_rgb(1, 1, 1) width, height = self.area.size_request() # Overdraw to avoid gray if window is enlarged. ctx.rectangle(0, 0, 2 * width, 2 * height) ctx.fill() for hexlabel in self.repaint_hexlabels: ctx.set_source_rgb(1, 1, 1) guihex = self.guihexes[hexlabel] x, y, width, height = guihex.bounding_rect ctx.rectangle(x, y, width, height) ctx.fill() for guihex in self.guihexes.itervalues(): if guiutils.rectangles_intersect(clip_rect, guihex.bounding_rect): guihex.update_gui(ctx) self.draw_chits(ctx) ctx2 = self.area.get_window().cairo_create() ctx2.set_source_surface(surface) ctx2.paint() self.repaint_hexlabels.clear()
def update_gui(self, event=None): """Repaint the amount of the GUI that needs repainting. Compute the dirty rectangle from the union of self.repaint_hexlabels and the event's area. """ if not self.area or not self.area.get_window(): return if event is None: if not self.repaint_hexlabels: return else: clip_rect = self.bounding_rect_for_hexlabels( self.repaint_hexlabels) else: if self.repaint_hexlabels: clip_rect = guiutils.combine_rectangles( event.area, self.bounding_rect_for_hexlabels( self.repaint_hexlabels)) else: clip_rect = event.area ctx = self.area.get_window().cairo_create() ctx.set_line_width(round(0.2 * self.scale)) ctx.rectangle(*clip_rect) ctx.clip() # white background, only when we get an event if event is not None: ctx.set_source_rgb(1, 1, 1) width, height = self.area.size_request() ctx.rectangle(0, 0, width, height) ctx.fill() for hexlabel in self.clear_hexlabels: ctx.set_source_rgb(1, 1, 1) guihex = self.guihexes[hexlabel] x, y, width, height = guihex.bounding_rect ctx.rectangle(x, y, width, height) ctx.fill() for guihex in self.guihexes.itervalues(): if guiutils.rectangles_intersect(clip_rect, guihex.bounding_rect): guihex.update_gui(ctx) self.repaint_hexlabels.clear() self.clear_hexlabels.clear()
def update_gui(self, event=None): """Repaint the amount of the GUI that needs repainting. Compute the dirty rectangle from the union of self.repaint_hexlabels and the event's area. """ if not self.area or not self.area.get_window(): return if event is None: if not self.repaint_hexlabels: return else: clip_rect = self.bounding_rect_for_hexlabels( self.repaint_hexlabels) else: if self.repaint_hexlabels: clip_rect = guiutils.combine_rectangles( event.area, self.bounding_rect_for_hexlabels(self.repaint_hexlabels)) else: clip_rect = event.area ctx = self.area.get_window().cairo_create() ctx.set_line_width(round(0.2 * self.scale)) ctx.rectangle(*clip_rect) ctx.clip() # white background, only when we get an event if event is not None: ctx.set_source_rgb(1, 1, 1) width, height = self.area.size_request() ctx.rectangle(0, 0, width, height) ctx.fill() for hexlabel in self.clear_hexlabels: ctx.set_source_rgb(1, 1, 1) guihex = self.guihexes[hexlabel] x, y, width, height = guihex.bounding_rect ctx.rectangle(x, y, width, height) ctx.fill() for guihex in self.guihexes.itervalues(): if guiutils.rectangles_intersect(clip_rect, guihex.bounding_rect): guihex.update_gui(ctx) self.repaint_hexlabels.clear() self.clear_hexlabels.clear()