[sugar] pulsing icon code move from sugar to sugar-toolkit?

Martin Dengler martin
Sat Jul 19 22:34:19 EDT 2008


Hi sugar@,

As part of fixing #6995, I'd like to propose we move the contents of
sugar/view/pulsingicon.py into sugar-toolkit/graphics/pulsingicon.py.
The situation I need to handle is that a
sugar-toolkit/graphics/tray.TrayIcon needs to pulse, via its
sugar-toolkit/graphics/icon.Icon member[1].

A straw-man (that works, but isn't pretty - look for #FIXME's)
implementation so you can see the rough design / example as to how to
create a pulsing subclass of sugar-toolkit/graphics/icon.Icon:

http://dev.laptop.org/git?p=users/mdengler/sugar-toolkit;a=blob;f=src/sugar/graphics/pulsingicon.py;h=db13556a1921105f9c51aae830b45e9e61202311;hb=c6e7336fea471272b3eb59824fc40eeceeabd41b

It's tough to tell the icon is pulsing in these screen shots, but these
are some examples of the icon on my XO:

http://dev.laptop.org/~mdengler/6995/6995_screenshot_10.png
http://dev.laptop.org/~mdengler/6995/6995_screenshot_13.png
http://dev.laptop.org/~mdengler/6995/6995_screenshot_14.png

Any concerns/comments?  I'd specifically be interested in:

1) whether anyone thinks this is too invasive to get in to Sucrose
   0.82 / OLPC 8.2.0; and

2) whether anyone thinks pulsingicon.PulsingIcon should just become
   icon.Icon; and

3) whether anyone has a strong feeling as to whether
   sugar/view/pulsingicon.py should "import * from
   sugar.graphics.pulsingicon" or just be removed and all associated
   imports changed; and

4) not only do 2) *but also* icon.Icon.props.base-color and others
   should become icon.Icon.pulser.props.base-color (would require
   changing all the sugar code that uses PulsingIcon); and

Thanks any time you can give to this proposal.

Martin

PS. You can see a mixin (multiple/diamond inheritance) approach (which
works) in the commit right before the one above, but I'm even less
excited about that one because of the gobject.GObject gotchas evident
in even the composition-based approach above.

1. diff --git a/src/sugar/graphics/tray.py b/src/sugar/graphics/tray.py
index 8296a53..70c3414 100644
--- a/src/sugar/graphics/tray.py
+++ b/src/sugar/graphics/tray.py
@@ -22,6 +22,7 @@ from sugar.graphics import style
 from sugar.graphics.palette import ToolInvoker
 from sugar.graphics.toolbutton import ToolButton
 from sugar.graphics.icon import Icon
+from sugar.graphics.pulsingicon import PulsingIcon
 
 _PREVIOUS_PAGE = 0
 _NEXT_PAGE = 1
@@ -328,8 +329,8 @@ class _IconWidget(gtk.EventBox):
 
         self.set_app_paintable(True)
 
-        self._icon = Icon(icon_name=icon_name, xo_color=xo_color,
-                          icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR)
+        self._icon = PulsingIcon(icon_name=icon_name,
-                          xo_color=xo_color,
+
-                          icon_size=gtk.ICON_SIZE_LARGE_TOOLBAR)
         self.add(self._icon)
         self._icon.show()



PPS: If you've read this far, you deserve some ASCII art -- this is
the current hierarchy:

...
 |
 |- gtk.Icon
    |
    |- sugar.graphics.Icon              (sugar-toolkit/graphics/icon.py)
       |
       |- sugar.graphics.PulsingIcon    (sugar-toolkit/graphics/pulsingicon.py)

...
 |
 |- hippo.CanvasBox          hippo.CanvasIcon
  \                       /
   -|---------------------
    |
    |- sugar.graphics.CanvasIcon        (sugar-toolkit/graphics/icon.py)
     |
     |- sugar.shell.view.CanvasPulsingIcon   (sugar/view/pulsingicon.py)


...and I'm proposing either this:

...
 |
 |- gtk.Icon
    |
    |- sugar.graphics.Icon              (sugar-toolkit/graphics/icon.py)
       |
       |- sugar.graphics.PulsingIcon    (sugar-toolkit/graphics/pulsingicon.py)
            \--- uses by composition:
             - sugar.graphics.Pulser    (sugar-toolkit/graphics/pulsingicon.py)


...
 |
 |- hippo.CanvasBox          hippo.CanvasIcon
  \                       /
   -|---------------------
    |
    |- sugar.graphics.CanvasIcon        (sugar-toolkit/graphics/icon.py)
     |
     |- sugar.graphics.CanvasPulsingIcon(sugar-toolkit/graphics/pulsingicon.py)
        \--- uses by composition:
         - sugar.graphics.Pulser        (sugar-toolkit/graphics/pulsingicon.py)


...or, more radically, just

...
 |
 |- gtk.Icon
    |
    |- sugar.graphics.Icon              (sugar-toolkit/graphics/icon.py)
          \--- uses by composition:
           - sugar.graphics.Pulser      (sugar-toolkit/graphics/pulsingicon.py)


...
 |
 |- hippo.CanvasBox          hippo.CanvasIcon
   \                       /
    -|---------------------
     |
     |- sugar.graphics.CanvasIcon              (sugar-toolkit/graphics/icon.py)
          \--- uses by composition:
           - sugar.graphics.Pulser      (sugar-toolkit/graphics/pulsingicon.py)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.laptop.org/pipermail/sugar/attachments/20080720/ca0ab557/attachment.pgp 



More information about the Sugar-devel mailing list