[gimp] app: add basic support for creating images with color profiles
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: add basic support for creating images with color profiles
- Date: Sun, 8 May 2016 21:24:53 +0000 (UTC)
commit 54c0b047b214c0579e8633792b3758d58208fa25
Author: Michael Natterer <mitch gimp org>
Date: Sun May 8 23:20:26 2016 +0200
app: add basic support for creating images with color profiles
Add "gboolean color_managed" and "GFile *color_profile" to
GimpTemplate. Add a toggle and profile combo to GimpTemplateEditor.
Honor the new template properties in gimp_image_new_from_template().
Using a GFile property instead of a GIMP_TYPE_CONFIG_PATH is
preliminary, see the previous commit. I'd like to use GFile more
directly when dealing with config files, this is for testing that.
app/core/gimpimage-new.c | 19 +++++++++---
app/core/gimptemplate.c | 58 ++++++++++++++++++++++++++++++++++++++
app/core/gimptemplate.h | 3 ++
app/widgets/gimptemplateeditor.c | 22 +++++++++++++-
4 files changed, 95 insertions(+), 7 deletions(-)
---
diff --git a/app/core/gimpimage-new.c b/app/core/gimpimage-new.c
index cbeb580..eeafca8 100644
--- a/app/core/gimpimage-new.c
+++ b/app/core/gimpimage-new.c
@@ -90,11 +90,12 @@ gimp_image_new_from_template (Gimp *gimp,
GimpTemplate *template,
GimpContext *context)
{
- GimpImage *image;
- GimpLayer *layer;
- gint width, height;
- gboolean has_alpha;
- const gchar *comment;
+ GimpImage *image;
+ GimpLayer *layer;
+ GimpColorProfile *profile;
+ 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);
@@ -128,6 +129,14 @@ gimp_image_new_from_template (Gimp *gimp,
gimp_template_get_resolution_y (template));
gimp_image_set_unit (image, gimp_template_get_resolution_unit (template));
+ gimp_image_set_is_color_managed (image,
+ gimp_template_get_color_managed (template),
+ FALSE);
+ profile = gimp_template_get_color_profile (template);
+ gimp_image_set_color_profile (image, profile, NULL);
+ if (profile)
+ g_object_unref (profile);
+
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 8a00caa..e99036e 100644
--- a/app/core/gimptemplate.c
+++ b/app/core/gimptemplate.c
@@ -23,10 +23,12 @@
#include "config.h"
+#include <cairo.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gegl.h>
#include "libgimpbase/gimpbase.h"
+#include "libgimpcolor/gimpcolor.h"
#include "libgimpconfig/gimpconfig.h"
#include "core-types.h"
@@ -53,6 +55,8 @@ enum
PROP_RESOLUTION_UNIT,
PROP_BASE_TYPE,
PROP_PRECISION,
+ PROP_COLOR_MANAGED,
+ PROP_COLOR_PROFILE,
PROP_FILL_TYPE,
PROP_COMMENT,
PROP_FILENAME
@@ -74,6 +78,9 @@ struct _GimpTemplatePrivate
GimpImageBaseType base_type;
GimpPrecision precision;
+ gboolean color_managed;
+ GFile *color_profile;
+
GimpFillType fill_type;
gchar *comment;
@@ -181,6 +188,20 @@ gimp_template_class_init (GimpTemplateClass *klass)
GIMP_TYPE_PRECISION, GIMP_PRECISION_U8_GAMMA,
GIMP_PARAM_STATIC_STRINGS);
+ GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_COLOR_MANAGED,
+ "color-managed",
+ _("Color managed"),
+ NULL,
+ TRUE,
+ GIMP_PARAM_STATIC_STRINGS);
+
+ GIMP_CONFIG_PROP_OBJECT (object_class, PROP_COLOR_PROFILE,
+ "color-profile",
+ _("Color profile"),
+ NULL,
+ G_TYPE_FILE,
+ GIMP_PARAM_STATIC_STRINGS);
+
GIMP_CONFIG_PROP_ENUM (object_class, PROP_FILL_TYPE,
"fill-type",
_("Fill type"),
@@ -264,6 +285,14 @@ gimp_template_set_property (GObject *object,
case PROP_PRECISION:
private->precision = g_value_get_enum (value);
break;
+ case PROP_COLOR_MANAGED:
+ private->color_managed = g_value_get_boolean (value);
+ break;
+ case PROP_COLOR_PROFILE:
+ if (private->color_profile)
+ g_object_unref (private->color_profile);
+ private->color_profile = g_value_dup_object (value);
+ break;
case PROP_FILL_TYPE:
private->fill_type = g_value_get_enum (value);
break;
@@ -317,6 +346,12 @@ gimp_template_get_property (GObject *object,
case PROP_PRECISION:
g_value_set_enum (value, private->precision);
break;
+ case PROP_COLOR_MANAGED:
+ g_value_set_boolean (value, private->color_managed);
+ break;
+ case PROP_COLOR_PROFILE:
+ g_value_set_object (value, private->color_profile);
+ break;
case PROP_FILL_TYPE:
g_value_set_enum (value, private->fill_type);
break;
@@ -480,6 +515,29 @@ gimp_template_get_precision (GimpTemplate *template)
return GET_PRIVATE (template)->precision;
}
+gboolean
+gimp_template_get_color_managed (GimpTemplate *template)
+{
+ g_return_val_if_fail (GIMP_IS_TEMPLATE (template), FALSE);
+
+ return GET_PRIVATE (template)->color_managed;
+}
+
+GimpColorProfile *
+gimp_template_get_color_profile (GimpTemplate *template)
+{
+ GimpTemplatePrivate *private;
+
+ g_return_val_if_fail (GIMP_IS_TEMPLATE (template), FALSE);
+
+ private = GET_PRIVATE (template);
+
+ if (private->color_profile)
+ return gimp_color_profile_new_from_file (private->color_profile, NULL);
+
+ return NULL;
+}
+
GimpFillType
gimp_template_get_fill_type (GimpTemplate *template)
{
diff --git a/app/core/gimptemplate.h b/app/core/gimptemplate.h
index 3164828..b38e2f8 100644
--- a/app/core/gimptemplate.h
+++ b/app/core/gimptemplate.h
@@ -80,6 +80,9 @@ GimpUnit gimp_template_get_resolution_unit (GimpTemplate *template);
GimpImageBaseType gimp_template_get_base_type (GimpTemplate *template);
GimpPrecision gimp_template_get_precision (GimpTemplate *template);
+gboolean gimp_template_get_color_managed (GimpTemplate *template);
+GimpColorProfile * gimp_template_get_color_profile (GimpTemplate *template);
+
GimpFillType gimp_template_get_fill_type (GimpTemplate *template);
const gchar * gimp_template_get_comment (GimpTemplate *template);
diff --git a/app/widgets/gimptemplateeditor.c b/app/widgets/gimptemplateeditor.c
index 18b31d4..02006d5 100644
--- a/app/widgets/gimptemplateeditor.c
+++ b/app/widgets/gimptemplateeditor.c
@@ -142,6 +142,7 @@ gimp_template_editor_constructed (GObject *object)
GtkWidget *xres;
GtkWidget *yres;
GtkWidget *combo;
+ GtkWidget *toggle;
GtkWidget *scrolled_window;
GtkWidget *text_view;
GtkTextBuffer *text_buffer;
@@ -393,10 +394,27 @@ gimp_template_editor_constructed (GObject *object)
_("_Precision:"), 0.0, 0.5,
combo, 1, FALSE);
+ toggle = gimp_prop_check_button_new (G_OBJECT (template),
+ "color-managed",
+ _("Color manage this image"));
+ gimp_table_attach_aligned (GTK_TABLE (table), 0, 4,
+ NULL, 0.0, 0.5,
+ toggle, 1, FALSE);
+
+ combo = gimp_prop_profile_combo_box_new (G_OBJECT (template),
+ "color-profile",
+ NULL,
+ _("Choose A Color Profile"));
+ gimp_color_profile_combo_box_add_file (GIMP_COLOR_PROFILE_COMBO_BOX (combo),
+ NULL, NULL);
+ gimp_table_attach_aligned (GTK_TABLE (table), 0, 5,
+ _("Color _profile:"), 0.0, 0.5,
+ combo, 1, FALSE);
+
combo = gimp_prop_enum_combo_box_new (G_OBJECT (template),
"fill-type",
0, 0);
- gimp_table_attach_aligned (GTK_TABLE (table), 0, 4,
+ gimp_table_attach_aligned (GTK_TABLE (table), 0, 6,
_("_Fill with:"), 0.0, 0.5,
combo, 1, FALSE);
@@ -406,7 +424,7 @@ gimp_template_editor_constructed (GObject *object)
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
- gimp_table_attach_aligned (GTK_TABLE (table), 0, 5,
+ gimp_table_attach_aligned (GTK_TABLE (table), 0, 7,
_("Comme_nt:"), 0.0, 0.0,
scrolled_window, 1, FALSE);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]