def draw_cb(self, widget, cr): # Paint the base color, and the list's pixbuf. state_flags = widget.get_state_flags() style_context = widget.get_style_context() style_context.save() bg_color_gdk = style_context.get_background_color(state_flags) bg_color = uicolor.from_gdk_rgba(bg_color_gdk) cr.set_source_rgb(*bg_color.get_rgb()) cr.paint() Gdk.cairo_set_source_pixbuf(cr, self.pixbuf, 0, 0) cr.paint() # border colors gdkrgba = style_context.get_background_color(state_flags | Gtk.StateFlags.SELECTED) selected_color = uicolor.from_gdk_rgba(gdkrgba) gdkrgba = style_context.get_background_color(state_flags | Gtk.StateFlags.NORMAL) insertion_color = uicolor.from_gdk_rgba(gdkrgba) style_context.restore() # Draw borders last_i = len(self.itemlist) - 1 for i, b in enumerate(self.itemlist): rect_color = None if b is self.selected: rect_color = selected_color elif i == self.drag_insertion_index \ or (i == last_i and self.drag_insertion_index > i): rect_color = insertion_color if rect_color is None: continue x = (i % self.tiles_w) * self.total_w y = (i // self.tiles_w) * self.total_h w = self.total_w h = self.total_h def shrink(pixels, x, y, w, h): x += pixels y += pixels w -= 2 * pixels h -= 2 * pixels return (x, y, w, h) x, y, w, h = shrink(self.spacing_outside, x, y, w, h) for j in range(self.border_visible_outside_cell): x, y, w, h = shrink(-1, x, y, w, h) for j in xrange(self.border_visible + self.border_visible_outside_cell): cr.set_source_rgb(*rect_color.get_rgb()) cr.rectangle(x, y, w - 1, h - 1) # FIXME: check pixel alignment cr.stroke() x, y, w, h = shrink(1, x, y, w, h) return True
def draw_cb(self, widget, cr): # Paint the base color, and the list's pixbuf. state_flags = widget.get_state_flags() style_context = widget.get_style_context() style_context.save() bg_color_gdk = style_context.get_background_color(state_flags) bg_color = uicolor.from_gdk_rgba(bg_color_gdk) cr.set_source_rgb(*bg_color.get_rgb()) cr.paint() Gdk.cairo_set_source_pixbuf(cr, self.pixbuf, 0, 0) cr.paint() # border colors gdkrgba = style_context.get_background_color( state_flags | Gtk.StateFlags.SELECTED) selected_color = uicolor.from_gdk_rgba(gdkrgba) gdkrgba = style_context.get_background_color( state_flags | Gtk.StateFlags.NORMAL) insertion_color = uicolor.from_gdk_rgba(gdkrgba) style_context.restore() # Draw borders last_i = len(self.itemlist) - 1 for i, b in enumerate(self.itemlist): rect_color = None if b is self.selected: rect_color = selected_color elif i == self.drag_insertion_index \ or (i == last_i and self.drag_insertion_index > i): rect_color = insertion_color if rect_color is None: continue x = (i % self.tiles_w) * self.total_w y = (i // self.tiles_w) * self.total_h w = self.total_w h = self.total_h def shrink(pixels, x, y, w, h): x += pixels y += pixels w -= 2*pixels h -= 2*pixels return (x, y, w, h) x, y, w, h = shrink(self.spacing_outside, x, y, w, h) for j in range(self.border_visible_outside_cell): x, y, w, h = shrink(-1, x, y, w, h) for j in xrange(self.border_visible + self.border_visible_outside_cell): cr.set_source_rgb(*rect_color.get_rgb()) cr.rectangle(x, y, w-1, h-1) # FIXME: check pixel alignment cr.stroke() x, y, w, h = shrink(1, x, y, w, h) return True