Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/roundbox.py
diff options
context:
space:
mode:
Diffstat (limited to 'roundbox.py')
-rw-r--r--roundbox.py49
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()