From d33e0f6aaf3be452f96a68c7424fe05a433d3144 Mon Sep 17 00:00:00 2001 From: Colin Clark Date: Wed, 13 Sep 2017 11:21:58 +0100 Subject: [PATCH] Ref #510: Rudimentary video support https://github.com/BestImageViewer/geeqie/issues/510 Implement icons for FORMAT_CLASS --- src/filedata.c | 1 + src/filefilter.c | 9 +++ src/filefilter.h | 1 + src/icons/Makefile.am | 6 ++ src/icons/sheet_metadata.png | Bin 0 -> 1827 bytes src/icons/sheet_unknown.png | Bin 0 -> 1184 bytes src/icons/sheet_video.png | Bin 0 -> 1829 bytes src/icons/svg/Makefile.am | 3 + src/icons/svg/sheet_metadata.svg | 102 +++++++++++++++++++++++++++++++ src/icons/svg/sheet_unknown.svg | 102 +++++++++++++++++++++++++++++++ src/icons/svg/sheet_video.svg | 100 ++++++++++++++++++++++++++++++ src/image.c | 16 ++++- src/pixbuf_util.c | 20 +++++- src/pixbuf_util.h | 3 + src/preferences.c | 3 +- src/typedefs.h | 2 + 16 files changed, 365 insertions(+), 3 deletions(-) create mode 100644 src/icons/sheet_metadata.png create mode 100644 src/icons/sheet_unknown.png create mode 100644 src/icons/sheet_video.png create mode 100644 src/icons/svg/sheet_metadata.svg create mode 100644 src/icons/svg/sheet_unknown.svg create mode 100644 src/icons/svg/sheet_video.svg 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 0000000000000000000000000000000000000000..846b53c01a0d8927e454e24e2b56a25b95d33c66 GIT binary patch literal 1827 zcmV+;2i*9HP) z*d-vlvdezIyZvKz>jtv0Z@^7EK7XEj&OPUud(OSj`@%hh7s5E}tAYEbDECd^25=ED zO5G$Vfs~ZwzMVU_PYD5!$K%%Nu3Kws>qqqZ{uaI7PzZQK-6t~GqFgR_l$5+ExyT9R zRs-syqT(dAI{H9cTgT5r-9$F|b%l;!6R>L@742VmK<$A#s~mlXpU6O9im z0k7AK&1OfXQu=Ls_LN5E=Pzzxf~^!*0_V?vMqb{M09&Z76!aRMYPj8Q>g&%@Q*#ET zQb}&^BP?8) zF91$9cJs*mL@ZXP-*0Hx!8;#Z=JdO3NJ)z3&_7xMsH)TQSoSPz4l!sRwOWl#CX1a^ z0#26)o5M|ZY8-`2XVcO?1i(*L&0}@m+yLKe-6kHImq`2!1wUFmo0j$)0PNV1LrzA* zxVa)DBLHFAq!RFkpxW>B6@-xG{2>_J6yp;8?pJ4CdOO$T*&Dep; zt86Q)!|oJ$>Xnbt>CGg>D%kSu0={2-6iug*&1-y;|J8k;aWVY6P2}{lpVed!2SviyZ+e3->Wfc*S>ishU>>t%>d3*cg?0sn|O;`F6J<^6)5&@e-M5%~C5CmdlqPS`CU71RG z#3)}u5Ku&owhxaum@z#HK@dM!S(oE&}L0>^)tP;Zw z8*b5q)$V4xLYl6W6eS1(&lIFm^!f<~j5fBeTL8cZC)@eksSaAZjBI?fn%!G{pNqeI z_Z+QVL+sf1DbKA;=lNChDEV9+3D%G+#-qpg}$maB8t8qzdvcZ|HLk}4Pv%B$$RKNWU{eK8SfpC{5>F(2|SUL z9AHa`Rge&?80EVtJ$}qRCL-p>t>c>n51QrL)y0kt zInpb?1xW-1L15GB`9w_%yx+Bb!z@UfNrX%wb50yxx729SiZs4@UlgrK8*^Sl#iWY4 zs7M)3m#@!VZV&QlQ?C^zXK1|APq)F$Rjm(@?mW!u`zOtW(TL5dH{H_@VjI@ z7|Xu$X8!Q%4~SMxV`$h;Wv!OntnbjI`H~B*UjlIY{B?$g9mK}SsrclJdml9av$#hf z+z6_LL{W^;YIS$3mNC)Ws}H&!lz_+MsaU)Ah4e|SNCKQrS7o?sxQG8+{0B&Bro0qL Re#`&>002ovPDHLkV1jN9dOQFC literal 0 HcmV?d00001 diff --git a/src/icons/sheet_unknown.png b/src/icons/sheet_unknown.png new file mode 100644 index 0000000000000000000000000000000000000000..be518619aaed2a4208c58c369ffc2a73050d4d6f GIT binary patch literal 1184 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 + + + + + + + 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; -- 2.20.1