diff options
author | Dan Williams <dcbw@redhat.com> | 2007-02-26 00:27:37 (GMT) |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2007-02-26 00:27:37 (GMT) |
commit | 0cad068bf48f92cc49fd327bae74b89caedf1322 (patch) | |
tree | ae9fd0e1a956e240a55b78268313a1aa088709dd /sugar | |
parent | bf98a5d06436a905aa5710db4a60f1e6b7c8f7fc (diff) | |
parent | 69b48ade35088d2cceda6904360cb596c1a56b0b (diff) |
Merge
Diffstat (limited to 'sugar')
-rw-r--r-- | sugar/activity/activity.py | 2 | ||||
-rw-r--r-- | sugar/activity/activityfactoryservice.py | 1 | ||||
-rw-r--r-- | sugar/graphics/canvasicon.py | 40 | ||||
-rw-r--r-- | sugar/graphics/color.py | 4 | ||||
-rw-r--r-- | sugar/graphics/iconbutton.py | 40 | ||||
-rw-r--r-- | sugar/graphics/menu.py | 8 | ||||
-rw-r--r-- | sugar/graphics/optionmenu.py | 26 | ||||
-rw-r--r-- | sugar/graphics/popup.py | 8 | ||||
-rw-r--r-- | sugar/graphics/roundbox.py | 2 | ||||
-rw-r--r-- | sugar/graphics/snowflakebox.py | 2 |
10 files changed, 96 insertions, 37 deletions
diff --git a/sugar/activity/activity.py b/sugar/activity/activity.py index 54589ff..ca2d12f 100644 --- a/sugar/activity/activity.py +++ b/sugar/activity/activity.py @@ -47,8 +47,6 @@ class Activity(gtk.Window): self._bus = ActivityService(self) - self.present() - def get_service_name(self): """Gets the activity service name.""" return os.environ['SUGAR_BUNDLE_SERVICE_NAME'] diff --git a/sugar/activity/activityfactoryservice.py b/sugar/activity/activityfactoryservice.py index 822bf99..548ff33 100644 --- a/sugar/activity/activityfactoryservice.py +++ b/sugar/activity/activityfactoryservice.py @@ -61,6 +61,7 @@ class ActivityFactoryService(dbus.service.Object): def create(self, handle): activity_handle = activityhandle.create_from_dict(handle) activity = self._constructor(activity_handle) + activity.present() self._activities.append(activity) activity.connect('destroy', self._activity_destroy_cb) diff --git a/sugar/graphics/canvasicon.py b/sugar/graphics/canvasicon.py index 2f7e892..56423d8 100644 --- a/sugar/graphics/canvasicon.py +++ b/sugar/graphics/canvasicon.py @@ -143,7 +143,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): 'stroke-color' : (object, None, None, gobject.PARAM_READWRITE), 'scale' : (float, None, None, - 0.0, 1024.0, 1.0, + 0.0, 1024.0, units.STANDARD_ICON_SCALE, gobject.PARAM_READWRITE), 'cache' : (bool, None, None, False, gobject.PARAM_READWRITE), @@ -156,7 +156,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): def __init__(self, **kwargs): self._buffers = {} self._cur_buffer = None - self._scale = 1.0 + self._scale = units.STANDARD_ICON_SCALE self._fill_color = None self._stroke_color = None self._icon_name = None @@ -173,8 +173,8 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): hippo.CanvasBox.__init__(self, **kwargs) - self.connect('motion-notify-event', self._motion_notify_event_cb) - self.connect('button-press-event', self._button_press_event_cb) + self.connect_after('button-press-event', self._button_press_event_cb) + self.connect_after('motion-notify-event', self._motion_notify_event_cb) def _clear_buffers(self): cur_buf_key = self._get_current_buffer_key() @@ -314,17 +314,17 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): def _button_press_event_cb(self, item, event): item.emit_activated() + return False def get_popup(self): if self._tooltip: tooltip_popup = Popup() - canvas_text = hippo.CanvasText(text=self._tooltip) - canvas_text.props.background_color = color.MENU_BACKGROUND.get_int() - canvas_text.props.border_color = color.MENU_BORDER.get_int() - canvas_text.props.border = units.points_to_pixels(1) - canvas_text.props.color = color.LABEL_TEXT.get_int() - canvas_text.props.font_desc = font.DEFAULT.get_pango_desc() - tooltip_popup.append(canvas_text) + text = hippo.CanvasText(text=self._tooltip) + text.props.background_color = color.MENU_BACKGROUND.get_int() + text.props.color = color.LABEL_TEXT.get_int() + text.props.font_desc = font.DEFAULT.get_pango_desc() + text.props.padding = units.points_to_pixels(5) + tooltip_popup.append(text) return tooltip_popup else: @@ -355,7 +355,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): [x, y] = context.translate_to_screen(self) # TODO: Any better place to do this? - popup.props.box_width = max(popup.props.box_width, + popup.props.box_width = max(popup.get_width_request(), self.get_width_request()) [width, height] = self.get_allocation() @@ -364,7 +364,7 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): popup.popup(x, y) popup.connect('motion-notify-event', - self._popup_motion_notify_event_cb) + self.popup_motion_notify_event_cb) popup.connect('action-completed', self._popup_action_completed_cb) @@ -389,17 +389,29 @@ class CanvasIcon(hippo.CanvasBox, hippo.CanvasItem): def _motion_notify_event_cb(self, button, event): if event.detail == hippo.MOTION_DETAIL_ENTER: self._timeline.play(None, 'popup') + self.prelight(enter=True) elif event.detail == hippo.MOTION_DETAIL_LEAVE: if not self._hover_popup: self._timeline.play('before_popdown', 'popdown') + self.prelight(enter=False) + return False - def _popup_motion_notify_event_cb(self, popup, event): + def popup_motion_notify_event_cb(self, popup, event): if event.detail == hippo.MOTION_DETAIL_ENTER: self._hover_popup = True self._timeline.play('popup', 'popup') + self.prelight(enter=True) elif event.detail == hippo.MOTION_DETAIL_LEAVE: self._hover_popup = False self._timeline.play('popdown', 'popdown') + self.prelight(enter=False) + return False def _popup_action_completed_cb(self, popup): self.popdown() + + def prelight(self, enter): + """ + Override this method for adding prelighting behavior. + """ + pass diff --git a/sugar/graphics/color.py b/sugar/graphics/color.py index a52b1ff..32d248c 100644 --- a/sugar/graphics/color.py +++ b/sugar/graphics/color.py @@ -12,7 +12,8 @@ _system_colors = { 'entry-border' : '#D1D1D2', 'label-text' : '#FFFFFF', 'desktop-background' : '#E2E2E3', - 'menu-background' : '#414141', + 'menu-background' : '#000000', + 'menu-background-hover' : '#424242', 'menu-separator' : '#D1D1D2', 'menu-border' : '#D1D1D2', 'button-normal' : '#FFFFFF', @@ -90,6 +91,7 @@ ENTRY_BORDER = SystemColor('entry-border') LABEL_TEXT = SystemColor('label-text') DESKTOP_BACKGROUND = SystemColor('desktop-background') MENU_BACKGROUND = SystemColor('menu-background') +MENU_BACKGROUND_HOVER = SystemColor('menu-background-hover') MENU_SEPARATOR = SystemColor('menu-separator') MENU_BORDER = SystemColor('menu-border') BUTTON_NORMAL = SystemColor('button-normal') diff --git a/sugar/graphics/iconbutton.py b/sugar/graphics/iconbutton.py index 568d6ef..fc16451 100644 --- a/sugar/graphics/iconbutton.py +++ b/sugar/graphics/iconbutton.py @@ -21,8 +21,8 @@ import gobject import hippo from canvasicon import CanvasIcon -from xocolor import XoColor from sugar.graphics import units +from sugar.graphics import color from sugar import profile STANDARD_SIZE = 0 @@ -44,16 +44,20 @@ class IconButton(CanvasIcon): CanvasIcon.__init__(self, cache=True, **kwargs) - self._prelight_color = profile.get_color() - self._inactive_color = XoColor('#808080,#424242') - self._normal_color = XoColor('white') - - if not self.props.xo_color: - self.props.xo_color = self._normal_color + if not self.props.fill_color: + self.props.fill_color = color.BUTTON_BACKGROUND_NORMAL + if not self.props.stroke_color: + self.props.stroke_color = color.BUTTON_NORMAL + self.props.background_color = color.BUTTON_BACKGROUND_NORMAL.get_int() + self._normal_fill_color = self.props.fill_color + self._normal_stroke_color = self.props.stroke_color + self._normal_background_color = self.props.background_color + self._set_size(STANDARD_SIZE) - self.connect('button-press-event', self._button_press_event_cb) + self.connect('button-press-event', + self._icon_button_button_press_event_cb) def _set_size(self, size): if size == SMALL_SIZE: @@ -73,9 +77,13 @@ class IconButton(CanvasIcon): elif pspec.name == 'active': self._active = value if self._active: - self.props.xo_color = self._normal_color + self.props.fill_color = self._normal_fill_color + self.props.stroke_color = self._normal_stroke_color + self.props.background_color = self._normal_background_color else: - self.props.xo_color = self._inactive_color + self.props.fill_color = color.BUTTON_BACKGROUND_INACTIVE + self.props.stroke_color = color.BUTTON_INACTIVE + self.props.background_color = color.BUTTON_BACKGROUND_INACTIVE.get_int() else: CanvasIcon.do_set_property(self, pspec, value) @@ -87,7 +95,17 @@ class IconButton(CanvasIcon): else: return CanvasIcon.do_get_property(self, pspec) - def _button_press_event_cb(self, widget, event): + def _icon_button_button_press_event_cb(self, widget, event): if self._active: self.emit_activated() return True + + def prelight(self, enter): + if enter: + if self._active: + self.props.fill_color = color.BLACK + self.props.background_color = color.BLACK.get_int() + else: + if self._active: + self.props.fill_color = self._normal_fill_color + self.props.background_color = self._normal_background_color diff --git a/sugar/graphics/menu.py b/sugar/graphics/menu.py index e60bd61..2a80c87 100644 --- a/sugar/graphics/menu.py +++ b/sugar/graphics/menu.py @@ -56,6 +56,14 @@ class MenuItem(hippo.CanvasBox): self._canvas_text.props.color = color.LABEL_TEXT.get_int() self._canvas_text.props.font_desc = font.DEFAULT.get_pango_desc() self.append(self._canvas_text) + + self.connect('motion-notify-event', self._motion_notify_event_cb) + + def _motion_notify_event_cb(self, menu_item, event): + if event.detail == hippo.MOTION_DETAIL_ENTER: + self.props.background_color = color.MENU_BACKGROUND_HOVER.get_int() + elif event.detail == hippo.MOTION_DETAIL_LEAVE: + self.props.background_color = color.MENU_BACKGROUND.get_int() def do_set_property(self, pspec, value): if pspec.name == 'action-id': diff --git a/sugar/graphics/optionmenu.py b/sugar/graphics/optionmenu.py index edd1d39..2bb6fde 100644 --- a/sugar/graphics/optionmenu.py +++ b/sugar/graphics/optionmenu.py @@ -64,12 +64,14 @@ class OptionMenu(hippo.CanvasBox, hippo.CanvasItem): self._round_box = RoundBox() self._round_box.props.border_color = color.FRAME_BORDER.get_int() + self._round_box.props.spacing = units.points_to_pixels(3) + self._round_box.props.padding = units.points_to_pixels(1) self.append(self._round_box, hippo.PACK_EXPAND) - self._canvas_text = hippo.CanvasText() - self._canvas_text.props.text = _('No options') - self._canvas_text.props.color = color.LABEL_TEXT.get_int() - self._canvas_text.props.font_desc = font.DEFAULT.get_pango_desc() + self._canvas_text = hippo.CanvasText(text=_('No options'), + color=color.LABEL_TEXT.get_int(), + font_desc=font.DEFAULT.get_pango_desc(), + xalign=hippo.ALIGNMENT_START) self._round_box.append(self._canvas_text, hippo.PACK_EXPAND) # TODO: Substitute for the right icon. @@ -100,6 +102,16 @@ class OptionMenu(hippo.CanvasBox, hippo.CanvasItem): self._menu.add_item(menu_item) + def do_get_width_request(self): + max_width = max(self._canvas_text.do_get_content_width_request(self._canvas_text), + self._menu.do_get_content_width_request(self._menu)) + + self._canvas_text.props.box_width = max_width + + current_width = hippo.CanvasBox.do_get_width_request(self) + self._menu.props.box_width = current_width + return current_width + def add_separator(self): self._menu.add_separator() @@ -110,11 +122,11 @@ class OptionMenu(hippo.CanvasBox, hippo.CanvasItem): context = self._round_box.get_context() [x, y] = context.translate_to_screen(self._round_box) - # TODO: Any better place to do this? - self._menu.props.box_width = self.get_width_request() - [width, height] = self._round_box.get_allocation() self._menu.popup(x, y + height) + + # Grab the pointer so the menu will popdown on mouse click. + self._menu.grab_pointer() def _menu_action_cb(self, menu, menu_item): action_id = menu_item.props.action_id diff --git a/sugar/graphics/popup.py b/sugar/graphics/popup.py index 5c63b6e..d0bee06 100644 --- a/sugar/graphics/popup.py +++ b/sugar/graphics/popup.py @@ -46,5 +46,13 @@ class Popup(hippo.CanvasBox, hippo.CanvasItem): self._window.hide() self._visible = False + def grab_pointer(self): + gtk.gdk.pointer_grab(self._window.window, owner_events=False, + event_mask=gtk.gdk.BUTTON_PRESS_MASK | + gtk.gdk.BUTTON_RELEASE_MASK | + gtk.gdk.ENTER_NOTIFY_MASK | + gtk.gdk.LEAVE_NOTIFY_MASK | + gtk.gdk.POINTER_MOTION_MASK) + def _button_press_event_cb(self, menu, event): self.emit('action-completed') diff --git a/sugar/graphics/roundbox.py b/sugar/graphics/roundbox.py index a24f820..1559ec2 100644 --- a/sugar/graphics/roundbox.py +++ b/sugar/graphics/roundbox.py @@ -31,7 +31,7 @@ class RoundBox(hippo.CanvasBox, hippo.CanvasItem): hippo.CanvasBox.__init__(self, **kwargs) # TODO: we should calculate this value depending on the height of the box. - self._radius = units.points_to_pixels(10) + self._radius = units.points_to_pixels(7) self.props.orientation = hippo.ORIENTATION_HORIZONTAL self.props.border_top = self._BORDER_DEFAULT diff --git a/sugar/graphics/snowflakebox.py b/sugar/graphics/snowflakebox.py index 9e2fd78..f0d446c 100644 --- a/sugar/graphics/snowflakebox.py +++ b/sugar/graphics/snowflakebox.py @@ -85,7 +85,7 @@ class SnowflakeBox(hippo.CanvasBox, hippo.CanvasItem): return width def do_allocate(self, width, height, origin_changed): - hippo.CanvasBox.do_allocate(self, width, height) + hippo.CanvasBox.do_allocate(self, width, height, origin_changed) self._layout_root() |