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() bg_color_gdk = style_context.get_background_color(state_flags) bg_color = RGBColor.new_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 = RGBColor.new_from_gdk_rgba(gdkrgba) gdkrgba = style_context.get_background_color(state_flags | gtk.StateFlags.NORMAL) insertion_color = RGBColor.new_from_gdk_rgba(gdkrgba) # 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() bg_color_gdk = style_context.get_background_color(state_flags) bg_color = RGBColor.new_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 = RGBColor.new_from_gdk_rgba(gdkrgba) gdkrgba = style_context.get_background_color( state_flags | gtk.StateFlags.NORMAL) insertion_color = RGBColor.new_from_gdk_rgba(gdkrgba) # 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 check_color_input(value): """Check a value is a valid colour input. Returns a parsed `RGBColor` instance if so, raises ValueError otherwise. """ value = value.lower() # Trim a leading hash if value.startswith("#"): value = value[1:] if len(value) != 6: raise ValueError( "Color should be six hexadecimal digits, got %r (%s)" % (value, len(value))) if re.sub(r"[a-f0-9]", "", value): raise ValueError("Color should only contain hex characters, got %r" % value) red = int(value[0:2], base=16) green = int(value[2:4], base=16) blue = int(value[4:6], base=16) return RGBColor(red, green, blue)
def color_details_dialog_cb(self, action): mgr = self.app.brush_color_manager new_col = RGBColor.new_from_dialog( title=_("Set current color"), color=mgr.get_color(), previous_color=mgr.get_previous_color(), parent=self) if new_col is not None: mgr.set_color(new_col)
def drag_data_received(self, widget, context, x, y, selection, info, t): if info == 1: if selection.data: uri = selection.data.split("\r\n")[0] fn = helpers.uri2filename(uri) if os.path.exists(fn): if self.app.filehandler.confirm_destructive_action(): self.app.filehandler.open_file(fn) elif info == 2: # color color = RGBColor.new_from_drag_data(selection.data) self.app.brush_color_manager.set_color(color) self.app.brush_color_manager.push_history(color)
def _drag_data_received_cb(self, widget, context, x, y, data, info, time): """Handles data being received""" rawdata = data.get_data() if not rawdata: return if info == 1: # file uris uri = rawdata.split("\r\n")[0] fn = helpers.uri2filename(uri) if os.path.exists(fn): if self.app.filehandler.confirm_destructive_action(): self.app.filehandler.open_file(fn) elif info == 2: # color color = RGBColor.new_from_drag_data(rawdata) self.app.brush_color_manager.set_color(color) self.app.brush_color_manager.push_history(color)
def __init__(self, color=None): """Initialize with a color (default is black""" Gtk.AspectFrame.__init__(self, xalign=0.5, yalign=0.5, ratio=1.0, obey_child=False) self.set_shadow_type(Gtk.ShadowType.IN) self.drawingarea = Gtk.DrawingArea() self.add(self.drawingarea) if color is None: color = RGBColor(0, 0, 0) self._color = color self.drawingarea.set_size_request(8, 8) self.drawingarea.connect("draw", self._draw_cb)
def _style_updated_cb(self, widget, *a): """Callback: updates colors in response to the style changing. """ style_context = widget.get_style_context() text_colors_new = self._text_colors.copy() f_norm = gtk.StateFlags.NORMAL f_pre = gtk.StateFlags.PRELIGHT f_active = gtk.StateFlags.ACTIVE f_sel = gtk.StateFlags.SELECTED style_info = [ ("normal", f_norm, False), ("normal_pre", f_norm|f_pre, False), ("active", f_active, True), ("active_pre", f_active|f_pre, True), ("selected", f_sel, False), ("selected_pre", f_sel|f_pre, False), ] for key, flags, inverse_video in style_info: fg_rgba = style_context.get_color(flags) bg_rgba = style_context.get_background_color(flags) fg = RGBColor.new_from_gdk_rgba(fg_rgba) bg = RGBColor.new_from_gdk_rgba(bg_rgba) if inverse_video: fg, bg = bg, fg text_colors_new[key] = (fg, bg) leading_new = self._leading font_description = style_context.get_font(gtk.StateFlags.NORMAL) if font_description: leading_new = font_description.get_size() / 6 style_changed = (self._leading != leading_new or self._text_colors != text_colors_new) if style_changed: self._leading = leading_new self._text_colors = text_colors_new self.queue_draw()