diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/play-button.c | 71 | ||||
-rw-r--r-- | src/player-controller.vala | 37 | ||||
-rw-r--r-- | src/scrub-widget.c | 50 | ||||
-rw-r--r-- | src/transport-widget.c | 2 |
4 files changed, 93 insertions, 67 deletions
diff --git a/src/play-button.c b/src/play-button.c index cf8bc2f..e4382c1 100644 --- a/src/play-button.c +++ b/src/play-button.c @@ -28,12 +28,12 @@ Uses code from ctk #include "play-button.h" #define RECT_WIDTH 130.0f -#define Y 15.0f +#define Y 5.0f #define X 37.0f #define INNER_RADIUS 12.5 #define MIDDLE_RADIUS 13.5f #define OUTER_RADIUS 14.5f -#define CIRCLE_RADIUS 19.0f +#define CIRCLE_RADIUS 21.0f #define PREV_WIDTH 25.0f #define PREV_HEIGHT 17.0f #define NEXT_WIDTH 25.0f //PREV_WIDTH @@ -42,16 +42,16 @@ Uses code from ctk #define TRI_HEIGHT 13.0f #define TRI_OFFSET 6.0f #define PREV_X 35.0f -#define PREV_Y 21.0f +#define PREV_Y 11.0f #define NEXT_X 113.0f -#define NEXT_Y 21.0f //prev_y +#define NEXT_Y 11.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 77.0f -#define PAUSE_Y 15.0f +#define PAUSE_X 78.0f +#define PAUSE_Y 5.0f #define PLAY_WIDTH 28.0f #define PLAY_HEIGHT 29.0f #define PLAY_PADDING 5.0f @@ -321,7 +321,7 @@ play_button_init (PlayButton *self) (GDestroyNotify)g_list_free); GList* previous_list = NULL; previous_list = g_list_insert(previous_list, GINT_TO_POINTER(15), 0); - previous_list = g_list_insert(previous_list, GINT_TO_POINTER(10), 1); + 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); @@ -330,10 +330,10 @@ play_button_init (PlayButton *self) previous_list); GList* play_list = NULL; - play_list = g_list_insert(play_list, GINT_TO_POINTER(60), 0); - play_list = g_list_insert(play_list, GINT_TO_POINTER(10), 1); - play_list = g_list_insert(play_list, GINT_TO_POINTER(45), 2); - play_list = g_list_insert(play_list, GINT_TO_POINTER(40), 3); + play_list = g_list_insert(play_list, GINT_TO_POINTER(58), 0); + play_list = g_list_insert(play_list, GINT_TO_POINTER(0), 1); + play_list = g_list_insert(play_list, GINT_TO_POINTER(50), 2); + play_list = g_list_insert(play_list, GINT_TO_POINTER(43), 3); g_hash_table_insert(priv->command_coordinates, GINT_TO_POINTER(TRANSPORT_PLAY_PAUSE), @@ -341,7 +341,7 @@ play_button_init (PlayButton *self) GList* next_list = NULL; next_list = g_list_insert(next_list, GINT_TO_POINTER(100), 0); - next_list = g_list_insert(next_list, GINT_TO_POINTER(10), 1); + next_list = g_list_insert(next_list, GINT_TO_POINTER(5), 1); next_list = g_list_insert(next_list, GINT_TO_POINTER(60), 2); next_list = g_list_insert(next_list, GINT_TO_POINTER(34), 3); @@ -349,7 +349,7 @@ play_button_init (PlayButton *self) GINT_TO_POINTER(TRANSPORT_NEXT), next_list); - gtk_widget_set_size_request(GTK_WIDGET(self), 200, 80); + gtk_widget_set_size_request(GTK_WIDGET(self), 200, 50); } static void @@ -389,15 +389,15 @@ determine_button_event(GtkWidget* button, GdkEventButton* event) PlayButtonEvent button_event = TRANSPORT_NADA; // For now very simple rectangular collision detection if(event->x > 55 && event->x < 95 - && event->y > 22 && event->y < 46){ + && event->y > 12 && event->y < 40){ button_event = TRANSPORT_PREVIOUS; } - else if(event->x > 101 && event->x < 133 - && event->y > 20 && event->y < 47){ + else if(event->x > 99 && event->x < 136 + && event->y > 5 && event->y < 47){ button_event = TRANSPORT_PLAY_PAUSE; } else if(event->x > 137 && event->x < 179 - && event->y > 22 && event->y < 46){ + && event->y > 12 && event->y < 40){ button_event = TRANSPORT_NEXT; } return button_event; @@ -459,7 +459,7 @@ play_button_toggle_play_pause(GtkWidget* button, PlayButtonState update) g_debug("PlayButton::toggle play state : %i", priv->current_state); if(changed == TRUE){ - g_debug("Toggle play pause - changed of state detected"); + g_debug("Toggle play pause - changed of state detected - redraw button"); cairo_t *cr; cr = gdk_cairo_create (button->window); @@ -796,33 +796,34 @@ draw (GtkWidget* button, cairo_t *cr) // play/pause-background draw_circle (cr, - X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 4.5f, + 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 - 4.5f + 1.0f, - Y - ((CIRCLE_RADIUS - OUTER_RADIUS)) + 1.0f, - CIRCLE_RADIUS - 1, + 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 - 4.5f + 2.0f, - Y - ((CIRCLE_RADIUS - OUTER_RADIUS)) + 2.0f, - CIRCLE_RADIUS - 2.0f, - INNER_START, - INNER_END); + if(priv->current_command == TRANSPORT_PLAY_PAUSE){ draw_circle (cr, - X + RECT_WIDTH / 2.0f - 2.0f * OUTER_RADIUS - 4.5f + 2.0f, - Y - ((CIRCLE_RADIUS - OUTER_RADIUS)) + 2.0f, - CIRCLE_RADIUS - 2.0f, + 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, + 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_START, + INNER_END); + } // draw previous-button drop-shadow _setup (&cr_surf, &surf, PREV_WIDTH, PREV_HEIGHT); _mask_prev (cr_surf, @@ -951,7 +952,7 @@ draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW, FALSE); _surface_blur (surf, 1); - _finalize (cr, &cr_surf, &surf, PAUSE_X, PAUSE_Y + 1.0f); + _finalize (cr, &cr_surf, &surf, PAUSE_X-0.75f, PAUSE_Y + 1.0f); // draw play-button _setup (&cr_surf, &surf, PLAY_WIDTH, PLAY_HEIGHT); cairo_set_line_width (cr, 10.5); @@ -970,7 +971,7 @@ draw (GtkWidget* button, cairo_t *cr) BUTTON_START, BUTTON_END, FALSE); - _finalize (cr, &cr_surf, &surf, PAUSE_X, PAUSE_Y); + _finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y); } } diff --git a/src/player-controller.vala b/src/player-controller.vala index 7ba2a70..fc5ca9b 100644 --- a/src/player-controller.vala +++ b/src/player-controller.vala @@ -23,14 +23,15 @@ using Gee; public class PlayerController : GLib.Object { - public const int WIDGET_QUANTITY = 5; + public const int WIDGET_QUANTITY = 6; public static enum widget_order{ SEPARATOR, TITLE, METADATA, SCRUB, - TRANSPORT + TRANSPORT, + PLAYLIST } public enum state{ @@ -133,6 +134,8 @@ public class PlayerController : GLib.Object this.custom_items[widget_order.SCRUB].property_set_bool(MENUITEM_PROP_VISIBLE, false); this.custom_items[widget_order.METADATA].property_set_bool(MENUITEM_PROP_VISIBLE, + false); + this.custom_items[widget_order.PLAYLIST].property_set_bool(MENUITEM_PROP_VISIBLE, false); return; } @@ -146,8 +149,10 @@ public class PlayerController : GLib.Object this.custom_items[widget_order.TRANSPORT].property_set_bool(MENUITEM_PROP_VISIBLE, - this.current_state == state.CONNECTED); - + true); + + this.custom_items[widget_order.PLAYLIST].property_set_bool(MENUITEM_PROP_VISIBLE, + true); } private void construct_widgets() @@ -170,12 +175,34 @@ public class PlayerController : GLib.Object // Transport item TransportMenuitem transport_item = new TransportMenuitem(this); this.custom_items.add(transport_item); - + + this.custom_items.add(create_playlist()); foreach(PlayerItem item in this.custom_items){ root_menu.child_add_position(item, this.menu_offset + this.custom_items.index_of(item)); } } + + private PlayerItem create_playlist() + { + PlayerItem playlist_root = new PlayerItem(CLIENT_TYPES_DEFAULT); + playlist_root.property_set(MENUITEM_PROP_LABEL, "Choose Playlist"); + + PlayerItem subentry_1 = new PlayerItem(CLIENT_TYPES_DEFAULT); + subentry_1.property_set(MENUITEM_PROP_LABEL, "Raster-noton selection"); + + PlayerItem subentry_2 = new PlayerItem(CLIENT_TYPES_DEFAULT); + subentry_2.property_set(MENUITEM_PROP_LABEL, "Rune Grammofon selection"); + + PlayerItem subentry_3 = new PlayerItem(CLIENT_TYPES_DEFAULT); + subentry_3.property_set(MENUITEM_PROP_LABEL, "Kranky selection"); + + playlist_root.child_append(subentry_1); + playlist_root.child_append(subentry_2); + playlist_root.child_append(subentry_3); + + return playlist_root; + } private static string format_client_name(string client_name) { diff --git a/src/scrub-widget.c b/src/scrub-widget.c index f9d0cef..52d7b83 100644 --- a/src/scrub-widget.c +++ b/src/scrub-widget.c @@ -93,10 +93,13 @@ scrub_widget_init (ScrubWidget *self) priv->ido_scrub_bar = ido_scale_menu_item_new_with_range ("Scrub", IDO_RANGE_STYLE_SMALL, 0, 0, 100, 1); priv->time_line = ido_timeline_new(0); - ido_scale_menu_item_set_style (IDO_SCALE_MENU_ITEM(priv->ido_scrub_bar), IDO_SCALE_MENU_ITEM_STYLE_LABEL); + ido_scale_menu_item_set_style (IDO_SCALE_MENU_ITEM(priv->ido_scrub_bar), IDO_SCALE_MENU_ITEM_STYLE_LABEL); + g_object_set(priv->ido_scrub_bar, "reverse-scroll-events", TRUE, NULL); priv->scrubbing = FALSE; - + + gtk_widget_set_size_request(GTK_WIDGET(priv->ido_scrub_bar), 100, 25); + // register slider changes listening on the range GtkWidget* scrub_widget = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_scrub_bar); g_signal_connect(scrub_widget, "change-value", G_CALLBACK(scrub_widget_change_value_cb), self); @@ -105,6 +108,7 @@ scrub_widget_init (ScrubWidget *self) g_signal_connect(priv->time_line, "finished", G_CALLBACK(scrub_widget_timeline_finished_cb), self); g_signal_connect(priv->ido_scrub_bar, "slider-grabbed", G_CALLBACK(scrub_widget_slider_grabbed), self); g_signal_connect(priv->ido_scrub_bar, "slider-released", G_CALLBACK(scrub_widget_slider_released), self); + } static void @@ -131,14 +135,15 @@ scrub_widget_property_update(DbusmenuMenuitem* item, gchar* property, if(g_ascii_strcasecmp(DBUSMENU_SCRUB_MENUITEM_DURATION, property) == 0){ g_debug("scrub-widget::update length = %i", g_value_get_int(value)); - ido_scale_menu_item_set_secondary_label(IDO_SCALE_MENU_ITEM(priv->ido_scrub_bar), + + ido_scale_menu_item_set_secondary_label(IDO_SCALE_MENU_ITEM(priv->ido_scrub_bar), scrub_widget_format_time(g_value_get_int(value))); - + ido_timeline_set_duration(priv->time_line, g_value_get_int(value) * 1000); ido_timeline_rewind(priv->time_line); scrub_widget_check_play_state(mitem); - g_debug("timeline is running: %i", (gint)ido_timeline_is_running(priv->time_line)); - g_debug("timeline duration = %i", ido_timeline_get_duration(priv->time_line)); + //g_debug("timeline is running: %i", (gint)ido_timeline_is_running(priv->time_line)); + //g_debug("timeline duration = %i", ido_timeline_get_duration(priv->time_line)); scrub_widget_set_ido_position(mitem, dbusmenu_menuitem_property_get_int(priv->twin_item, DBUSMENU_SCRUB_MENUITEM_POSITION)/1000, @@ -152,11 +157,11 @@ scrub_widget_property_update(DbusmenuMenuitem* item, gchar* property, g_debug("scrub-widget::update progress = %f", scrub_widget_calculate_progress(mitem)*100); - ido_timeline_set_progress(priv->time_line, scrub_widget_calculate_progress(mitem)*1000); + ido_timeline_set_progress(priv->time_line, scrub_widget_calculate_progress(mitem)); scrub_widget_set_ido_position(mitem, g_value_get_int(value)/1000, dbusmenu_menuitem_property_get_int(priv->twin_item, DBUSMENU_SCRUB_MENUITEM_DURATION)); - ido_timeline_start(priv->time_line); + scrub_widget_check_play_state(mitem); } else if(g_ascii_strcasecmp(DBUSMENU_SCRUB_MENUITEM_PLAY_STATE, property) == 0){ scrub_widget_check_play_state(mitem); @@ -190,7 +195,8 @@ scrub_widget_set_twin_item(ScrubWidget* self, g_signal_connect(G_OBJECT(twin_item), "property-changed", G_CALLBACK(scrub_widget_property_update), self); - gchar* left_text = scrub_widget_format_time(dbusmenu_menuitem_property_get_int(priv->twin_item, DBUSMENU_SCRUB_MENUITEM_POSITION)/1000); + gchar* left_text = scrub_widget_format_time(dbusmenu_menuitem_property_get_int(priv->twin_item, + DBUSMENU_SCRUB_MENUITEM_POSITION)/1000); gchar* right_text = scrub_widget_format_time(dbusmenu_menuitem_property_get_int(priv->twin_item, DBUSMENU_SCRUB_MENUITEM_DURATION)); scrub_widget_set_ido_position(self, @@ -209,22 +215,20 @@ scrub_widget_change_value_cb (GtkRange *range, gdouble new_value, gpointer user_data) { - /*g_return_val_if_fail (IS_SCRUB_WIDGET (user_data), FALSE); + g_return_val_if_fail (IS_SCRUB_WIDGET (user_data), FALSE); ScrubWidget* mitem = SCRUB_WIDGET(user_data); ScrubWidgetPrivate * priv = SCRUB_WIDGET_GET_PRIVATE(mitem); + // Don't bother when the slider is grabbed + if(priv->scrubbing == TRUE) + return FALSE; + GValue value = {0}; g_value_init(&value, G_TYPE_DOUBLE); gdouble clamped = CLAMP(new_value, 0, 100); g_value_set_double(&value, clamped); - //g_debug("scrub-widget-change-value callback - = %f", clamped); - if(priv->scrubbing == FALSE){ - dbusmenu_menuitem_handle_event (priv->twin_item, "scrubbing", &value, 0); - } - else{ - g_debug("blocking scrubbing because the slider is still grabbed" - }*/ - return FALSE; + dbusmenu_menuitem_handle_event (priv->twin_item, "scrubbing", &value, 0); + return TRUE; } GtkWidget* @@ -251,6 +255,7 @@ scrub_widget_format_time(gint time) if(seconds > 9) seconds_prefix=""; return g_strdup_printf("%s%i:%s%i", prefix, minutes, seconds_prefix, seconds); + } else{ return g_strdup_printf("%s-:%s-", prefix, seconds_prefix); @@ -308,7 +313,7 @@ scrub_widget_timeline_frame_cb( IdoTimeline *timeline, ido_scale_menu_item_set_primary_label(IDO_SCALE_MENU_ITEM(priv->ido_scrub_bar), left_text); GtkWidget *slider = ido_scale_menu_item_get_scale((IdoScaleMenuItem*)priv->ido_scrub_bar); GtkRange *range = (GtkRange*)slider; - //gtk_range_set_value(range, progress * 100); + gtk_range_set_value(range, progress * 100); /*g_debug("position in seconds %i and in words %s", position, left_text); g_debug("timeline is running: %i", (gint)ido_timeline_is_running(priv->time_line)); g_debug("timeline duration = %i", ido_timeline_get_duration(priv->time_line)); @@ -339,8 +344,7 @@ scrub_widget_slider_grabbed(GtkWidget *widget, gpointer user_data) { ScrubWidget* mitem = SCRUB_WIDGET(user_data); ScrubWidgetPrivate * priv = SCRUB_WIDGET_GET_PRIVATE(mitem); - priv->scrubbing = TRUE; - + priv->scrubbing = TRUE; } static void @@ -355,10 +359,6 @@ scrub_widget_timeline_finished_cb(IdoTimeline *timeline, gpointer user_data) { g_debug("Timeline Finished!"); - /*g_return_if_fail (IS_SCRUB_WIDGET (user_data)); - ScrubWidget* mitem = SCRUB_WIDGET(user_data); - ScrubWidgetPrivate * priv = SCRUB_WIDGET_GET_PRIVATE(mitem); - ido_timeline_rewind(priv->time_line);*/ } /** diff --git a/src/transport-widget.c b/src/transport-widget.c index 535add2..702b472 100644 --- a/src/transport-widget.c +++ b/src/transport-widget.c @@ -118,8 +118,6 @@ transport_widget_finalize (GObject *object) static gboolean transport_widget_expose_event(GtkWidget* widget, GdkEventExpose* event) { - //TransportWidgetPrivate * priv = TRANSPORT_WIDGET_GET_PRIVATE(widget); - //gtk_container_propagate_expose(GTK_CONTAINER(widget),priv->play_button, event); return TRUE; } |