def _on_draw(self, widget, context): #_logger.debug("Draw: clip_extents=" + str(context.clip_extents())) #self.get_window().set_debug_updates(True) if not Gtk.cairo_should_draw_window(context, self.get_window()): return clip_rect = Rect.from_extents(*context.clip_extents()) # draw background decorated = self.draw_background(context) # On first run quickly overwrite the background only. # This gives a slightly smoother startup with desktop remnants # flashing though for a shorter time. if self._first_draw: self._first_draw = False self.queue_draw() return if not self.layout: return # run through all visible layout items layer_ids = self.layout.get_layer_ids() for item in self.layout.iter_visible_items(): if item.layer_id: # draw layer background layer_index = layer_ids.index(item.layer_id) parent = item.parent if parent and \ layer_index != 0: rect = parent.get_canvas_rect() context.rectangle(*rect.inflate(1)) if self.color_scheme: rgba = self.color_scheme.get_layer_fill_rgba(layer_index) else: rgba = [0.5, 0.5, 0.5, 0.9] context.set_source_rgba(*rgba) context.fill() self.draw_dish_key_background(context, 1.0, item.layer_id) # draw key if item.is_key() and \ clip_rect.intersects(item.get_canvas_rect()): item.draw(context) item.draw_image(context) item.draw_label(context) # draw touch handles (enlarged move and resize handles) if self.touch_handles.active: corner_radius = config.CORNER_RADIUS if decorated else 0 self.touch_handles.set_corner_radius(corner_radius) self.touch_handles.draw(context)
def get_damage_rect(self, context): clip_rect = Rect.from_extents(*context.clip_extents()) # Draw a little more than just the clip_rect. # Prevents glitches around pressed keys in at least classic theme. layout = self.get_layout() if layout: extra_size = layout.context.scale_log_to_canvas((2.0, 2.0)) else: extra_size = 0, 0 return clip_rect.inflate(*extra_size)
def canvas_to_root_window_rect(window, rect): """ Convert rect in canvas coordinates to root window coordinates. """ gdk_win = window.get_window() if gdk_win: x0, y0 = gdk_win.get_root_coords(rect.x, rect.y) x1, y1 = gdk_win.get_root_coords(rect.x + rect.w, rect.y + rect.h) rect = Rect.from_extents(x0, y0, x1, y1) else: rect = Rect() return rect
def draw(self, context): if self.opacity: clip_rect = Rect.from_extents(*context.clip_extents()) for handle in self.handles: rect = handle.get_shadow_rect() if rect.intersects(clip_rect): context.save() context.rectangle(*rect.int()) context.clip() context.push_group() handle.draw(context) context.pop_group_to_source() context.paint_with_alpha(self.opacity); context.restore()
def draw(self, context): if self.opacity: clip_rect = Rect.from_extents(*context.clip_extents()) for handle in self.handles: rect = handle.get_shadow_rect() if rect.intersects(clip_rect): context.save() context.rectangle(*rect.int()) context.clip() context.push_group() handle.draw(context) context.pop_group_to_source() context.paint_with_alpha(self.opacity) context.restore()