diff options
author | Gonzalo Odiard <godiard@gmail.com> | 2011-11-14 13:18:16 (GMT) |
---|---|---|
committer | Gonzalo Odiard <godiard@gmail.com> | 2011-11-14 13:18:16 (GMT) |
commit | 809106680fd9ebf59f2f4496ffb9a9db7707bb91 (patch) | |
tree | 9ebfe78cbabaebb268a208542e66bf30df52f736 | |
parent | 6bc1e9f6576742a8d564786504d718bf6beff4d5 (diff) |
Add a roundbox object to replace the removed use of hippo CanvasBox
Signed-off-by: Gonzalo Odiard <gonzalo@laptop.org>
-rw-r--r-- | createcardpanel.py | 9 | ||||
-rw-r--r-- | port/roundbox.py | 87 |
2 files changed, 92 insertions, 4 deletions
diff --git a/createcardpanel.py b/createcardpanel.py index 2067cae..e654b1c 100644 --- a/createcardpanel.py +++ b/createcardpanel.py @@ -37,6 +37,7 @@ import theme import speak.espeak import speak.widgets import speak.face +from port.roundbox import RoundBox _logger = logging.getLogger('memorize-activity') @@ -282,17 +283,17 @@ class CardEditor(gtk.EventBox): self.textentry.connect('changed', self.update_text) box.pack_start(self.textentry, False) - toolbar = gtk.HBox() + toolbar = RoundBox() browsepicture = ToolButton( icon_name='import_picture', tooltip=_('Insert picture')) - toolbar.pack_start(browsepicture, False) + toolbar.add(browsepicture) browsesound = ToolButton( icon_name='import_sound', tooltip=_('Insert sound')) - toolbar.pack_start(browsesound, False) + toolbar.add(browsesound) browsepicture.connect('clicked', self._load_image) browsesound.connect('clicked', self._load_audio) @@ -301,7 +302,7 @@ class CardEditor(gtk.EventBox): self.usespeak = ToggleToolButton( named_icon='speak') self.usespeak.set_palette(SpeakPalette(self)) - toolbar.pack_start(self.usespeak, False) + toolbar.add(self.usespeak) self.usespeak.connect('toggled', self._usespeak_cb) else: self.usespeak = None diff --git a/port/roundbox.py b/port/roundbox.py new file mode 100644 index 0000000..54ae1a9 --- /dev/null +++ b/port/roundbox.py @@ -0,0 +1,87 @@ +import math +import gtk +from sugar.graphics import style + + +class RoundBox(gtk.HBox): + __gtype_name__ = 'RoundBox' + + _BORDER_DEFAULT = style.LINE_WIDTH + + def __init__(self, **kwargs): + gtk.HBox.__init__(self, **kwargs) + + self._radius = style.zoom(10) + self.border = self._BORDER_DEFAULT + self.border_color = style.COLOR_BLACK + self.background_color = None + self.connect("expose_event", self.__expose_cb) + self.connect("size-allocate", self.__size_allocate_cb) + self.connect("add", self.__add_cb) + + def __add_cb(self, child, params): + child.set_border_width(style.zoom(5)) + + def __size_allocate_cb(self, widget, allocation): + self._x = allocation.x + self._y = allocation.y + self._width = allocation.width + self._height = allocation.height + + def __expose_cb(self, widget, event): + cr = widget.window.cairo_create() + #cr.save() + x = self._x + self._BORDER_DEFAULT / 2 + y = self._y + self._BORDER_DEFAULT / 2 + width = self._width - self._BORDER_DEFAULT + height = self._height - self._BORDER_DEFAULT + + cr.move_to(x + self._radius, y) + cr.arc(x + width - self._radius, y + self._radius, + self._radius, math.pi * 1.5, math.pi * 2) + cr.arc(x + width - self._radius, y + height - self._radius, + self._radius, 0, math.pi * 0.5) + cr.arc(x + self._radius, y + height - self._radius, + self._radius, math.pi * 0.5, math.pi) + cr.arc(x + self._radius, y + self._radius, self._radius, + math.pi, math.pi * 1.5) + cr.close_path() + + if self.background_color is not None: + r, g, b, a = self.background_color.get_rgba() + cr.set_source_rgb(r, g, b) + cr.fill_preserve() + + if self.border_color is not None: + r, g, b, a = self.border_color.get_rgba() + cr.set_source_rgb(r, g, b) + cr.set_line_width(self.border) + cr.stroke() + #cr.restore() + +if __name__ == '__main__': + + win = gtk.Window() + win.connect('destroy', gtk.main_quit) + win.set_default_size(450, 550) + vbox = gtk.VBox() + + box1 = RoundBox() + vbox.add(box1) + label1 = gtk.Label("Test 1") + box1.add(label1) + + rbox = RoundBox() + rbox.background_color = style.Color('#FF0000') + vbox.add(rbox) + label2 = gtk.Label("Test 2") + rbox.add(label2) + + bbox = RoundBox() + bbox.background_color = style.Color('#aaff33') + bbox.border_color = style.Color('#ff3300') + vbox.add(bbox) + + win.add(vbox) + win.show_all() + gtk.main() |