From 41416ba7f8944ac60a6c1d84409d05a2d9e4d787 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Wed, 22 Jun 2011 15:19:49 -0400 Subject: port to gtk3 --- src/transport-widget.c | 40 ++++++++++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 14 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index f05c4c1..f9b5319 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -104,8 +104,10 @@ G_DEFINE_TYPE (TransportWidget, transport_widget, GTK_TYPE_MENU_ITEM); /* essentials */ static void transport_widget_set_twin_item ( TransportWidget* self, DbusmenuMenuitem* twin_item); +#if ! GTK_CHECK_VERSION(3, 0, 0) static gboolean transport_widget_expose ( GtkWidget *button, GdkEventExpose *event); -static void draw (GtkWidget* button, cairo_t *cr); +#endif +static gboolean draw (GtkWidget* button, cairo_t *cr); /* UI and dbusmenu callbacks */ static gboolean transport_widget_button_press_event (GtkWidget *menuitem, @@ -133,8 +135,8 @@ static void transport_widget_react_to_button_release ( TransportWidget* button, TransportAction command); static void transport_widget_toggle_play_pause ( TransportWidget* button, TransportState update); -static void transport_widget_select (GtkItem* menu, gpointer Userdata); -static void transport_widget_deselect (GtkItem* menu, gpointer Userdata); +static void transport_widget_select (GtkWidget* menu, gpointer Userdata); +static void transport_widget_deselect (GtkWidget* menu, gpointer Userdata); static TransportAction transport_widget_collision_detection (gint x, gint y); static void transport_widget_start_timing (TransportWidget* widget); static gboolean transport_widget_trigger_seek (gpointer userdata); @@ -155,7 +157,11 @@ transport_widget_class_init (TransportWidgetClass *klass) widget_class->button_release_event = transport_widget_button_release_event; widget_class->motion_notify_event = transport_widget_motion_notify_event; widget_class->leave_notify_event = transport_widget_leave_notify_event; +#if GTK_CHECK_VERSION(3, 0, 0) + widget_class->draw = draw; +#else widget_class->expose_event = transport_widget_expose; +#endif gobject_class->dispose = transport_widget_dispose; gobject_class->finalize = transport_widget_finalize; @@ -212,11 +218,11 @@ transport_widget_init (TransportWidget *self) "notify", G_CALLBACK (transport_widget_notify), NULL); - g_signal_connect (GTK_ITEM(self), + g_signal_connect (G_OBJECT(self), "select", G_CALLBACK (transport_widget_select), NULL); - g_signal_connect (GTK_ITEM(self), + g_signal_connect (G_OBJECT(self), "deselect", G_CALLBACK (transport_widget_deselect), NULL); @@ -236,11 +242,12 @@ transport_widget_finalize (GObject *object) G_OBJECT_CLASS (transport_widget_parent_class)->finalize (object); } +#if ! GTK_CHECK_VERSION(3, 0, 0) static gboolean transport_widget_expose (GtkWidget *button, GdkEventExpose *event) { cairo_t *cr; - cr = gdk_cairo_create (button->window); + cr = gdk_cairo_create (gtk_widget_get_window (button)); //g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); cairo_rectangle (cr, @@ -253,6 +260,7 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_destroy (cr); return FALSE; } +#endif gboolean transport_widget_is_selected ( TransportWidget* widget ) @@ -434,7 +442,7 @@ transport_widget_button_release_event (GtkWidget *menuitem, } static void -transport_widget_select (GtkItem* item, gpointer Userdata) +transport_widget_select (GtkWidget* item, gpointer Userdata) { TransportWidget* transport = TRANSPORT_WIDGET(item); TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); @@ -442,7 +450,7 @@ transport_widget_select (GtkItem* item, gpointer Userdata) } static void -transport_widget_deselect (GtkItem* item, gpointer Userdata) +transport_widget_deselect (GtkWidget* item, gpointer Userdata) { TransportWidget* transport = TRANSPORT_WIDGET(item); TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE ( transport ); @@ -1214,20 +1222,22 @@ _surface_blur (cairo_surface_t* surface, cairo_surface_mark_dirty (surface); } -static void +static gboolean draw (GtkWidget* button, cairo_t *cr) { - g_return_if_fail(IS_TRANSPORT_WIDGET(button)); - g_return_if_fail( cr != NULL ); + g_return_val_if_fail(IS_TRANSPORT_WIDGET(button), FALSE); + g_return_val_if_fail(cr != NULL, FALSE); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); cairo_surface_t* surf = NULL; cairo_t* cr_surf = NULL; - cairo_translate (cr, button->allocation.x, button->allocation.y); + GtkAllocation allocation; + gtk_widget_get_allocation (button, &allocation); + cairo_translate (cr, allocation.x, allocation.y); - //g_debug("button x allocation = %i", button->allocation.x); - //g_debug("button y allocation = %i", button->allocation.y); + //g_debug("button x allocation = %i", allocation.x); + //g_debug("button y allocation = %i", allocation.y); GtkStyle *style; @@ -1795,6 +1805,8 @@ draw (GtkWidget* button, cairo_t *cr) FALSE); _finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y); } + + return FALSE; } static void -- cgit v1.2.3 From 4b03b559fa3b69930ae3d2dc769de1b9cc1a7c44 Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Mon, 27 Jun 2011 07:57:31 -0400 Subject: fix gtk3 not drawing transport widget at all --- src/transport-widget.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index f9b5319..79eef63 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1232,12 +1232,14 @@ draw (GtkWidget* button, cairo_t *cr) cairo_surface_t* surf = NULL; cairo_t* cr_surf = NULL; +#if ! GTK_CHECK_VERSION(3, 0, 0) GtkAllocation allocation; gtk_widget_get_allocation (button, &allocation); cairo_translate (cr, allocation.x, allocation.y); //g_debug("button x allocation = %i", allocation.x); //g_debug("button y allocation = %i", allocation.y); +#endif GtkStyle *style; -- cgit v1.2.3 From b71505f2ebffc8b4c8766a6f2b5147fb61ee931e Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 28 Jun 2011 10:45:06 +0100 Subject: gtk widgets behaving themselves finally in gtk3 --- src/transport-widget.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 79eef63..2c2bd48 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -31,7 +31,7 @@ Uses code from ctk #define RECT_WIDTH 130.0f #define Y 7.0f -#define X 80.0f +#define X 70.0f #define INNER_RADIUS 12.5 #define MIDDLE_RADIUS 13.0f #define OUTER_RADIUS 14.5f @@ -43,16 +43,16 @@ Uses code from ctk #define TRI_WIDTH 11.0f #define TRI_HEIGHT 13.0f #define TRI_OFFSET 6.0f -#define PREV_X 78.0f +#define PREV_X 68.0f #define PREV_Y 13.0f -#define NEXT_X 156.0f +#define NEXT_X 146.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 121.0f +#define PAUSE_X 111.0f #define PAUSE_Y 7.0f #define PLAY_WIDTH 28.0f #define PLAY_HEIGHT 29.0f -- cgit v1.2.3 From 61d2139ecadae8ba301fc7b760dc514541868ecc Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Tue, 28 Jun 2011 11:39:16 +0100 Subject: colours of buttons and blank album art background fixed --- src/transport-widget.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 2c2bd48..11e0f91 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1235,14 +1235,15 @@ draw (GtkWidget* button, cairo_t *cr) #if ! GTK_CHECK_VERSION(3, 0, 0) GtkAllocation allocation; gtk_widget_get_allocation (button, &allocation); - cairo_translate (cr, allocation.x, allocation.y); - - //g_debug("button x allocation = %i", allocation.x); - //g_debug("button y allocation = %i", allocation.y); + cairo_translate (cr, allocation.x, allocation.y); #endif GtkStyle *style; - + +#if GTK_CHECK_VERSION(3, 0, 0) + gtk_style_context_add_class (gtk_widget_get_style_context (button), + "menu"); +#endif CairoColorRGB bg_color, fg_color, bg_selected, bg_prelight; CairoColorRGB color_middle[2], color_middle_prelight[2], color_outer[2], color_outer_prelight[2], color_play_outer[2], color_play_outer_prelight[2], -- cgit v1.2.3 From 11c1764fc6b46b364720c64993dffef972598c3a Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 27 Jul 2011 13:23:48 +0100 Subject: Transport-widget has offscreen_window and spinner --- src/transport-widget.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 11e0f91..b26147c 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -76,6 +76,9 @@ typedef struct _TransportWidgetPrivate TransportWidgetPrivate; struct _TransportWidgetPrivate { + GtkWidget* offscreen_window; + GtkWidget* spinner; + TransportAction current_command; TransportAction key_event; TransportAction motion_event; @@ -170,7 +173,12 @@ transport_widget_class_init (TransportWidgetClass *klass) static void transport_widget_init (TransportWidget *self) { - TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); + TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); + + priv->spinner = gtk_spinner_new(); + priv->offscreen_window = gtk_offscreen_window_new(); + gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); + priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; priv->key_event = TRANSPORT_ACTION_NO_ACTION; @@ -1755,9 +1763,8 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { -/* g_debug ("launching in draw"); -*/ + _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); _mask_play (cr_surf, PLAY_PADDING, -- cgit v1.2.3 From 25f98c314a2e61968511c2eeefd7354cadb9439f Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 27 Jul 2011 16:24:08 +0100 Subject: Updated debugs, added spinner start / stop on transport_launching --- src/transport-widget.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index b26147c..76c94aa 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -177,7 +177,7 @@ transport_widget_init (TransportWidget *self) priv->spinner = gtk_spinner_new(); priv->offscreen_window = gtk_offscreen_window_new(); - gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); + gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; @@ -257,7 +257,7 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - //g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); + 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); @@ -283,7 +283,7 @@ transport_widget_toggle_play_pause(TransportWidget* button, { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); priv->current_state = update; - //g_debug("TransportWidget::toggle play state : %i", priv->current_state); + g_debug("TransportWidget::toggle play state : %i", priv->current_state); gtk_widget_queue_draw (GTK_WIDGET(button)); } @@ -314,6 +314,8 @@ static gboolean transport_widget_motion_notify_event (GtkWidget *menuitem, GdkEventMotion *event) { + g_debug("transport_widget_motion_notify_event()"); + g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); TransportAction result = transport_widget_determine_motion_event ( TRANSPORT_WIDGET(menuitem), @@ -335,6 +337,8 @@ static gboolean transport_widget_leave_notify_event (GtkWidget *menuitem, GdkEventCrossing *event) { + g_debug("transport_widget_leave_notify_event()"); + g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -349,6 +353,8 @@ static gboolean transport_widget_button_press_event (GtkWidget *menuitem, GdkEventButton *event) { + g_debug("transport_widget_button_press_event()"); + g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); TransportAction result = transport_widget_determine_button_event ( TRANSPORT_WIDGET(menuitem), @@ -1236,7 +1242,9 @@ draw (GtkWidget* button, cairo_t *cr) g_return_val_if_fail(IS_TRANSPORT_WIDGET(button), FALSE); g_return_val_if_fail(cr != NULL, FALSE); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); - + + //g_debug("transport-widget draw()"); + cairo_surface_t* surf = NULL; cairo_t* cr_surf = NULL; @@ -1763,7 +1771,7 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - g_debug ("launching in draw"); + //g_debug ("===launching in draw==="); _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); _mask_play (cr_surf, @@ -1839,9 +1847,7 @@ transport_widget_fade_playbutton (gpointer userdata) { TransportWidget* bar = (TransportWidget*)userdata; g_return_val_if_fail(IS_TRANSPORT_WIDGET(bar), FALSE); -/* - g_debug ("fade in /out timeout"); -*/ + //g_debug ("fade in /out timeout"); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(bar); if (priv->launching_transparency == 1.0f){ priv->fade_out = TRUE; @@ -1874,13 +1880,14 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, if(g_ascii_strcasecmp(DBUSMENU_TRANSPORT_MENUITEM_PLAY_STATE, property) == 0) { TransportState new_state = (TransportState)g_variant_get_int32(value); - //g_debug("transport_widget_update_state - with value %i", update_value); + //g_debug("transport_widget_update_state - with value %i", new_state); if (new_state == TRANSPORT_STATE_LAUNCHING){ priv->current_state = TRANSPORT_STATE_LAUNCHING; priv->launching_timer = g_timeout_add (100, transport_widget_fade_playbutton, bar); - //g_debug("TransportWidget::toggle play state : %i", priv->current_state); + g_debug("TransportWidget::toggle play state : %i", priv->current_state); + gtk_spinner_start( (GtkSpinner*)priv->spinner); } else{ if (priv->launching_timer != 0){ @@ -1890,6 +1897,7 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, priv->launching_transparency = 1.0f; } transport_widget_toggle_play_pause(bar, new_state); + gtk_spinner_stop( (GtkSpinner*)priv->spinner); } } } -- cgit v1.2.3 From b7e9be00dc76778b7e5148c1a343c0ff6133f2d9 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Wed, 27 Jul 2011 17:14:59 +0100 Subject: Implemented spinner to cairo interface, assertion of offscreen_window GDK_IS_WINDOW failing --- src/transport-widget.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 76c94aa..bd189a2 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -177,6 +177,10 @@ transport_widget_init (TransportWidget *self) priv->spinner = gtk_spinner_new(); priv->offscreen_window = gtk_offscreen_window_new(); + + g_assert(priv->spinner); + g_assert(priv->offscreen_window); + gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); priv->current_command = TRANSPORT_ACTION_NO_ACTION; @@ -257,7 +261,7 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); + //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); @@ -283,7 +287,7 @@ transport_widget_toggle_play_pause(TransportWidget* button, { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(button); priv->current_state = update; - g_debug("TransportWidget::toggle play state : %i", priv->current_state); + //g_debug("TransportWidget::toggle play state : %i", priv->current_state); gtk_widget_queue_draw (GTK_WIDGET(button)); } @@ -314,7 +318,7 @@ static gboolean transport_widget_motion_notify_event (GtkWidget *menuitem, GdkEventMotion *event) { - g_debug("transport_widget_motion_notify_event()"); + //g_debug("transport_widget_motion_notify_event()"); g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -337,7 +341,7 @@ static gboolean transport_widget_leave_notify_event (GtkWidget *menuitem, GdkEventCrossing *event) { - g_debug("transport_widget_leave_notify_event()"); + //g_debug("transport_widget_leave_notify_event()"); g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -353,7 +357,7 @@ static gboolean transport_widget_button_press_event (GtkWidget *menuitem, GdkEventButton *event) { - g_debug("transport_widget_button_press_event()"); + //g_debug("transport_widget_button_press_event()"); g_return_val_if_fail ( IS_TRANSPORT_WIDGET(menuitem), FALSE ); TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE ( TRANSPORT_WIDGET(menuitem) ); @@ -1771,8 +1775,16 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - //g_debug ("===launching in draw==="); + g_debug ("launching in draw"); + + GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; + + cairo_t *tmp_cr = cairo_create( gtk_offscreen_window_get_surface( tmp_offscreen_win ) ); + + cairo_set_source_surface( tmp_cr, surf, 0, 0 ); + cairo_paint(tmp_cr); + /* _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); _mask_play (cr_surf, PLAY_PADDING, @@ -1822,6 +1834,7 @@ draw (GtkWidget* button, cairo_t *cr) BUTTON_LAUNCHING_END, FALSE); _finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y); + */ } return FALSE; -- cgit v1.2.3 From 116ed984defc9ddf1191c5ba9599b072e5888240 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 10:33:44 +0100 Subject: Using gtk_render_activity() to draw the spinner --- src/transport-widget.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index bd189a2..3d766ee 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1777,12 +1777,38 @@ draw (GtkWidget* button, cairo_t *cr) { g_debug ("launching in draw"); + GtkStyleContext *style_context = gtk_style_context_new (); + + GtkWidgetPath *widget_path = gtk_widget_path_new (); + gtk_widget_path_iter_set_name (widget_path, -1 , "indicator-sound-spinner"); + gtk_widget_path_append_type (widget_path, GTK_TYPE_SPINNER); + + gtk_style_context_set_path (style_context, widget_path); + gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_SPINNER); + +/* + gtk_style_context_notify_state_change(style_context, + gtk_widget_get_window(self), + NULL, + GTK_STATE_ACTIVE, + TRUE); +*/ + gtk_render_activity (style_context, cr, 106, 6 , 30, 30); + + //cairo_mark_dirty (cr); + + gtk_widget_path_free (widget_path); + g_object_unref (style_context); + + + /* GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; cairo_t *tmp_cr = cairo_create( gtk_offscreen_window_get_surface( tmp_offscreen_win ) ); cairo_set_source_surface( tmp_cr, surf, 0, 0 ); cairo_paint(tmp_cr); + */ /* _setup (&cr_surf, &surf, PLAY_WIDTH+6, PLAY_HEIGHT+6); -- cgit v1.2.3 From 88880cb32a353f84985831596ea80d54bc31d23d Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 11:38:41 +0100 Subject: Made Spinner variables static, cairo surface isn't being drawn properly --- src/transport-widget.c | 52 ++++++++++++++++++-------------------------------- 1 file changed, 19 insertions(+), 33 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 3d766ee..bace76a 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -76,9 +76,6 @@ typedef struct _TransportWidgetPrivate TransportWidgetPrivate; struct _TransportWidgetPrivate { - GtkWidget* offscreen_window; - GtkWidget* spinner; - TransportAction current_command; TransportAction key_event; TransportAction motion_event; @@ -93,6 +90,9 @@ struct _TransportWidgetPrivate gboolean fade_out; }; +static GtkStyleContext *spinner_style_context; +static GtkWidgetPath *spinner_widget_path; + // TODO refactor the UI handlers, consolidate functionality between key press /release // and button press / release. #define TRANSPORT_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRANSPORT_WIDGET_TYPE, TransportWidgetPrivate)) @@ -175,13 +175,15 @@ transport_widget_init (TransportWidget *self) { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); - priv->spinner = gtk_spinner_new(); - priv->offscreen_window = gtk_offscreen_window_new(); + spinner_widget_path = gtk_widget_path_new(); + spinner_style_context = gtk_style_context_new(); - g_assert(priv->spinner); - g_assert(priv->offscreen_window); - - gtk_container_add( GTK_CONTAINER(priv->offscreen_window), priv->spinner); + gtk_widget_path_iter_set_name (spinner_widget_path, -1 , "IndicatorSoundSpinner"); + gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); + + gtk_style_context_set_path (spinner_style_context, spinner_widget_path); + gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; @@ -245,12 +247,16 @@ transport_widget_init (TransportWidget *self) static void transport_widget_dispose (GObject *object) { + g_object_unref (spinner_style_context); + G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object); } static void transport_widget_finalize (GObject *object) { + gtk_widget_path_free (spinner_widget_path); + G_OBJECT_CLASS (transport_widget_parent_class)->finalize (object); } @@ -1777,29 +1783,11 @@ draw (GtkWidget* button, cairo_t *cr) { g_debug ("launching in draw"); - GtkStyleContext *style_context = gtk_style_context_new (); - - GtkWidgetPath *widget_path = gtk_widget_path_new (); - gtk_widget_path_iter_set_name (widget_path, -1 , "indicator-sound-spinner"); - gtk_widget_path_append_type (widget_path, GTK_TYPE_SPINNER); - - gtk_style_context_set_path (style_context, widget_path); - gtk_style_context_add_class (style_context, GTK_STYLE_CLASS_SPINNER); - -/* - gtk_style_context_notify_state_change(style_context, - gtk_widget_get_window(self), - NULL, - GTK_STATE_ACTIVE, - TRUE); -*/ - gtk_render_activity (style_context, cr, 106, 6 , 30, 30); - - //cairo_mark_dirty (cr); - - gtk_widget_path_free (widget_path); - g_object_unref (style_context); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + // need to redraw the cairo context here, cairo_paint() doesn't seem to do it + cairo_paint(cr); /* GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; @@ -1926,7 +1914,6 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, transport_widget_fade_playbutton, bar); g_debug("TransportWidget::toggle play state : %i", priv->current_state); - gtk_spinner_start( (GtkSpinner*)priv->spinner); } else{ if (priv->launching_timer != 0){ @@ -1936,7 +1923,6 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, priv->launching_transparency = 1.0f; } transport_widget_toggle_play_pause(bar, new_state); - gtk_spinner_stop( (GtkSpinner*)priv->spinner); } } } -- cgit v1.2.3 From e5350911b2abaca40482bbacbda92e64f2e6d8bb Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 12:31:36 +0100 Subject: added debug info in draw() of spinner animation --- src/transport-widget.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index bace76a..b20966f 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -183,7 +183,7 @@ transport_widget_init (TransportWidget *self) gtk_style_context_set_path (spinner_style_context, spinner_widget_path); gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_NORMAL); priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; @@ -267,7 +267,7 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - //g_debug("In the playbutton's expose method, x = %i, y=%i and width: %i and height: %i'"); + 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); @@ -1781,9 +1781,15 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - g_debug ("launching in draw"); + gdouble progress; + gtk_style_context_state_is_running(spinner_style_context, GTK_STATE_ACTIVE, &progress); + + GtkStateFlags state = gtk_style_context_get_state(spinner_style_context); + // state 0 = NORMAL + // state 1 = ACTIVE + + g_debug ("launching in draw state: %i, %f", state ,progress ); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); // need to redraw the cairo context here, cairo_paint() doesn't seem to do it @@ -1914,6 +1920,7 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, transport_widget_fade_playbutton, bar); g_debug("TransportWidget::toggle play state : %i", priv->current_state); + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); } else{ if (priv->launching_timer != 0){ -- cgit v1.2.3 From 4a74ac2d00bf6d093447a27cea421ad6ea6810f2 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 12:52:59 +0100 Subject: Added debug info, setting gtk-animations to enabled in theme --- src/transport-widget.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index b20966f..81fbac6 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -178,7 +178,16 @@ transport_widget_init (TransportWidget *self) spinner_widget_path = gtk_widget_path_new(); spinner_style_context = gtk_style_context_new(); - gtk_widget_path_iter_set_name (spinner_widget_path, -1 , "IndicatorSoundSpinner"); + + /* + gtk_settings_set_string_property( gtk_settings_get_default(), + "gtk-enable-animations", + const gchar *v_string, + const gchar *origin); */ + + //g_object_set (gtk_settings_get_default (), "gtk-enable-animations", TRUE, NULL); + + gtk_widget_path_iter_set_name (spinner_widget_path, 0 , "IndicatorSoundSpinner"); gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); gtk_style_context_set_path (spinner_style_context, spinner_widget_path); -- cgit v1.2.3 From c53c671e8e453068d1ee0b9186d6e337797b4d60 Mon Sep 17 00:00:00 2001 From: Harry van Haaren Date: Thu, 28 Jul 2011 13:32:58 +0100 Subject: Fixed assertion of WidgetPath --- src/transport-widget.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 81fbac6..c1ff794 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -187,8 +187,12 @@ transport_widget_init (TransportWidget *self) //g_object_set (gtk_settings_get_default (), "gtk-enable-animations", TRUE, NULL); - gtk_widget_path_iter_set_name (spinner_widget_path, 0 , "IndicatorSoundSpinner"); gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); + gtk_widget_path_iter_set_name (spinner_widget_path, 1 , "IndicatorSoundSpinner"); + + gtk_widget_path_iter_add_class(spinner_widget_path,-1,GTK_STYLE_CLASS_SPINNER); + + gtk_style_context_add_class(spinner_style_context,GTK_STYLE_CLASS_SPINNER); gtk_style_context_set_path (spinner_style_context, spinner_widget_path); gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); @@ -1790,6 +1794,8 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + gdouble progress; gtk_style_context_state_is_running(spinner_style_context, GTK_STATE_ACTIVE, &progress); @@ -1929,7 +1935,6 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, transport_widget_fade_playbutton, bar); g_debug("TransportWidget::toggle play state : %i", priv->current_state); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); } else{ if (priv->launching_timer != 0){ -- cgit v1.2.3 From db5e00800fb527e9b88cc7c8c1b29ac44b5eee29 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 28 Jul 2011 15:07:17 +0100 Subject: tidied style context method calls, more visibility added around querying if the transition is actually running --- src/transport-widget.c | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index c1ff794..5b3001a 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1259,6 +1259,8 @@ _surface_blur (cairo_surface_t* surface, cairo_surface_mark_dirty (surface); } +static gdouble progress = 0.0; + static gboolean draw (GtkWidget* button, cairo_t *cr) { @@ -1794,20 +1796,19 @@ draw (GtkWidget* button, cairo_t *cr) } else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); - - gdouble progress; - gtk_style_context_state_is_running(spinner_style_context, GTK_STATE_ACTIVE, &progress); - - GtkStateFlags state = gtk_style_context_get_state(spinner_style_context); - // state 0 = NORMAL - // state 1 = ACTIVE - - g_debug ("launching in draw state: %i, %f", state ,progress ); - gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + GtkStateFlags state = gtk_style_context_get_state(spinner_style_context); + // state 0 = NORMAL + // state 1 = ACTIVE - // need to redraw the cairo context here, cairo_paint() doesn't seem to do it + g_debug ("launching in draw state: %i and progress %f", state, progress ); + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + g_debug ("context style is running ? = %i", + gtk_style_context_state_is_running (spinner_style_context, + GTK_STATE_ACTIVE, + &progress)); + + // need to redraw the cairo context here, cairo_paint() doesn't seem to do it cairo_paint(cr); /* @@ -1912,6 +1913,7 @@ transport_widget_fade_playbutton (gpointer userdata) gtk_widget_queue_draw (GTK_WIDGET(bar)); return TRUE; } + /** * transport_widget_update_state() * Callback for updates from the other side of dbus @@ -1930,6 +1932,14 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, TransportState new_state = (TransportState)g_variant_get_int32(value); //g_debug("transport_widget_update_state - with value %i", new_state); if (new_state == TRANSPORT_STATE_LAUNCHING){ + gtk_style_context_notify_state_change (spinner_style_context, + gtk_widget_get_window ( GTK_WIDGET(userdata)), + NULL, + GTK_STATE_PRELIGHT, + TRUE); + + gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + priv->current_state = TRANSPORT_STATE_LAUNCHING; priv->launching_timer = g_timeout_add (100, transport_widget_fade_playbutton, -- cgit v1.2.3 From 34c2bb5248b5b408781b2c38c48841899c9df266 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Thu, 28 Jul 2011 16:23:02 +0100 Subject: clean up debug trace --- src/transport-widget.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 5b3001a..66bb748 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -1801,7 +1801,9 @@ draw (GtkWidget* button, cairo_t *cr) // state 0 = NORMAL // state 1 = ACTIVE - g_debug ("launching in draw state: %i and progress %f", state, progress ); + g_debug ("Is state active: %i and progress %f", + state == GTK_STATE_FLAG_ACTIVE, + progress ); gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); g_debug ("context style is running ? = %i", gtk_style_context_state_is_running (spinner_style_context, -- cgit v1.2.3 From e11aae188afec1fe6c84c65170251c20d890d08e Mon Sep 17 00:00:00 2001 From: Andrea Cimitan Date: Thu, 28 Jul 2011 19:22:09 +0200 Subject: Cimi's fix for spinner --- src/transport-widget.c | 62 +++++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 24 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 66bb748..aeaa2d0 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -90,8 +90,9 @@ struct _TransportWidgetPrivate gboolean fade_out; }; -static GtkStyleContext *spinner_style_context; -static GtkWidgetPath *spinner_widget_path; +static GList *transport_widget_list = NULL; +static GtkStyleContext *spinner_style_context = NULL; +static GtkWidgetPath *spinner_widget_path = NULL; // TODO refactor the UI handlers, consolidate functionality between key press /release // and button press / release. @@ -174,11 +175,23 @@ static void transport_widget_init (TransportWidget *self) { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); - - spinner_widget_path = gtk_widget_path_new(); - spinner_style_context = gtk_style_context_new(); - - + + if (transport_widget_list == NULL){ + /* append the object to the static linked list. */ + transport_widget_list = g_list_append (transport_widget_list, self); + + /* create widget path */ + spinner_widget_path = gtk_widget_path_new(); + + gtk_widget_path_iter_set_name (spinner_widget_path, -1 , "IndicatorSoundSpinner"); + gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); + + /* create style context and append path */ + spinner_style_context = gtk_style_context_new(); + + gtk_style_context_set_path (spinner_style_context, spinner_widget_path); + gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); + } /* gtk_settings_set_string_property( gtk_settings_get_default(), "gtk-enable-animations", @@ -187,17 +200,6 @@ transport_widget_init (TransportWidget *self) //g_object_set (gtk_settings_get_default (), "gtk-enable-animations", TRUE, NULL); - gtk_widget_path_append_type (spinner_widget_path, GTK_TYPE_SPINNER); - gtk_widget_path_iter_set_name (spinner_widget_path, 1 , "IndicatorSoundSpinner"); - - gtk_widget_path_iter_add_class(spinner_widget_path,-1,GTK_STYLE_CLASS_SPINNER); - - gtk_style_context_add_class(spinner_style_context,GTK_STYLE_CLASS_SPINNER); - - gtk_style_context_set_path (spinner_style_context, spinner_widget_path); - gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_NORMAL); - priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; priv->key_event = TRANSPORT_ACTION_NO_ACTION; @@ -260,7 +262,19 @@ transport_widget_init (TransportWidget *self) static void transport_widget_dispose (GObject *object) { - g_object_unref (spinner_style_context); + transport_widget_list = g_list_remove (transport_widget_list, object); + + if (transport_widget_list == NULL){ + if (spinner_widget_path != NULL){ + gtk_widget_path_free (spinner_widget_path); + spinner_widget_path = NULL; + } + + if (spinner_style_context != NULL){ + g_object_unref (spinner_style_context); + spinner_style_context = NULL; + } + } G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object); } @@ -268,7 +282,7 @@ transport_widget_dispose (GObject *object) static void transport_widget_finalize (GObject *object) { - gtk_widget_path_free (spinner_widget_path); + G_OBJECT_CLASS (transport_widget_parent_class)->finalize (object); } @@ -1804,14 +1818,15 @@ draw (GtkWidget* button, cairo_t *cr) g_debug ("Is state active: %i and progress %f", state == GTK_STATE_FLAG_ACTIVE, progress ); + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); + g_debug ("context style is running ? = %i", gtk_style_context_state_is_running (spinner_style_context, GTK_STATE_ACTIVE, &progress)); // need to redraw the cairo context here, cairo_paint() doesn't seem to do it - cairo_paint(cr); /* GtkOffscreenWindow* tmp_offscreen_win = (GtkOffscreenWindow*)priv->offscreen_window; @@ -1937,11 +1952,10 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, gtk_style_context_notify_state_change (spinner_style_context, gtk_widget_get_window ( GTK_WIDGET(userdata)), NULL, - GTK_STATE_PRELIGHT, + GTK_STATE_FLAG_ACTIVE, TRUE); - gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); - + priv->current_state = TRANSPORT_STATE_LAUNCHING; priv->launching_timer = g_timeout_add (100, transport_widget_fade_playbutton, -- cgit v1.2.3 From 65982386494b0ffe4ff8bdf4be698e8b7616f561 Mon Sep 17 00:00:00 2001 From: Conor Curran Date: Fri, 29 Jul 2011 16:06:41 +0100 Subject: ifdefs needed for gtk2 compilation --- src/transport-widget.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'src/transport-widget.c') diff --git a/src/transport-widget.c b/src/transport-widget.c index 898472e..564b76f 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -87,9 +87,11 @@ struct _TransportWidgetPrivate gint skip_frequency; }; +#if GTK_CHECK_VERSION(3, 0, 0) static GList *transport_widget_list = NULL; static GtkStyleContext *spinner_style_context = NULL; static GtkWidgetPath *spinner_widget_path = NULL; +#endif // TODO refactor the UI handlers, consolidate functionality between key press /release // and button press / release. @@ -171,7 +173,7 @@ static void transport_widget_init (TransportWidget *self) { TransportWidgetPrivate* priv = TRANSPORT_WIDGET_GET_PRIVATE(self); - + #if GTK_CHECK_VERSION(3, 0, 0) if (transport_widget_list == NULL){ /* append the object to the static linked list. */ transport_widget_list = g_list_append (transport_widget_list, self); @@ -188,7 +190,7 @@ transport_widget_init (TransportWidget *self) gtk_style_context_set_path (spinner_style_context, spinner_widget_path); gtk_style_context_add_class (spinner_style_context, GTK_STYLE_CLASS_SPINNER); } - + #endif priv->current_command = TRANSPORT_ACTION_NO_ACTION; priv->current_state = TRANSPORT_STATE_PAUSED; priv->key_event = TRANSPORT_ACTION_NO_ACTION; @@ -248,6 +250,7 @@ transport_widget_init (TransportWidget *self) static void transport_widget_dispose (GObject *object) { + #if GTK_CHECK_VERSION(3, 0, 0) transport_widget_list = g_list_remove (transport_widget_list, object); if (transport_widget_list == NULL){ @@ -261,7 +264,7 @@ transport_widget_dispose (GObject *object) spinner_style_context = NULL; } } - + #endif G_OBJECT_CLASS (transport_widget_parent_class)->dispose (object); } @@ -280,7 +283,6 @@ transport_widget_expose (GtkWidget *button, GdkEventExpose *event) cairo_t *cr; cr = gdk_cairo_create (gtk_widget_get_window (button)); - 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); @@ -1791,10 +1793,13 @@ draw (GtkWidget* button, cairo_t *cr) FALSE); _finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y); } + #if GTK_CHECK_VERSION(3, 0, 0) else if(priv->current_state == TRANSPORT_STATE_LAUNCHING) { + gtk_render_activity (spinner_style_context, cr, 106, 6 , 30, 30); } + #endif return FALSE; } @@ -1831,12 +1836,14 @@ transport_widget_property_update(DbusmenuMenuitem* item, gchar* property, TransportState new_state = (TransportState)g_variant_get_int32(value); //g_debug("transport_widget_update_state - with value %i", new_state); if (new_state == TRANSPORT_STATE_LAUNCHING){ + #if GTK_CHECK_VERSION(3, 0, 0) gtk_style_context_notify_state_change (spinner_style_context, gtk_widget_get_window ( GTK_WIDGET(userdata)), NULL, GTK_STATE_FLAG_ACTIVE, TRUE); gtk_style_context_set_state (spinner_style_context, GTK_STATE_FLAG_ACTIVE); + #endif priv->current_state = TRANSPORT_STATE_LAUNCHING; g_debug("TransportWidget::toggle play state : %i", priv->current_state); -- cgit v1.2.3