49 return strcmp(am->name(am), bm->name(bm));
56 return strcmp(am->name(), bm->name());
86 const char *module_name)
90#define INCLUDE_API_FROM_MODULE_LOAD "imageio_load_module_format"
99 module->gui_init = _default_format_gui_init;
101 if(
IS_NULL_PTR(module->dimension))
module->dimension = _default_format_dimension;
102 if(
IS_NULL_PTR(module->flags))
module->flags = _default_format_flags;
103 if(
IS_NULL_PTR(module->levels))
module->levels = _default_format_levels;
105 module->widget = NULL;
107 module->ready = TRUE;
109 module->init(module);
124 char moduledir[
PATH_MAX] = { 0 }, plugin_name[256];
127 g_strlcat(moduledir,
"/plugins/imageio/format",
sizeof(moduledir));
128 GDir *dir = g_dir_open(moduledir, 0, NULL);
132 while((d_name = g_dir_read_name(dir)))
137 g_strlcpy(plugin_name, d_name + name_offset, strlen(d_name) - name_end + 1);
138 module = (dt_imageio_module_format_t *)malloc(sizeof(dt_imageio_module_format_t));
139 gchar *libname = g_module_build_path(moduledir, (
const gchar *)plugin_name);
145 module->gui_data = NULL;
147 module->gui_init(module);
149 if(module->widget) g_object_ref_sink(module->widget);
177 const char *module_name)
181#define INCLUDE_API_FROM_MODULE_LOAD "imageio_load_module_storage"
186 if(
IS_NULL_PTR(module->gui_init))
goto api_h_error;
190 module->gui_init = _default_storage_nop;
192 if(
IS_NULL_PTR(module->dimension))
module->dimension = _default_storage_dimension;
193 if(
IS_NULL_PTR(module->recommended_dimension))
module->recommended_dimension = _default_storage_dimension;
194 if(!module->export_dispatched)
module->export_dispatched = _default_storage_nop;
196 module->widget = NULL;
197 module->init(module);
205 char moduledir[
PATH_MAX] = { 0 }, plugin_name[256];
208 g_strlcat(moduledir,
"/plugins/imageio/storage",
sizeof(moduledir));
209 GDir *dir = g_dir_open(moduledir, 0, NULL);
213 while((d_name = g_dir_read_name(dir)))
218 g_strlcpy(plugin_name, d_name + name_offset, strlen(d_name) - name_end + 1);
219 module = (dt_imageio_module_storage_t *)malloc(sizeof(dt_imageio_module_storage_t));
220 gchar *libname = g_module_build_path(moduledir, (
const gchar *)plugin_name);
226 module->gui_data = NULL;
227 module->gui_init(module);
228 if(module->widget) g_object_ref_sink(module->widget);
250 module->gui_cleanup(module);
251 module->cleanup(module);
252 if(module->widget) g_object_unref(module->widget);
253 if(module->module) g_module_close(module->module);
260 module->gui_cleanup(module);
261 if(module->widget) g_object_unref(module->widget);
262 if(module->module) g_module_close(module->module);
299 if(!strcmp(module->plugin_name,
name))
return module;
311 if(!strcmp(module->plugin_name,
name))
return module;
362 snprintf( sep, 4,
"%g", (
double) 3/2);
364 while(scale_str[++
i])
366 if ((scale_str[
i] ==
'.') || (scale_str[
i] ==
',')) scale_str[
i] = sep[1];
369 gchar *pdiv = strchr(scale_str,
'/');
373 _num = atof(scale_str);
376 else if (pdiv-scale_str == 0)
379 _denum = atof(pdiv + 1);
383 _num = atof(scale_str);
384 _denum = atof(pdiv+1);
387 if (_num == 0.0) _num = 1.0;
388 if (_denum == 0.0) _denum = 1.0;
#define SHARED_MODULE_SUFFIX
#define SHARED_MODULE_PREFIX
gchar * dt_conf_get_string(const char *name)
void dt_conf_set_string(const char *name, const char *val)
const char * dt_conf_get_string_const(const char *name)
#define IS_NULL_PTR(p)
C is way too permissive with !=, == and if(var) checks, which can mean too many things depending on w...
void dt_loc_get_moduledir(char *moduledir, size_t bufsize)
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 DT_DEBUG_CONTROL_SIGNAL_RAISE(ctlsig, signal,...)
@ DT_SIGNAL_IMAGEIO_STORAGE_CHANGE
This signal is raised when a new storage module is loaded noparameters no return.
struct dt_imageio_t * imageio
struct dt_gui_gtk_t * gui
struct dt_control_signal_t * signals