[Sugar-devel] [PATCH sugar 1/7] SugarEventIcon: Add a hippo-free implementation of the CanvasIcon
Simon Schampijer
simon at schampijer.de
Tue Aug 7 08:51:10 EDT 2012
On 08/07/2012 09:41 AM, Simon Schampijer wrote:
> On 08/06/2012 03:53 PM, Benjamin Berg wrote:
>> On Mon, 2012-08-06 at 15:49 +0200, Sascha Silbe wrote:
>>> Benjamin Berg <benzea at sugarlabs.org> writes:
>>>>> + # HACK to supress the grey background around the icon
>>>>> + # won't be needed in GTK3
>>>>> + self.modify_bg(gtk.STATE_NORMAL,
>>>>> style.COLOR_WHITE.get_gdk_color())
>>>>
>>>> Not really too bad, but I am pretty sure that
>>>> gtk.EventBox.set_visible_window(False) should work fine here.
>>>
>>> Doesn't look that way to me:
>>
>> Oh, thanks for the screenshot. That is kinda obvious. One needs to add
>> allocation.x and allocation.y to the coordinates if you don't have a
>> visible window.
>>
>> So:
>>
>> + def do_expose_event(self, event):
>> + surface = self._buffer.get_surface()
>> + if surface:
>> + allocation = self.get_allocation()
>> +
>> + x = (allocation.width - surface.get_width()) / 2
>> + y = (allocation.height - surface.get_height()) / 2
>> +
>> + cr = self.window.cairo_create()
>> + cr.set_source_surface(surface, x, y)
>> + if self._alpha == 1.0:
>> + cr.paint()
>> + else:
>> + cr.paint_with_alpha(self._alpha)
>>
>>
>> Also change the x/y calculation to add allocation.x and allocation.y
>> respectively. Then things should work fine.
>>
>> Benjamin
>
>
> diff --git a/src/jarabe/view/eventicon.py b/src/jarabe/view/eventicon.py
> index 4166798..0432c34 100644
> --- a/src/jarabe/view/eventicon.py
> +++ b/src/jarabe/view/eventicon.py
> @@ -94,16 +94,13 @@ class EventIcon(gtk.EventBox):
> self._alpha = 1.0
>
> gtk.EventBox.__init__(self)
> + self.set_visible_window(False)
> for key, value in kwargs.iteritems():
> self.set_property(key, value)
>
> self._palette_invoker = CursorInvoker()
> self._palette_invoker.attach(self)
>
> - # HACK to supress the grey background around the icon
> - # won't be needed in GTK3
> - self.modify_bg(gtk.STATE_NORMAL,
> style.COLOR_WHITE.get_gdk_color())
> -
> self.connect('destroy', self.__destroy_cb)
>
> def do_expose_event(self, event):
> @@ -111,8 +108,8 @@ class EventIcon(gtk.EventBox):
> if surface:
> allocation = self.get_allocation()
>
> - x = (allocation.width - surface.get_width()) / 2
> - y = (allocation.height - surface.get_height()) / 2
> + x = allocation.x + (allocation.width - surface.get_width())
> / 2
> + y = allocation.y + (allocation.height -
> surface.get_height()) / 2
>
> cr = self.window.cairo_create()
> cr.set_source_surface(surface, x, y)
>
>
> This will work now. As Benjamin stated the one needs to add
> allocation.x/y in expose, the current code works fine if the event box
> has a visible window, because then allocation.x and allocation.y are 0
> by definition. Attached is the updated patch as well.
>
> Regards,
> Simon
We just spotted another drawing issue related to the invisible window.
Fixed in the attached patch (thanks Benjamin).
Simon
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0003-Views-Replace-the-hippo-based-layout-with-one-using-.patch
Type: text/x-patch
Size: 124626 bytes
Desc: not available
URL: <http://lists.sugarlabs.org/archive/sugar-devel/attachments/20120807/4ed71fd6/attachment-0001.bin>
More information about the Sugar-devel
mailing list