Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions data/darktableconfig.xml.in
Original file line number Diff line number Diff line change
Expand Up @@ -1022,6 +1022,13 @@
<shortdescription/>
<longdescription/>
</dtconfig>
<dtconfig>
<name>ui_last/styles_preview_mode</name>
<type>int</type>
<default>1</default>
<shortdescription/>
<longdescription/>
</dtconfig>
<dtconfig>
<name>ui_last/metadata_dialog_width</name>
<type>int</type>
Expand Down Expand Up @@ -2377,6 +2384,12 @@
<default>250</default>
<shortdescription>max style preview size</shortdescription>
</dtconfig>
<dtconfig>
<name>ui/style/large_preview_size</name>
<type min="100" max="800">int</type>
<default>500</default>
<shortdescription/>
</dtconfig>
<dtconfig>
<name>ui_last/expander_metadata</name>
<type>int</type>
Expand Down
6 changes: 6 additions & 0 deletions src/common/styles.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ typedef enum dt_style_applymode_t
DT_STYLE_HISTORY_OVERWRITE = 1
} dt_style_applymode_t;

typedef enum dt_style_previewmode_t {
DT_STYLE_PREVIEW_NO,
DT_STYLE_PREVIEW_DEFAULT,
DT_STYLE_PREVIEW_LARGE
} dt_style_previewmode;

typedef struct dt_style_item_t
{
int num, selimg_num, enabled, multi_priority;
Expand Down
2 changes: 1 addition & 1 deletion src/gui/styles.h
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ gboolean dt_gui_styles_dialog_new(const dt_imgid_t imgid);
/** shows a dialog for editing existing style */
void dt_gui_styles_dialog_edit(const char *name, char **new_name);

cairo_surface_t *dt_gui_get_style_preview(const dt_imgid_t imgid, const char *name);
cairo_surface_t *dt_gui_get_style_preview(const dt_imgid_t imgid, const char *name, const int psize);

GtkWidget *dt_gui_style_content_dialog(char *name, const dt_imgid_t imgid);

Expand Down
38 changes: 24 additions & 14 deletions src/gui/styles_dialog.c
Original file line number Diff line number Diff line change
Expand Up @@ -886,18 +886,19 @@ typedef struct _preview_data_t
cairo_surface_t *surface;
guint8 *hash;
int hash_len;
int psize;
} _preview_data_t;

static gboolean _preview_draw(GtkWidget *widget, cairo_t *cr, gpointer user_data)
{
_preview_data_t *data = (_preview_data_t *)user_data;

if(dt_is_valid_imgid(data->imgid) && !data->first_draw && !data->surface)
data->surface = dt_gui_get_style_preview(data->imgid, data->style_name);
data->surface = dt_gui_get_style_preview(data->imgid, data->style_name, data->psize);

if(data->surface)
{
const int psize = dt_conf_get_int("ui/style/preview_size");
const int psize = data->psize;
const int swidth = cairo_image_surface_get_width(data->surface);
const int sheight = cairo_image_surface_get_height(data->surface);
cairo_set_source_surface(cr, data->surface, .5f * (psize - swidth), .5f * (psize - sheight));
Expand All @@ -914,7 +915,7 @@ static gboolean _preview_draw(GtkWidget *widget, cairo_t *cr, gpointer user_data

GtkWidget *dt_gui_style_content_dialog(char *name, const dt_imgid_t imgid)
{
static _preview_data_t data = { "", -1, FALSE, NULL, NULL, 0};
static _preview_data_t data = { "", -1, FALSE, NULL, NULL, 0, 0};

dt_history_hash_values_t hash = { NULL, 0, NULL, 0, NULL, 0 };
dt_history_hash_read(imgid, &hash);
Expand Down Expand Up @@ -1021,24 +1022,33 @@ GtkWidget *dt_gui_style_content_dialog(char *name, const dt_imgid_t imgid)
if(dt_is_valid_imgid(imgid))
{
gtk_box_pack_start(GTK_BOX(ht), gtk_separator_new(GTK_ORIENTATION_HORIZONTAL), TRUE, TRUE, 0);

const int preview_mode = dt_conf_get_int("ui_last/styles_preview_mode");
// style preview
const int psize = dt_conf_get_int("ui/style/preview_size");
GtkWidget *da = gtk_drawing_area_new();
gtk_widget_set_size_request(da, psize, psize);
gtk_widget_set_halign(da, GTK_ALIGN_CENTER);
gtk_widget_set_app_paintable(da, TRUE);
gtk_box_pack_start(GTK_BOX(ht), da, TRUE, TRUE, 0);
data.first_draw = TRUE;
g_signal_connect(G_OBJECT(da), "draw", G_CALLBACK(_preview_draw), &data);
if(preview_mode != DT_STYLE_PREVIEW_NO)
{
if(preview_mode == DT_STYLE_PREVIEW_LARGE)
{
data.psize = dt_conf_get_int("ui/style/large_preview_size");
}
else
{
data.psize = dt_conf_get_int("ui/style/preview_size");
}
GtkWidget *da = gtk_drawing_area_new();
gtk_widget_set_size_request(da, data.psize, data.psize);
gtk_widget_set_halign(da, GTK_ALIGN_CENTER);
gtk_widget_set_app_paintable(da, TRUE);
gtk_box_pack_start(GTK_BOX(ht), da, TRUE, TRUE, 0);
data.first_draw = TRUE;
g_signal_connect(G_OBJECT(da), "draw", G_CALLBACK(_preview_draw), &data);
}
}

return ht;
}

cairo_surface_t *dt_gui_get_style_preview(const dt_imgid_t imgid, const char *name)
cairo_surface_t *dt_gui_get_style_preview(const dt_imgid_t imgid, const char *name, const int psize)
{
const int psize = dt_conf_get_int("ui/style/preview_size");
cairo_surface_t *surface = dt_imageio_preview(imgid, psize, psize, -1, name);
return surface;
}
Expand Down
26 changes: 22 additions & 4 deletions src/libs/styles.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ typedef struct dt_lib_styles_t
GtkTreeView *tree;
GtkWidget *create_button, *edit_button, *delete_button;
GtkWidget *import_button, *export_button, *applymode, *apply_button;
GtkWidget *preview_mode;
} dt_lib_styles_t;


const char *name(dt_lib_module_t *self)
{
return _("styles");
Expand Down Expand Up @@ -159,7 +159,7 @@ gboolean _styles_tooltip_callback(GtkWidget* widget,
imgid = GPOINTER_TO_INT(selected_image->data);
g_list_free(selected_image);
}

GtkWidget *ht = dt_gui_style_content_dialog(name, imgid);
dt_action_define(&darktable.control->actions_global, "styles", name, widget, NULL);

Expand Down Expand Up @@ -770,6 +770,12 @@ static void _applymode_combobox_changed(GtkWidget *widget, gpointer user_data)
dt_conf_set_int("plugins/lighttable/style/applymode", mode);
}

static void _previewmode_combobox_changed(GtkWidget *widget, gpointer user_data)
{
const int mode = dt_bauhaus_combobox_get(widget);
dt_conf_set_int("ui_last/styles_preview_mode", mode);
}

void gui_update(dt_lib_module_t *self)
{
dt_lib_styles_t *d = self->data;
Expand Down Expand Up @@ -861,7 +867,6 @@ void gui_init(dt_lib_module_t *self)
g_signal_connect(d->entry, "changed", G_CALLBACK(_entry_callback), d);
g_signal_connect(d->entry, "activate", G_CALLBACK(_entry_activated), d);


d->duplicate = gtk_check_button_new_with_label(_("create duplicate"));
dt_action_define(DT_ACTION(self), NULL, N_("create duplicate"),
d->duplicate, &dt_action_def_toggle);
Expand All @@ -872,6 +877,19 @@ void gui_init(dt_lib_module_t *self)
gtk_widget_set_tooltip_text(d->duplicate,
_("creates a duplicate of the image before applying style"));

DT_BAUHAUS_COMBOBOX_NEW_FULL(d->preview_mode, self, NULL, N_("preview"),
_("change size or hide preview on tooltip of style"),
dt_conf_get_int("ui_last/styles_preview_mode"),
_previewmode_combobox_changed, self,
N_("no"), N_("default"), N_("large"));

GtkWidget *box = dt_gui_hbox();
dt_gui_box_add(box, d->duplicate);
gtk_widget_set_halign(d->duplicate, GTK_ALIGN_START);
gtk_widget_set_hexpand(d->duplicate, TRUE);
dt_gui_box_add(box, d->preview_mode);
gtk_widget_set_halign(d->preview_mode, GTK_ALIGN_END);

DT_BAUHAUS_COMBOBOX_NEW_FULL(d->applymode, self, NULL, N_("mode"),
_("how to handle existing history"),
dt_conf_get_int("plugins/lighttable/style/applymode"),
Expand Down Expand Up @@ -925,7 +943,7 @@ void gui_init(dt_lib_module_t *self)
self->widget = dt_gui_vbox
(d->entry,
dt_ui_resize_wrap(GTK_WIDGET(d->tree), 250, "plugins/lighttable/style/windowheight"),
d->duplicate, d->applymode,
box, d->applymode,
dt_gui_hbox(d->create_button, d->edit_button, d->delete_button),
dt_gui_hbox(d->import_button, d->export_button),
d->apply_button);
Expand Down
Loading