/* LIBPIKA - The PIKA Library * Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis * * PikaColorManaged 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 3 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, see * . */ #include "config.h" #include #include #include "pikacolortypes.h" #include "pikacolormanaged.h" #include "pikacolorprofile.h" /** * SECTION: pikacolormanaged * @title: PikaColorManaged * @short_description: An interface dealing with color profiles. * * An interface dealing with color profiles. **/ enum { PROFILE_CHANGED, SIMULATION_PROFILE_CHANGED, SIMULATION_INTENT_CHANGED, SIMULATION_BPC_CHANGED, LAST_SIGNAL }; G_DEFINE_INTERFACE (PikaColorManaged, pika_color_managed, G_TYPE_OBJECT) static guint pika_color_managed_signals[LAST_SIGNAL] = { 0 }; /* private functions */ static void pika_color_managed_default_init (PikaColorManagedInterface *iface) { pika_color_managed_signals[PROFILE_CHANGED] = g_signal_new ("profile-changed", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (PikaColorManagedInterface, profile_changed), NULL, NULL, NULL, G_TYPE_NONE, 0); pika_color_managed_signals[SIMULATION_PROFILE_CHANGED] = g_signal_new ("simulation-profile-changed", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (PikaColorManagedInterface, simulation_profile_changed), NULL, NULL, NULL, G_TYPE_NONE, 0); pika_color_managed_signals[SIMULATION_INTENT_CHANGED] = g_signal_new ("simulation-intent-changed", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (PikaColorManagedInterface, simulation_intent_changed), NULL, NULL, NULL, G_TYPE_NONE, 0); pika_color_managed_signals[SIMULATION_BPC_CHANGED] = g_signal_new ("simulation-bpc-changed", G_TYPE_FROM_INTERFACE (iface), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET (PikaColorManagedInterface, simulation_bpc_changed), NULL, NULL, NULL, G_TYPE_NONE, 0); } /* public functions */ /** * pika_color_managed_get_icc_profile: * @managed: an object the implements the #PikaColorManaged interface * @len: (out): return location for the number of bytes in the profile data * * Returns: (array length=len): A blob of data that represents an ICC color * profile. * * Since: 2.4 */ const guint8 * pika_color_managed_get_icc_profile (PikaColorManaged *managed, gsize *len) { PikaColorManagedInterface *iface; g_return_val_if_fail (PIKA_IS_COLOR_MANAGED (managed), NULL); g_return_val_if_fail (len != NULL, NULL); *len = 0; iface = PIKA_COLOR_MANAGED_GET_IFACE (managed); if (iface->get_icc_profile) return iface->get_icc_profile (managed, len); return NULL; } /** * pika_color_managed_get_color_profile: * @managed: an object the implements the #PikaColorManaged interface * * This function always returns a #PikaColorProfile and falls back to * pika_color_profile_new_rgb_srgb() if the method is not implemented. * * Returns: (transfer full): The @managed's #PikaColorProfile. * * Since: 2.10 **/ PikaColorProfile * pika_color_managed_get_color_profile (PikaColorManaged *managed) { PikaColorManagedInterface *iface; g_return_val_if_fail (PIKA_IS_COLOR_MANAGED (managed), NULL); iface = PIKA_COLOR_MANAGED_GET_IFACE (managed); if (iface->get_color_profile) return iface->get_color_profile (managed); return NULL; } /** * pika_color_managed_get_simulation_profile: * @managed: an object the implements the #PikaColorManaged interface * * This function always returns a #PikaColorProfile * * Returns: (transfer full): The @managed's simulation #PikaColorProfile. * * Since: 3.0 **/ PikaColorProfile * pika_color_managed_get_simulation_profile (PikaColorManaged *managed) { PikaColorManagedInterface *iface; g_return_val_if_fail (PIKA_IS_COLOR_MANAGED (managed), NULL); iface = PIKA_COLOR_MANAGED_GET_IFACE (managed); if (iface->get_simulation_profile) return iface->get_simulation_profile (managed); return NULL; } /** * pika_color_managed_get_simulation_intent: * @managed: an object the implements the #PikaColorManaged interface * * This function always returns a #PikaColorRenderingIntent * * Returns: The @managed's simulation #PikaColorRenderingIntent. * * Since: 3.0 **/ PikaColorRenderingIntent pika_color_managed_get_simulation_intent (PikaColorManaged *managed) { PikaColorManagedInterface *iface; g_return_val_if_fail (PIKA_IS_COLOR_MANAGED (managed), PIKA_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC); iface = PIKA_COLOR_MANAGED_GET_IFACE (managed); if (iface->get_simulation_intent) return iface->get_simulation_intent (managed); return PIKA_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC; } /** * pika_color_managed_get_simulation_bpc: * @managed: an object the implements the #PikaColorManaged interface * * This function always returns a gboolean representing whether * Black Point Compensation is enabled * * Returns: The @managed's simulation Black Point Compensation value. * * Since: 3.0 **/ gboolean pika_color_managed_get_simulation_bpc (PikaColorManaged *managed) { PikaColorManagedInterface *iface; g_return_val_if_fail (PIKA_IS_COLOR_MANAGED (managed), FALSE); iface = PIKA_COLOR_MANAGED_GET_IFACE (managed); if (iface->get_simulation_bpc) return iface->get_simulation_bpc (managed); return FALSE; } /** * pika_color_managed_profile_changed: * @managed: an object that implements the #PikaColorManaged interface * * Emits the "profile-changed" signal. * * Since: 2.4 **/ void pika_color_managed_profile_changed (PikaColorManaged *managed) { g_return_if_fail (PIKA_IS_COLOR_MANAGED (managed)); g_signal_emit (managed, pika_color_managed_signals[PROFILE_CHANGED], 0); } /** * pika_color_managed_simulation_profile_changed: * @managed: an object that implements the #PikaColorManaged interface * * Emits the "simulation-profile-changed" signal. * * Since: 3.0 **/ void pika_color_managed_simulation_profile_changed (PikaColorManaged *managed) { g_return_if_fail (PIKA_IS_COLOR_MANAGED (managed)); g_signal_emit (managed, pika_color_managed_signals[SIMULATION_PROFILE_CHANGED], 0); } /** * pika_color_managed_simulation_intent_changed: * @managed: an object that implements the #PikaColorManaged interface * * Emits the "simulation-intent-changed" signal. * * Since: 3.0 **/ void pika_color_managed_simulation_intent_changed (PikaColorManaged *managed) { g_return_if_fail (PIKA_IS_COLOR_MANAGED (managed)); g_signal_emit (managed, pika_color_managed_signals[SIMULATION_INTENT_CHANGED], 0); } /** * pika_color_managed_simulation_bpc_changed: * @managed: an object that implements the #PikaColorManaged interface * * Emits the "simulation-bpc-changed" signal. * * Since: 3.0 **/ void pika_color_managed_simulation_bpc_changed (PikaColorManaged *managed) { g_return_if_fail (PIKA_IS_COLOR_MANAGED (managed)); g_signal_emit (managed, pika_color_managed_signals[SIMULATION_BPC_CHANGED], 0); }