54 return strcmp(am->name(am), bm->name(bm));
61 return strcmp(am->name(), bm->name());
91 const char *module_name)
95#define INCLUDE_API_FROM_MODULE_LOAD "imageio_load_module_format"
100 if(
IS_NULL_PTR(module->gui_init))
goto api_h_error;
104 module->gui_init = _default_format_gui_init;
106 if(
IS_NULL_PTR(module->dimension))
module->dimension = _default_format_dimension;
107 if(
IS_NULL_PTR(module->flags))
module->flags = _default_format_flags;
108 if(
IS_NULL_PTR(module->levels))
module->levels = _default_format_levels;
110 module->widget = NULL;
112 module->ready = TRUE;
114 module->init(module);
136 const char *plugin_name = *
name;
137 module = (dt_imageio_module_format_t *)malloc(sizeof(dt_imageio_module_format_t));
138 gchar *libname = g_module_build_path(moduledir, plugin_name);
146 module->gui_data = NULL;
148 module->gui_init(module);
150 if(module->widget) g_object_ref_sink(module->widget);
153 g_strfreev(plugin_names);
178 const char *module_name)
182#define INCLUDE_API_FROM_MODULE_LOAD "imageio_load_module_storage"
187 if(
IS_NULL_PTR(module->gui_init))
goto api_h_error;
191 module->gui_init = _default_storage_nop;
193 if(
IS_NULL_PTR(module->dimension))
module->dimension = _default_storage_dimension;
194 if(
IS_NULL_PTR(module->recommended_dimension))
module->recommended_dimension = _default_storage_dimension;
195 if(!module->export_dispatched)
module->export_dispatched = _default_storage_nop;
197 module->widget = NULL;
198 module->init(module);
213 const char *plugin_name = *
name;
214 module = (dt_imageio_module_storage_t *)malloc(sizeof(dt_imageio_module_storage_t));
215 gchar *libname = g_module_build_path(moduledir, plugin_name);
223 module->gui_data = NULL;
224 module->gui_init(module);
225 if(module->widget) g_object_ref_sink(module->widget);
228 g_strfreev(plugin_names);
247 module->gui_cleanup(module);
248 module->cleanup(module);
249 if(module->widget) g_object_unref(module->widget);
250 if(module->module) g_module_close(module->module);
257 module->gui_cleanup(module);
258 if(module->widget) g_object_unref(module->widget);
259 if(module->module) g_module_close(module->module);
296 if(!strcmp(module->plugin_name,
name))
return module;
308 if(!strcmp(module->plugin_name,
name))
return module;
359 snprintf( sep, 4,
"%g", (
double) 3/2);
361 while(scale_str[++
i])
363 if ((scale_str[
i] ==
'.') || (scale_str[
i] ==
',')) scale_str[
i] = sep[1];
366 gchar *pdiv = strchr(scale_str,
'/');
370 _num = atof(scale_str);
373 else if (pdiv-scale_str == 0)
376 _denum = atof(pdiv + 1);
380 _num = atof(scale_str);
381 _denum = atof(pdiv+1);
384 if (_num == 0.0) _num = 1.0;
385 if (_denum == 0.0) _denum = 1.0;
gchar * dt_conf_get_string(const char *name)
Read the stored string for name as a private copy.
void dt_conf_set_string(const char *name, const char *val)
const char * dt_conf_get_string_const(const char *name)
Borrow the stored string for name without copying it.
struct dt_imageio_t * dt_imageio_get_global(void)
struct dt_gui_gtk_t * dt_gui_get_global(void)
static gint dt_imageio_sort_modules_format(gconstpointer a, gconstpointer b)
static void _default_format_gui_init(struct dt_imageio_module_format_t *self)
dt_imageio_module_storage_t * dt_imageio_get_storage_by_index(int index)
void dt_imageio_cleanup(dt_imageio_t *iio)
static int dt_imageio_load_modules_storage(dt_imageio_t *iio)
void dt_imageio_remove_storage(dt_imageio_module_storage_t *storage)
dt_imageio_module_storage_t * dt_imageio_get_storage()
static int _default_format_flags(dt_imageio_module_data_t *data)
int dt_imageio_get_index_of_format(dt_imageio_module_format_t *format)
static int dt_imageio_load_module_format(dt_imageio_module_format_t *module, const char *libname, const char *module_name)
static int _default_format_levels(dt_imageio_module_data_t *data)
int dt_imageio_get_index_of_storage(dt_imageio_module_storage_t *storage)
static gboolean default_supported(struct dt_imageio_module_storage_t *self, struct dt_imageio_module_format_t *format)
dt_imageio_module_format_t * dt_imageio_get_format_by_index(int index)
gchar * dt_imageio_resizing_factor_get_and_parsing(double *num, double *denum)
static int _default_storage_dimension(struct dt_imageio_module_storage_t *self, dt_imageio_module_data_t *data, uint32_t *width, uint32_t *height)
dt_imageio_module_format_t * dt_imageio_get_format()
static int dt_imageio_load_module_storage(dt_imageio_module_storage_t *module, const char *libname, const char *module_name)
void dt_imageio_init(dt_imageio_t *iio)
void dt_imageio_insert_storage(dt_imageio_module_storage_t *storage)
static void _default_storage_nop(struct dt_imageio_module_storage_t *self)
dt_imageio_module_format_t * dt_imageio_get_format_by_name(const char *name)
static gint dt_imageio_sort_modules_storage(gconstpointer a, gconstpointer b)
static int dt_imageio_load_modules_format(dt_imageio_t *iio)
dt_imageio_module_storage_t * dt_imageio_get_storage_by_name(const char *name)
static int _default_format_dimension(dt_imageio_module_format_t *module, dt_imageio_module_data_t *data, uint32_t *width, uint32_t *height)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
#define dt_free(ptr)
g_free() ptr and set it to NULL, skipping both if it is already NULL.
gchar ** dt_module_read_manifest(const char *subdir, char *moduledir)
Read a module directory's manifest and return the module base names it lists.
#define DT_PATH_MAX
Buffer size for a filesystem path anywhere in Ansel.
#define DT_DEBUG_CONTROL_SIGNAL_RAISE(ctlsig, signal,...)
struct dt_control_signal_t * dt_control_signal_get_global(void)
@ DT_SIGNAL_IMAGEIO_STORAGE_CHANGE
This signal is raised when a new storage module is loaded noparameters no return.