diff --git a/activities/web/linkscontroller.py b/activities/web/linkscontroller.py index e9d4cab9..51d9c428 100644 --- a/activities/web/linkscontroller.py +++ b/activities/web/linkscontroller.py @@ -1,3 +1,4 @@ +from sugar.p2p.Stream import Stream from sugar.presence import PresenceService class LinksController(object): diff --git a/activities/web/linksmodel.py b/activities/web/linksmodel.py index db9e411d..308bb93a 100644 --- a/activities/web/linksmodel.py +++ b/activities/web/linksmodel.py @@ -18,13 +18,13 @@ class LinksModel(gobject.GObject): gobject.GObject.__init__(self) self._links = {} - def add_link(buddy, title, url): + def add_link(self, buddy, title, url): link = Link(buddy, title, url) self._links[(buddy.get_name(), url)] = link self.emit('link-added', link) - def remove_link(buddy, url): + def remove_link(self, buddy, url): key = (buddy.get_name(), url) if self._links.haskey(key): link = self._links[key] diff --git a/activities/web/linksview.py b/activities/web/linksview.py index fde11566..3c8e3df2 100644 --- a/activities/web/linksview.py +++ b/activities/web/linksview.py @@ -1,6 +1,9 @@ +import gtk import hippo from sugar.graphics.bubble import Bubble +from sugar.graphics.iconcolor import IconColor +from sugar.graphics import style class LinksView(hippo.Canvas): def __init__(self, model): @@ -18,8 +21,10 @@ class LinksView(hippo.Canvas): model.connect('link_removed', self._link_removed_cb) def _add_link(self, link): - bubble = Bubble(color=link.buddy.get_color()) - self._box.append(link) + color = IconColor(link.buddy.get_color()) + bubble = Bubble(color=color) + style.apply_stylesheet(bubble, 'bubble.Box') + self._box.append(bubble) self._bubbles[link] = bubble diff --git a/activities/web/stylesheet.py b/activities/web/stylesheet.py new file mode 100644 index 00000000..bd0a6a6a --- /dev/null +++ b/activities/web/stylesheet.py @@ -0,0 +1,8 @@ +import gtk + +_screen_factor = gtk.gdk.screen_width() / 1200.0 + +bubble_Box = { + 'box-width' : int(150.0 * _screen_factor), + 'box-height' : int(50.0 * _screen_factor) +} diff --git a/activities/web/toolbar.py b/activities/web/toolbar.py index a1911433..670fd1fc 100644 --- a/activities/web/toolbar.py +++ b/activities/web/toolbar.py @@ -67,7 +67,7 @@ class Toolbar(gtk.Toolbar): def set_links_controller(self, links_controller): self._links_controller = links_controller - self._post.props.sensitive = False + self._post.props.sensitive = True def _progress_changed_cb(self, embed, spec): self._entry.props.progress = embed.props.progress diff --git a/activities/web/webactivity.py b/activities/web/webactivity.py index 518d8bb7..8ef4189d 100644 --- a/activities/web/webactivity.py +++ b/activities/web/webactivity.py @@ -4,6 +4,8 @@ import gtkmozembed from sugar.activity.Activity import Activity from sugar import env +from sugar.graphics import style +import web.stylesheet from webbrowser import WebBrowser from toolbar import Toolbar from linksmodel import LinksModel @@ -23,8 +25,8 @@ class WebActivity(Activity): self._browser = WebBrowser() self._browser.connect('notify::title', self._title_changed_cb) - links_model = LinksModel() - links_view = LinksView(links_model) + self._links_model = LinksModel() + links_view = LinksView(self._links_model) self._toolbar = Toolbar(self._browser) vbox.pack_start(self._toolbar, False) @@ -46,11 +48,14 @@ class WebActivity(Activity): self._browser.load_url(_HOMEPAGE) + def _setup_links_controller(self): + links_controller = LinksController(self._service, self._links_model) + self._toolbar.set_links_controller(links_controller) + def join(self, activity_ps): Activity.join(self, activity_ps) - links_controller = LinksController(service, links_model) - self._toolbar.set_links_controller(links_controller) + self._setup_links_controller() url = self._service.get_published_value('URL') if url: @@ -59,6 +64,8 @@ class WebActivity(Activity): def share(self): Activity.share(self) + self._setup_links_controller() + url = self._browser.get_location() if url: self._service.set_published_value('URL', url) @@ -68,3 +75,4 @@ class WebActivity(Activity): def start(): gtkmozembed.set_profile_path(env.get_profile_path(), 'gecko') + style.load_stylesheet(web.stylesheet) diff --git a/sugar/graphics/bubble.py b/sugar/graphics/bubble.py index dc7c6352..8f2fa32e 100644 --- a/sugar/graphics/bubble.py +++ b/sugar/graphics/bubble.py @@ -1,4 +1,7 @@ +import math + import gobject +import gtk import hippo class Bubble(hippo.CanvasBox, hippo.CanvasItem): @@ -11,7 +14,7 @@ class Bubble(hippo.CanvasBox, hippo.CanvasItem): def __init__(self, **kwargs): self._color = None - self._radius = 12 + self._radius = 8 hippo.CanvasBox.__init__(self, **kwargs) @@ -24,25 +27,34 @@ class Bubble(hippo.CanvasBox, hippo.CanvasItem): if pspec.name == 'color': return self._color - def _color_string_to_rgb(self, color_string): + def _string_to_rgb(self, color_string): col = gtk.gdk.color_parse(color_string) - return (col.red / 65535, col.green / 65535, col.blue / 65535) + return (col.red / 65535.0, col.green / 65535.0, col.blue / 65535.0) def do_paint_below_children(self, cr, damaged_box): - cairo_move_to(self._radius, 0); - cr.arc(width - self._radius, self._radius, + [width, height] = self.get_allocation() + + line_width = 3.0 + x = line_width + y = line_width + width -= line_width * 2 + height -= line_width * 2 + + 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(width - self._radius, height - self._radius, + cr.arc(x + width - self._radius, x + height - self._radius, self._radius, 0, math.pi * 0.5); - cr.arc(self._radius, height - self._radius, + cr.arc(x + self._radius, y + height - self._radius, self._radius, math.pi * 0.5, math.pi); - cr.arc(cr, self._radius, self._radius, self._radius, + cr.arc(x + self._radius, y + self._radius, self._radius, math.pi, math.pi * 1.5); - color = self._color.get_fill_color() - cr.set_source_rgb(cr, self._color_string_to_rgb(color)); - cairo_fill_preserve(cr); + color = self._string_to_rgb(self._color.get_fill_color()) + cr.set_source_rgb(*color) + cr.fill_preserve(); - color = self._color.get_stroke_color() - cr.set_source_rgb(cr, self._color_string_to_rgb(color)); - cairo_stroke(cr); + color = self._string_to_rgb(self._color.get_stroke_color()) + cr.set_source_rgb(*color) + cr.set_line_width(line_width) + cr.stroke();