コード例 #1
0
ファイル: pixbuflist.py プロジェクト: j-fu/mypaint
    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
コード例 #2
0
ファイル: pixbuflist.py プロジェクト: gwojcik/mypaint
    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
コード例 #3
0
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)
コード例 #4
0
 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)
コード例 #5
0
ファイル: drawwindow.py プロジェクト: jana-choi/OpenSource
 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)
コード例 #6
0
 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)
コード例 #7
0
ファイル: drawwindow.py プロジェクト: jana-choi/OpenSource
 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)
コード例 #8
0
ファイル: drawwindow.py プロジェクト: Xananax/dopey
 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)
コード例 #9
0
 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)
コード例 #10
0
    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()