Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar3/graphics/toolbarbox.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/sugar3/graphics/toolbarbox.py')
-rw-r--r--src/sugar3/graphics/toolbarbox.py85
1 files changed, 43 insertions, 42 deletions
diff --git a/src/sugar3/graphics/toolbarbox.py b/src/sugar3/graphics/toolbarbox.py
index b321715..5ec2db9 100644
--- a/src/sugar3/graphics/toolbarbox.py
+++ b/src/sugar3/graphics/toolbarbox.py
@@ -15,11 +15,14 @@
# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
+import math
+
from gi.repository import Gtk
from gi.repository import GObject
from sugar3.graphics import style
-from sugar3.graphics.palette import PaletteWindow, ToolInvoker
+from sugar3.graphics.palettewindow import PaletteWindow, ToolInvoker, \
+ _PaletteWindowWidget
from sugar3.graphics.toolbutton import ToolButton
from sugar3.graphics import palettegroup
@@ -74,7 +77,7 @@ class ToolbarButton(ToolButton):
def is_in_palette(self):
return self.page is not None and \
- self.page_widget.get_parent() == self.props.palette
+ self.page_widget.get_parent() == self.props.palette._widget
def is_expanded(self):
return self.page is not None and \
@@ -97,10 +100,7 @@ class ToolbarButton(ToolButton):
box = self.toolbar_box
if box.expanded_button is not None:
- button_window = box.expanded_button.get_window()
- if button_window is not None:
- # need to redraw it to erase arrow
- button_window.invalidate_rect(None, True)
+ box.expanded_button.queue_draw()
box.expanded_button.set_expanded(False)
box.expanded_button = self
@@ -117,7 +117,7 @@ class ToolbarButton(ToolButton):
self._unparent()
if isinstance(self.props.palette, _ToolbarPalette):
- self.props.palette.add(self.page_widget)
+ self.props.palette._widget.add(self.page_widget)
def _unparent(self):
page_parent = self.page_widget.get_parent()
@@ -125,28 +125,22 @@ class ToolbarButton(ToolButton):
return
page_parent.remove(self.page_widget)
- def do_expose_event(self, event):
+ def do_draw(self, cr):
if not self.is_expanded() or self.props.palette is not None and \
self.props.palette.is_up():
- ToolButton.do_expose_event(self, event)
- _paint_arrow(self, event, Gtk.ArrowType.DOWN)
+ Gtk.ToolButton.do_draw(self, cr)
+ _paint_arrow(self, cr, math.pi)
return
- alloc = self.allocation
-
- self.get_style().paint_box(event.window,
- Gtk.StateType.NORMAL, Gtk.ShadowType.IN, event.area, self,
- 'palette-invoker', alloc.x, 0,
- alloc.width, alloc.height + style.FOCUS_LINE_WIDTH)
+ alloc = self.get_allocation()
- if self.get_child().state != Gtk.StateType.PRELIGHT:
- self.get_style().paint_box(event.window,
- Gtk.StateType.NORMAL, Gtk.ShadowType.NONE, event.area, self, None,
- alloc.x + style.FOCUS_LINE_WIDTH, style.FOCUS_LINE_WIDTH,
- alloc.width - style.FOCUS_LINE_WIDTH * 2, alloc.height)
+ context = self.get_style_context()
+ context.add_class('toolitem')
- Gtk.ToolButton.do_expose_event(self, event)
- _paint_arrow(self, event, Gtk.ArrowType.UP)
+ Gtk.render_frame_gap(context, cr, 0, 0, alloc.width, alloc.height,
+ Gtk.PositionType.BOTTOM, 0, alloc.width)
+ Gtk.ToolButton.do_draw(self, cr)
+ _paint_arrow(self, cr, 0)
class ToolbarBox(Gtk.VBox):
@@ -214,15 +208,20 @@ class _ToolbarPalette(PaletteWindow):
def __init__(self, **kwargs):
PaletteWindow.__init__(self, **kwargs)
- self.set_border_width(0)
self._has_focus = False
group = palettegroup.get_group('default')
group.connect('popdown', self.__group_popdown_cb)
self.set_group_id('toolbarbox')
+ self._widget = _PaletteWindowWidget()
+ self._widget.set_border_width(0)
+ self._setup_widget()
+
+ self._widget.connect('realize', self._realize_cb)
+
def get_expanded_button(self):
- return self.invoker.get_parent()
+ return self.invoker.parent
expanded_button = property(get_expanded_button)
@@ -234,12 +233,12 @@ class _ToolbarPalette(PaletteWindow):
PaletteWindow.on_invoker_leave(self)
self._set_focus(False)
- def on_enter(self, event):
- PaletteWindow.on_enter(self, event)
+ def on_enter(self):
+ PaletteWindow.on_enter(self)
self._set_focus(True)
- def on_leave(self, event):
- PaletteWindow.on_enter(self, event)
+ def on_leave(self):
+ PaletteWindow.on_enter(self)
self._set_focus(False)
def _set_focus(self, new_focus):
@@ -249,10 +248,10 @@ class _ToolbarPalette(PaletteWindow):
if not group.is_up():
self.popdown()
- def do_size_request(self, requisition):
- Gtk.Window.do_size_request(self, requisition)
- requisition.width = max(requisition.width,
- Gdk.Screen.width())
+ def _realize_cb(self, widget):
+ screen = self._widget.get_screen()
+ width = screen.width()
+ self._widget.set_size_request(width, -1)
def popup(self, immediate=False):
button = self.expanded_button
@@ -272,10 +271,10 @@ class _Box(Gtk.EventBox):
def __init__(self):
GObject.GObject.__init__(self)
- self.connect('expose-event', self.do_expose_event)
self.set_app_paintable(True)
def do_expose_event(self, widget, event):
+ # TODO: reimplement this in the theme
expanded_button = self.get_parent().expanded_button
if expanded_button is None:
return
@@ -326,12 +325,14 @@ def _get_embedded_page(page_widget):
return page_widget.get_child().get_child()
-def _paint_arrow(widget, event, arrow_type):
- alloc = widget.allocation
- x = alloc.x + alloc.width / 2 - style.TOOLBAR_ARROW_SIZE / 2
- y = alloc.y + alloc.height - int(style.TOOLBAR_ARROW_SIZE * .85)
+def _paint_arrow(widget, cr, angle):
+ alloc = widget.get_allocation()
+
+ arrow_size = style.TOOLBAR_ARROW_SIZE / 2
+ y = alloc.height - arrow_size
+ x = (alloc.width - arrow_size) / 2
+
+ context = widget.get_style_context()
+ context.add_class('toolitem')
- widget.get_style().paint_arrow(event.window,
- Gtk.StateType.NORMAL, Gtk.ShadowType.NONE, event.area, widget,
- None, arrow_type, True,
- x, y, style.TOOLBAR_ARROW_SIZE, style.TOOLBAR_ARROW_SIZE)
+ Gtk.render_arrow(context, cr, angle, x, y, arrow_size)