From 560f93326a73ecfd8f0a907fe7264c2e641d1260 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 23 Apr 2014 11:59:00 +0200 Subject: idomediaplayermenuitem: use small font for track info labels --- src/idomediaplayermenuitem.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/idomediaplayermenuitem.c b/src/idomediaplayermenuitem.c index 7e6e9d3..9b96d37 100644 --- a/src/idomediaplayermenuitem.c +++ b/src/idomediaplayermenuitem.c @@ -273,6 +273,22 @@ ido_media_player_menu_item_set_album_art (IdoMediaPlayerMenuItem *self, g_object_unref (file); } +static void +gtk_label_set_markup_printf_escaped (GtkLabel *label, + const gchar *format, + ...) +{ + va_list args; + gchar *str; + + va_start (args, format); + str = g_markup_vprintf_escaped (format, args); + gtk_label_set_markup (label, str); + va_end (args); + + g_free (str); +} + static void ido_media_player_menu_item_set_metadata (IdoMediaPlayerMenuItem *self, const gchar *title, @@ -293,9 +309,9 @@ ido_media_player_menu_item_set_metadata (IdoMediaPlayerMenuItem *self, } else { - gtk_label_set_label (GTK_LABEL (self->piece_label), title); - gtk_label_set_label (GTK_LABEL (self->artist_label), artist); - gtk_label_set_label (GTK_LABEL (self->container_label), album); + gtk_label_set_markup_printf_escaped (GTK_LABEL (self->piece_label), "%s", title); + gtk_label_set_markup_printf_escaped (GTK_LABEL (self->artist_label), "%s", artist); + gtk_label_set_markup_printf_escaped (GTK_LABEL (self->container_label), "%s", album); ido_media_player_menu_item_set_album_art (self, art_url); gtk_widget_show (self->metadata_widget); } -- cgit v1.2.3 From 3c5e4d8c433a7998f5b6693cdaf20592385e4e1f Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 23 Apr 2014 12:01:33 +0200 Subject: idomediaplayermenuitem: don't hardcode width To ensure a sane width and avoid changing width when the track changes, give track info labels a natural and maximum width of 25 characters. --- src/idomediaplayermenuitem.c | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/src/idomediaplayermenuitem.c b/src/idomediaplayermenuitem.c index 9b96d37..7ed9d6d 100644 --- a/src/idomediaplayermenuitem.c +++ b/src/idomediaplayermenuitem.c @@ -101,14 +101,6 @@ ido_media_player_menu_item_draw (GtkWidget *widget, return FALSE; } -static void -ido_media_player_menu_item_get_preferred_width (GtkWidget *widget, - gint *minimum, - gint *natural) -{ - *minimum = *natural = 200; -} - static void ido_media_player_menu_item_class_init (IdoMediaPlayerMenuItemClass *klass) { @@ -117,10 +109,24 @@ ido_media_player_menu_item_class_init (IdoMediaPlayerMenuItemClass *klass) object_class->dispose = ido_media_player_menu_item_dispose; - widget_class->get_preferred_width = ido_media_player_menu_item_get_preferred_width; widget_class->draw = ido_media_player_menu_item_draw; } +static GtkWidget * +track_info_label_new () +{ + GtkWidget *label; + + label = gtk_label_new (NULL); + gtk_label_set_width_chars (GTK_LABEL (label), 25); + gtk_label_set_max_width_chars (GTK_LABEL (label), 25); + gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); + gtk_widget_set_halign (label, GTK_ALIGN_START); + gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_MIDDLE); + + return label; +} + static void ido_media_player_menu_item_init (IdoMediaPlayerMenuItem *self) { @@ -140,19 +146,12 @@ ido_media_player_menu_item_init (IdoMediaPlayerMenuItem *self) gtk_widget_set_size_request (self->album_art, ALBUM_ART_SIZE, ALBUM_ART_SIZE); gtk_widget_set_margin_right (self->album_art, 8); - self->artist_label = gtk_label_new (NULL); - gtk_widget_set_halign (self->artist_label, GTK_ALIGN_START); - gtk_label_set_ellipsize (GTK_LABEL (self->artist_label), PANGO_ELLIPSIZE_MIDDLE); + self->artist_label = track_info_label_new (); + self->piece_label = track_info_label_new (); - self->piece_label = gtk_label_new (NULL); - gtk_widget_set_halign (self->piece_label, GTK_ALIGN_START); - gtk_label_set_ellipsize (GTK_LABEL (self->piece_label), PANGO_ELLIPSIZE_MIDDLE); - - self->container_label = gtk_label_new (NULL); - gtk_widget_set_halign (self->container_label, GTK_ALIGN_START); - gtk_widget_set_valign (self->container_label, GTK_ALIGN_START); + self->container_label = track_info_label_new (); gtk_widget_set_vexpand (self->container_label, TRUE); - gtk_label_set_ellipsize (GTK_LABEL (self->container_label), PANGO_ELLIPSIZE_MIDDLE); + gtk_widget_set_valign (self->container_label, GTK_ALIGN_START); self->metadata_widget = gtk_grid_new (); gtk_grid_attach (GTK_GRID (self->metadata_widget), self->album_art, 0, 0, 1, 4); -- cgit v1.2.3 From 8844b1915c53de0f77727fd1c868de6972b69def Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 23 Apr 2014 12:02:32 +0200 Subject: idoplaybackmenuitem: center the controls horizontally --- src/idoplaybackmenuitem.c | 117 +++++++++++++++++++++++++--------------------- 1 file changed, 65 insertions(+), 52 deletions(-) diff --git a/src/idoplaybackmenuitem.c b/src/idoplaybackmenuitem.c index 9d44b92..fb10d12 100644 --- a/src/idoplaybackmenuitem.c +++ b/src/idoplaybackmenuitem.c @@ -27,6 +27,45 @@ #include #include +#define RECT_WIDTH 130.0f +#define Y 7.0f +#define INNER_RADIUS 12.5 +#define MIDDLE_RADIUS 13.0f +#define OUTER_RADIUS 14.5f +#define CIRCLE_RADIUS 21.0f +#define PREV_WIDTH 25.0f +#define PREV_HEIGHT 17.0f +#define NEXT_WIDTH 25.0f //PREV_WIDTH +#define NEXT_HEIGHT 17.0f //PREV_HEIGHT +#define TRI_WIDTH 11.0f +#define TRI_HEIGHT 13.0f +#define TRI_OFFSET 6.0f +#define PREV_Y 13.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_Y 7.0f +#define PLAY_WIDTH 28.0f +#define PLAY_HEIGHT 29.0f +#define PLAY_PADDING 5.0f +#define INNER_START_SHADE 0.98 +#define INNER_END_SHADE 0.98 +#define MIDDLE_START_SHADE 1.0 +#define MIDDLE_END_SHADE 1.0 +#define OUTER_START_SHADE 0.75 +#define OUTER_END_SHADE 1.3 +#define SHADOW_BUTTON_SHADE 0.8 +#define OUTER_PLAY_START_SHADE 0.7 +#define OUTER_PLAY_END_SHADE 1.38 +#define BUTTON_START_SHADE 1.1 +#define BUTTON_END_SHADE 0.9 +#define BUTTON_SHADOW_SHADE 0.8 +#define INNER_COMPRESSED_START_SHADE 1.0 +#define INNER_COMPRESSED_END_SHADE 1.0 + typedef enum { STATE_PAUSED, @@ -90,10 +129,14 @@ ido_playback_menu_item_finalize (GObject *object) } static Button -ido_playback_menu_item_get_button_at_pos (gint x, - gint y) +ido_playback_menu_item_get_button_at_pos (GtkWidget *item, + gint x, + gint y) { - /* 57 101 143 187 + GtkAllocation alloc; + gint left; + + /* 0 44 86 130 * 5 +------+ * 12 +-----+ +-----+ * |prev play next| @@ -101,13 +144,16 @@ ido_playback_menu_item_get_button_at_pos (gint x, * 47 +------+ */ - if (x > 57 && x < 102 && y > 12 && y < 40) + gtk_widget_get_allocation (item, &alloc); + left = alloc.x + (alloc.width - RECT_WIDTH) / 2; + + if (x > left && x < left + 44 && y > 12 && y < 40) return BUTTON_PREVIOUS; - if (x > 101 && x < 143 && y > 5 && y < 47) + if (x > left + 44 && x < left + 86 && y > 5 && y < 47) return BUTTON_PLAYPAUSE; - if (x > 142 && x < 187 && y > 12 && y < 40) + if (x > left + 86 && x < left + 130 && y > 12 && y < 40) return BUTTON_NEXT; return BUTTON_NONE; @@ -232,7 +278,7 @@ ido_playback_menu_item_button_press_event (GtkWidget *menuitem, { IdoPlaybackMenuItem *item = IDO_PLAYBACK_MENU_ITEM (menuitem); - item->cur_pushed_button = ido_playback_menu_item_get_button_at_pos (event->x, event->y); + item->cur_pushed_button = ido_playback_menu_item_get_button_at_pos (menuitem, event->x, event->y); gtk_widget_queue_draw (menuitem); return TRUE; @@ -246,7 +292,7 @@ ido_playback_menu_item_button_release_event (GtkWidget *menuitem, Button button; const gchar *action = action; - button = ido_playback_menu_item_get_button_at_pos (event->x, event->y); + button = ido_playback_menu_item_get_button_at_pos (menuitem, event->x, event->y); if (button != item->cur_pushed_button) button = BUTTON_NONE; @@ -266,7 +312,7 @@ ido_playback_menu_item_motion_notify_event (GtkWidget *menuitem, { IdoPlaybackMenuItem *item = IDO_PLAYBACK_MENU_ITEM (menuitem); - item->cur_hover_button = ido_playback_menu_item_get_button_at_pos (event->x, event->y); + item->cur_hover_button = ido_playback_menu_item_get_button_at_pos (menuitem, event->x, event->y); gtk_widget_queue_draw (menuitem); return TRUE; @@ -426,49 +472,6 @@ ido_playback_menu_item_new_from_model (GMenuItem *item, * Drawing */ -#define RECT_WIDTH 130.0f -#define Y 7.0f -#define X 70.0f -#define INNER_RADIUS 12.5 -#define MIDDLE_RADIUS 13.0f -#define OUTER_RADIUS 14.5f -#define CIRCLE_RADIUS 21.0f -#define PREV_WIDTH 25.0f -#define PREV_HEIGHT 17.0f -#define NEXT_WIDTH 25.0f //PREV_WIDTH -#define NEXT_HEIGHT 17.0f //PREV_HEIGHT -#define TRI_WIDTH 11.0f -#define TRI_HEIGHT 13.0f -#define TRI_OFFSET 6.0f -#define PREV_X 68.0f -#define PREV_Y 13.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 111.0f -#define PAUSE_Y 7.0f -#define PLAY_WIDTH 28.0f -#define PLAY_HEIGHT 29.0f -#define PLAY_PADDING 5.0f -#define INNER_START_SHADE 0.98 -#define INNER_END_SHADE 0.98 -#define MIDDLE_START_SHADE 1.0 -#define MIDDLE_END_SHADE 1.0 -#define OUTER_START_SHADE 0.75 -#define OUTER_END_SHADE 1.3 -#define SHADOW_BUTTON_SHADE 0.8 -#define OUTER_PLAY_START_SHADE 0.7 -#define OUTER_PLAY_END_SHADE 1.38 -#define BUTTON_START_SHADE 1.1 -#define BUTTON_END_SHADE 0.9 -#define BUTTON_SHADOW_SHADE 0.8 -#define INNER_COMPRESSED_START_SHADE 1.0 -#define INNER_COMPRESSED_END_SHADE 1.0 - typedef struct { double r; @@ -1145,6 +1148,11 @@ static gboolean ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) { IdoPlaybackMenuItem *item = IDO_PLAYBACK_MENU_ITEM (button); + GtkAllocation alloc; + gint X; + gint PAUSE_X; + gint PREV_X; + gint NEXT_X; g_return_val_if_fail(IDO_IS_PLAYBACK_MENU_ITEM (button), FALSE); g_return_val_if_fail(cr != NULL, FALSE); @@ -1228,6 +1236,11 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) double INNER_COMPRESSED_END[] = {color_inner_compressed[1].r, color_inner_compressed[1].g, color_inner_compressed[1].b, 1.0f}; double INNER_COMPRESSED_START[] = {color_inner_compressed[0].r, color_inner_compressed[0].g, color_inner_compressed[0].b, 1.0f}; + gtk_widget_get_allocation (button, &alloc); + X = alloc.x + (alloc.width - RECT_WIDTH) / 2 + OUTER_RADIUS; + PAUSE_X = X + 41; + PREV_X = X - 2; + NEXT_X = X + 76; draw_gradient (cr, X, -- cgit v1.2.3 From 82c094a569863dfd8600f2a5c596706450fa4d48 Mon Sep 17 00:00:00 2001 From: Lars Uebernickel Date: Wed, 23 Apr 2014 16:37:18 +0200 Subject: idoplaybackmenuitem: don't introduce even more magic numbers --- src/idoplaybackmenuitem.c | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/src/idoplaybackmenuitem.c b/src/idoplaybackmenuitem.c index fb10d12..11af9bb 100644 --- a/src/idoplaybackmenuitem.c +++ b/src/idoplaybackmenuitem.c @@ -40,13 +40,16 @@ #define TRI_WIDTH 11.0f #define TRI_HEIGHT 13.0f #define TRI_OFFSET 6.0f +#define PREV_X -2.0f #define PREV_Y 13.0f +#define NEXT_X 76.0f //prev_y #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 41.0f #define PAUSE_Y 7.0f #define PLAY_WIDTH 28.0f #define PLAY_HEIGHT 29.0f @@ -1150,9 +1153,9 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) IdoPlaybackMenuItem *item = IDO_PLAYBACK_MENU_ITEM (button); GtkAllocation alloc; gint X; - gint PAUSE_X; - gint PREV_X; - gint NEXT_X; + gint abs_pause_x; + gint abs_prev_x; + gint abs_next_x; g_return_val_if_fail(IDO_IS_PLAYBACK_MENU_ITEM (button), FALSE); g_return_val_if_fail(cr != NULL, FALSE); @@ -1238,9 +1241,9 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) gtk_widget_get_allocation (button, &alloc); X = alloc.x + (alloc.width - RECT_WIDTH) / 2 + OUTER_RADIUS; - PAUSE_X = X + 41; - PREV_X = X - 2; - NEXT_X = X + 76; + abs_pause_x = X + PAUSE_X; + abs_prev_x = X + PREV_X; + abs_next_x = X + NEXT_X; draw_gradient (cr, X, @@ -1460,7 +1463,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW_FOCUS, FALSE); _surface_blur (surf, 3); - _finalize_repaint (cr, &cr_surf, &surf, PREV_X, PREV_Y + 0.5f, 3); + _finalize_repaint (cr, &cr_surf, &surf, abs_prev_x, PREV_Y + 0.5f, 3); } else { @@ -1480,7 +1483,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW, FALSE); _surface_blur (surf, 1); - _finalize (cr, &cr_surf, &surf, PREV_X, PREV_Y + 1.0f); + _finalize (cr, &cr_surf, &surf, abs_prev_x, PREV_Y + 1.0f); } // draw previous-button @@ -1499,7 +1502,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_START, BUTTON_END, FALSE); - _finalize (cr, &cr_surf, &surf, PREV_X, PREV_Y); + _finalize (cr, &cr_surf, &surf, abs_prev_x, PREV_Y); // draw next-button drop-shadow if ((item->cur_pushed_button == BUTTON_NEXT && item->keyboard_activated) || @@ -1521,7 +1524,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW_FOCUS, FALSE); _surface_blur (surf, 3); - _finalize_repaint (cr, &cr_surf, &surf, NEXT_X, NEXT_Y + 0.5f, 3); + _finalize_repaint (cr, &cr_surf, &surf, abs_next_x, NEXT_Y + 0.5f, 3); } else { @@ -1541,7 +1544,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW, FALSE); _surface_blur (surf, 1); - _finalize (cr, &cr_surf, &surf, NEXT_X, NEXT_Y + 1.0f); + _finalize (cr, &cr_surf, &surf, abs_next_x, NEXT_Y + 1.0f); } // draw next-button @@ -1560,7 +1563,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_START, BUTTON_END, FALSE); - _finalize (cr, &cr_surf, &surf, NEXT_X, NEXT_Y); + _finalize (cr, &cr_surf, &surf, abs_next_x, NEXT_Y); // draw pause-button drop-shadow if (item->current_state == STATE_PLAYING) @@ -1585,7 +1588,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW_FOCUS, TRUE); _surface_blur (surf, 3); - _finalize_repaint (cr, &cr_surf, &surf, PAUSE_X, PAUSE_Y + 0.5f, 3); + _finalize_repaint (cr, &cr_surf, &surf, abs_pause_x, PAUSE_Y + 0.5f, 3); } else { @@ -1605,7 +1608,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW, TRUE); _surface_blur (surf, 1); - _finalize (cr, &cr_surf, &surf, PAUSE_X, PAUSE_Y + 1.0f); + _finalize (cr, &cr_surf, &surf, abs_pause_x, PAUSE_Y + 1.0f); } // draw pause-button @@ -1624,7 +1627,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_START, BUTTON_END, TRUE); - _finalize (cr, &cr_surf, &surf, PAUSE_X, PAUSE_Y); + _finalize (cr, &cr_surf, &surf, abs_pause_x, PAUSE_Y); } else if (item->current_state == STATE_PAUSED) { @@ -1647,7 +1650,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW_FOCUS, FALSE); _surface_blur (surf, 3); - _finalize_repaint (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y + 0.5f, 3); + _finalize_repaint (cr, &cr_surf, &surf, abs_pause_x-0.5f, PAUSE_Y + 0.5f, 3); } else { @@ -1666,7 +1669,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_SHADOW, FALSE); _surface_blur (surf, 1); - _finalize (cr, &cr_surf, &surf, PAUSE_X-0.75f, PAUSE_Y + 1.0f); + _finalize (cr, &cr_surf, &surf, abs_pause_x-0.75f, PAUSE_Y + 1.0f); } // draw play-button @@ -1687,7 +1690,7 @@ ido_playback_menu_item_draw (GtkWidget* button, cairo_t *cr) BUTTON_START, BUTTON_END, FALSE); - _finalize (cr, &cr_surf, &surf, PAUSE_X-0.5f, PAUSE_Y); + _finalize (cr, &cr_surf, &surf, abs_pause_x-0.5f, PAUSE_Y); } else if (item->current_state == STATE_LAUNCHING) { -- cgit v1.2.3