From 6dc51910a32c97a00452939d089c332d838c4bbe Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Sat, 19 Jul 2008 17:39:15 +0200 Subject: [PATCH] Make artist image resize when pane is dragged --- src/gob/gmpc-metaimage.gob | 51 ++++++++++++++++++++++++++++++++++++++++++++++ src/playlist3.c | 20 +++++++++++++++++- 2 files changed, 70 insertions(+), 1 deletion(-) diff --git a/src/gob/gmpc-metaimage.gob b/src/gob/gmpc-metaimage.gob index 107f5efa..5875bd62 100644 --- a/src/gob/gmpc-metaimage.gob +++ b/src/gob/gmpc-metaimage.gob @@ -19,10 +19,26 @@ requires 2.0.0 +%ph{ +/** + * Indicate the state + */ +typedef enum _GmpcMetaImageState{ + STATE_NA, + STATE_FETCHING, + STATE_IMAGE, + NUM_STATES +}GmpcMetaImageState; + + + +%} class Gmpc:MetaImage from Gtk:Event:Box{ + private GmpcMetaImageState state = {STATE_NA}; + private gulong status_signal = {0}; private gulong connect_signal = {0}; private gulong meta_id = {0}; @@ -31,6 +47,7 @@ class Gmpc:MetaImage from Gtk:Event:Box{ private mpd_Song *song = {NULL} destroywith mpd_freeSong; + /* Popup */ private GtkWidget *popup_win = {NULL}; private guint popup_timer_id = {0}; private guint gmpc_idle_id = {0}; @@ -458,6 +475,9 @@ class Gmpc:MetaImage from Gtk:Event:Box{ { GError *err = NULL; GdkPixbuf *pb2; + + self->_priv->state = STATE_NA; + if(self->_priv->image_url) { q_free(self->_priv->image_url); @@ -483,6 +503,8 @@ class Gmpc:MetaImage from Gtk:Event:Box{ set_cover_fetching(self) { GdkPixbuf *pb2; + + self->_priv->state = STATE_FETCHING; if(self->_priv->image_url) { q_free(self->_priv->image_url); @@ -514,6 +536,9 @@ class Gmpc:MetaImage from Gtk:Event:Box{ set_cover_from_path(self, gchar *path) { GdkPixbuf *pb = NULL; + + self->_priv->state = STATE_IMAGE; + pb = gdk_pixbuf_new_from_file_at_scale(path,self->size-self->draw_shadow*12,self->size-self->draw_shadow*12,TRUE,NULL); if(self->_priv->image_url) { @@ -720,4 +745,30 @@ class Gmpc:MetaImage from Gtk:Event:Box{ gtk_widget_destroy(fcd); mpd_freeSong(song); } + + public + void + reload_image(self) + { + switch(self->_priv->state) + { + case STATE_NA: + self_set_cover_na(self); + break; + case STATE_FETCHING: + self_set_cover_fetching(self); + break; + case STATE_IMAGE: + { + if(self->_priv->image_url) + { + gchar *temp = g_strdup(self->_priv->image_url); + self_set_cover_from_path(self, temp); + g_free(temp); + } + } + default: + break; + } + } } diff --git a/src/playlist3.c b/src/playlist3.c index 33045018..1128e04e 100644 --- a/src/playlist3.c +++ b/src/playlist3.c @@ -773,6 +773,19 @@ gboolean pl3_pb_button_press_event (GtkWidget *pb, GdkEventButton *event, gpoint return FALSE; } +/** + * When the position of the slider change, update the artist image + */ +static void +pl3_win_pane_changed(GtkWidget *panel, GParamSpec *arg1, gpointer data) +{ + gint position = 0; + g_object_get(G_OBJECT(panel), "position", &position, NULL); + gmpc_metaimage_set_size(GMPC_METAIMAGE(glade_xml_get_widget(pl3_xml, "metaimage_artist_art")), position-20); + gmpc_metaimage_reload_image(GMPC_METAIMAGE(glade_xml_get_widget(pl3_xml, "metaimage_artist_art"))); + +} + void create_playlist3 () { GtkListStore *pl3_crumbs = NULL; @@ -921,7 +934,7 @@ void create_playlist3 () gtk_widget_set_size_request(glade_xml_get_widget(pl3_xml, "metaimage_album_art"),80,80); gmpc_metaimage_set_size(GMPC_METAIMAGE(glade_xml_get_widget(pl3_xml, "metaimage_album_art")), 80); /** make sure size is updated */ - gmpc_metaimage_set_cover_na(GMPC_METAIMAGE(glade_xml_get_widget(pl3_xml, "metaimage_album_art"))); +// gmpc_metaimage_set_cover_na(GMPC_METAIMAGE(glade_xml_get_widget(pl3_xml, "metaimage_album_art"))); gmpc_metaimage_set_image_type(GMPC_METAIMAGE(glade_xml_get_widget(pl3_xml, "metaimage_artist_art")), META_ARTIST_ART); gmpc_metaimage_set_hide_on_na(GMPC_METAIMAGE(glade_xml_get_widget(pl3_xml, "metaimage_artist_art")), TRUE); @@ -1003,6 +1016,11 @@ void create_playlist3 () g_signal_connect(G_OBJECT(event), "expose-event", G_CALLBACK(playlist3_error_expose), NULL); } + /* A signal that responses on change of pane position */ + g_signal_connect(G_OBJECT(glade_xml_get_widget(pl3_xml,"hpaned1")), + "notify::position", G_CALLBACK(pl3_win_pane_changed), NULL); + /* update it */ + pl3_win_pane_changed(glade_xml_get_widget(pl3_xml,"hpaned1"), NULL, NULL); /** * */ -- 2.11.4.GIT