From: Colin Clark Date: Wed, 13 Sep 2017 10:21:58 +0000 (+0100) Subject: Ref #510: Rudimentary video support X-Git-Tag: v1.4~92 X-Git-Url: http://geeqie.org/cgi-bin/gitweb.cgi?p=geeqie.git;a=commitdiff_plain;h=d33e0f6aaf3be452f96a68c7424fe05a433d3144 Ref #510: Rudimentary video support https://github.com/BestImageViewer/geeqie/issues/510 Implement icons for FORMAT_CLASS --- diff --git a/src/filedata.c b/src/filedata.c index b690e812..3bbbbfbb 100644 --- a/src/filedata.c +++ b/src/filedata.c @@ -429,6 +429,7 @@ static FileData *file_data_new(const gchar *path_utf8, struct stat *st, gboolean fd->magick = FD_MAGICK; fd->exifdate = 0; fd->rating = 0; + fd->format_class = filter_file_get_class(path_utf8); if (disable_sidecars) fd->disable_grouping = TRUE; diff --git a/src/filefilter.c b/src/filefilter.c index 1594bc9c..0e467497 100644 --- a/src/filefilter.c +++ b/src/filefilter.c @@ -449,6 +449,15 @@ gboolean filter_file_class(const gchar *name, FileFormatClass file_class) return !!filter_name_find(file_class_extension_list[file_class], name); } +FileFormatClass filter_file_get_class(const gchar *name) +{ + if (filter_file_class(name, FORMAT_CLASS_IMAGE)) return FORMAT_CLASS_IMAGE; + if (filter_file_class(name, FORMAT_CLASS_RAWIMAGE)) return FORMAT_CLASS_RAWIMAGE; + if (filter_file_class(name, FORMAT_CLASS_META)) return FORMAT_CLASS_META; + if (filter_file_class(name, FORMAT_CLASS_VIDEO)) return FORMAT_CLASS_VIDEO; + return FORMAT_CLASS_UNKNOWN; +} + gboolean filter_name_is_writable(const gchar *name) { return !!filter_name_find(file_writable_list, name); diff --git a/src/filefilter.h b/src/filefilter.h index 294d30e1..06140b33 100644 --- a/src/filefilter.h +++ b/src/filefilter.h @@ -48,6 +48,7 @@ GList *filter_to_list(const gchar *extensions); const gchar *registered_extension_from_path(const gchar *name); gboolean filter_name_exists(const gchar *name); gboolean filter_file_class(const gchar *name, FileFormatClass file_class); +FileFormatClass filter_file_get_class(const gchar *name); gboolean filter_name_is_writable(const gchar *name); gboolean filter_name_allow_sidecar(const gchar *name); diff --git a/src/icons/Makefile.am b/src/icons/Makefile.am index ada6b91a..a4d2308d 100644 --- a/src/icons/Makefile.am +++ b/src/icons/Makefile.am @@ -12,6 +12,9 @@ ICONS_INLINE = \ geeqie_logo.png \ scroller.png \ sheet_broken.png \ + sheet_metadata.png \ + sheet_unknown.png \ + sheet_video.png \ icon_float.png \ icon_thumb.png \ icon_book.png \ @@ -30,6 +33,9 @@ ICONS_INLINE_PAIRS = \ icon_thumb $(srcdir)/icon_thumb.png \ icon_scroller $(srcdir)/scroller.png \ icon_broken $(srcdir)/sheet_broken.png \ + icon_metadata $(srcdir)/sheet_metadata.png \ + icon_unknown $(srcdir)/sheet_unknown.png \ + icon_video $(srcdir)/sheet_video.png \ icon_book $(srcdir)/icon_book.png \ icon_config $(srcdir)/icon_config.png \ icon_tools $(srcdir)/icon_tools.png \ diff --git a/src/icons/sheet_metadata.png b/src/icons/sheet_metadata.png new file mode 100644 index 00000000..846b53c0 Binary files /dev/null and b/src/icons/sheet_metadata.png differ diff --git a/src/icons/sheet_unknown.png b/src/icons/sheet_unknown.png new file mode 100644 index 00000000..be518619 Binary files /dev/null and b/src/icons/sheet_unknown.png differ diff --git a/src/icons/sheet_video.png b/src/icons/sheet_video.png new file mode 100644 index 00000000..732dcab2 Binary files /dev/null and b/src/icons/sheet_video.png differ diff --git a/src/icons/svg/Makefile.am b/src/icons/svg/Makefile.am index 2e15ef17..c79080a6 100644 --- a/src/icons/svg/Makefile.am +++ b/src/icons/svg/Makefile.am @@ -12,6 +12,9 @@ svg_images = \ icon_view.svg \ sheet_blank.svg \ sheet_broken.svg \ + sheet_metadata.svg \ + sheet_unknown.svg \ + sheet_video.svg \ spinner_orbit.svg EXTRA_DIST = $(svg_images) diff --git a/src/icons/svg/sheet_metadata.svg b/src/icons/svg/sheet_metadata.svg new file mode 100644 index 00000000..a66dd0a8 --- /dev/null +++ b/src/icons/svg/sheet_metadata.svg @@ -0,0 +1,102 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + 0101 0110 1011 0101 0101 diff --git a/src/icons/svg/sheet_unknown.svg b/src/icons/svg/sheet_unknown.svg new file mode 100644 index 00000000..47d788ad --- /dev/null +++ b/src/icons/svg/sheet_unknown.svg @@ -0,0 +1,102 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + ??? diff --git a/src/icons/svg/sheet_video.svg b/src/icons/svg/sheet_video.svg new file mode 100644 index 00000000..6bbd2572 --- /dev/null +++ b/src/icons/svg/sheet_video.svg @@ -0,0 +1,100 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/src/image.c b/src/image.c index 2be32c5e..de441010 100644 --- a/src/image.c +++ b/src/image.c @@ -671,7 +671,21 @@ static void image_load_done_cb(ImageLoader *il, gpointer data) { GdkPixbuf *pixbuf; - pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); + switch (imd->image_fd->format_class) + { + case FORMAT_CLASS_UNKNOWN: + pixbuf = pixbuf_inline(PIXBUF_INLINE_UNKNOWN); + break; + case FORMAT_CLASS_META: + pixbuf = pixbuf_inline(PIXBUF_INLINE_METADATA); + break; + case FORMAT_CLASS_VIDEO: + pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO); + break; + default: + pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); + } + image_change_pixbuf(imd, pixbuf, image_zoom_get(imd), FALSE); g_object_unref(pixbuf); diff --git a/src/pixbuf_util.c b/src/pixbuf_util.c index 024e5bac..acefbdd3 100644 --- a/src/pixbuf_util.c +++ b/src/pixbuf_util.c @@ -108,6 +108,9 @@ static PixbufInline inline_pixbuf_data[] = { { PIXBUF_INLINE_FOLDER_UP, folder_up }, { PIXBUF_INLINE_SCROLLER, icon_scroller }, { PIXBUF_INLINE_BROKEN, icon_broken }, + { PIXBUF_INLINE_METADATA, icon_metadata }, + { PIXBUF_INLINE_UNKNOWN, icon_unknown }, + { PIXBUF_INLINE_VIDEO, icon_video }, { PIXBUF_INLINE_ICON, gqview_icon }, { PIXBUF_INLINE_LOGO, geeqie_logo }, { PIXBUF_INLINE_ICON_FLOAT, icon_float }, @@ -238,7 +241,22 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h, GdkPixbuf *pixbuf_fallback(FileData *fd, gint requested_width, gint requested_height) { - GdkPixbuf *pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); /* FIXME use different images according to FORMAT_CLASS */ + GdkPixbuf *pixbuf; + + switch (fd->format_class) + { + case FORMAT_CLASS_UNKNOWN: + pixbuf = pixbuf_inline(PIXBUF_INLINE_UNKNOWN); + break; + case FORMAT_CLASS_META: + pixbuf = pixbuf_inline(PIXBUF_INLINE_METADATA); + break; + case FORMAT_CLASS_VIDEO: + pixbuf = pixbuf_inline(PIXBUF_INLINE_VIDEO); + break; + default: + pixbuf = pixbuf_inline(PIXBUF_INLINE_BROKEN); + } if (requested_width && requested_height) { diff --git a/src/pixbuf_util.h b/src/pixbuf_util.h index 4cc5c6c7..2cf1d8c7 100644 --- a/src/pixbuf_util.h +++ b/src/pixbuf_util.h @@ -40,6 +40,9 @@ gboolean pixbuf_scale_aspect(gint req_w, gint req_h, gint old_w, gint old_h, gin #define PIXBUF_INLINE_FOLDER_UP "folder_up" #define PIXBUF_INLINE_SCROLLER "scroller" #define PIXBUF_INLINE_BROKEN "broken" +#define PIXBUF_INLINE_METADATA "metadata" +#define PIXBUF_INLINE_UNKNOWN "unknown" +#define PIXBUF_INLINE_VIDEO "video" #define PIXBUF_INLINE_ICON "icon" #define PIXBUF_INLINE_LOGO "logo" diff --git a/src/preferences.c b/src/preferences.c index e01a61d9..d8f86ce9 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -106,7 +106,8 @@ static gchar *format_class_list[] = { N_("Unknown"), N_("Image"), N_("RAW Image"), - N_("Metadata") + N_("Metadata"), + N_("Video") }; /* config memory values */ diff --git a/src/typedefs.h b/src/typedefs.h index 2aef5582..7cf066a5 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -133,6 +133,7 @@ typedef enum { FORMAT_CLASS_IMAGE, FORMAT_CLASS_RAWIMAGE, FORMAT_CLASS_META, + FORMAT_CLASS_VIDEO, FILE_FORMAT_CLASSES } FileFormatClass; @@ -546,6 +547,7 @@ struct _FileData { const gchar *name; const gchar *extension; gchar *extended_extension; + FileFormatClass format_class; gchar *collate_key_name; gchar *collate_key_name_nocase; gint64 size;