Bug 320447 - fast switching between "color managed display" and "softproof"

Add a View -> Color Management submenu that allows to change
the color management mode per-display.

Internally, keep a GimpColorConfig object around per-display that
is synchronized with the global config except for the properties
that have a per-display GUI (currently the mode).

Also provide an "As in Preferences" menu item to follow the global
settings again.
This commit is contained in:
Michael Natterer 2016-05-14 23:50:58 +02:00
parent 388bf5d4ca
commit 406d1b9c65
9 changed files with 379 additions and 130 deletions

View File

@ -22,6 +22,7 @@
#include "libgimpmath/gimpmath.h"
#include "libgimpcolor/gimpcolor.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "actions-types.h"
@ -70,6 +71,10 @@ static const GimpActionEntry view_actions[] =
{ "view-zoom-menu", NULL, NC_("view-action", "_Zoom") },
{ "view-rotate-menu", NULL, NC_("view-action", "_Flip & Rotate") },
{ "view-padding-color-menu", NULL, NC_("view-action", "_Padding Color") },
{ "view-color-management-menu", NULL,
NC_("view-action", "_Color Management") },
{ "view-move-to-screen-menu", GIMP_STOCK_MOVE_TO_SCREEN,
NC_("view-action", "Move to Screen"), NULL, NULL, NULL,
GIMP_HELP_VIEW_CHANGE_SCREEN },
@ -128,6 +133,13 @@ static const GimpActionEntry view_actions[] =
G_CALLBACK (view_display_filters_cmd_callback),
GIMP_HELP_DISPLAY_FILTER_DIALOG },
{ "view-color-management-reset", GIMP_STOCK_RESET,
NC_("view-action", "As in _Preferences"), NULL,
NC_("view-action",
"Reset color management to what's configured in preferences"),
G_CALLBACK (view_color_management_reset_cmd_callback),
GIMP_HELP_VIEW_COLOR_MANAGEMENT },
{ "view-shrink-wrap", "zoom-fit-best",
NC_("view-action", "Shrink _Wrap"), "<primary>J",
NC_("view-action", "Reduce the image window to the size of the image display"),
@ -457,6 +469,27 @@ static const GimpEnumActionEntry view_rotate_relative_actions[] =
GIMP_HELP_VIEW_ROTATE_345 }
};
static const GimpRadioActionEntry view_color_management_mode_actions[] =
{
{ "view-color-management-mode-off", NULL,
NC_("view-action", "_No Color Management"), NULL,
NC_("view-action", "Don't color manage this view"),
GIMP_COLOR_MANAGEMENT_OFF,
GIMP_HELP_VIEW_COLOR_MANAGEMENT },
{ "view-color-management-mode-display", NULL,
NC_("view-action", "_Color Managed Display"), NULL,
NC_("view-action", "Color manage this view"),
GIMP_COLOR_MANAGEMENT_DISPLAY,
GIMP_HELP_VIEW_COLOR_MANAGEMENT },
{ "view-color-management-mode-softproof", NULL,
NC_("view-action", "_Print Simulation"), NULL,
NC_("view-action", "Use this view for softproofing"),
GIMP_COLOR_MANAGEMENT_SOFTPROOF,
GIMP_HELP_VIEW_COLOR_MANAGEMENT }
};
static const GimpEnumActionEntry view_padding_color_actions[] =
{
{ "view-padding-color-theme", NULL,
@ -607,6 +640,13 @@ view_actions_setup (GimpActionGroup *group)
G_N_ELEMENTS (view_rotate_relative_actions),
G_CALLBACK (view_rotate_relative_cmd_callback));
gimp_action_group_add_radio_actions (group, "view-action",
view_color_management_mode_actions,
G_N_ELEMENTS (view_color_management_mode_actions),
NULL,
GIMP_COLOR_MANAGEMENT_DISPLAY,
G_CALLBACK (view_color_management_mode_cmd_callback));
gimp_action_group_add_enum_actions (group, "view-padding-color",
view_padding_color_actions,
G_N_ELEMENTS (view_padding_color_actions),
@ -657,6 +697,7 @@ view_actions_update (GimpActionGroup *group,
GimpImage *image = NULL;
GimpDisplayShell *shell = NULL;
GimpDisplayOptions *options = NULL;
GimpColorConfig *color_config = NULL;
gchar *label = NULL;
gboolean fullscreen = FALSE;
gboolean revert_enabled = FALSE; /* able to revert zoom? */
@ -666,6 +707,7 @@ view_actions_update (GimpActionGroup *group,
if (display)
{
GimpImageWindow *window;
const gchar *action = NULL;
image = gimp_display_get_image (display);
shell = gimp_display_get_shell (display);
@ -682,6 +724,24 @@ view_actions_update (GimpActionGroup *group,
flip_horizontally = shell->flip_horizontally;
flip_vertically = shell->flip_vertically;
color_config = gimp_display_shell_get_color_config (shell);
switch (color_config->mode)
{
case GIMP_COLOR_MANAGEMENT_OFF:
action = "view-color-management-mode-off";
break;
case GIMP_COLOR_MANAGEMENT_DISPLAY:
action = "view-color-management-mode-display";
break;
case GIMP_COLOR_MANAGEMENT_SOFTPROOF:
action = "view-color-management-mode-softproof";
break;
}
gimp_action_group_set_action_active (group, action, TRUE);
}
#define SET_ACTIVE(action,condition) \
@ -765,6 +825,11 @@ view_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("view-navigation-window", image);
SET_SENSITIVE ("view-display-filters", image);
SET_SENSITIVE ("view-color-management-mode-off", image);
SET_SENSITIVE ("view-color-management-mode-display", image);
SET_SENSITIVE ("view-color-management-mode-softproof", image);
SET_SENSITIVE ("view-color-management-reset", image);
SET_SENSITIVE ("view-show-selection", image);
SET_ACTIVE ("view-show-selection", display && options->show_selection);
SET_SENSITIVE ("view-show-layer-boundary", image);

View File

@ -21,6 +21,7 @@
#include <gtk/gtk.h>
#include "libgimpmath/gimpmath.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpwidgets/gimpwidgets.h"
#include "actions-types.h"
@ -485,6 +486,47 @@ view_display_filters_cmd_callback (GtkAction *action,
gtk_window_present (GTK_WINDOW (shell->filters_dialog));
}
void
view_color_management_reset_cmd_callback (GtkAction *action,
gpointer data)
{
GimpDisplayShell *shell;
GimpColorConfig *global_config;
GimpColorConfig *shell_config;
return_if_no_shell (shell, data);
global_config = GIMP_CORE_CONFIG (shell->display->config)->color_management;
shell_config = gimp_display_shell_get_color_config (shell);
gimp_config_copy (GIMP_CONFIG (global_config),
GIMP_CONFIG (shell_config),
0);
shell->color_config_set = FALSE;
}
void
view_color_management_mode_cmd_callback (GtkAction *action,
GtkAction *current,
gpointer data)
{
GimpDisplayShell *shell;
GimpColorConfig *color_config;
GimpColorManagementMode value;
return_if_no_shell (shell, data);
color_config = gimp_display_shell_get_color_config (shell);
value = gtk_radio_action_get_current_value (GTK_RADIO_ACTION (action));
if (value != color_config->mode)
{
g_object_set (color_config,
"mode", value,
NULL);
shell->color_config_set = TRUE;
}
}
void
view_toggle_selection_cmd_callback (GtkAction *action,
gpointer data)

View File

@ -19,90 +19,97 @@
#define __VIEW_COMMANDS_H__
void view_new_cmd_callback (GtkAction *action,
gpointer data);
void view_close_cmd_callback (GtkAction *action,
gpointer data);
void view_new_cmd_callback (GtkAction *action,
gpointer data);
void view_close_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_fit_in_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_fill_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_selection_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_revert_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_zoom_explicit_cmd_callback (GtkAction *action,
GtkAction *current,
gpointer data);
void view_zoom_other_cmd_callback (GtkAction *action,
gpointer data);
void view_dot_for_dot_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_fit_in_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_fill_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_selection_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_revert_cmd_callback (GtkAction *action,
gpointer data);
void view_zoom_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_zoom_explicit_cmd_callback (GtkAction *action,
GtkAction *current,
gpointer data);
void view_zoom_other_cmd_callback (GtkAction *action,
gpointer data);
void view_dot_for_dot_cmd_callback (GtkAction *action,
gpointer data);
void view_scroll_horizontal_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_scroll_vertical_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_scroll_horizontal_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_scroll_vertical_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_flip_horizontally_cmd_callback (GtkAction *action,
gpointer data);
void view_flip_vertically_cmd_callback (GtkAction *action,
gpointer data);
void view_flip_horizontally_cmd_callback (GtkAction *action,
gpointer data);
void view_flip_vertically_cmd_callback (GtkAction *action,
gpointer data);
void view_rotate_absolute_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_rotate_relative_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_rotate_other_cmd_callback (GtkAction *action,
gpointer data);
void view_rotate_absolute_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_rotate_relative_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_rotate_other_cmd_callback (GtkAction *action,
gpointer data);
void view_navigation_window_cmd_callback (GtkAction *action,
gpointer data);
void view_display_filters_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_selection_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_layer_boundary_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_menubar_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_rulers_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_scrollbars_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_statusbar_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_guides_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_grid_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_sample_points_cmd_callback (GtkAction *action,
gpointer data);
void view_navigation_window_cmd_callback (GtkAction *action,
gpointer data);
void view_display_filters_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_guides_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_grid_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_canvas_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_vectors_cmd_callback (GtkAction *action,
gpointer data);
void view_padding_color_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_color_management_reset_cmd_callback (GtkAction *action,
gpointer data);
void view_color_management_mode_cmd_callback (GtkAction *action,
GtkAction *current,
gpointer data);
void view_shrink_wrap_cmd_callback (GtkAction *action,
gpointer data);
void view_fullscreen_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_selection_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_layer_boundary_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_menubar_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_rulers_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_scrollbars_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_statusbar_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_guides_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_grid_cmd_callback (GtkAction *action,
gpointer data);
void view_toggle_sample_points_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_guides_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_grid_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_canvas_cmd_callback (GtkAction *action,
gpointer data);
void view_snap_to_vectors_cmd_callback (GtkAction *action,
gpointer data);
void view_padding_color_cmd_callback (GtkAction *action,
gint value,
gpointer data);
void view_shrink_wrap_cmd_callback (GtkAction *action,
gpointer data);
void view_fullscreen_cmd_callback (GtkAction *action,
gpointer data);
#endif /* __VIEW_COMMANDS_H__ */

View File

@ -22,6 +22,7 @@
#include "libgimpbase/gimpbase.h"
#include "libgimpcolor/gimpcolor.h"
#include "libgimpconfig/gimpconfig.h"
#include "libgimpmath/gimpmath.h"
#include "libgimpwidgets/gimpwidgets.h"
@ -167,6 +168,9 @@ static void gimp_display_shell_ants_speed_notify_handler (GObject *c
static void gimp_display_shell_quality_notify_handler (GObject *config,
GParamSpec *param_spec,
GimpDisplayShell *shell);
static void gimp_display_shell_color_config_notify_handler (GObject *config,
GParamSpec *param_spec,
GimpDisplayShell *shell);
/* public functions */
@ -174,18 +178,24 @@ static void gimp_display_shell_quality_notify_handler (GObject *c
void
gimp_display_shell_connect (GimpDisplayShell *shell)
{
GimpImage *image;
GimpContainer *vectors;
GList *list;
GimpImage *image;
GimpContainer *vectors;
GimpDisplayConfig *config;
GimpColorConfig *color_config;
GList *list;
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
g_return_if_fail (GIMP_IS_DISPLAY (shell->display));
image = gimp_display_get_image (shell->display);
vectors = gimp_image_get_vectors (image);
image = gimp_display_get_image (shell->display);
g_return_if_fail (GIMP_IS_IMAGE (image));
vectors = gimp_image_get_vectors (image);
config = shell->display->config;
color_config = GIMP_CORE_CONFIG (config)->color_management;
g_signal_connect (image, "clean",
G_CALLBACK (gimp_display_shell_clean_dirty_handler),
shell);
@ -298,71 +308,78 @@ gimp_display_shell_connect (GimpDisplayShell *shell)
gimp_display_shell_vectors_add_handler (vectors, list->data, shell);
}
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::transparency-size",
G_CALLBACK (gimp_display_shell_check_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::transparency-type",
G_CALLBACK (gimp_display_shell_check_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::image-title-format",
G_CALLBACK (gimp_display_shell_title_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::image-status-format",
G_CALLBACK (gimp_display_shell_title_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::navigation-preview-size",
G_CALLBACK (gimp_display_shell_nav_size_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::monitor-resolution-from-windowing-system",
G_CALLBACK (gimp_display_shell_monitor_res_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::monitor-xresolution",
G_CALLBACK (gimp_display_shell_monitor_res_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::monitor-yresolution",
G_CALLBACK (gimp_display_shell_monitor_res_notify_handler),
shell);
g_signal_connect (shell->display->config->default_view,
g_signal_connect (config->default_view,
"notify::padding-mode",
G_CALLBACK (gimp_display_shell_padding_notify_handler),
shell);
g_signal_connect (shell->display->config->default_view,
g_signal_connect (config->default_view,
"notify::padding-color",
G_CALLBACK (gimp_display_shell_padding_notify_handler),
shell);
g_signal_connect (shell->display->config->default_fullscreen_view,
g_signal_connect (config->default_fullscreen_view,
"notify::padding-mode",
G_CALLBACK (gimp_display_shell_padding_notify_handler),
shell);
g_signal_connect (shell->display->config->default_fullscreen_view,
g_signal_connect (config->default_fullscreen_view,
"notify::padding-color",
G_CALLBACK (gimp_display_shell_padding_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::marching-ants-speed",
G_CALLBACK (gimp_display_shell_ants_speed_notify_handler),
shell);
g_signal_connect (shell->display->config,
g_signal_connect (config,
"notify::zoom-quality",
G_CALLBACK (gimp_display_shell_quality_notify_handler),
shell);
g_signal_connect (color_config, "notify",
G_CALLBACK (gimp_display_shell_color_config_notify_handler),
shell);
gimp_display_shell_invalidate_preview_handler (image, shell);
gimp_display_shell_quick_mask_changed_handler (image, shell);
gimp_display_shell_profile_changed_handler (GIMP_COLOR_MANAGED (image),
shell);
gimp_display_shell_color_config_notify_handler (G_OBJECT (color_config),
NULL, /* sync all */
shell);
gimp_canvas_layer_boundary_set_layer (GIMP_CANVAS_LAYER_BOUNDARY (shell->layer_boundary),
gimp_image_get_active_layer (image));
@ -371,9 +388,11 @@ gimp_display_shell_connect (GimpDisplayShell *shell)
void
gimp_display_shell_disconnect (GimpDisplayShell *shell)
{
GimpImage *image;
GimpContainer *vectors;
GList *list;
GimpImage *image;
GimpContainer *vectors;
GimpDisplayConfig *config;
GimpColorConfig *color_config;
GList *list;
g_return_if_fail (GIMP_IS_DISPLAY_SHELL (shell));
g_return_if_fail (GIMP_IS_DISPLAY (shell->display));
@ -384,33 +403,41 @@ gimp_display_shell_disconnect (GimpDisplayShell *shell)
vectors = gimp_image_get_vectors (image);
config = shell->display->config;
color_config = GIMP_CORE_CONFIG (config)->color_management;
gimp_display_shell_icon_update_stop (shell);
gimp_canvas_layer_boundary_set_layer (GIMP_CANVAS_LAYER_BOUNDARY (shell->layer_boundary),
NULL);
g_signal_handlers_disconnect_by_func (shell->display->config,
g_signal_handlers_disconnect_by_func (color_config,
gimp_display_shell_color_config_notify_handler,
shell);
shell->color_config_set = FALSE;
g_signal_handlers_disconnect_by_func (config,
gimp_display_shell_quality_notify_handler,
shell);
g_signal_handlers_disconnect_by_func (shell->display->config,
g_signal_handlers_disconnect_by_func (config,
gimp_display_shell_ants_speed_notify_handler,
shell);
g_signal_handlers_disconnect_by_func (shell->display->config->default_fullscreen_view,
g_signal_handlers_disconnect_by_func (config->default_fullscreen_view,
gimp_display_shell_padding_notify_handler,
shell);
g_signal_handlers_disconnect_by_func (shell->display->config->default_view,
g_signal_handlers_disconnect_by_func (config->default_view,
gimp_display_shell_padding_notify_handler,
shell);
g_signal_handlers_disconnect_by_func (shell->display->config,
g_signal_handlers_disconnect_by_func (config,
gimp_display_shell_monitor_res_notify_handler,
shell);
g_signal_handlers_disconnect_by_func (shell->display->config,
g_signal_handlers_disconnect_by_func (config,
gimp_display_shell_nav_size_notify_handler,
shell);
g_signal_handlers_disconnect_by_func (shell->display->config,
g_signal_handlers_disconnect_by_func (config,
gimp_display_shell_title_notify_handler,
shell);
g_signal_handlers_disconnect_by_func (shell->display->config,
g_signal_handlers_disconnect_by_func (config,
gimp_display_shell_check_notify_handler,
shell);
@ -1089,3 +1116,41 @@ gimp_display_shell_quality_notify_handler (GObject *config,
{
gimp_display_shell_expose_full (shell);
}
static void
gimp_display_shell_color_config_notify_handler (GObject *config,
GParamSpec *param_spec,
GimpDisplayShell *shell)
{
if (param_spec)
{
gboolean copy = TRUE;
if (! strcmp (param_spec->name, "mode"))
{
if (shell->color_config_set)
copy = FALSE;
}
if (copy)
{
GValue value = G_VALUE_INIT;
g_value_init (&value, param_spec->value_type);
g_object_get_property (config,
param_spec->name, &value);
g_object_set_property (G_OBJECT (shell->color_config),
param_spec->name, &value);
g_value_unset (&value);
}
}
else
{
gimp_config_copy (GIMP_CONFIG (config),
GIMP_CONFIG (shell->color_config),
0);
shell->color_config_set = FALSE;
}
}

View File

@ -30,6 +30,8 @@
#include "display-types.h"
#include "config/gimpcoreconfig.h"
#include "gegl/gimp-babl.h"
#include "core/gimpimage.h"
@ -37,6 +39,7 @@
#include "gimpdisplay.h"
#include "gimpdisplayshell.h"
#include "gimpdisplayshell-actions.h"
#include "gimpdisplayshell-filter.h"
#include "gimpdisplayshell-profile.h"
#include "gimpdisplayxfer.h"
@ -44,24 +47,41 @@
#include "gimp-intl.h"
/* local function prototypes */
static void gimp_display_shell_profile_free (GimpDisplayShell *shell);
static void gimp_display_shell_color_config_notify (GimpColorConfig *config,
const GParamSpec *pspec,
GimpDisplayShell *shell);
/* public functions */
void
gimp_display_shell_profile_dispose (GimpDisplayShell *shell)
gimp_display_shell_profile_init (GimpDisplayShell *shell)
{
if (shell->profile_transform)
GimpColorConfig *color_config;
color_config = GIMP_CORE_CONFIG (shell->display->config)->color_management;
shell->color_config = gimp_config_duplicate (GIMP_CONFIG (color_config));
g_signal_connect (shell->color_config, "notify",
G_CALLBACK (gimp_display_shell_color_config_notify),
shell);
}
void
gimp_display_shell_profile_finalize (GimpDisplayShell *shell)
{
if (shell->color_config)
{
cmsDeleteTransform (shell->profile_transform);
shell->profile_transform = NULL;
shell->profile_src_format = NULL;
shell->profile_dest_format = NULL;
g_object_unref (shell->color_config);
shell->color_config = NULL;
}
if (shell->profile_buffer)
{
g_object_unref (shell->profile_buffer);
shell->profile_buffer = NULL;
shell->profile_data = NULL;
shell->profile_stride = 0;
}
gimp_display_shell_profile_free (shell);
}
void
@ -72,7 +92,7 @@ gimp_display_shell_profile_update (GimpDisplayShell *shell)
const Babl *src_format;
const Babl *dest_format;
gimp_display_shell_profile_dispose (shell);
gimp_display_shell_profile_free (shell);
image = gimp_display_get_image (shell->display);
@ -201,3 +221,55 @@ gimp_display_shell_profile_convert_buffer (GimpDisplayShell *shell,
iter->length);
}
}
/* private functions */
static void
gimp_display_shell_profile_free (GimpDisplayShell *shell)
{
if (shell->profile_transform)
{
cmsDeleteTransform (shell->profile_transform);
shell->profile_transform = NULL;
shell->profile_src_format = NULL;
shell->profile_dest_format = NULL;
}
if (shell->profile_buffer)
{
g_object_unref (shell->profile_buffer);
shell->profile_buffer = NULL;
shell->profile_data = NULL;
shell->profile_stride = 0;
}
}
static void
gimp_display_shell_color_config_notify (GimpColorConfig *config,
const GParamSpec *pspec,
GimpDisplayShell *shell)
{
if (! strcmp (pspec->name, "mode"))
{
const gchar *action = NULL;
switch (config->mode)
{
case GIMP_COLOR_MANAGEMENT_OFF:
action = "view-color-management-mode-off";
break;
case GIMP_COLOR_MANAGEMENT_DISPLAY:
action = "view-color-management-mode-display";
break;
case GIMP_COLOR_MANAGEMENT_SOFTPROOF:
action = "view-color-management-mode-softproof";
break;
}
gimp_display_shell_set_action_active (shell, action, TRUE);
}
gimp_color_managed_profile_changed (GIMP_COLOR_MANAGED (shell));
}

View File

@ -19,7 +19,9 @@
#define __GIMP_DISPLAY_SHELL_PROFILE_H__
void gimp_display_shell_profile_dispose (GimpDisplayShell *shell);
void gimp_display_shell_profile_init (GimpDisplayShell *shell);
void gimp_display_shell_profile_finalize (GimpDisplayShell *shell);
void gimp_display_shell_profile_update (GimpDisplayShell *shell);
gboolean gimp_display_shell_profile_can_convert_to_u8 (GimpDisplayShell *shell);

View File

@ -405,7 +405,7 @@ gimp_display_shell_constructed (GObject *object)
config = shell->display->config;
image = gimp_display_get_image (shell->display);
shell->color_config = g_object_ref (GIMP_CORE_CONFIG (config)->color_management);
gimp_display_shell_profile_init (shell);
if (image)
{
@ -817,13 +817,7 @@ gimp_display_shell_dispose (GObject *object)
shell->checkerboard = NULL;
}
if (shell->color_config)
{
g_object_unref (shell->color_config);
shell->color_config = NULL;
}
gimp_display_shell_profile_dispose (shell);
gimp_display_shell_profile_finalize (shell);
if (shell->filter_buffer)
{

View File

@ -151,6 +151,7 @@ struct _GimpDisplayShell
GtkWidget *grid_dialog; /* grid configuration dialog */
GimpColorConfig *color_config; /* color management settings */
gboolean color_config_set; /* settings changed from defaults */
GimpColorTransform profile_transform;
const Babl *profile_src_format;

View File

@ -98,6 +98,7 @@
#define GIMP_HELP_VIEW_ROTATE_270 "gimp-view-rotate-270"
#define GIMP_HELP_VIEW_ROTATE_345 "gimp-view-rotate-345"
#define GIMP_HELP_VIEW_ROTATE_OTHER "gimp-view-rotate-other"
#define GIMP_HELP_VIEW_COLOR_MANAGEMENT "gimp-view-color-management"
#define GIMP_HELP_VIEW_SHOW_SELECTION "gimp-view-show-selection"
#define GIMP_HELP_VIEW_SHOW_LAYER_BOUNDARY "gimp-view-show-layer-boundary"
#define GIMP_HELP_VIEW_SHOW_GUIDES "gimp-view-show-guides"