diff options
Diffstat (limited to 'roundbox.py')
-rw-r--r-- | roundbox.py | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/roundbox.py b/roundbox.py new file mode 100644 index 0000000..b6ccbdf --- /dev/null +++ b/roundbox.py @@ -0,0 +1,49 @@ +import math +from gi.repository import Gtk +from gi.repository import Gdk +from sugar3.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(30) + self.border = self._BORDER_DEFAULT + self.border_color = style.Color('#000000') + self.background_color = None + #self.set_reallocate_redraws(True) + self.connect("draw", self.__draw_cb) + + def __draw_cb(self, widget, cr): + rect = self.get_allocation() + x = rect.x + self._BORDER_DEFAULT / 2 + y = rect.y + self._BORDER_DEFAULT / 2 + width = rect.width - self._BORDER_DEFAULT - (self.props.margin * 2) + height = Gdk.Screen.height() - self._BORDER_DEFAULT - \ + (self.props.margin * 5) + + 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, __ = 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, __ = self.border_color.get_rgba() + cr.set_source_rgb(r, g, b) + cr.set_line_width(self.border) + cr.stroke() |