Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2007-02-26 00:27:37 (GMT)
committer Dan Williams <dcbw@redhat.com>2007-02-26 00:27:37 (GMT)
commit0cad068bf48f92cc49fd327bae74b89caedf1322 (patch)
treeae9fd0e1a956e240a55b78268313a1aa088709dd /sugar
parentbf98a5d06436a905aa5710db4a60f1e6b7c8f7fc (diff)
parent69b48ade35088d2cceda6904360cb596c1a56b0b (diff)
Merge
Diffstat (limited to 'sugar')
-rw-r--r--sugar/activity/activity.py2
-rw-r--r--sugar/activity/activityfactoryservice.py1
-rw-r--r--sugar/graphics/canvasicon.py40
-rw-r--r--sugar/graphics/color.py4
-rw-r--r--sugar/graphics/iconbutton.py40
-rw-r--r--sugar/graphics/menu.py8
-rw-r--r--sugar/graphics/optionmenu.py26
-rw-r--r--sugar/graphics/popup.py8
-rw-r--r--sugar/graphics/roundbox.py2
-rw-r--r--sugar/graphics/snowflakebox.py2
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()