Exemplo n.º 1
0
    def __init__(self, tree_view):
        Gtk.CellRendererText.__init__(self)
        self._tree_view = tree_view
        screen = Gdk.Screen.get_default()

        self.props.font_desc = Pango.FontDescription('sans 16')
        self.props.wrap_width = screen.get_width()
        self.props.wrap_mode = Pango.WrapMode.WORD_CHAR

        if not NEW_INVOKER:
            self._invoker = CellRendererInvoker()
            self._invoker.attach_cell_renderer(tree_view, self)
Exemplo n.º 2
0
class TextRenderer(Gtk.CellRendererText):

    def __init__(self, tree_view):
        Gtk.CellRendererText.__init__(self)
        self._tree_view = tree_view
        screen = Gdk.Screen.get_default()

        self.props.font_desc = Pango.FontDescription('sans 16')
        self.props.wrap_width = screen.get_width()
        self.props.wrap_mode = Pango.WrapMode.WORD_CHAR

        if not NEW_INVOKER:
            self._invoker = CellRendererInvoker()
            self._invoker.attach_cell_renderer(tree_view, self)

    def create_palette(self):
        model = self._tree_view.get_model()
        row = list(model[self._invoker.path])
        return ItemPalette(row, self._tree_view)
Exemplo n.º 3
0
    def __init__(self, tree_view):
        from sugar3.graphics.palette import CellRendererInvoker

        self._buffer = _IconBuffer()
        self._buffer.cache = True
        self._xo_color = None
        self._fill_color = None
        self._stroke_color = None
        self._prelit_fill_color = None
        self._prelit_stroke_color = None
        self._active_state = False
        self._palette_invoker = CellRendererInvoker()

        Gtk.CellRenderer.__init__(self)

        tree_view.connect('button-press-event', self.__button_press_event_cb)
        tree_view.connect('button-release-event',
                          self.__button_release_event_cb)

        self._palette_invoker.attach_cell_renderer(tree_view, self)
Exemplo n.º 4
0
    def __init__(self, tree_view):
        from sugar3.graphics.palette import CellRendererInvoker

        self._buffer = _IconBuffer()
        self._buffer.cache = True
        self._xo_color = None
        self._fill_color = None
        self._stroke_color = None
        self._prelit_fill_color = None
        self._prelit_stroke_color = None
        self._active_state = False
        self._palette_invoker = CellRendererInvoker()

        Gtk.CellRenderer.__init__(self)

        tree_view.connect('button-press-event',
                          self.__button_press_event_cb)
        tree_view.connect('button-release-event',
                          self.__button_release_event_cb)

        self._palette_invoker.attach_cell_renderer(tree_view, self)
Exemplo n.º 5
0
class CellRendererIcon(Gtk.CellRenderer):

    __gtype_name__ = 'SugarCellRendererIcon'

    __gsignals__ = {
        'clicked': (GObject.SignalFlags.RUN_FIRST, None, [object]),
    }

    def __init__(self, tree_view):
        from sugar3.graphics.palette import CellRendererInvoker

        self._buffer = _IconBuffer()
        self._buffer.cache = True
        self._xo_color = None
        self._fill_color = None
        self._stroke_color = None
        self._prelit_fill_color = None
        self._prelit_stroke_color = None
        self._active_state = False
        self._palette_invoker = CellRendererInvoker()

        Gtk.CellRenderer.__init__(self)

        tree_view.connect('button-press-event',
                          self.__button_press_event_cb)
        tree_view.connect('button-release-event',
                          self.__button_release_event_cb)

        self._palette_invoker.attach_cell_renderer(tree_view, self)

    def __del__(self):
        self._palette_invoker.detach()

    def __button_press_event_cb(self, widget, event):
        if self._point_in_cell_renderer(widget, event.x, event.y):
            self._active_state = True

    def __button_release_event_cb(self, widget, event):
        self._active_state = False

    def create_palette(self):
        return None

    def get_palette_invoker(self):
        return self._palette_invoker

    palette_invoker = GObject.property(type=object, getter=get_palette_invoker)

    def set_file_name(self, value):
        if self._buffer.file_name != value:
            self._buffer.file_name = value

    file_name = GObject.property(type=str, setter=set_file_name)

    def set_icon_name(self, value):
        if self._buffer.icon_name != value:
            self._buffer.icon_name = value

    icon_name = GObject.property(type=str, setter=set_icon_name)

    def get_xo_color(self):
        return self._xo_color

    def set_xo_color(self, value):
        self._xo_color = value

    xo_color = GObject.property(type=object,
                                getter=get_xo_color, setter=set_xo_color)

    def set_fill_color(self, value):
        if self._fill_color != value:
            self._fill_color = value

    fill_color = GObject.property(type=object, setter=set_fill_color)

    def set_stroke_color(self, value):
        if self._stroke_color != value:
            self._stroke_color = value

    stroke_color = GObject.property(type=object, setter=set_stroke_color)

    def set_prelit_fill_color(self, value):
        if self._prelit_fill_color != value:
            self._prelit_fill_color = value

    prelit_fill_color = GObject.property(type=object,
                                         setter=set_prelit_fill_color)

    def set_prelit_stroke_color(self, value):
        if self._prelit_stroke_color != value:
            self._prelit_stroke_color = value

    prelit_stroke_color = GObject.property(type=object,
                                           setter=set_prelit_stroke_color)

    def set_background_color(self, value):
        if self._buffer.background_color != value:
            self._buffer.background_color = value

    background_color = GObject.property(type=object,
                                        setter=set_background_color)

    def set_size(self, value):
        if self._buffer.width != value:
            self._buffer.width = value
            self._buffer.height = value

    size = GObject.property(type=object, setter=set_size)

    def do_get_size(self, widget, cell_area, x_offset=None, y_offset=None,
                    width=None, height=None):
        width = self._buffer.width + self.props.xpad * 2
        height = self._buffer.height + self.props.ypad * 2
        xoffset = 0
        yoffset = 0

        if width > 0 and height > 0 and cell_area is not None:

            if widget.get_direction() == Gtk.TextDirection.RTL:
                xoffset = 1.0 - self.props.xalign
            else:
                xoffset = self.props.xalign

            xoffset = max(xoffset * (cell_area.width - width), 0)
            yoffset = max(self.props.yalign * (cell_area.height - height), 0)

        return xoffset, yoffset, width, height

    def do_activate(self, event, widget, path, background_area, cell_area,
                    flags):
        pass

    def do_start_editing(self, event, widget, path, background_area, cell_area,
                         flags):
        pass

    def _point_in_cell_renderer(self, tree_view, x=None, y=None):
        """Check if the point with coordinates x, y is inside this icon.

        If the x, y coordinates are not given, they are taken from the
        pointer current position.

        """
        if x is None and y is None:
            x, y = tree_view.get_pointer()
            x, y = tree_view.convert_widget_to_bin_window_coords(x, y)
        pos = tree_view.get_path_at_pos(int(x), int(y))
        if pos is None:
            return False

        path_, column, x, y_ = pos

        for cell_renderer in column.get_cells():
            if cell_renderer == self:
                cell_x, cell_width = column.cell_get_position(cell_renderer)
                if x > cell_x and x < (cell_x + cell_width):
                    return True
                return False

        return False

    def do_render(self, cr, widget, background_area, cell_area, flags):
        context = widget.get_style_context()
        context.save()
        context.add_class("sugar-icon-cell")

        pointer_inside = self._point_in_cell_renderer(widget)

        # The context will have prelight state if the mouse pointer is
        # in the entire row, but we want that state if the pointer is
        # in this cell only:
        if flags & Gtk.CellRendererState.PRELIT:
            if pointer_inside:
                if self._active_state:
                    context.set_state(Gtk.StateFlags.ACTIVE)
            else:
                context.set_state(Gtk.StateFlags.NORMAL)

        Gtk.render_background(
            context, cr, background_area.x, background_area.y,
            background_area.width, background_area.height)

        Gtk.render_frame(context, cr, background_area.x, background_area.y,
                         background_area.width, background_area.height)

        if self._xo_color is not None:
            stroke_color = self._xo_color.get_stroke_color()
            fill_color = self._xo_color.get_fill_color()
            prelit_fill_color = None
            prelit_stroke_color = None
        else:
            stroke_color = self._stroke_color
            fill_color = self._fill_color
            prelit_fill_color = self._prelit_fill_color
            prelit_stroke_color = self._prelit_stroke_color

        has_prelit_colors = None not in [prelit_fill_color,
                                         prelit_stroke_color]

        if flags & Gtk.CellRendererState.PRELIT and has_prelit_colors and \
                pointer_inside:

            self._buffer.fill_color = prelit_fill_color
            self._buffer.stroke_color = prelit_stroke_color
        else:
            self._buffer.fill_color = fill_color
            self._buffer.stroke_color = stroke_color

        surface = self._buffer.get_surface()
        if surface is None:
            return

        xoffset, yoffset, width_, height_ = self.do_get_size(widget, cell_area)

        x = cell_area.x + xoffset
        y = cell_area.y + yoffset

        cr.set_source_surface(surface, math.floor(x), math.floor(y))
        cr.rectangle(cell_area.x, cell_area.y, cell_area.width,
                     cell_area.height)
        cr.clip()
        cr.paint()