ayatana-commits team mailing list archive
-
ayatana-commits team
-
Mailing list archive
-
Message #02463
[Merge] lp:~cjcurran/indicator-sound/ambiance-fix into lp:indicator-sound
Conor Curran has proposed merging lp:~cjcurran/indicator-sound/ambiance-fix into lp:indicator-sound.
Requested reviews:
Indicator Applet Developers (indicator-applet-developers)
Refactors the drawing of the transport controls
- collapse into one gtkmenuitem object
- Simplify design.
- indirectly fixes ambiance background bug
--
https://code.launchpad.net/~cjcurran/indicator-sound/ambiance-fix/+merge/37149
Your team ayatana-commits is subscribed to branch lp:indicator-sound.
=== modified file 'src/Makefile.am'
--- src/Makefile.am 2010-09-13 12:35:28 +0000
+++ src/Makefile.am 2010-09-30 15:52:39 +0000
@@ -7,21 +7,19 @@
soundmenulibdir = $(INDICATORDIR)
soundmenulib_LTLIBRARIES = libsoundmenu.la
libsoundmenu_la_SOURCES = \
- common-defs.h \
- indicator-sound.h \
- transport-widget.c \
- transport-widget.h \
- metadata-widget.c \
- metadata-widget.h \
- play-button.c \
- play-button.h \
- indicator-sound.c \
- title-widget.c \
- title-widget.h \
- volume-widget.c \
- volume-widget.h \
- dbus-shared-names.h \
- sound-service-client.h
+ common-defs.h \
+ indicator-sound.h \
+ transport-widget.c \
+ transport-widget.h \
+ metadata-widget.c \
+ metadata-widget.h \
+ indicator-sound.c \
+ title-widget.c \
+ title-widget.h \
+ volume-widget.c \
+ volume-widget.h \
+ dbus-shared-names.h \
+ sound-service-client.h
libsoundmenu_la_CFLAGS = $(APPLET_CFLAGS) -Wall -DG_LOG_DOMAIN=\"Indicator-Sound\"
libsoundmenu_la_LIBADD = $(APPLET_LIBS)
=== modified file 'src/metadata-widget.c'
--- src/metadata-widget.c 2010-09-10 13:00:43 +0000
+++ src/metadata-widget.c 2010-09-30 15:52:39 +0000
@@ -51,7 +51,6 @@
static void metadata_widget_dispose (GObject *object);
static void metadata_widget_finalize (GObject *object);
static gboolean metadata_image_expose (GtkWidget *image, GdkEventExpose *event, gpointer user_data);
-//static void metadata_widget_style_changed_cb(GtkWidget *widget, gpointer user_data);
static void metadata_widget_set_style (GtkWidget* button, GtkStyle* style);
// keyevent consumers
=== modified file 'src/title-widget.c'
--- src/title-widget.c 2010-09-13 14:56:12 +0000
+++ src/title-widget.c 2010-09-30 15:52:39 +0000
@@ -32,7 +32,7 @@
struct _TitleWidgetPrivate
{
- DbusmenuMenuitem* twin_item;
+ DbusmenuMenuitem* twin_item;
};
#define TITLE_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TITLE_WIDGET_TYPE, TitleWidgetPrivate))
@@ -63,15 +63,15 @@
static void
title_widget_class_init (TitleWidgetClass *klass)
{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
-
- widget_class->button_press_event = title_widget_button_press_event;
-
- g_type_class_add_private (klass, sizeof (TitleWidgetPrivate));
-
- gobject_class->dispose = title_widget_dispose;
- gobject_class->finalize = title_widget_finalize;
+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+ GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+ widget_class->button_press_event = title_widget_button_press_event;
+
+ g_type_class_add_private (klass, sizeof (TitleWidgetPrivate));
+
+ gobject_class->dispose = title_widget_dispose;
+ gobject_class->finalize = title_widget_finalize;
}
static void
@@ -92,7 +92,7 @@
+ 1 /* padding */,
height);
gtk_misc_set_alignment(GTK_MISC(icon), 0.5 /* right aligned */, 0);
- gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(self), GTK_WIDGET(icon));
+ gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(self), GTK_WIDGET(icon));
gtk_widget_show(icon);
}
@@ -118,7 +118,7 @@
TitleWidgetPrivate * priv = TITLE_WIDGET_GET_PRIVATE(menuitem);
GValue value = {0};
- g_value_init(&value, G_TYPE_BOOLEAN);
+ g_value_init(&value, G_TYPE_BOOLEAN);
g_value_set_boolean(&value, TRUE);
dbusmenu_menuitem_handle_event (priv->twin_item, "Title menu event", &value, 0);
@@ -134,8 +134,8 @@
TitleWidget* mitem = TITLE_WIDGET(userdata);
if(g_ascii_strcasecmp(DBUSMENU_TITLE_MENUITEM_NAME, property) == 0){
- gtk_menu_item_set_label (GTK_MENU_ITEM(mitem),
- g_value_get_string(value));
+ gtk_menu_item_set_label (GTK_MENU_ITEM(mitem),
+ g_value_get_string(value));
}
}
@@ -158,8 +158,7 @@
gtk_menu_item_set_label (GTK_MENU_ITEM(self),
dbusmenu_menuitem_property_get(priv->twin_item,
- DBUSMENU_TITLE_MENUITEM_NAME));
-
+ DBUSMENU_TITLE_MENUITEM_NAME));
}
static gboolean
@@ -218,7 +217,7 @@
{
GtkWidget* widget = g_object_new (TITLE_WIDGET_TYPE,
NULL);
- gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (widget), TRUE);
+ gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (widget), TRUE);
title_widget_set_twin_item((TitleWidget*)widget, item);
return widget;
=== renamed file 'src/play-button.c' => 'src/transport-widget.c'
--- src/play-button.c 2010-09-15 17:19:47 +0000
+++ src/transport-widget.c 2010-09-30 15:52:39 +0000
@@ -25,11 +25,13 @@
#endif
#include <math.h>
-#include "play-button.h"
+#include "transport-widget.h"
+#include "common-defs.h"
+
#define RECT_WIDTH 130.0f
#define Y 7.0f
-#define X 37.0f
+#define X 80.0f
#define INNER_RADIUS 12.5
#define MIDDLE_RADIUS 13.5f
#define OUTER_RADIUS 14.5f
@@ -41,16 +43,16 @@
#define TRI_WIDTH 11.0f
#define TRI_HEIGHT 13.0f
#define TRI_OFFSET 6.0f
-#define PREV_X 35.0f
+#define PREV_X 78.0f
#define PREV_Y 13.0f
-#define NEXT_X 113.0f
+#define NEXT_X 156.0f
#define NEXT_Y 13.0f //prev_y
#define PAUSE_WIDTH 21.0f
#define PAUSE_HEIGHT 27.0f
#define BAR_WIDTH 4.5f
#define BAR_HEIGHT 24.0f
#define BAR_OFFSET 10.0f
-#define PAUSE_X 78.0f
+#define PAUSE_X 121.0f
#define PAUSE_Y 7.0f
#define PLAY_WIDTH 28.0f
#define PLAY_HEIGHT 29.0f
@@ -68,18 +70,14 @@
#define INNER_COMPRESSED_END_SHADE 1.05
-typedef struct _PlayButtonPrivate PlayButtonPrivate;
+typedef struct _TransportWidgetPrivate TransportWidgetPrivate;
-struct _PlayButtonPrivate
+struct _TransportWidgetPrivate
{
- GdkColor background_colour_fg;
- GdkColor background_colour_bg_dark;
- GdkColor background_colour_bg_light;
- GdkColor foreground_colour_fg;
- GdkColor foreground_colour_bg;
- PlayButtonEvent current_command;
- PlayButtonState current_state;
- GHashTable* command_coordinates;
+ TransportWidgetEvent current_command;
+ TransportWidgetState current_state;
+ GHashTable* command_coordinates;
+ DbusmenuMenuitem* twin_item;
};
typedef struct
@@ -90,250 +88,65 @@
} CairoColorRGB;
-#define PLAY_BUTTON_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), PLAY_BUTTON_TYPE, PlayButtonPrivate))
+#define TRANSPORT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRANSPORT_WIDGET_TYPE, TransportWidgetPrivate))
/* Gobject boiler plate */
-static void play_button_class_init (PlayButtonClass *klass);
-static void play_button_init (PlayButton *self);
-static void play_button_dispose (GObject *object);
-static void play_button_finalize (GObject *object);
-
-static gboolean play_button_expose (GtkWidget *button, GdkEventExpose *event);
-
+static void transport_widget_class_init (TransportWidgetClass *klass);
+static void transport_widget_init (TransportWidget *self);
+static void transport_widget_dispose (GObject *object);
+static void transport_widget_finalize (GObject *object);
+G_DEFINE_TYPE (TransportWidget, transport_widget, GTK_TYPE_MENU_ITEM);
+
+/* essentials */
+static void transport_widget_set_twin_item ( TransportWidget* self,
+ DbusmenuMenuitem* twin_item);
+static gboolean transport_widget_expose ( GtkWidget *button, GdkEventExpose *event);
static void draw (GtkWidget* button, cairo_t *cr);
-G_DEFINE_TYPE (PlayButton, play_button, GTK_TYPE_DRAWING_AREA);
-
-/// internal helper functions //////////////////////////////////////////////////
-
-
-static inline void
-_blurinner (guchar* pixel,
- gint* zR,
- gint* zG,
- gint* zB,
- gint* zA,
- gint alpha,
- gint aprec,
- gint zprec)
-{
- gint R;
- gint G;
- gint B;
- guchar A;
-
- R = *pixel;
- G = *(pixel + 1);
- B = *(pixel + 2);
- A = *(pixel + 3);
-
- *zR += (alpha * ((R << zprec) - *zR)) >> aprec;
- *zG += (alpha * ((G << zprec) - *zG)) >> aprec;
- *zB += (alpha * ((B << zprec) - *zB)) >> aprec;
- *zA += (alpha * ((A << zprec) - *zA)) >> aprec;
-
- *pixel = *zR >> zprec;
- *(pixel + 1) = *zG >> zprec;
- *(pixel + 2) = *zB >> zprec;
- *(pixel + 3) = *zA >> zprec;
-}
-
-static inline void
-_blurrow (guchar* pixels,
- gint width,
- gint height,
- gint channels,
- gint line,
- gint alpha,
- gint aprec,
- gint zprec)
-{
- gint zR;
- gint zG;
- gint zB;
- gint zA;
- gint index;
- guchar* scanline;
-
- scanline = &(pixels[line * width * channels]);
-
- zR = *scanline << zprec;
- zG = *(scanline + 1) << zprec;
- zB = *(scanline + 2) << zprec;
- zA = *(scanline + 3) << zprec;
-
- for (index = 0; index < width; index ++)
- _blurinner (&scanline[index * channels],
- &zR,
- &zG,
- &zB,
- &zA,
- alpha,
- aprec,
- zprec);
-
- for (index = width - 2; index >= 0; index--)
- _blurinner (&scanline[index * channels],
- &zR,
- &zG,
- &zB,
- &zA,
- alpha,
- aprec,
- zprec);
-}
-
-static inline void
-_blurcol (guchar* pixels,
- gint width,
- gint height,
- gint channels,
- gint x,
- gint alpha,
- gint aprec,
- gint zprec)
-{
- gint zR;
- gint zG;
- gint zB;
- gint zA;
- gint index;
- guchar* ptr;
-
- ptr = pixels;
-
- ptr += x * channels;
-
- zR = *((guchar*) ptr ) << zprec;
- zG = *((guchar*) ptr + 1) << zprec;
- zB = *((guchar*) ptr + 2) << zprec;
- zA = *((guchar*) ptr + 3) << zprec;
-
- for (index = width; index < (height - 1) * width; index += width)
- _blurinner ((guchar*) &ptr[index * channels],
- &zR,
- &zG,
- &zB,
- &zA,
- alpha,
- aprec,
- zprec);
-
- for (index = (height - 2) * width; index >= 0; index -= width)
- _blurinner ((guchar*) &ptr[index * channels],
- &zR,
- &zG,
- &zB,
- &zA,
- alpha,
- aprec,
- zprec);
-}
-
-void
-_expblur (guchar* pixels,
- gint width,
- gint height,
- gint channels,
- gint radius,
- gint aprec,
- gint zprec)
-{
- gint alpha;
- gint row = 0;
- gint col = 0;
-
- if (radius < 1)
- return;
-
- // calculate the alpha such that 90% of
- // the kernel is within the radius.
- // (Kernel extends to infinity)
- alpha = (gint) ((1 << aprec) * (1.0f - expf (-2.3f / (radius + 1.f))));
-
- for (; row < height; row++)
- _blurrow (pixels,
- width,
- height,
- channels,
- row,
- alpha,
- aprec,
- zprec);
-
- for(; col < width; col++)
- _blurcol (pixels,
- width,
- height,
- channels,
- col,
- alpha,
- aprec,
- zprec);
-
- return;
-}
-
-void
-_surface_blur (cairo_surface_t* surface,
- guint radius)
-{
- guchar* pixels;
- guint width;
- guint height;
- cairo_format_t format;
-
- // before we mess with the surface execute any pending drawing
- cairo_surface_flush (surface);
-
- pixels = cairo_image_surface_get_data (surface);
- width = cairo_image_surface_get_width (surface);
- height = cairo_image_surface_get_height (surface);
- format = cairo_image_surface_get_format (surface);
-
- switch (format)
- {
- case CAIRO_FORMAT_ARGB32:
- _expblur (pixels, width, height, 4, radius, 16, 7);
- break;
-
- case CAIRO_FORMAT_RGB24:
- _expblur (pixels, width, height, 3, radius, 16, 7);
- break;
-
- case CAIRO_FORMAT_A8:
- _expblur (pixels, width, height, 1, radius, 16, 7);
- break;
-
- default :
- // do nothing
- break;
- }
-
- // inform cairo we altered the surfaces contents
- cairo_surface_mark_dirty (surface);
-}
-
-/// GObject functions //////////////////////////////////////////////////////////
+/* UI and dbusmenu callbacks */
+static gboolean transport_widget_button_press_event (GtkWidget *menuitem,
+ GdkEventButton *event);
+static gboolean transport_widget_button_release_event (GtkWidget *menuitem,
+ GdkEventButton *event);
+static void transport_widget_property_update ( DbusmenuMenuitem* item,
+ gchar * property,
+ GValue * value,
+ gpointer userdata );
+static void transport_widget_menu_hidden ( GtkWidget *menu,
+ TransportWidget *transport);
+static void transport_widget_notify ( TransportWidget *item,
+ GParamSpec *pspec,
+ gpointer user_data );
+
+static TransportWidgetEvent transport_widget_determine_button_event ( TransportWidget* button,
+ GdkEventButton* event);
+static void transport_widget_react_to_button_release ( TransportWidget* button,
+ TransportWidgetEvent command);
+static void transport_widget_toggle_play_pause ( TransportWidget* button,
+ TransportWidgetState update);
+
+/// Init functions //////////////////////////////////////////////////////////
static void
-play_button_class_init (PlayButtonClass *klass)
+transport_widget_class_init (TransportWidgetClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
GtkWidgetClass* widget_class = GTK_WIDGET_CLASS (klass);
- g_type_class_add_private (klass, sizeof (PlayButtonPrivate));
-
- widget_class->expose_event = play_button_expose;
-
- gobject_class->dispose = play_button_dispose;
- gobject_class->finalize = play_button_finalize;
+ g_type_class_add_private (klass, sizeof (TransportWidgetPrivate));
+
+ widget_class->button_press_event = transport_widget_button_press_event;
+ widget_class->button_release_event = transport_widget_button_release_event;
+ widget_class->expose_event = transport_widget_expose;
+
+ gobject_class->dispose = transport_widget_dispose;
+ gobject_class->finalize = transport_widget_finalize;
}
static void
-play_button_init (PlayButton *self)
+transport_widget_init (TransportWidget *self)
{
- PlayButtonPrivate* priv = PLAY_BUTTON_GET_PRIVATE(self);
+ TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self);
priv->current_command = TRANSPORT_NADA;
priv->current_state = PAUSE;
priv->command_coordinates = g_hash_table_new_full(g_direct_hash,
@@ -345,8 +158,7 @@
previous_list = g_list_insert(previous_list, GINT_TO_POINTER(5), 1);
previous_list = g_list_insert(previous_list, GINT_TO_POINTER(60), 2);
previous_list = g_list_insert(previous_list, GINT_TO_POINTER(34), 3);
-
- g_hash_table_insert(priv->command_coordinates,
+ g_hash_table_insert(priv->command_coordinates,
GINT_TO_POINTER(TRANSPORT_PREVIOUS),
previous_list);
@@ -370,46 +182,131 @@
GINT_TO_POINTER(TRANSPORT_NEXT),
next_list);
- gtk_widget_set_size_request(GTK_WIDGET(self), 200, 50);
-
-}
-
-static void
-play_button_dispose (GObject *object)
-{
- G_OBJECT_CLASS (play_button_parent_class)->dispose (object);
-}
-
-static void
-play_button_finalize (GObject *object)
-{
- G_OBJECT_CLASS (play_button_parent_class)->finalize (object);
+ gtk_widget_set_size_request(GTK_WIDGET(self), 200, 50);
+ g_signal_connect (G_OBJECT(self),
+ "notify",
+ G_CALLBACK (transport_widget_notify),
+ NULL);
+}
+
+static void
+transport_widget_dispose (GObject *object)
+{
+ G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object);
+}
+
+static void
+transport_widget_finalize (GObject *object)
+{
+ G_OBJECT_CLASS (transport_widget_parent_class)->finalize (object);
}
static gboolean
-play_button_expose (GtkWidget *button, GdkEventExpose *event)
+transport_widget_expose (GtkWidget *button, GdkEventExpose *event)
{
cairo_t *cr;
cr = gdk_cairo_create (button->window);
+ //g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'");
cairo_rectangle (cr,
- event->area.x, event->area.y,
- event->area.width, event->area.height);
+ event->area.x, event->area.y,
+ event->area.width, event->area.height);
cairo_clip(cr);
-
draw (button, cr);
+
cairo_destroy (cr);
return FALSE;
}
-
-PlayButtonEvent
-determine_button_event(GtkWidget* button, GdkEventButton* event)
-{
- g_debug("event x coordinate = %f", event->x);
- g_debug("event y coordinate = %f", event->y);
- PlayButtonEvent button_event = TRANSPORT_NADA;
+static void
+transport_widget_toggle_play_pause(TransportWidget* button,
+ TransportWidgetState update)
+{
+ TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button);
+ priv->current_state = update;
+ //g_debug("TransportWidget::toggle play state : %i", priv->current_state);
+ gtk_widget_queue_draw (GTK_WIDGET(button));
+}
+
+static void
+transport_widget_notify (TransportWidget *item,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ if (g_strcmp0 (pspec->name, "parent")){
+ GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (item));
+ if (parent){
+ g_signal_connect ( parent, "hide",
+ G_CALLBACK (transport_widget_menu_hidden),
+ item);
+ }
+ }
+}
+
+static void
+transport_widget_menu_hidden ( GtkWidget *menu,
+ TransportWidget *transport)
+{
+ //g_debug("Transport Widget's menu hidden method called");
+ g_return_if_fail(IS_TRANSPORT_WIDGET(transport));
+ transport_widget_react_to_button_release(transport, TRANSPORT_NADA);
+}
+
+/* keyevents */
+static gboolean
+transport_widget_button_press_event (GtkWidget *menuitem,
+ GdkEventButton *event)
+{
+ g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE );
+ TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) );
+
+ TransportWidgetEvent result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem),
+ event);
+ if(result != TRANSPORT_NADA){
+ priv->current_command = result;
+ cairo_t *cr;
+ cr = gdk_cairo_create (menuitem->window);
+ draw ( menuitem, cr );
+ cairo_destroy ( cr );
+ }
+ return TRUE;
+}
+
+static gboolean
+transport_widget_button_release_event (GtkWidget *menuitem,
+ GdkEventButton *event)
+{
+ //g_debug("TransportWidget::menu_release_event");
+ g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);
+ TransportWidget* transport = TRANSPORT_WIDGET(menuitem);
+ TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport );
+
+ TransportWidgetEvent result = transport_widget_determine_button_event ( transport,
+ event );
+ if(result != TRANSPORT_NADA){
+ GValue value = {0};
+ g_value_init(&value, G_TYPE_INT);
+ //g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);
+ g_value_set_int(&value, (int)result);
+ dbusmenu_menuitem_handle_event ( priv->twin_item,
+ "Transport state change",
+ &value,
+ 0 );
+ }
+
+ transport_widget_react_to_button_release ( transport,
+ result );
+ return TRUE;
+}
+
+static TransportWidgetEvent
+transport_widget_determine_button_event( TransportWidget* button,
+ GdkEventButton* event )
+{
+ //g_debug("event x coordinate = %f", event->x);
+ //g_debug("event y coordinate = %f", event->y);
+ TransportWidgetEvent button_event = TRANSPORT_NADA;
// For now very simple rectangular collision detection
if(event->x > 67 && event->x < 112
&& event->y > 12 && event->y < 40){
@@ -423,87 +320,33 @@
&& event->y > 12 && event->y < 40){
button_event = TRANSPORT_NEXT;
}
- return button_event;
-
-}
-
-void
-play_button_react_to_button_press(GtkWidget* button, PlayButtonEvent command)
-{
- g_return_if_fail(IS_PLAY_BUTTON(button));
- PlayButtonPrivate* priv = PLAY_BUTTON_GET_PRIVATE(button);
- priv->current_command = command;
-
- cairo_t *cr;
- cr = gdk_cairo_create (button->window);
-
- GList* list = g_hash_table_lookup(priv->command_coordinates,
- GINT_TO_POINTER(priv->current_command));
- cairo_rectangle(cr,
- GPOINTER_TO_INT(g_list_nth_data(list, 0)),
- GPOINTER_TO_INT(g_list_nth_data(list, 1)),
- GPOINTER_TO_INT(g_list_nth_data(list, 2)),
- GPOINTER_TO_INT(g_list_nth_data(list, 3)));
- cairo_clip(cr);
- draw (button, cr);
- cairo_destroy (cr);
-}
-
-
-void
-play_button_react_to_button_release(GtkWidget* button, PlayButtonEvent command)
-{
- g_return_if_fail(IS_PLAY_BUTTON(button));
- PlayButtonPrivate* priv = PLAY_BUTTON_GET_PRIVATE(button);
+ return button_event;
+}
+
+
+static void
+transport_widget_react_to_button_release ( TransportWidget* button,
+ TransportWidgetEvent command )
+{
+ g_return_if_fail(IS_TRANSPORT_WIDGET(button));
+ TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button);
if(priv->current_command == TRANSPORT_NADA){
- g_debug("returning from the playbutton release because my previous command was nada");
+ //g_debug("returning from the playbutton release because my previous command was nada");
return;
}
else if(priv->current_command != TRANSPORT_NADA &&
command != TRANSPORT_NADA){
priv->current_command = command;
}
-
- cairo_t *cr;
-
- cr = gdk_cairo_create (button->window);
- GList* list = g_hash_table_lookup(priv->command_coordinates,
- GINT_TO_POINTER(priv->current_command));
-
+ cairo_t *cr;
+ cr = gdk_cairo_create ( GTK_WIDGET(button)->window );
priv->current_command = TRANSPORT_NADA;
-
- cairo_rectangle(cr,
- GPOINTER_TO_INT(g_list_nth_data(list, 0)),
- GPOINTER_TO_INT(g_list_nth_data(list, 1)),
- GPOINTER_TO_INT(g_list_nth_data(list, 2)),
- GPOINTER_TO_INT(g_list_nth_data(list, 3)));
- cairo_clip(cr);
- draw (button, cr);
+ draw ( GTK_WIDGET(button), cr );
cairo_destroy (cr);
-
}
-void
-play_button_toggle_play_pause(GtkWidget* button, PlayButtonState update)
-{
- PlayButtonPrivate* priv = PLAY_BUTTON_GET_PRIVATE(button);
- priv->current_state = update;
- g_debug("PlayButton::toggle play state : %i", priv->current_state);
- gtk_widget_queue_draw (GTK_WIDGET(button));
-}
-
-
-void
-play_button_set_style(GtkWidget* button, GtkStyle* style)
-{
- PlayButtonPrivate* priv = PLAY_BUTTON_GET_PRIVATE(button);
- priv->background_colour_fg = style->fg[GTK_STATE_NORMAL];
- priv->background_colour_bg_dark = style->bg[GTK_STATE_NORMAL];
- priv->background_colour_bg_light = style->base[GTK_STATE_NORMAL];
- priv->foreground_colour_fg = style->fg[GTK_STATE_PRELIGHT];
- priv->foreground_colour_bg = style->bg[GTK_STATE_NORMAL];
-}
+/// internal helper functions //////////////////////////////////////////////////
static void
draw_gradient (cairo_t* cr,
@@ -940,18 +783,230 @@
b->b = blue;
}
+static inline void
+_blurinner (guchar* pixel,
+ gint* zR,
+ gint* zG,
+ gint* zB,
+ gint* zA,
+ gint alpha,
+ gint aprec,
+ gint zprec)
+{
+ gint R;
+ gint G;
+ gint B;
+ guchar A;
+
+ R = *pixel;
+ G = *(pixel + 1);
+ B = *(pixel + 2);
+ A = *(pixel + 3);
+
+ *zR += (alpha * ((R << zprec) - *zR)) >> aprec;
+ *zG += (alpha * ((G << zprec) - *zG)) >> aprec;
+ *zB += (alpha * ((B << zprec) - *zB)) >> aprec;
+ *zA += (alpha * ((A << zprec) - *zA)) >> aprec;
+
+ *pixel = *zR >> zprec;
+ *(pixel + 1) = *zG >> zprec;
+ *(pixel + 2) = *zB >> zprec;
+ *(pixel + 3) = *zA >> zprec;
+}
+
+static inline void
+_blurrow (guchar* pixels,
+ gint width,
+ gint height,
+ gint channels,
+ gint line,
+ gint alpha,
+ gint aprec,
+ gint zprec)
+{
+ gint zR;
+ gint zG;
+ gint zB;
+ gint zA;
+ gint index;
+ guchar* scanline;
+
+ scanline = &(pixels[line * width * channels]);
+
+ zR = *scanline << zprec;
+ zG = *(scanline + 1) << zprec;
+ zB = *(scanline + 2) << zprec;
+ zA = *(scanline + 3) << zprec;
+
+ for (index = 0; index < width; index ++)
+ _blurinner (&scanline[index * channels],
+ &zR,
+ &zG,
+ &zB,
+ &zA,
+ alpha,
+ aprec,
+ zprec);
+
+ for (index = width - 2; index >= 0; index--)
+ _blurinner (&scanline[index * channels],
+ &zR,
+ &zG,
+ &zB,
+ &zA,
+ alpha,
+ aprec,
+ zprec);
+}
+
+static inline void
+_blurcol (guchar* pixels,
+ gint width,
+ gint height,
+ gint channels,
+ gint x,
+ gint alpha,
+ gint aprec,
+ gint zprec)
+{
+ gint zR;
+ gint zG;
+ gint zB;
+ gint zA;
+ gint index;
+ guchar* ptr;
+
+ ptr = pixels;
+
+ ptr += x * channels;
+
+ zR = *((guchar*) ptr ) << zprec;
+ zG = *((guchar*) ptr + 1) << zprec;
+ zB = *((guchar*) ptr + 2) << zprec;
+ zA = *((guchar*) ptr + 3) << zprec;
+
+ for (index = width; index < (height - 1) * width; index += width)
+ _blurinner ((guchar*) &ptr[index * channels],
+ &zR,
+ &zG,
+ &zB,
+ &zA,
+ alpha,
+ aprec,
+ zprec);
+
+ for (index = (height - 2) * width; index >= 0; index -= width)
+ _blurinner ((guchar*) &ptr[index * channels],
+ &zR,
+ &zG,
+ &zB,
+ &zA,
+ alpha,
+ aprec,
+ zprec);
+}
+
+void
+_expblur (guchar* pixels,
+ gint width,
+ gint height,
+ gint channels,
+ gint radius,
+ gint aprec,
+ gint zprec)
+{
+ gint alpha;
+ gint row = 0;
+ gint col = 0;
+
+ if (radius < 1)
+ return;
+
+ // calculate the alpha such that 90% of
+ // the kernel is within the radius.
+ // (Kernel extends to infinity)
+ alpha = (gint) ((1 << aprec) * (1.0f - expf (-2.3f / (radius + 1.f))));
+
+ for (; row < height; row++)
+ _blurrow (pixels,
+ width,
+ height,
+ channels,
+ row,
+ alpha,
+ aprec,
+ zprec);
+
+ for(; col < width; col++)
+ _blurcol (pixels,
+ width,
+ height,
+ channels,
+ col,
+ alpha,
+ aprec,
+ zprec);
+
+ return;
+}
+
+void
+_surface_blur (cairo_surface_t* surface,
+ guint radius)
+{
+ guchar* pixels;
+ guint width;
+ guint height;
+ cairo_format_t format;
+
+ // before we mess with the surface execute any pending drawing
+ cairo_surface_flush (surface);
+
+ pixels = cairo_image_surface_get_data (surface);
+ width = cairo_image_surface_get_width (surface);
+ height = cairo_image_surface_get_height (surface);
+ format = cairo_image_surface_get_format (surface);
+
+ switch (format)
+ {
+ case CAIRO_FORMAT_ARGB32:
+ _expblur (pixels, width, height, 4, radius, 16, 7);
+ break;
+
+ case CAIRO_FORMAT_RGB24:
+ _expblur (pixels, width, height, 3, radius, 16, 7);
+ break;
+
+ case CAIRO_FORMAT_A8:
+ _expblur (pixels, width, height, 1, radius, 16, 7);
+ break;
+
+ default :
+ // do nothing
+ break;
+ }
+
+ // inform cairo we altered the surfaces contents
+ cairo_surface_mark_dirty (surface);
+}
+
static void
draw (GtkWidget* button, cairo_t *cr)
{
- g_return_if_fail(IS_PLAY_BUTTON(button));
- PlayButtonPrivate* priv = PLAY_BUTTON_GET_PRIVATE(button);
+ g_return_if_fail(IS_TRANSPORT_WIDGET(button));
+ TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button);
cairo_surface_t* surf = NULL;
cairo_t* cr_surf = NULL;
- GtkStyle *style;
-
- CairoColorRGB bg_normal, fg_normal;
+ cairo_translate (cr, button->allocation.x, button->allocation.y);
+
+ //g_debug("button x allocation = %i", button->allocation.x);
+ //g_debug("button y allocation = %i", button->allocation.y);
+
+ GtkStyle *style;
+
+ CairoColorRGB bg_normal, fg_normal;
CairoColorRGB color_inner[2], color_middle[2], color_outer[2], color_button[3], color_inner_compressed[2];
style = gtk_widget_get_style (button);
@@ -960,13 +1015,13 @@
bg_normal.g = style->bg[0].green/65535.0;
bg_normal.b = style->bg[0].blue/65535.0;
- fg_normal.r = style->fg[0].red/65535.0;
+ fg_normal.r = style->fg[0].red/65535.0;
fg_normal.g = style->fg[0].green/65535.0;
fg_normal.b = style->fg[0].blue/65535.0;
_color_shade (&bg_normal, INNER_START_SHADE, &color_inner[0]);
_color_shade (&bg_normal, INNER_END_SHADE, &color_inner[1]);
- _color_shade (&bg_normal, MIDDLE_START_SHADE, &color_middle[0]);
+ _color_shade (&bg_normal, MIDDLE_START_SHADE, &color_middle[0]);
_color_shade (&bg_normal, MIDDLE_END_SHADE, &color_middle[1]);
_color_shade (&bg_normal, OUTER_START_SHADE, &color_outer[0]);
_color_shade (&bg_normal, OUTER_END_SHADE, &color_outer[1]);
@@ -987,20 +1042,20 @@
double INNER_COMPRESSED_START[] = {color_inner_compressed[0].r, color_inner_compressed[0].g, color_inner_compressed[0].b, 1.0f};
// prev/next-background
- draw_gradient (cr,
- X,
- Y,
- RECT_WIDTH,
- OUTER_RADIUS,
- OUTER_START,
- OUTER_END);
- draw_gradient (cr,
- X,
- Y + 1,
- RECT_WIDTH - 2,
- MIDDLE_RADIUS,
- MIDDLE_START,
- MIDDLE_END);
+ draw_gradient (cr,
+ X,
+ Y,
+ RECT_WIDTH,
+ OUTER_RADIUS,
+ OUTER_START,
+ OUTER_END);
+ draw_gradient (cr,
+ X,
+ Y + 1,
+ RECT_WIDTH - 2,
+ MIDDLE_RADIUS,
+ MIDDLE_START,
+ MIDDLE_END);
draw_gradient (cr,
X,
Y + 2,
@@ -1029,26 +1084,26 @@
}
// play/pause-background
- draw_circle (cr,
- X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 5.5f,
- Y - ((CIRCLE_RADIUS - OUTER_RADIUS)),
- CIRCLE_RADIUS,
- OUTER_START,
- OUTER_END);
- draw_circle (cr,
- X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 5.5f + 0.5f,
- Y - ((CIRCLE_RADIUS - OUTER_RADIUS)) + 0.5f,
- CIRCLE_RADIUS - 0.75f,
- MIDDLE_START,
- MIDDLE_END);
+ draw_circle (cr,
+ X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 5.5f,
+ Y - ((CIRCLE_RADIUS - OUTER_RADIUS)),
+ CIRCLE_RADIUS,
+ OUTER_START,
+ OUTER_END);
+ draw_circle (cr,
+ X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 5.5f + 0.5f,
+ Y - ((CIRCLE_RADIUS - OUTER_RADIUS)) + 0.5f,
+ CIRCLE_RADIUS - 0.75f,
+ MIDDLE_START,
+ MIDDLE_END);
if(priv->current_command == TRANSPORT_PLAY_PAUSE){
- draw_circle (cr,
- X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 5.5f + 1.5f,
- Y - ((CIRCLE_RADIUS - OUTER_RADIUS)) + 1.5f,
- CIRCLE_RADIUS - 1.5f,
- INNER_COMPRESSED_START,
- INNER_COMPRESSED_END);
+ draw_circle (cr,
+ X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 5.5f + 1.5f,
+ Y - ((CIRCLE_RADIUS - OUTER_RADIUS)) + 1.5f,
+ CIRCLE_RADIUS - 1.5f,
+ INNER_COMPRESSED_START,
+ INNER_COMPRESSED_END);
}
else{
draw_circle (cr,
@@ -1207,18 +1262,50 @@
FALSE);
_finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y);
}
-
-}
-
-/**
-* play_button_new:
-* @returns: a new #PlayButton.
+}
+
+static void transport_widget_set_twin_item(TransportWidget* self,
+ DbusmenuMenuitem* twin_item)
+{
+ TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self);
+ priv->twin_item = twin_item;
+ g_signal_connect(G_OBJECT(priv->twin_item), "property-changed",
+ G_CALLBACK(transport_widget_property_update), self);
+}
+
+/**
+* transport_widget_update_state()
+* Callback for updates from the other side of dbus
+**/
+static void
+transport_widget_property_update(DbusmenuMenuitem* item, gchar* property,
+ GValue* value, gpointer userdata)
+{
+ //g_debug("transport_widget_update_state - with property %s", property);
+ TransportWidget* bar = (TransportWidget*)userdata;
+ g_return_if_fail(IS_TRANSPORT_WIDGET(bar));
+
+ if(g_ascii_strcasecmp(DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, property) == 0)
+ {
+ int update_value = g_value_get_int(value);
+ //g_debug("transport_widget_update_state - with value %i", update_value);
+ transport_widget_toggle_play_pause(bar,
+ (TransportWidgetState)update_value);
+ }
+}
+
+
+
+/**
+* transport_widget_new:
+* @returns: a new #TransportWidget.
**/
GtkWidget*
-play_button_new()
+transport_widget_new ( DbusmenuMenuitem *item )
{
- GtkWidget* widget = g_object_new(PLAY_BUTTON_TYPE, NULL);
+ GtkWidget* widget = g_object_new(TRANSPORT_WIDGET_TYPE, NULL);
gtk_widget_set_app_paintable (widget, TRUE);
+ transport_widget_set_twin_item((TransportWidget*)widget, item);
return widget;
}
=== removed file 'src/transport-widget.c'
--- src/transport-widget.c 2010-09-15 18:16:32 +0000
+++ src/transport-widget.c 1970-01-01 00:00:00 +0000
@@ -1,245 +0,0 @@
-/*
-Copyright 2010 Canonical Ltd.
-
-Authors:
- Conor Curran <conor.curran@xxxxxxxxxxxxx>
-
-This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 3, as published
-by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranties of
-MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <glib/gi18n.h>
-#include "transport-widget.h"
-#include "common-defs.h"
-#include <gtk/gtk.h>
-#include "play-button.h"
-
-typedef struct _TransportWidgetPrivate TransportWidgetPrivate;
-
-struct _TransportWidgetPrivate
-{
- GtkWidget* hbox;
- GtkWidget* play_button;
- DbusmenuMenuitem* twin_item;
-};
-
-#define TRANSPORT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRANSPORT_WIDGET_TYPE, TransportWidgetPrivate))
-
-/* Gobject boiler plate */
-static void transport_widget_class_init (TransportWidgetClass *klass);
-static void transport_widget_init (TransportWidget *self);
-static void transport_widget_dispose (GObject *object);
-static void transport_widget_finalize (GObject *object);
-
-static void transport_widget_set_twin_item(TransportWidget* self,
- DbusmenuMenuitem* twin_item);
-static gboolean transport_widget_expose_event(GtkWidget* widget,
- GdkEventExpose* event);
-
-/* UI and dbusmenu callbacks */
-static gboolean transport_widget_button_press_event (GtkWidget *menuitem,
- GdkEventButton *event);
-static gboolean transport_widget_button_release_event (GtkWidget *menuitem,
- GdkEventButton *event);
-static void transport_widget_property_update( DbusmenuMenuitem* item,
- gchar * property,
- GValue * value,
- gpointer userdata );
-static void transport_widget_menu_hidden ( GtkWidget *menu,
- TransportWidget *transport);
-static void transport_widget_notify ( TransportWidget *item,
- GParamSpec *pspec,
- gpointer user_data );
-
-
-G_DEFINE_TYPE (TransportWidget, transport_widget, GTK_TYPE_MENU_ITEM);
-
-static void
-transport_widget_class_init (TransportWidgetClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
- GtkMenuItemClass *menu_item_class = GTK_MENU_ITEM_CLASS(klass);
-
- menu_item_class->hide_on_activate = FALSE;
- widget_class->button_press_event = transport_widget_button_press_event;
- widget_class->button_release_event = transport_widget_button_release_event;
- widget_class->expose_event = transport_widget_expose_event;
- g_type_class_add_private (klass, sizeof (TransportWidgetPrivate));
-
- gobject_class->dispose = transport_widget_dispose;
- gobject_class->finalize = transport_widget_finalize;
-}
-
-static void
-transport_widget_init (TransportWidget *self)
-{
- g_debug("TransportWidget::transport_widget_init");
-
- TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE(self);
- GtkWidget* hbox;
-
- hbox = gtk_hbox_new(TRUE, 2);
-
- GtkStyle* style = gtk_rc_get_style(GTK_WIDGET(self));
-
- priv->hbox = hbox;
- priv->play_button = play_button_new();
- play_button_set_style(priv->play_button, style);
-
- gtk_box_pack_start (GTK_BOX (priv->hbox), priv->play_button, FALSE, FALSE, 0);
-
- gtk_container_add (GTK_CONTAINER (self), priv->hbox);
-
- gtk_widget_show_all (priv->hbox);
-
- g_signal_connect (G_OBJECT(self),
- "notify",
- G_CALLBACK (transport_widget_notify),
- NULL);
-}
-
-static void
-transport_widget_dispose (GObject *object)
-{
- G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object);
-}
-
-static void
-transport_widget_finalize (GObject *object)
-{
- G_OBJECT_CLASS (transport_widget_parent_class)->finalize (object);
-}
-
-static gboolean
-transport_widget_expose_event(GtkWidget* widget, GdkEventExpose* event)
-{
- return TRUE;
-}
-
-static void transport_widget_set_twin_item(TransportWidget* self,
- DbusmenuMenuitem* twin_item)
-{
- TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self);
- priv->twin_item = twin_item;
- g_signal_connect(G_OBJECT(priv->twin_item), "property-changed",
- G_CALLBACK(transport_widget_property_update), self);
-}
-
-static void
-transport_widget_notify (TransportWidget *item,
- GParamSpec *pspec,
- gpointer user_data)
-{
-
- if (g_strcmp0 (pspec->name, "parent"))
- {
- GtkWidget *parent = gtk_widget_get_parent (GTK_WIDGET (item));
-
- if (parent)
- {
- g_signal_connect (parent, "hide",
- G_CALLBACK (transport_widget_menu_hidden),
- item);
- }
- }
-}
-
-static void
-transport_widget_menu_hidden ( GtkWidget *menu,
- TransportWidget *transport)
-{
- g_debug("Transport Widget's menu hidden method called");
- g_return_if_fail(IS_TRANSPORT_WIDGET(transport));
- TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE(TRANSPORT_WIDGET(transport));
- play_button_react_to_button_release(priv->play_button, TRANSPORT_NADA);
-
-}
-
-
-/* keyevents */
-static gboolean
-transport_widget_button_press_event (GtkWidget *menuitem,
- GdkEventButton *event)
-{
- g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);
- TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE(TRANSPORT_WIDGET(menuitem));
-
- PlayButtonEvent result = determine_button_event(priv->play_button, event);
-
- if(result != TRANSPORT_NADA){
- play_button_react_to_button_press(priv->play_button, result);
- }
- return TRUE;
-}
-
-
-static gboolean
-transport_widget_button_release_event (GtkWidget *menuitem,
- GdkEventButton *event)
-{
- g_debug("TransportWidget::menu_release_event");
- g_return_val_if_fail(IS_TRANSPORT_WIDGET(menuitem), FALSE);
- TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE(TRANSPORT_WIDGET(menuitem));
-
- PlayButtonEvent result = determine_button_event(priv->play_button, event);
-
- if(result != TRANSPORT_NADA){
- GValue value = {0};
- g_value_init(&value, G_TYPE_INT);
- g_debug("TransportWidget::menu_press_event - going to send value %i", (int)result);
- g_value_set_int(&value, (int)result);
- dbusmenu_menuitem_handle_event (priv->twin_item, "Transport state change", &value, 0);
- }
- play_button_react_to_button_release(priv->play_button, result);
-
- return TRUE;
-}
-
-/**
-* transport_widget_update_state()
-* Callback for updates from the other side of dbus
-**/
-static void
-transport_widget_property_update(DbusmenuMenuitem* item, gchar* property,
- GValue* value, gpointer userdata)
-{
- g_debug("transport_widget_update_state - with property %s", property);
- TransportWidget* bar = (TransportWidget*)userdata;
- g_return_if_fail(IS_TRANSPORT_WIDGET(bar));
-
- if(g_ascii_strcasecmp(DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, property) == 0)
- {
- TransportWidgetPrivate *priv = TRANSPORT_WIDGET_GET_PRIVATE(bar);
- int update_value = g_value_get_int(value);
- g_debug("transport_widget_update_state - with value %i", update_value);
- play_button_toggle_play_pause(priv->play_button, (PlayButtonState)update_value);
-
- }
-}
-
- /**
- * transport_new:
- * @returns: a new #TransportWidget.
- **/
-GtkWidget*
-transport_widget_new(DbusmenuMenuitem *item)
-{
- GtkWidget* widget = g_object_new(TRANSPORT_WIDGET_TYPE, NULL);
- transport_widget_set_twin_item((TransportWidget*)widget, item);
- return widget;
-}
-
=== renamed file 'src/play-button.h' => 'src/transport-widget.h'
--- src/play-button.h 2010-09-06 18:30:48 +0000
+++ src/transport-widget.h 2010-09-30 15:52:39 +0000
@@ -16,51 +16,47 @@
You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#ifndef __PLAY_BUTTON_H__
-#define __PLAY_BUTTON_H__
+#ifndef __TRANSPORT_WIDGET_H__
+#define __TRANSPORT_WIDGET_H__
#include <gtk/gtk.h>
+#include <gtk/gtkmenuitem.h>
+#include <libdbusmenu-gtk/menuitem.h>
G_BEGIN_DECLS
-#define PLAY_BUTTON_TYPE (play_button_get_type ())
-#define PLAY_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PLAY_BUTTON_TYPE, PlayButton))
-#define PLAY_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PLAY_BUTTON_TYPE, PlayButtonClass))
-#define IS_PLAY_BUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PLAY_BUTTON_TYPE))
-#define IS_PLAY_BUTTON_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PLAY_BUTTON_TYPE))
-#define PLAY_BUTTON_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PLAY_BUTTON_TYPE, PlayButtonClass))
+#define TRANSPORT_WIDGET_TYPE (transport_widget_get_type ())
+#define TRANSPORT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TRANSPORT_WIDGET_TYPE, TransportWidget))
+#define TRANSPORT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TRANSPORT_WIDGET_TYPE, TransportWidgetClass))
+#define IS_TRANSPORT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TRANSPORT_WIDGET_TYPE))
+#define IS_TRANSPORT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TRANSPORT_WIDGET_TYPE))
+#define TRANSPORT_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TRANSPORT_WIDGET_TYPE, TransportWidgetClass))
-typedef struct _PlayButton PlayButton;
-typedef struct _PlayButtonClass PlayButtonClass;
+typedef struct _TransportWidget TransportWidget;
+typedef struct _TransportWidgetClass TransportWidgetClass;
typedef enum {
TRANSPORT_PREVIOUS,
TRANSPORT_PLAY_PAUSE,
TRANSPORT_NEXT,
TRANSPORT_NADA
-}PlayButtonEvent;
+}TransportWidgetEvent;
typedef enum {
PLAY,
PAUSE
-}PlayButtonState;
-
-struct _PlayButtonClass {
- GtkDrawingAreaClass parent_class;
-};
-
-struct _PlayButton {
- GtkDrawingArea parent;
-};
-
-GType play_button_get_type (void);
-void play_button_set_style(GtkWidget* button, GtkStyle* style);
-PlayButtonEvent determine_button_event(GtkWidget* button, GdkEventButton* event);
-void play_button_react_to_button_press(GtkWidget* button, PlayButtonEvent command);
-void play_button_react_to_button_release(GtkWidget* button, PlayButtonEvent command);
-void play_button_toggle_play_pause(GtkWidget* button, PlayButtonState update);
-
-GtkWidget* play_button_new();
+}TransportWidgetState;
+
+struct _TransportWidgetClass {
+ GtkMenuItemClass parent_class;
+};
+
+struct _TransportWidget {
+ GtkMenuItem parent;
+};
+
+GType transport_widget_get_type (void);
+GtkWidget* transport_widget_new ( DbusmenuMenuitem *item );
G_END_DECLS
=== removed file 'src/transport-widget.h'
--- src/transport-widget.h 2010-08-06 12:20:03 +0000
+++ src/transport-widget.h 1970-01-01 00:00:00 +0000
@@ -1,51 +0,0 @@
-/*
-Copyright 2010 Canonical Ltd.
-
-Authors:
- Conor Curran <conor.curran@xxxxxxxxxxxxx>
-
-This program is free software: you can redistribute it and/or modify it
-under the terms of the GNU General Public License version 3, as published
-by the Free Software Foundation.
-
-This program is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranties of
-MERCHANTABILITY, SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR
-PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along
-with this program. If not, see <http://www.gnu.org/licenses/>.
-*/
-#ifndef __TRANSPORT_WIDGET_H__
-#define __TRANSPORT_WIDGET_H__
-
-#include <gtk/gtkmenuitem.h>
-#include <libdbusmenu-gtk/menuitem.h>
-
-G_BEGIN_DECLS
-
-#define TRANSPORT_WIDGET_TYPE (transport_widget_get_type ())
-#define TRANSPORT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), TRANSPORT_WIDGET_TYPE, TransportWidget))
-#define TRANSPORT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), TRANSPORT_WIDGET_TYPE, TransportWidgetClass))
-#define IS_TRANSPORT_WIDGET(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), TRANSPORT_WIDGET_TYPE))
-#define IS_TRANSPORT_WIDGET_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), TRANSPORT_WIDGET_TYPE))
-#define TRANSPORT_WIDGET_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), TRANSPORT_WIDGET_TYPE, TransportWidgetClass))
-
-typedef struct _TransportWidget TransportWidget;
-typedef struct _TransportWidgetClass TransportWidgetClass;
-
-struct _TransportWidgetClass {
- GtkMenuItemClass parent_class;
-};
-
-struct _TransportWidget {
- GtkMenuItem parent;
-};
-
-GType transport_widget_get_type (void);
-GtkWidget* transport_widget_new(DbusmenuMenuitem *twin_item);
-
-G_END_DECLS
-
-#endif
-
Follow ups