--- /dev/null
+import gtk
+import gobject
+
+BUTTON_HILIGHT_FILE_NAME = "/etc/hildon/theme/mediaplayer/Button.png"
+
+fancy_button_highlight_pb = None
+
+class FancyButton (gtk.EventBox):
+
+ __gsignals__ = {
+ 'clicked': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ())
+ }
+
+ def __init__ (self, image, text):
+ gtk.EventBox.__init__ (self)
+
+ self.pressed = False
+
+ vbox = gtk.VBox ()
+ self.image = image
+ self.label = gtk.Label (text)
+
+ align = gtk.Alignment (xalign=0.5, yalign=0.5)
+ align.add (self.image)
+
+ vbox.pack_start (align, expand=False, fill=False)
+ vbox.pack_start (self.label, expand=False, fill=False)
+
+ self.add (vbox)
+ self.set_visible_window (False)
+ self.set_above_child (True)
+
+ self.connect ("button-press-event", self.custom_button_press_event)
+ self.connect ("button-release-event", self.custom_button_release_event)
+ self.connect ("enter-notify-event", self.custom_enter_notify_event)
+ self.connect ("leave-notify-event", self.custom_leave_notify_event)
+ self.image.connect ("expose-event", self.image_expose_event)
+
+
+ def custom_button_press_event (self, p, q):
+ self.image.set_state (gtk.STATE_ACTIVE)
+ self.pressed = True
+ print "OK"
+
+ def custom_button_release_event (self, p, q):
+
+ if (self.pressed and self.image.state == gtk.STATE_ACTIVE):
+ self.emit ("clicked")
+
+ self.image.set_state (gtk.STATE_NORMAL)
+ self.pressed = False
+
+ def custom_enter_notify_event (self, p, q):
+ if (self.pressed):
+ self.image.set_state (gtk.STATE_ACTIVE)
+
+ def custom_leave_notify_event (self, p, q):
+ self.image.set_state (gtk.STATE_NORMAL)
+
+ def image_expose_event (self, widget, event):
+ global fancy_button_highlight_pb
+
+ if (widget.state == gtk.STATE_ACTIVE):
+ if (fancy_button_highlight_pb):
+ print "Painting highlight image"
+ widget.window.draw_pixbuf (None,
+ fancy_button_highlight_pb,
+ 0, 0,
+ widget.allocation.x,
+ widget.allocation.y)
+ else:
+ gtk.Style.paint_flat_box (widget.style,
+ event.window,
+ gtk.STATE_ACTIVE,
+ gtk.SHADOW_NONE,
+ event.area,
+ widget,
+ "eventbox",
+ event.area.x,
+ event.area.y,
+ event.area.width,
+ event.area.height)
+
+
+def settings_changed (obj, spec):
+ global fancy_button_highlight_pb
+ try:
+ fancy_button_highlight_pb = gtk.gdk.pixbuf_new_from_file (BUTTON_HILIGHT_FILE_NAME)
+ except Exception, e:
+ print str(e)
+ fancy_button_highlight_pb = None
+
+if __name__ == "__main__":
+
+ w = gtk.Window ()
+
+ settings = gtk.settings_get_default ()
+ settings.connect ("notify", settings_changed)
+ settings_changed (None, None)
+
+
+ frame = gtk.Frame ()
+ frame.add (FancyButton ())
+
+ align = gtk.Alignment (xalign=0.5, yalign=0.5)
+ align.add (frame)
+
+
+ w.add (align)
+ w.show_all ()
+ w.connect ("delete-event", gtk.main_quit)
+ gtk.main ()
+
+