aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorConor Curran <conor.curran@canonical.com>2010-07-29 13:23:36 +0100
committerConor Curran <conor.curran@canonical.com>2010-07-29 13:23:36 +0100
commit859c48c87009fb12e0acc15fdeb8d69e42247176 (patch)
treeca895c55f789bfd5edfb2f3ed6ee397aa3313c3c
parented4b8a59464b94aabf311d6ba7654c243d1218f4 (diff)
parenta100dc24a2eb10a1f63be5391b97700032a16111 (diff)
downloadayatana-indicator-sound-859c48c87009fb12e0acc15fdeb8d69e42247176.tar.gz
ayatana-indicator-sound-859c48c87009fb12e0acc15fdeb8d69e42247176.tar.bz2
ayatana-indicator-sound-859c48c87009fb12e0acc15fdeb8d69e42247176.zip
merged the playlist initial work and UI tidying, getting very close to sign off
-rw-r--r--src/play-button.c71
-rw-r--r--src/player-controller.vala37
-rw-r--r--src/scrub-widget.c50
-rw-r--r--src/transport-widget.c2
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;
}