From 6c733870660c5f322346c0d0daab6b07731bcfd1 Mon Sep 17 00:00:00 2001 From: Sven Neumann Date: Fri, 1 Jun 2007 11:19:37 +0000 Subject: [PATCH] libgimpcolor/Makefile.am libgimpcolor/gimpcolor.h 2007-06-01 Sven Neumann * libgimpcolor/Makefile.am * libgimpcolor/gimpcolor.h * libgimpcolor/gimpcolortypes.h * libgimpcolor/gimpcolormanaged.[ch]: added an interface that will be used to implement the missing bits of color management. * libgimpcolor/gimpcolor.def: updated. svn path=/trunk/; revision=22691 --- ChangeLog | 10 +++ libgimpcolor/Makefile.am | 3 + libgimpcolor/gimpcolor.def | 3 + libgimpcolor/gimpcolor.h | 1 + libgimpcolor/gimpcolormanaged.c | 136 ++++++++++++++++++++++++++++++++ libgimpcolor/gimpcolormanaged.h | 61 ++++++++++++++ libgimpcolor/gimpcolortypes.h | 2 + 7 files changed, 216 insertions(+) create mode 100644 libgimpcolor/gimpcolormanaged.c create mode 100644 libgimpcolor/gimpcolormanaged.h diff --git a/ChangeLog b/ChangeLog index 3534400781..99c65065e2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2007-06-01 Sven Neumann + + * libgimpcolor/Makefile.am + * libgimpcolor/gimpcolor.h + * libgimpcolor/gimpcolortypes.h + * libgimpcolor/gimpcolormanaged.[ch]: added an interface that will + be used to implement the missing bits of color management. + + * libgimpcolor/gimpcolor.def: updated. + 2007-06-01 Sven Neumann * libgimpwidgets/Makefile.am: changed back to using EXTRA_PROGRAMS. diff --git a/libgimpcolor/Makefile.am b/libgimpcolor/Makefile.am index 65ec9202e7..23c9493b33 100644 --- a/libgimpcolor/Makefile.am +++ b/libgimpcolor/Makefile.am @@ -70,6 +70,8 @@ libgimpcolor_2_0_la_SOURCES = \ gimpbilinear.h \ gimpcmyk.c \ gimpcmyk.h \ + gimpcolormanaged.c \ + gimpcolormanaged.h \ gimpcolorspace.c \ gimpcolorspace.h \ gimphsl.c \ @@ -86,6 +88,7 @@ libgimpcolorinclude_HEADERS = \ gimpadaptivesupersample.h \ gimpbilinear.h \ gimpcmyk.h \ + gimpcolormanaged.h \ gimpcolorspace.h \ gimphsl.h \ gimphsv.h \ diff --git a/libgimpcolor/gimpcolor.def b/libgimpcolor/gimpcolor.def index a53eee628a..b470fe0c05 100644 --- a/libgimpcolor/gimpcolor.def +++ b/libgimpcolor/gimpcolor.def @@ -16,6 +16,9 @@ EXPORTS gimp_cmyka_get_uchar gimp_cmyka_set gimp_cmyka_set_uchar + gimp_color_managed_get_icc_profile + gimp_color_managed_interface_get_type + gimp_color_managed_profile_changed gimp_hsl_get_type gimp_hsl_to_rgb gimp_hsl_to_rgb_int diff --git a/libgimpcolor/gimpcolor.h b/libgimpcolor/gimpcolor.h index 7bc18cb03e..7e6facee10 100644 --- a/libgimpcolor/gimpcolor.h +++ b/libgimpcolor/gimpcolor.h @@ -25,6 +25,7 @@ #include #include +#include #include #include #include diff --git a/libgimpcolor/gimpcolormanaged.c b/libgimpcolor/gimpcolormanaged.c new file mode 100644 index 0000000000..bd8b29f68e --- /dev/null +++ b/libgimpcolor/gimpcolormanaged.c @@ -0,0 +1,136 @@ +/* LIBGIMP - The GIMP Library + * Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis + * + * GimpColorManaged interface + * Copyright (C) 2007 Sven Neumann + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#include "config.h" + +#include + +#include "gimpcolortypes.h" + +#include "gimpcolormanaged.h" + + +enum +{ + PROFILE_CHANGED, + LAST_SIGNAL +}; + + +static void gimp_color_managed_base_init (GimpColorManagedInterface *iface); + + +static guint gimp_color_managed_signals[LAST_SIGNAL] = { 0 }; + + +GType +gimp_color_managed_interface_get_type (void) +{ + static GType iface_type = 0; + + if (! iface_type) + { + const GTypeInfo iface_info = + { + sizeof (GimpColorManagedInterface), + (GBaseInitFunc) gimp_color_managed_base_init, + (GBaseFinalizeFunc) NULL, + }; + + iface_type = g_type_register_static (G_TYPE_INTERFACE, + "GimpColorManagedInterface", + &iface_info, 0); + + g_type_interface_add_prerequisite (iface_type, G_TYPE_OBJECT); + } + + return iface_type; +} + +static void +gimp_color_managed_base_init (GimpColorManagedInterface *iface) +{ + static gboolean initialized = FALSE; + + if (! initialized) + { + gimp_color_managed_signals[PROFILE_CHANGED] = + g_signal_new ("profile-changed", + G_TYPE_FROM_INTERFACE (iface), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GimpColorManagedInterface, + profile_changed), + NULL, NULL, + g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); + + iface->get_icc_profile = NULL; + iface->profile_changed = NULL; + + initialized = TRUE; + } +} + +/** + * gimp_color_managed_get_icc_profile: + * @managed: an object the implements the #GimpColorManaged interface + * @len: return location for the number of bytes in the profile data + * + * Return value: A pointer to a blob of data that represents an ICC + * color profile. + * + * Since: GIMP 2.4 + **/ +const guint8 * +gimp_color_managed_get_icc_profile (GimpColorManaged *managed, + gsize *len) +{ + GimpColorManagedInterface *iface; + + g_return_val_if_fail (GIMP_IS_COLOR_MANAGED (managed), NULL); + g_return_val_if_fail (len != NULL, NULL); + + *len = 0; + + iface = GIMP_COLOR_MANAGED_GET_INTERFACE (managed); + + if (iface->get_icc_profile) + return iface->get_icc_profile (managed, len); + + return NULL; +} + +/** + * gimp_color_managed_profile_changed: + * @managed: an object the implements the #GimpColorManaged interface + * + * Emits the "profile-changed" signal. + * + * Since: GIMP 2.4 + **/ +void +gimp_color_managed_profile_changed (GimpColorManaged *managed) +{ + g_return_if_fail (GIMP_IS_COLOR_MANAGED (managed)); + + g_signal_emit (managed, gimp_color_managed_signals[PROFILE_CHANGED], 0); +} diff --git a/libgimpcolor/gimpcolormanaged.h b/libgimpcolor/gimpcolormanaged.h new file mode 100644 index 0000000000..8a1a652ea0 --- /dev/null +++ b/libgimpcolor/gimpcolormanaged.h @@ -0,0 +1,61 @@ +/* LIBGIMP - The GIMP Library + * Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis + * + * GimpColorManaged interface + * Copyright (C) 2007 Sven Neumann + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ + +#ifndef __GIMP_COLOR_MANAGED_H__ +#define __GIMP_COLOR_MANAGED_H__ + +G_BEGIN_DECLS + +/* For information look into the C source or the html documentation */ + + +#define GIMP_TYPE_COLOR_MANAGED (gimp_color_managed_interface_get_type ()) +#define GIMP_IS_COLOR_MANAGED(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_COLOR_MANAGED)) +#define GIMP_COLOR_MANAGED(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_COLOR_MANAGED, GimpColorManaged)) +#define GIMP_COLOR_MANAGED_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GIMP_TYPE_COLOR_MANAGED, GimpColorManagedInterface)) + + +typedef struct _GimpColorManagedInterface GimpColorManagedInterface; + +struct _GimpColorManagedInterface +{ + GTypeInterface base_iface; + + /* virtual functions */ + const guint8 * (* get_icc_profile) (GimpColorManaged *managed, + gsize *len); + + /* signals */ + void (* profile_changed) (GimpColorManaged *managed); +}; + + +GType gimp_color_managed_interface_get_type (void) G_GNUC_CONST; + +const guint8 * gimp_color_managed_get_icc_profile (GimpColorManaged *managed, + gsize *len); +void gimp_color_managed_profile_changed (GimpColorManaged *managed); + + +G_END_DECLS + +#endif /* __GIMP_COLOR_MANAGED_IFACE_H__ */ diff --git a/libgimpcolor/gimpcolortypes.h b/libgimpcolor/gimpcolortypes.h index fd980c59a1..e57df1adce 100644 --- a/libgimpcolor/gimpcolortypes.h +++ b/libgimpcolor/gimpcolortypes.h @@ -25,6 +25,8 @@ G_BEGIN_DECLS /* For information look into the C source or the html documentation */ +typedef struct _GimpColorManaged GimpColorManaged; /* dummy typedef */ + /* usually we don't keep the structure definitions in the types file * but GimpRGB appears in too many header files... */