[gimp/alxsa-simulation-profile-new-image] core: Add simulation settings to Create New Image
- From: Alx Sa <sawyeralex src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp/alxsa-simulation-profile-new-image] core: Add simulation settings to Create New Image
- Date: Sun, 14 Aug 2022 17:07:02 +0000 (UTC)
commit 4d71a7ba2b0187132e57052a92373035d8076a06
Author: Alx Sa <cmyk student gmail com>
Date: Sat Aug 6 04:42:46 2022 +0000
core: Add simulation settings to Create New Image
Adds a dropdown for Simulation Profile, Intent, and BPC
to the Create a New Image dialog.
This allows users to assign a soft-proofing profile when the image is
first created. It defaults to "None", however. Users can also set the
default simulation rendering intent and BPC status per image.
These options are also removed from the Preferences dialog.
app/core/gimpimage-new.c | 24 +++++--
app/core/gimptemplate.c | 113 ++++++++++++++++++++++++++++----
app/core/gimptemplate.h | 5 ++
app/dialogs/preferences-dialog.c | 19 ------
app/widgets/gimptemplateeditor.c | 135 ++++++++++++++++++++++++++++++++++++++-
5 files changed, 256 insertions(+), 40 deletions(-)
---
diff --git a/app/core/gimpimage-new.c b/app/core/gimpimage-new.c
index bd442d1072..2c89c15661 100644
--- a/app/core/gimpimage-new.c
+++ b/app/core/gimpimage-new.c
@@ -92,12 +92,14 @@ gimp_image_new_from_template (Gimp *gimp,
GimpTemplate *template,
GimpContext *context)
{
- GimpImage *image;
- GimpLayer *layer;
- GimpColorProfile *profile;
- gint width, height;
- gboolean has_alpha;
- const gchar *comment;
+ GimpImage *image;
+ GimpLayer *layer;
+ GimpColorProfile *profile;
+ GimpColorRenderingIntent intent;
+ gboolean bpc;
+ gint width, height;
+ gboolean has_alpha;
+ const gchar *comment;
g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL);
g_return_val_if_fail (GIMP_IS_TEMPLATE (template), NULL);
@@ -136,6 +138,16 @@ gimp_image_new_from_template (Gimp *gimp,
if (profile)
g_object_unref (profile);
+ profile = gimp_template_get_simulation_profile (template);
+ gimp_image_set_simulation_profile (image, profile);
+ if (profile)
+ g_object_unref (profile);
+
+ intent = gimp_template_get_simulation_intent (template);
+ gimp_image_set_simulation_intent (image, intent);
+ bpc = gimp_template_get_simulation_bpc (template);
+ gimp_image_set_simulation_bpc (image, bpc);
+
width = gimp_image_get_width (image);
height = gimp_image_get_height (image);
diff --git a/app/core/gimptemplate.c b/app/core/gimptemplate.c
index 71a75ff578..148a40cf2e 100644
--- a/app/core/gimptemplate.c
+++ b/app/core/gimptemplate.c
@@ -59,6 +59,9 @@ enum
PROP_LINEAR,
PROP_TRC,
PROP_COLOR_PROFILE,
+ PROP_SIMULATION_PROFILE,
+ PROP_SIMULATION_BPC,
+ PROP_SIMULATION_INTENT,
PROP_FILL_TYPE,
PROP_COMMENT,
PROP_FILENAME,
@@ -72,23 +75,26 @@ typedef struct _GimpTemplatePrivate GimpTemplatePrivate;
struct _GimpTemplatePrivate
{
- gint width;
- gint height;
- GimpUnit unit;
+ gint width;
+ gint height;
+ GimpUnit unit;
- gdouble xresolution;
- gdouble yresolution;
- GimpUnit resolution_unit;
+ gdouble xresolution;
+ gdouble yresolution;
+ GimpUnit resolution_unit;
- GimpImageBaseType base_type;
- GimpPrecision precision;
+ GimpImageBaseType base_type;
+ GimpPrecision precision;
- GFile *color_profile;
+ GFile *color_profile;
+ GFile *simulation_profile;
+ GimpColorRenderingIntent simulation_intent;
+ gboolean simulation_bpc;
- GimpFillType fill_type;
+ GimpFillType fill_type;
- gchar *comment;
- gchar *filename;
+ gchar *comment;
+ gchar *filename;
guint64 initial_size;
};
@@ -217,6 +223,28 @@ gimp_template_class_init (GimpTemplateClass *klass)
G_TYPE_FILE,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_PROP_OBJECT (object_class, PROP_SIMULATION_PROFILE,
+ "simulation-profile",
+ _("Simulation profile"),
+ NULL,
+ G_TYPE_FILE,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_ENUM (object_class, PROP_SIMULATION_INTENT,
+ "simulation-intent",
+ _("Simulation Rendering Intent"),
+ NULL,
+ GIMP_TYPE_COLOR_RENDERING_INTENT,
+ GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SIMULATION_BPC,
+ "simulation-bpc",
+ _("Use Black Point Compensation for Simulation"),
+ NULL,
+ FALSE,
+ GIMP_PARAM_STATIC_STRINGS);
+
GIMP_CONFIG_PROP_ENUM (object_class, PROP_FILL_TYPE,
"fill-type",
_("Fill type"),
@@ -258,6 +286,7 @@ gimp_template_finalize (GObject *object)
GimpTemplatePrivate *private = GET_PRIVATE (object);
g_clear_object (&private->color_profile);
+ g_clear_object (&private->simulation_profile);
g_clear_pointer (&private->comment, g_free);
g_clear_pointer (&private->filename, g_free);
@@ -317,6 +346,17 @@ gimp_template_set_property (GObject *object,
g_object_unref (private->color_profile);
private->color_profile = g_value_dup_object (value);
break;
+ case PROP_SIMULATION_PROFILE:
+ if (private->simulation_profile)
+ g_object_unref (private->simulation_profile);
+ private->simulation_profile = g_value_dup_object (value);
+ break;
+ case PROP_SIMULATION_INTENT:
+ private->simulation_intent = g_value_get_enum (value);
+ break;
+ case PROP_SIMULATION_BPC:
+ private->simulation_bpc = g_value_get_boolean (value);
+ break;
case PROP_FILL_TYPE:
private->fill_type = g_value_get_enum (value);
break;
@@ -384,6 +424,15 @@ gimp_template_get_property (GObject *object,
case PROP_COLOR_PROFILE:
g_value_set_object (value, private->color_profile);
break;
+ case PROP_SIMULATION_PROFILE:
+ g_value_set_object (value, private->simulation_profile);
+ break;
+ case PROP_SIMULATION_INTENT:
+ g_value_set_enum (value, private->simulation_intent);
+ break;
+ case PROP_SIMULATION_BPC:
+ g_value_set_boolean (value, private->simulation_bpc);
+ break;
case PROP_FILL_TYPE:
g_value_set_enum (value, private->fill_type);
break;
@@ -573,6 +622,46 @@ gimp_template_get_color_profile (GimpTemplate *template)
return NULL;
}
+GimpColorProfile *
+gimp_template_get_simulation_profile (GimpTemplate *template)
+{
+ GimpTemplatePrivate *private;
+
+ g_return_val_if_fail (GIMP_IS_TEMPLATE (template), FALSE);
+
+ private = GET_PRIVATE (template);
+
+ if (private->simulation_profile)
+ return gimp_color_profile_new_from_file (private->simulation_profile,
+ NULL);
+
+ return NULL;
+}
+
+GimpColorRenderingIntent
+gimp_template_get_simulation_intent (GimpTemplate *template)
+{
+ GimpTemplatePrivate *private;
+
+ g_return_val_if_fail (GIMP_IS_TEMPLATE (template), FALSE);
+
+ private = GET_PRIVATE (template);
+
+ return private->simulation_intent;
+}
+
+gboolean
+gimp_template_get_simulation_bpc (GimpTemplate *template)
+{
+ GimpTemplatePrivate *private;
+
+ g_return_val_if_fail (GIMP_IS_TEMPLATE (template), FALSE);
+
+ private = GET_PRIVATE (template);
+
+ return private->simulation_bpc;
+}
+
GimpFillType
gimp_template_get_fill_type (GimpTemplate *template)
{
diff --git a/app/core/gimptemplate.h b/app/core/gimptemplate.h
index d2bc35be9a..39ee4707e1 100644
--- a/app/core/gimptemplate.h
+++ b/app/core/gimptemplate.h
@@ -85,6 +85,11 @@ GimpImageBaseType gimp_template_get_base_type (GimpTemplate *template);
GimpPrecision gimp_template_get_precision (GimpTemplate *template);
GimpColorProfile * gimp_template_get_color_profile (GimpTemplate *template);
+GimpColorProfile * gimp_template_get_simulation_profile
+ (GimpTemplate *template);
+GimpColorRenderingIntent gimp_template_get_simulation_intent
+ (GimpTemplate *template);
+gboolean gimp_template_get_simulation_bpc (GimpTemplate *template);
GimpFillType gimp_template_get_fill_type (GimpTemplate *template);
diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c
index 35a6f7e552..656b8c7fe9 100644
--- a/app/dialogs/preferences-dialog.c
+++ b/app/dialogs/preferences-dialog.c
@@ -1423,25 +1423,6 @@ prefs_dialog_new (Gimp *gimp,
grid = prefs_grid_new (GTK_CONTAINER (vbox2));
row = 0;
- prefs_profile_combo_box_add (color_config,
- "simulation-profile",
- store,
- _("Select Soft-Proofing Color Profile"),
- _("_Soft-proofing profile:"),
- GTK_GRID (grid), row++, size_group,
- object, "color-profile-path");
-
- prefs_enum_combo_box_add (color_config,
- "simulation-rendering-intent", 0, 0,
- _("Re_ndering intent:"),
- GTK_GRID (grid), row++, size_group);
-
- button = gimp_prop_check_button_new (color_config,
- "simulation-use-black-point-compensation",
- _("Use black _point compensation"));
- gtk_grid_attach (GTK_GRID (grid), button, 1, row, 1, 1);
- row++;
-
prefs_boolean_combo_box_add (color_config,
"simulation-optimize",
_("Speed"),
diff --git a/app/widgets/gimptemplateeditor.c b/app/widgets/gimptemplateeditor.c
index 75e9e8f6b4..3aa43eaf9a 100644
--- a/app/widgets/gimptemplateeditor.c
+++ b/app/widgets/gimptemplateeditor.c
@@ -24,6 +24,7 @@
#include "libgimpmath/gimpmath.h"
#include "libgimpbase/gimpbase.h"
+#include "libgimpcolor/gimpcolor.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
@@ -76,6 +77,9 @@ struct _GimpTemplateEditorPrivate
GtkWidget *chain_button;
GtkWidget *precision_combo;
GtkWidget *profile_combo;
+ GtkWidget *simulation_profile_combo;
+ GtkWidget *simulation_intent_combo;
+ GtkWidget *simulation_bpc_toggle;
};
#define GET_PRIVATE(editor) \
@@ -95,6 +99,13 @@ static void gimp_template_editor_get_property (GObject *object,
static void gimp_template_editor_precision_changed (GtkWidget *widget,
GimpTemplateEditor *editor);
+static void gimp_template_editor_simulation_intent_changed
+ (GtkWidget *widget,
+ GimpTemplateEditor *editor);
+static void gimp_template_editor_simulation_bpc_toggled
+ (GtkWidget *widget,
+ GimpTemplateEditor *editor);
+
static void gimp_template_editor_aspect_callback (GtkWidget *widget,
GimpTemplateEditor *editor);
static void gimp_template_editor_template_notify (GimpTemplate *template,
@@ -301,10 +312,21 @@ gimp_template_editor_constructed (GObject *object)
gtk_container_add (GTK_CONTAINER (private->expander), frame);
gtk_widget_show (frame);
+ scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_set_size_request (scrolled_window, -1, 300);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled_window),
+ GTK_SHADOW_OUT);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_container_add (GTK_CONTAINER (frame), scrolled_window);
+ gtk_widget_show (scrolled_window);
+
grid = gtk_grid_new ();
gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
- gtk_container_add (GTK_CONTAINER (frame), grid);
+ gtk_container_set_border_width (GTK_CONTAINER (grid), 16);
+ gtk_container_add (GTK_CONTAINER (scrolled_window), grid);
gtk_widget_show (grid);
adjustment = gtk_adjustment_new (1, 1, 1, 1, 10, 0);
@@ -435,6 +457,42 @@ gimp_template_editor_constructed (GObject *object)
_("Co_lor profile:"), 0.0, 0.5,
private->profile_combo, 1);
+ private->simulation_profile_combo =
+ gimp_prop_profile_combo_box_new (G_OBJECT (template),
+ "simulation-profile",
+ NULL,
+ _("Choose A Soft-Proofing Color Profile"),
+ G_OBJECT (private->gimp->config),
+ "color-profile-path");
+ gimp_grid_attach_aligned (GTK_GRID (grid), 0, row++,
+ _("_Soft-proofing color profile:"), 0.0, 0.5,
+ private->simulation_profile_combo, 1);
+
+ private->simulation_intent_combo =
+ gimp_enum_combo_box_new (GIMP_TYPE_COLOR_RENDERING_INTENT);
+
+ gimp_grid_attach_aligned (GTK_GRID (grid), 0, row++,
+ _("_Soft-proofing rendering intent:"), 0.0, 0.5,
+ private->simulation_intent_combo, 1);
+
+ gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (private->simulation_intent_combo),
+ GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC);
+
+ g_signal_connect (private->simulation_intent_combo, "changed",
+ G_CALLBACK (gimp_template_editor_simulation_intent_changed),
+ editor);
+
+ private->simulation_bpc_toggle =
+ gtk_check_button_new_with_mnemonic (_("_Use Black Point Compensation"));
+
+ gimp_grid_attach_aligned (GTK_GRID (grid), 0, row++,
+ NULL, 0.0, 0.5,
+ private->simulation_bpc_toggle, 1);
+
+ g_signal_connect (private->simulation_bpc_toggle, "toggled",
+ G_CALLBACK (gimp_template_editor_simulation_bpc_toggled),
+ editor);
+
combo = gimp_prop_enum_combo_box_new (G_OBJECT (template),
"fill-type",
0, 0);
@@ -648,6 +706,35 @@ gimp_template_editor_precision_changed (GtkWidget *widget,
NULL);
}
+static void
+gimp_template_editor_simulation_intent_changed (GtkWidget *widget,
+ GimpTemplateEditor *editor)
+{
+ GimpTemplateEditorPrivate *private = GET_PRIVATE (editor);
+ GimpColorRenderingIntent intent;
+
+ gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget),
+ (gint *) &intent);
+
+ g_object_set (private->template,
+ "simulation-intent", intent,
+ NULL);
+}
+
+static void
+gimp_template_editor_simulation_bpc_toggled (GtkWidget *widget,
+ GimpTemplateEditor *editor)
+{
+ GimpTemplateEditorPrivate *private = GET_PRIVATE (editor);
+ gboolean bpc = FALSE;
+
+ bpc = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget));
+
+ g_object_set (private->template,
+ "simulation-bpc", bpc,
+ NULL);
+}
+
static void
gimp_template_editor_set_pixels (GimpTemplateEditor *editor,
GimpTemplate *template)
@@ -798,8 +885,10 @@ gimp_template_editor_template_notify (GimpTemplate *template,
! strcmp (param_spec->name, "image-type") ||
! strcmp (param_spec->name, "precision"))
{
- GtkListStore *profile_store;
- GFile *file;
+ GimpColorProfile *profile;
+ GtkListStore *profile_store;
+ GFile *file;
+ gchar *path;
file = gimp_directory_file ("profilerc", NULL);
profile_store = gimp_color_profile_store_new (file);
@@ -813,6 +902,36 @@ gimp_template_editor_template_notify (GimpTemplate *template,
gtk_combo_box_set_model (GTK_COMBO_BOX (private->profile_combo),
GTK_TREE_MODEL (profile_store));
+
+ /* Simulation Profile should not be set by default */
+ file = gimp_directory_file ("profilerc", NULL);
+ profile_store = gimp_color_profile_store_new (file);
+ g_object_unref (file);
+
+ gimp_color_profile_store_add_file (GIMP_COLOR_PROFILE_STORE (profile_store),
+ NULL, NULL);
+ /* Add Preferred CMYK profile if it exists */
+ profile =
+ gimp_color_config_get_cmyk_color_profile (GIMP_COLOR_CONFIG
(private->gimp->config->color_management),
+ NULL);
+ if (profile)
+ {
+ g_object_get (G_OBJECT (private->gimp->config->color_management),
+ "cmyk-profile", &path, NULL);
+ file = gimp_file_new_for_config_path (path, NULL);
+ g_free (path);
+ text = g_strdup_printf (_("Preferred CMYK (%s)"),
+ gimp_color_profile_get_label (profile));
+ g_object_unref (profile);
+ gimp_color_profile_store_add_file (GIMP_COLOR_PROFILE_STORE (profile_store),
+ file, text);
+ g_object_unref (file);
+ g_free (text);
+ }
+
+ gtk_combo_box_set_model (GTK_COMBO_BOX (private->simulation_profile_combo),
+ GTK_TREE_MODEL (profile_store));
+
g_object_unref (profile_store);
g_object_get (template,
@@ -824,5 +943,15 @@ gimp_template_editor_template_notify (GimpTemplate *template,
if (file)
g_object_unref (file);
+
+ g_object_get (template,
+ "simulation-profile", &file,
+ NULL);
+
+ gimp_color_profile_combo_box_set_active_file (GIMP_COLOR_PROFILE_COMBO_BOX
(private->simulation_profile_combo),
+ file, NULL);
+
+ if (file)
+ g_object_unref (file);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]