summaryrefslogtreecommitdiff
path: root/plugins/gtkui/ddbseekbar.c
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-10-13 20:54:11 +0200
committerGravatar Alexey Yakovenko <waker@users.sourceforge.net>2013-10-13 20:54:11 +0200
commit548ba7544e895498842ba6d552753da26c0c6bab (patch)
tree968207581695e4c8e629969a1ccd2181854f7133 /plugins/gtkui/ddbseekbar.c
parent9ff1554bf8ca203f5c9c42143917d08ad8ce3c57 (diff)
gtkui: seekpos delay by Christian Boxdörfer
Diffstat (limited to 'plugins/gtkui/ddbseekbar.c')
-rw-r--r--plugins/gtkui/ddbseekbar.c34
1 files changed, 29 insertions, 5 deletions
diff --git a/plugins/gtkui/ddbseekbar.c b/plugins/gtkui/ddbseekbar.c
index 431b100c..31740a29 100644
--- a/plugins/gtkui/ddbseekbar.c
+++ b/plugins/gtkui/ddbseekbar.c
@@ -331,9 +331,17 @@ seekbar_draw (GtkWidget *widget, cairo_t *cr) {
cairo_fill (cr);
cairo_reset_clip (cr);
- if (self->seekbar_moving && trk) {
+ if ((self->seekbar_moving || self->seekbar_moved > 0.0) && trk) {
+ float time = 0;
float dur = deadbeef->pl_get_item_duration (trk);
- float time = self->seekbar_move_x * dur / (a.width);
+
+ if (self->seekbar_moved > 0) {
+ time = deadbeef->streamer_get_playpos ();
+ }
+ else {
+ time = self->seekbar_move_x * dur / (a.width);
+ }
+
if (time < 0) {
time = 0;
}
@@ -346,7 +354,7 @@ seekbar_draw (GtkWidget *widget, cairo_t *cr) {
int sc = time-hr*3600-mn*60;
snprintf (s, sizeof (s), "%02d:%02d:%02d", hr, mn, sc);
- cairo_set_source_rgba (cr, clr_selection.red/65535.f, clr_selection.green/65535.f, clr_selection.blue/65535.f, 0.8f);
+ cairo_set_source_rgba (cr, clr_selection.red/65535.f, clr_selection.green/65535.f, clr_selection.blue/65535.f, self->seektime_alpha);
cairo_save (cr);
cairo_set_font_size (cr, 20);
@@ -363,11 +371,24 @@ seekbar_draw (GtkWidget *widget, cairo_t *cr) {
cairo_move_to (cr, self->textpos, ay+ah/2+ex.height/2);
GdkColor clr;
gtkui_get_listview_selected_text_color (&clr);
- cairo_set_source_rgb (cr, clr.red/65535.f, clr.green/65535.f, clr.blue/65535.f);
+ cairo_set_source_rgba (cr, clr.red/65535.f, clr.green/65535.f, clr.blue/65535.f, self->seektime_alpha);
cairo_show_text (cr, s);
cairo_restore (cr);
- }
+ int fps = deadbeef->conf_get_int ("gtkui.refresh_rate", 10);
+ if (fps < 1) {
+ fps = 1;
+ }
+ else if (fps > 30) {
+ fps = 30;
+ }
+ if (self->seekbar_moved >= 0.0) {
+ self->seekbar_moved -= 1.0/fps;
+ }
+ else {
+ self->seekbar_moved = 0.0;
+ }
+ }
if (trk) {
deadbeef->pl_item_unref (trk);
@@ -397,8 +418,10 @@ on_seekbar_button_press_event (GtkWidget *widget,
return FALSE;
}
self->seekbar_moving = 1;
+ self->seekbar_moved = 0;
self->textpos = -1;
self->textwidth = -1;
+ self->seektime_alpha = 0.8;
GtkAllocation a;
gtk_widget_get_allocation (widget, &a);
self->seekbar_move_x = event->x - a.x;
@@ -413,6 +436,7 @@ on_seekbar_button_release_event (GtkWidget *widget,
{
DdbSeekbar *self = DDB_SEEKBAR (widget);
self->seekbar_moving = 0;
+ self->seekbar_moved = 1.0;
DB_playItem_t *trk = deadbeef->streamer_get_playing_track ();
if (trk) {
GtkAllocation a;