Split out fastiv-io.h, move media types list
This commit is contained in:
parent
7ca53b031e
commit
ab283d3988
|
@ -18,6 +18,7 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
#include "fastiv-browser.h"
|
#include "fastiv-browser.h"
|
||||||
|
#include "fastiv-io.h"
|
||||||
#include "fastiv-view.h"
|
#include "fastiv-view.h"
|
||||||
|
|
||||||
typedef struct entry Entry;
|
typedef struct entry Entry;
|
||||||
|
|
14
fastiv-io.c
14
fastiv-io.c
|
@ -37,6 +37,20 @@
|
||||||
#define WUFFS_CONFIG__MODULE__ZLIB
|
#define WUFFS_CONFIG__MODULE__ZLIB
|
||||||
#include "wuffs-mirror-release-c/release/c/wuffs-v0.3.c"
|
#include "wuffs-mirror-release-c/release/c/wuffs-v0.3.c"
|
||||||
|
|
||||||
|
// A subset of shared-mime-info that produces an appropriate list of
|
||||||
|
// file extensions. Chiefly motivated by the suckiness of RAW images:
|
||||||
|
// someone else will maintain the list of file extensions for us.
|
||||||
|
const char *fastiv_io_supported_media_types[] = {
|
||||||
|
"image/bmp",
|
||||||
|
"image/gif",
|
||||||
|
"image/png",
|
||||||
|
"image/jpeg",
|
||||||
|
#ifdef HAVE_LIBRAW
|
||||||
|
"image/x-dcraw",
|
||||||
|
#endif // HAVE_LIBRAW
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
||||||
|
|
||||||
#define FASTIV_IO_ERROR fastiv_io_error_quark()
|
#define FASTIV_IO_ERROR fastiv_io_error_quark()
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
//
|
||||||
|
// fastiv-io.h: image loaders
|
||||||
|
//
|
||||||
|
// Copyright (c) 2021, Přemysl Eric Janouch <p@janouch.name>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
||||||
|
// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
||||||
|
// OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||||
|
// CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <cairo.h>
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
extern const char *fastiv_io_supported_media_types[];
|
||||||
|
|
||||||
|
cairo_surface_t *fastiv_io_open(const gchar *path, GError **error);
|
||||||
|
cairo_surface_t *fastiv_io_lookup_thumbnail(const gchar *target);
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
#include "fastiv-io.h"
|
||||||
#include "fastiv-view.h"
|
#include "fastiv-view.h"
|
||||||
|
|
||||||
struct _FastivView {
|
struct _FastivView {
|
||||||
|
|
|
@ -24,7 +24,3 @@ G_DECLARE_FINAL_TYPE(FastivView, fastiv_view, FASTIV, VIEW, GtkWidget)
|
||||||
|
|
||||||
/// Try to open the given file, synchronously, to be displayed by the widget.
|
/// Try to open the given file, synchronously, to be displayed by the widget.
|
||||||
gboolean fastiv_view_open(FastivView *self, const gchar *path, GError **error);
|
gboolean fastiv_view_open(FastivView *self, const gchar *path, GError **error);
|
||||||
|
|
||||||
// Private, fastiv-io.c
|
|
||||||
cairo_surface_t *fastiv_io_open(const gchar *path, GError **error);
|
|
||||||
cairo_surface_t *fastiv_io_lookup_thumbnail(const gchar *target);
|
|
||||||
|
|
28
fastiv.c
28
fastiv.c
|
@ -27,6 +27,7 @@
|
||||||
#include <fnmatch.h>
|
#include <fnmatch.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "fastiv-io.h"
|
||||||
#include "fastiv-view.h"
|
#include "fastiv-view.h"
|
||||||
#include "fastiv-browser.h"
|
#include "fastiv-browser.h"
|
||||||
|
|
||||||
|
@ -115,21 +116,6 @@ get_xdg_data_dirs(void)
|
||||||
|
|
||||||
// Derived from shared-mime-info-spec 0.21.
|
// Derived from shared-mime-info-spec 0.21.
|
||||||
|
|
||||||
// TODO(p): Move to fastiv-io.c, expose the prototype in a header file
|
|
||||||
// (perhaps finally start a new one for it).
|
|
||||||
// A subset of shared-mime-info that produces an appropriate list of
|
|
||||||
// file extensions. Chiefly motivated by the suckiness of RAW images:
|
|
||||||
// someone else will maintain the list of file extensions for us.
|
|
||||||
static const char *supported_media_types[] = {
|
|
||||||
"image/bmp",
|
|
||||||
"image/gif",
|
|
||||||
"image/png",
|
|
||||||
"image/jpeg",
|
|
||||||
#ifdef HAVE_LIBRAW
|
|
||||||
"image/x-dcraw",
|
|
||||||
#endif // HAVE_LIBRAW
|
|
||||||
};
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
read_mime_subclasses(const gchar *path, GHashTable *subclass_sets)
|
read_mime_subclasses(const gchar *path, GHashTable *subclass_sets)
|
||||||
{
|
{
|
||||||
|
@ -189,7 +175,7 @@ filter_mime_globs(const gchar *path, guint is_globs2, GHashTable *supported_set,
|
||||||
}
|
}
|
||||||
|
|
||||||
static gchar **
|
static gchar **
|
||||||
get_supported_globs (void)
|
get_supported_globs(const char **media_types)
|
||||||
{
|
{
|
||||||
gchar **data_dirs = get_xdg_data_dirs();
|
gchar **data_dirs = get_xdg_data_dirs();
|
||||||
|
|
||||||
|
@ -208,8 +194,8 @@ get_supported_globs (void)
|
||||||
// but not aliases.
|
// but not aliases.
|
||||||
GHashTable *supported =
|
GHashTable *supported =
|
||||||
g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
|
g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
|
||||||
for (gsize i = 0; i < G_N_ELEMENTS(supported_media_types); i++) {
|
while (*media_types) {
|
||||||
add_applying_transitive_closure(supported_media_types[i],
|
add_applying_transitive_closure(*media_types++,
|
||||||
subclass_sets, supported);
|
subclass_sets, supported);
|
||||||
}
|
}
|
||||||
g_hash_table_destroy(subclass_sets);
|
g_hash_table_destroy(subclass_sets);
|
||||||
|
@ -363,8 +349,8 @@ on_open(void)
|
||||||
|
|
||||||
// NOTE: gdk-pixbuf has gtk_file_filter_add_pixbuf_formats().
|
// NOTE: gdk-pixbuf has gtk_file_filter_add_pixbuf_formats().
|
||||||
GtkFileFilter *filter = gtk_file_filter_new();
|
GtkFileFilter *filter = gtk_file_filter_new();
|
||||||
for (gsize i = 0; i < G_N_ELEMENTS(supported_media_types); i++)
|
for (const char **p = fastiv_io_supported_media_types; *p; p++)
|
||||||
gtk_file_filter_add_mime_type(filter, supported_media_types[i]);
|
gtk_file_filter_add_mime_type(filter, *p);
|
||||||
gtk_file_filter_set_name(filter, "Supported images");
|
gtk_file_filter_set_name(filter, "Supported images");
|
||||||
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
|
gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog), filter);
|
||||||
|
|
||||||
|
@ -496,7 +482,7 @@ main(int argc, char *argv[])
|
||||||
g_cclosure_new(G_CALLBACK(on_next), NULL, NULL));
|
g_cclosure_new(G_CALLBACK(on_next), NULL, NULL));
|
||||||
gtk_window_add_accel_group(GTK_WINDOW(g.window), accel_group);
|
gtk_window_add_accel_group(GTK_WINDOW(g.window), accel_group);
|
||||||
|
|
||||||
g.supported_globs = get_supported_globs();
|
g.supported_globs = get_supported_globs(fastiv_io_supported_media_types);
|
||||||
g.files = g_ptr_array_new_full(16, g_free);
|
g.files = g_ptr_array_new_full(16, g_free);
|
||||||
gchar *cwd = g_get_current_dir();
|
gchar *cwd = g_get_current_dir();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue