From 305384be3cdd9d996b691b51e80b52da87ad7050 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Thu, 23 Aug 2012 21:08:24 -0300 Subject: [PATCH] Fix the drawing of ColorToolButton, RadioToolButton and ToggleToolButton MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Draw a black background in the buttons when the palette is up, as commit 01a06943 did with the ToolButton. As the comment for that commit states, we can change the prelight background color in the theme, but not when the mouse moves over the Palette. Also add testcase to test the three toolbuttons. Signed-off-by: Manuel QuiƱones Acked-by: Simon Schampijer --- src/sugar3/graphics/colorbutton.py | 20 +++++------ src/sugar3/graphics/radiotoolbutton.py | 20 +++++------ src/sugar3/graphics/toggletoolbutton.py | 20 +++++------ tests/graphics/toolbuttons.py | 45 +++++++++++++++++++++++++ 4 files changed, 75 insertions(+), 30 deletions(-) create mode 100644 tests/graphics/toolbuttons.py diff --git a/src/sugar3/graphics/colorbutton.py b/src/sugar3/graphics/colorbutton.py index 95d023ad..823fd610 100644 --- a/src/sugar3/graphics/colorbutton.py +++ b/src/sugar3/graphics/colorbutton.py @@ -523,20 +523,20 @@ class ColorToolButton(Gtk.ToolItem): title = GObject.property(type=str, getter=get_title, setter=set_title) - def do_expose_event(self, event): + def do_draw(self, cr): child = self.get_child() allocation = self.get_allocation() if self._palette and self._palette.is_up(): invoker = self._palette.props.invoker - invoker.draw_rectangle(event, self._palette) - elif child.state == Gtk.StateType.PRELIGHT: - child.style.paint_box(event.window, Gtk.StateType.PRELIGHT, - Gtk.ShadowType.NONE, event.area, - child, 'toolbutton-prelight', - allocation.x, allocation.y, - allocation.width, allocation.height) - - Gtk.ToolButton.do_expose_event(self, event) + invoker.draw_rectangle(cr, self._palette) + + allocation = self.get_allocation() + # draw a black background, has been done by the engine before + cr.set_source_rgb(0, 0, 0) + cr.rectangle(0, 0, allocation.width, allocation.height) + cr.paint() + + Gtk.ToolButton.do_draw(self, cr) def __notify_change(self, widget, pspec): self.notify(pspec.name) diff --git a/src/sugar3/graphics/radiotoolbutton.py b/src/sugar3/graphics/radiotoolbutton.py index 8fd01f7f..006d167e 100644 --- a/src/sugar3/graphics/radiotoolbutton.py +++ b/src/sugar3/graphics/radiotoolbutton.py @@ -165,18 +165,18 @@ class RadioToolButton(Gtk.RadioToolButton): palette_invoker = GObject.property( type=object, setter=set_palette_invoker, getter=get_palette_invoker) - def do_expose_event(self, event): + def do_draw(self, cr): child = self.get_child() allocation = self.get_allocation() if self.palette and self.palette.is_up(): invoker = self.palette.props.invoker - invoker.draw_rectangle(event, self.palette) - elif child.state == Gtk.StateType.PRELIGHT: - child.style.paint_box(event.window, Gtk.StateType.PRELIGHT, - Gtk.ShadowType.NONE, event.area, - child, 'toolbutton-prelight', - allocation.x, allocation.y, - allocation.width, allocation.height) - - Gtk.RadioToolButton.do_expose_event(self, event) + invoker.draw_rectangle(cr, self.palette) + + allocation = self.get_allocation() + # draw a black background, has been done by the engine before + cr.set_source_rgb(0, 0, 0) + cr.rectangle(0, 0, allocation.width, allocation.height) + cr.paint() + + Gtk.RadioToolButton.do_draw(self, cr) diff --git a/src/sugar3/graphics/toggletoolbutton.py b/src/sugar3/graphics/toggletoolbutton.py index c8653323..f50d2fda 100644 --- a/src/sugar3/graphics/toggletoolbutton.py +++ b/src/sugar3/graphics/toggletoolbutton.py @@ -113,20 +113,20 @@ class ToggleToolButton(Gtk.ToggleToolButton): accelerator = GObject.property(type=str, setter=set_accelerator, getter=get_accelerator) - def do_expose_event(self, event): + def do_draw(self, cr): allocation = self.get_allocation() child = self.get_child() if self.palette and self.palette.is_up(): invoker = self.palette.props.invoker - invoker.draw_rectangle(event, self.palette) - elif child.state == Gtk.StateType.PRELIGHT: - child.style.paint_box(event.window, Gtk.StateType.PRELIGHT, - Gtk.ShadowType.NONE, event.area, - child, 'toolbutton-prelight', - allocation.x, allocation.y, - allocation.width, allocation.height) - - Gtk.ToggleToolButton.do_expose_event(self, event) + invoker.draw_rectangle(cr, self.palette) + + allocation = self.get_allocation() + # draw a black background, has been done by the engine before + cr.set_source_rgb(0, 0, 0) + cr.rectangle(0, 0, allocation.width, allocation.height) + cr.paint() + + Gtk.ToggleToolButton.do_draw(self, cr) palette = property(get_palette, set_palette) diff --git a/tests/graphics/toolbuttons.py b/tests/graphics/toolbuttons.py new file mode 100644 index 00000000..c4c8cf82 --- /dev/null +++ b/tests/graphics/toolbuttons.py @@ -0,0 +1,45 @@ +from gi.repository import Gtk + +from sugar3.graphics.toolbarbox import ToolbarBox +from sugar3.graphics.colorbutton import ColorToolButton +from sugar3.graphics.radiotoolbutton import RadioToolButton +from sugar3.graphics.toggletoolbutton import ToggleToolButton + +import common + + +test = common.Test() +test.show() + +vbox = Gtk.VBox() +test.pack_start(vbox, True, True, 0) +vbox.show() + +toolbar_box = ToolbarBox() +vbox.pack_start(toolbar_box, False, False, 0) +toolbar_box.show() + +radial_button = RadioToolButton(named_icon='view-radial') +toolbar_box.toolbar.insert(radial_button, -1) +radial_button.show() + +list_button = RadioToolButton(named_icon='view-list') +list_button.props.group = radial_button +toolbar_box.toolbar.insert(list_button, -1) +list_button.show() + +separator = Gtk.SeparatorToolItem() +toolbar_box.toolbar.insert(separator, -1) +separator.show() + +color_button = ColorToolButton() +toolbar_box.toolbar.insert(color_button, -1) +color_button.show() + +favorite_button = ToggleToolButton('emblem-favorite') +toolbar_box.toolbar.insert(favorite_button, -1) +favorite_button.show() + + +if __name__ == '__main__': + common.main(test)