aboutsummaryrefslogtreecommitdiff
path: root/src/play-button.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/play-button.c')
-rw-r--r--src/play-button.c100
1 files changed, 56 insertions, 44 deletions
diff --git a/src/play-button.c b/src/play-button.c
index 1aeff12..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
@@ -85,16 +85,6 @@ G_DEFINE_TYPE (PlayButton, play_button, GTK_TYPE_DRAWING_AREA);
/// internal helper functions //////////////////////////////////////////////////
-/*static double
-_align (double val)
-{
- double fract = val - (int) val;
-
- if (fract != 0.5f)
- return (double) ((int) val + 0.5f);
- else
- return val;
-}*/
static inline void
_blurinner (guchar* pixel,
@@ -331,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);
@@ -340,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),
@@ -351,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);
@@ -359,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
@@ -399,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;
@@ -464,8 +454,29 @@ void
play_button_toggle_play_pause(GtkWidget* button, PlayButtonState update)
{
PlayButtonPrivate* priv = PLAY_BUTTON_GET_PRIVATE(button);
+ gboolean changed = priv->current_state != update;
priv->current_state = update;
g_debug("PlayButton::toggle play state : %i", priv->current_state);
+
+ if(changed == TRUE){
+ g_debug("Toggle play pause - changed of state detected - redraw button");
+ cairo_t *cr;
+
+ cr = gdk_cairo_create (button->window);
+
+ GList* list = g_hash_table_lookup(priv->command_coordinates,
+ GINT_TO_POINTER(TRANSPORT_PLAY_PAUSE));
+
+ 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);
+ }
}
@@ -785,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,
@@ -940,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);
@@ -959,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);
}
}