/* * Copyright 2016 (c) Anna Schumaker. */ #include #include #include static struct album *__artwork_cur_album = NULL; static GdkPixbuf *__artwork_get_pixbuf(struct track *track) { gchar *path = album_artwork_path(track->tr_album); GdkPixbuf *pix; int height; if (!path) return NULL; height = gui_builder_widget_height("o_position") + gui_builder_widget_height("o_tags"); pix = gdk_pixbuf_new_from_file_at_scale(path, -1, height, true, NULL); g_free(path); return pix; } void gui_artwork_set_cover(void) { GtkImage *cover = GTK_IMAGE(gui_builder_widget("o_cover")); struct track *track = audio_cur_track(); GdkPixbuf *pix; if (!track || track->tr_album == __artwork_cur_album) return; pix = __artwork_get_pixbuf(track); if (pix) { gtk_image_set_from_pixbuf(cover, pix); g_object_unref(G_OBJECT(pix)); } else gtk_image_set_from_icon_name(cover, "image-missing", GTK_ICON_SIZE_DIALOG); gtk_widget_set_sensitive(GTK_WIDGET(cover), pix != NULL); __artwork_cur_album = pix ? track->tr_album : NULL; } void __artwork_select_cover(GtkButton *button) { struct track *track = audio_cur_track(); GtkFileFilter *filter; GtkWidget *dialog; gchar *path; if (!track) return; filter = gtk_file_filter_new(); dialog = gtk_file_chooser_dialog_new("Choose an image", GTK_WINDOW(gui_builder_widget("o_window")), GTK_FILE_CHOOSER_ACTION_OPEN, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_Open"), GTK_RESPONSE_ACCEPT, NULL); gtk_file_filter_add_mime_type(filter, "image/*"); gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(dialog), filter); gtk_file_chooser_set_preview_widget_active(GTK_FILE_CHOOSER(dialog), true); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { path = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); album_artwork_import(track->tr_album, path); gui_artwork_set_cover(); g_free(path); } gtk_widget_destroy(dialog); g_object_unref(filter); }