summaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2012-12-03 18:34:49 +0100
committerGravatar waker <wakeroid@gmail.com>2012-12-03 18:34:49 +0100
commitd2f1b28b81d0f80ef14536d5955a1b92925c62cc (patch)
treec7343627301395c2cbde92a6d88dc96504a173d7 /plugins
parent47201c70fcf8f85e333bab2d3804fe7a89539b4a (diff)
gtkui: cover art fixes
Diffstat (limited to 'plugins')
-rw-r--r--plugins/gtkui/coverart.c30
-rw-r--r--plugins/gtkui/coverart.h9
-rw-r--r--plugins/gtkui/gtkui.c2
-rw-r--r--plugins/gtkui/plcommon.c15
-rw-r--r--plugins/gtkui/widgets.c48
5 files changed, 47 insertions, 57 deletions
diff --git a/plugins/gtkui/coverart.c b/plugins/gtkui/coverart.c
index 2a803e51..ed167c48 100644
--- a/plugins/gtkui/coverart.c
+++ b/plugins/gtkui/coverart.c
@@ -103,13 +103,6 @@ queue_pop (void) {
deadbeef->mutex_unlock (mutex);
}
-gboolean
-redraw_playlist_cb (gpointer dt) {
- void main_refresh (void);
- main_refresh ();
- return FALSE;
-}
-
void
loading_thread (void *none) {
#ifdef __linux__
@@ -154,6 +147,7 @@ loading_thread (void *none) {
if (stat (queue->fname, &stat_buf) < 0) {
trace ("failed to stat file %s\n", queue->fname);
}
+
GdkPixbuf *pixbuf = NULL;
GError *error = NULL;
pixbuf = gdk_pixbuf_new_from_file_at_scale (queue->fname, queue->width, queue->width, TRUE, &error);
@@ -256,28 +250,6 @@ get_pixbuf (const char *fname, int width, void (*callback)(void *user_data), voi
return NULL;
}
-static void
-redraw_playlist (void *user_data) {
- g_idle_add (redraw_playlist_cb, NULL);
-}
-
-GdkPixbuf *
-get_cover_art (const char *fname, const char *artist, const char *album, int width) {
- if (!coverart_plugin) {
- return NULL;
- }
- cover_avail_info_t *dt = malloc (sizeof (cover_avail_info_t));
- dt->width = width;
- dt->callback = redraw_playlist;
- dt->user_data = NULL;
- char *image_fname = coverart_plugin->get_album_art (fname, artist, album, -1, cover_avail_callback, (void*)dt);
- if (image_fname) {
- GdkPixbuf *pb = get_pixbuf (image_fname, width, redraw_playlist, NULL);
- free (image_fname);
- return pb;
- }
- return NULL;
-}
GdkPixbuf *
get_cover_art_callb (const char *fname, const char *artist, const char *album, int width, void (*callback) (void *user_data), void *user_data) {
diff --git a/plugins/gtkui/coverart.h b/plugins/gtkui/coverart.h
index a4914b6f..65bf1d6f 100644
--- a/plugins/gtkui/coverart.h
+++ b/plugins/gtkui/coverart.h
@@ -25,16 +25,11 @@
// this function puts request for cover art into queue, or returns default image
// of specific size
//
-// if the image is not available immediately -- callback will be called later,
-// which will redraw all tracks matching the query
+// if the image is not available immediately -- callback will be called later
//
// if cover art loader plugin is not available -- NULL will be returned
GdkPixbuf *
-get_cover_art (const char *fname, const char *artist, const char *album, int width);
-
-GdkPixbuf *
-get_cover_art_callb (const char *fname, const char *artist, const char *album, int width, void
-(*cover_avail_callback) (void *user_data), void *user_data);
+get_cover_art_callb (const char *fname, const char *artist, const char *album, int width, void (*cover_avail_callback) (void *user_data), void *user_data);
void
coverart_reset_queue (void);
diff --git a/plugins/gtkui/gtkui.c b/plugins/gtkui/gtkui.c
index a584b834..77d7e0a8 100644
--- a/plugins/gtkui/gtkui.c
+++ b/plugins/gtkui/gtkui.c
@@ -1274,6 +1274,8 @@ gtkui_connect_cb (void *none) {
}
gtkui_playlist_changed ();
add_mainmenu_actions ();
+ ddb_event_t *e = deadbeef->event_alloc (DB_EV_TRACKINFOCHANGED);
+ deadbeef->event_send(e, 0, 0);
return FALSE;
}
diff --git a/plugins/gtkui/plcommon.c b/plugins/gtkui/plcommon.c
index 880f5f81..65734752 100644
--- a/plugins/gtkui/plcommon.c
+++ b/plugins/gtkui/plcommon.c
@@ -73,6 +73,19 @@ rewrite_column_config (DdbListview *listview, const char *name) {
}
}
+static gboolean
+redraw_playlist_cb (gpointer dt) {
+ void main_refresh (void);
+ main_refresh ();
+ return FALSE;
+}
+
+static void
+redraw_playlist (void *user_data) {
+ g_idle_add (redraw_playlist_cb, NULL);
+}
+
+
#define ART_PADDING_HORZ 8
#define ART_PADDING_VERT 0
@@ -134,7 +147,7 @@ void draw_column_data (DdbListview *listview, cairo_t *cr, DdbListviewIter it, D
if (!album || !*album) {
album = deadbeef->pl_find_meta (group_it, "title");
}
- GdkPixbuf *pixbuf = get_cover_art (deadbeef->pl_find_meta (((DB_playItem_t *)group_it), ":URI"), artist, album, art_width);
+ GdkPixbuf *pixbuf = get_cover_art_callb (deadbeef->pl_find_meta (((DB_playItem_t *)group_it), ":URI"), artist, album, art_width, redraw_playlist, NULL);
if (pixbuf) {
int pw = gdk_pixbuf_get_width (pixbuf);
int ph = gdk_pixbuf_get_height (pixbuf);
diff --git a/plugins/gtkui/widgets.c b/plugins/gtkui/widgets.c
index 1f474a88..c5fc0a94 100644
--- a/plugins/gtkui/widgets.c
+++ b/plugins/gtkui/widgets.c
@@ -1798,19 +1798,26 @@ selproperties_message (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32
return 0;
}
+static void
+w_selproperties_init (struct ddb_gtkui_widget_s *w) {
+ fill_selproperties_cb (w);
+}
+
ddb_gtkui_widget_t *
w_selproperties_create (void) {
w_selproperties_t *w = malloc (sizeof (w_selproperties_t));
memset (w, 0, sizeof (w_selproperties_t));
w->base.widget = gtk_scrolled_window_new (NULL, NULL);
+ w->base.init = w_selproperties_init;
+ w->base.message = selproperties_message;
+
gtk_widget_set_can_focus (w->base.widget, FALSE);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (w->base.widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
w->tree = gtk_tree_view_new ();
gtk_widget_show (w->tree);
gtk_tree_view_set_enable_search (GTK_TREE_VIEW (w->tree), FALSE);
gtk_container_add (GTK_CONTAINER (w->base.widget), w->tree);
- w->base.message = selproperties_message;
GtkListStore *store = gtk_list_store_new (4, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT);
gtk_tree_view_set_model (GTK_TREE_VIEW (w->tree), GTK_TREE_MODEL (store));
@@ -1833,38 +1840,46 @@ w_selproperties_create (void) {
}
///// cover art display
-void
-coverart_avail_callback (void *user_data) {
+static gboolean
+coverart_redraw_cb (void *user_data) {
w_coverart_t *w = user_data;
gtk_widget_queue_draw (w->drawarea);
+ return FALSE;
+}
+
+void
+coverart_avail_callback (void *user_data) {
+ g_idle_add (coverart_redraw_cb, user_data);
}
static gboolean
coverart_draw (GtkWidget *widget, cairo_t *cr, gpointer user_data) {
DB_playItem_t *it = deadbeef->streamer_get_playing_track ();
- if (!it) {
- return FALSE;
- }
GtkAllocation a;
gtk_widget_get_allocation (widget, &a);
int width = a.width;
int height = a.height;
- const char *album = deadbeef->pl_find_meta (it, "album");
- const char *artist = deadbeef->pl_find_meta (it, "artist");
- if (!album || !*album) {
- album = deadbeef->pl_find_meta (it, "title");
+ const char *album = NULL, *artist = NULL;
+ if (it) {
+ album = deadbeef->pl_find_meta (it, "album");
+ artist = deadbeef->pl_find_meta (it, "artist");
+ if (!album || !*album) {
+ album = deadbeef->pl_find_meta (it, "title");
+ }
}
- GdkPixbuf *pixbuf = get_cover_art_callb (deadbeef->pl_find_meta ((it), ":URI"), artist, album, min(width,height), coverart_avail_callback, user_data);
+ GdkPixbuf *pixbuf = get_cover_art_callb (it ? deadbeef->pl_find_meta ((it), ":URI") : NULL, artist, album, min(width,height), coverart_avail_callback, user_data);
+
if (pixbuf) {
int pw = gdk_pixbuf_get_width (pixbuf);
int ph = gdk_pixbuf_get_height (pixbuf);
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_rectangle (cr, 0, 0, pw, ph);
cairo_fill (cr);
-// gdk_draw_pixbuf (gtk_widget_get_window (widget), widget->style->white_gc, pixbuf, 0, 0, a.width/2-pw/2, a.height/2-ph/2, pw, ph, GDK_RGB_DITHER_NONE, 0, 0);
g_object_unref (pixbuf);
}
- deadbeef->pl_item_unref (it);
+ if (it) {
+ deadbeef->pl_item_unref (it);
+ }
return TRUE;
}
@@ -1876,13 +1891,6 @@ coverart_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_d
return res;
}
-static gboolean
-coverart_redraw_cb (void *user_data) {
- w_coverart_t *w = user_data;
- gtk_widget_queue_draw (w->drawarea);
- return FALSE;
-}
-
static int
coverart_message (ddb_gtkui_widget_t *w, uint32_t id, uintptr_t ctx, uint32_t p1, uint32_t p2) {
w_coverart_t *ca = (w_coverart_t *)w;