/* GIMP - The GNU Image Manipulation Program * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * GimpDialogConfig class * Copyright (C) 2016 Michael Natterer * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #include "config.h" #include #include #include #include "libgimpbase/gimpbase.h" #include "libgimpcolor/gimpcolor.h" #include "libgimpconfig/gimpconfig.h" #include "core/core-types.h" /* fill and stroke options */ #include "core/gimp.h" #include "core/gimpstrokeoptions.h" #include "config-types.h" #include "gimprc-blurbs.h" #include "gimpdialogconfig.h" #include "gimp-intl.h" enum { PROP_0, PROP_GIMP, PROP_COLOR_PROFILE_POLICY, PROP_COLOR_PROFILE_PATH, PROP_IMAGE_CONVERT_PROFILE_INTENT, PROP_IMAGE_CONVERT_PROFILE_BPC, PROP_IMAGE_CONVERT_PRECISION_LAYER_DITHER_METHOD, PROP_IMAGE_CONVERT_PRECISION_TEXT_LAYER_DITHER_METHOD, PROP_IMAGE_CONVERT_PRECISION_CHANNEL_DITHER_METHOD, PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE, PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS, PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES, PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE, PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA, PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS, PROP_IMAGE_RESIZE_FILL_TYPE, PROP_IMAGE_RESIZE_LAYER_SET, PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS, PROP_LAYER_NEW_NAME, PROP_LAYER_NEW_MODE, PROP_LAYER_NEW_BLEND_SPACE, PROP_LAYER_NEW_COMPOSITE_SPACE, PROP_LAYER_NEW_COMPOSITE_MODE, PROP_LAYER_NEW_OPACITY, PROP_LAYER_NEW_FILL_TYPE, PROP_LAYER_RESIZE_FILL_TYPE, PROP_LAYER_ADD_MASK_TYPE, PROP_LAYER_ADD_MASK_INVERT, PROP_LAYER_MERGE_TYPE, PROP_LAYER_MERGE_ACTIVE_GROUP_ONLY, PROP_LAYER_MERGE_DISCARD_INVISIBLE, PROP_CHANNEL_NEW_NAME, PROP_CHANNEL_NEW_COLOR, PROP_VECTORS_NEW_NAME, PROP_VECTORS_EXPORT_PATH, PROP_VECTORS_EXPORT_ACTIVE_ONLY, PROP_VECTORS_IMPORT_PATH, PROP_VECTORS_IMPORT_MERGE, PROP_VECTORS_IMPORT_SCALE, PROP_SELECTION_FEATHER_RADIUS, PROP_SELECTION_FEATHER_EDGE_LOCK, PROP_SELECTION_GROW_RADIUS, PROP_SELECTION_SHRINK_RADIUS, PROP_SELECTION_SHRINK_EDGE_LOCK, PROP_SELECTION_BORDER_RADIUS, PROP_SELECTION_BORDER_STYLE, PROP_SELECTION_BORDER_EDGE_LOCK, PROP_FILL_OPTIONS, PROP_STROKE_OPTIONS }; typedef struct _GimpDialogConfigPrivate GimpDialogConfigPrivate; struct _GimpDialogConfigPrivate { Gimp *gimp; }; #define GET_PRIVATE(config) \ ((GimpDialogConfigPrivate *) gimp_dialog_config_get_instance_private ((GimpDialogConfig *) (config))) static void gimp_dialog_config_constructed (GObject *object); static void gimp_dialog_config_finalize (GObject *object); static void gimp_dialog_config_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec); static void gimp_dialog_config_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec); static void gimp_dialog_config_fill_options_notify (GObject *object, GParamSpec *pspec, gpointer data); static void gimp_dialog_config_stroke_options_notify (GObject *object, GParamSpec *pspec, gpointer data); G_DEFINE_TYPE_WITH_PRIVATE (GimpDialogConfig, gimp_dialog_config, GIMP_TYPE_GUI_CONFIG) #define parent_class gimp_dialog_config_parent_class static void gimp_dialog_config_class_init (GimpDialogConfigClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); GimpRGB half_transparent = { 0.0, 0.0, 0.0, 0.5 }; object_class->constructed = gimp_dialog_config_constructed; object_class->finalize = gimp_dialog_config_finalize; object_class->set_property = gimp_dialog_config_set_property; object_class->get_property = gimp_dialog_config_get_property; g_object_class_install_property (object_class, PROP_GIMP, g_param_spec_object ("gimp", NULL, NULL, GIMP_TYPE_GIMP, GIMP_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); GIMP_CONFIG_PROP_ENUM (object_class, PROP_COLOR_PROFILE_POLICY, "color-profile-policy", "Color profile policy", COLOR_PROFILE_POLICY_BLURB, GIMP_TYPE_COLOR_PROFILE_POLICY, GIMP_COLOR_PROFILE_POLICY_ASK, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_PATH (object_class, PROP_COLOR_PROFILE_PATH, "color-profile-path", "Default color profile folder path", COLOR_PROFILE_PATH_BLURB, GIMP_CONFIG_PATH_FILE, NULL, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_CONVERT_PROFILE_INTENT, "image-convert-profile-intent", "Default rendering intent for color profile conversion", IMAGE_CONVERT_PROFILE_INTENT_BLURB, GIMP_TYPE_COLOR_RENDERING_INTENT, GIMP_COLOR_RENDERING_INTENT_RELATIVE_COLORIMETRIC, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMAGE_CONVERT_PROFILE_BPC, "image-convert-profile-black-point-compensation", "Default 'Black point compensation' for " "color profile conversion", IMAGE_CONVERT_PROFILE_BPC_BLURB, TRUE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_CONVERT_PRECISION_LAYER_DITHER_METHOD, "image-convert-precision-layer-dither-method", "Default layer dither type for precision conversion", IMAGE_CONVERT_PRECISION_LAYER_DITHER_METHOD_BLURB, GEGL_TYPE_DITHER_METHOD, GEGL_DITHER_NONE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_CONVERT_PRECISION_TEXT_LAYER_DITHER_METHOD, "image-convert-precision-text-layer-dither-method", "Default text layer dither type for precision conversion", IMAGE_CONVERT_PRECISION_TEXT_LAYER_DITHER_METHOD_BLURB, GEGL_TYPE_DITHER_METHOD, GEGL_DITHER_NONE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_CONVERT_PRECISION_CHANNEL_DITHER_METHOD, "image-convert-precision-channel-dither-method", "Default channel dither type for precision conversion", IMAGE_CONVERT_PRECISION_CHANNEL_DITHER_METHOD_BLURB, GEGL_TYPE_DITHER_METHOD, GEGL_DITHER_NONE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE, "image-convert-indexed-palette-type", "Default palette type for indexed conversion", IMAGE_CONVERT_INDEXED_PALETTE_TYPE_BLURB, GIMP_TYPE_CONVERT_PALETTE_TYPE, GIMP_CONVERT_PALETTE_GENERATE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_INT (object_class, PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS, "image-convert-indexed-max-colors", "Default maximum number of colors for indexed conversion", IMAGE_CONVERT_INDEXED_MAX_COLORS_BLURB, 2, 256, 256, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES, "image-convert-indexed-remove-duplicates", "Default remove duplicates for indexed conversion", IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES_BLURB, TRUE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE, "image-convert-indexed-dither-type", "Default dither type for indexed conversion", IMAGE_CONVERT_INDEXED_DITHER_TYPE_BLURB, GIMP_TYPE_CONVERT_DITHER_TYPE, GIMP_CONVERT_DITHER_NONE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA, "image-convert-indexed-dither-alpha", "Default dither alpha for indexed conversion", IMAGE_CONVERT_INDEXED_DITHER_ALPHA_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS, "image-convert-indexed-dither-text-layers", "Default dither text layers for indexed conversion", IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_RESIZE_FILL_TYPE, "image-resize-fill-type", "Default image resize fill type", IMAGE_RESIZE_FILL_TYPE_BLURB, GIMP_TYPE_FILL_TYPE, GIMP_FILL_TRANSPARENT, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_IMAGE_RESIZE_LAYER_SET, "image-resize-layer-set", "Default image resize layer set", IMAGE_RESIZE_LAYER_SET_BLURB, GIMP_TYPE_ITEM_SET, GIMP_ITEM_SET_NONE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS, "image-resize-resize-text-layers", "Default image resize text layers", IMAGE_RESIZE_RESIZE_TEXT_LAYERS_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_STRING (object_class, PROP_LAYER_NEW_NAME, "layer-new-name", "Default new layer name", LAYER_NEW_NAME_BLURB, _("Layer"), GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_NEW_MODE, "layer-new-mode", "Default new layer mode", LAYER_NEW_MODE_BLURB, GIMP_TYPE_LAYER_MODE, GIMP_LAYER_MODE_NORMAL, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_NEW_BLEND_SPACE, "layer-new-blend-space", "Default new layer blend space", LAYER_NEW_BLEND_SPACE_BLURB, GIMP_TYPE_LAYER_COLOR_SPACE, GIMP_LAYER_COLOR_SPACE_AUTO, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_NEW_COMPOSITE_SPACE, "layer-new-composite-space", "Default new layer composite space", LAYER_NEW_COMPOSITE_SPACE_BLURB, GIMP_TYPE_LAYER_COLOR_SPACE, GIMP_LAYER_COLOR_SPACE_AUTO, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_NEW_COMPOSITE_MODE, "layer-new-composite-mode", "Default new layer composite mode", LAYER_NEW_COMPOSITE_MODE_BLURB, GIMP_TYPE_LAYER_COMPOSITE_MODE, GIMP_LAYER_COMPOSITE_AUTO, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_LAYER_NEW_OPACITY, "layer-new-opacity", "Default new layer opacity", LAYER_NEW_OPACITY_BLURB, GIMP_OPACITY_TRANSPARENT, GIMP_OPACITY_OPAQUE, GIMP_OPACITY_OPAQUE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_NEW_FILL_TYPE, "layer-new-fill-type", "Default new layer fill type", LAYER_NEW_FILL_TYPE_BLURB, GIMP_TYPE_FILL_TYPE, GIMP_FILL_TRANSPARENT, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_RESIZE_FILL_TYPE, "layer-resize-fill-type", "Default layer resize fill type", LAYER_RESIZE_FILL_TYPE_BLURB, GIMP_TYPE_FILL_TYPE, GIMP_FILL_TRANSPARENT, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_ADD_MASK_TYPE, "layer-add-mask-type", "Default layer mask type", LAYER_ADD_MASK_TYPE_BLURB, GIMP_TYPE_ADD_MASK_TYPE, GIMP_ADD_MASK_WHITE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_LAYER_ADD_MASK_INVERT, "layer-add-mask-invert", "Default layer mask invert", LAYER_ADD_MASK_INVERT_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_LAYER_MERGE_TYPE, "layer-merge-type", "Default layer merge type", LAYER_MERGE_TYPE_BLURB, GIMP_TYPE_MERGE_TYPE, GIMP_EXPAND_AS_NECESSARY, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_LAYER_MERGE_ACTIVE_GROUP_ONLY, "layer-merge-active-group-only", "Default layer merge active group only", LAYER_MERGE_ACTIVE_GROUP_ONLY_BLURB, TRUE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_LAYER_MERGE_DISCARD_INVISIBLE, "layer-merge-discard-invisible", "Default layer merge discard invisible", LAYER_MERGE_DISCARD_INVISIBLE_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_STRING (object_class, PROP_CHANNEL_NEW_NAME, "channel-new-name", "Default new channel name", CHANNEL_NEW_NAME_BLURB, _("Channel"), GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_RGB (object_class, PROP_CHANNEL_NEW_COLOR, "channel-new-color", "Default new channel color and opacity", CHANNEL_NEW_COLOR_BLURB, TRUE, &half_transparent, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_STRING (object_class, PROP_VECTORS_NEW_NAME, "path-new-name", "Default new path name", VECTORS_NEW_NAME_BLURB, _("Path"), GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_PATH (object_class, PROP_VECTORS_EXPORT_PATH, "path-export-path", "Default path export folder path", VECTORS_EXPORT_PATH_BLURB, GIMP_CONFIG_PATH_FILE, NULL, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_VECTORS_EXPORT_ACTIVE_ONLY, "path-export-active-only", "Default export only the active path", VECTORS_EXPORT_ACTIVE_ONLY_BLURB, TRUE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_PATH (object_class, PROP_VECTORS_IMPORT_PATH, "path-import-path", "Default path import folder path", VECTORS_IMPORT_PATH_BLURB, GIMP_CONFIG_PATH_FILE, NULL, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_VECTORS_IMPORT_MERGE, "path-import-merge", "Default merge imported vectors", VECTORS_IMPORT_MERGE_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_VECTORS_IMPORT_SCALE, "path-import-scale", "Default scale imported vectors", VECTORS_IMPORT_SCALE_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_FEATHER_RADIUS, "selection-feather-radius", "Selection feather radius", SELECTION_FEATHER_RADIUS_BLURB, 0.0, 32767.0, 5.0, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SELECTION_FEATHER_EDGE_LOCK, "selection-feather-edge-lock", "Selection feather edge lock", SELECTION_FEATHER_EDGE_LOCK_BLURB, TRUE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_GROW_RADIUS, "selection-grow-radius", "Selection grow radius", SELECTION_GROW_RADIUS_BLURB, 1.0, 32767.0, 1.0, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_SHRINK_RADIUS, "selection-shrink-radius", "Selection shrink radius", SELECTION_SHRINK_RADIUS_BLURB, 1.0, 32767.0, 1.0, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SELECTION_SHRINK_EDGE_LOCK, "selection-shrink-edge-lock", "Selection shrink edge lock", SELECTION_SHRINK_EDGE_LOCK_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_SELECTION_BORDER_RADIUS, "selection-border-radius", "Selection border radius", SELECTION_BORDER_RADIUS_BLURB, 1.0, 32767.0, 5.0, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SELECTION_BORDER_EDGE_LOCK, "selection-border-edge-lock", "Selection border edge lock", SELECTION_BORDER_EDGE_LOCK_BLURB, FALSE, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_ENUM (object_class, PROP_SELECTION_BORDER_STYLE, "selection-border-style", "Selection border style", SELECTION_BORDER_STYLE_BLURB, GIMP_TYPE_CHANNEL_BORDER_STYLE, GIMP_CHANNEL_BORDER_STYLE_SMOOTH, GIMP_PARAM_STATIC_STRINGS); GIMP_CONFIG_PROP_OBJECT (object_class, PROP_FILL_OPTIONS, "fill-options", "Fill Options", FILL_OPTIONS_BLURB, GIMP_TYPE_FILL_OPTIONS, GIMP_PARAM_STATIC_STRINGS | GIMP_CONFIG_PARAM_AGGREGATE); GIMP_CONFIG_PROP_OBJECT (object_class, PROP_STROKE_OPTIONS, "stroke-options", "Stroke Options", STROKE_OPTIONS_BLURB, GIMP_TYPE_STROKE_OPTIONS, GIMP_PARAM_STATIC_STRINGS | GIMP_CONFIG_PARAM_AGGREGATE); } static void gimp_dialog_config_init (GimpDialogConfig *config) { } static void gimp_dialog_config_constructed (GObject *object) { GimpDialogConfig *config = GIMP_DIALOG_CONFIG (object); GimpDialogConfigPrivate *priv = GET_PRIVATE (object); GimpContext *context; G_OBJECT_CLASS (parent_class)->constructed (object); gimp_assert (GIMP_IS_GIMP (priv->gimp)); context = gimp_get_user_context (priv->gimp); config->fill_options = gimp_fill_options_new (priv->gimp, context, TRUE); gimp_context_set_serialize_properties (GIMP_CONTEXT (config->fill_options), 0); g_signal_connect (config->fill_options, "notify", G_CALLBACK (gimp_dialog_config_fill_options_notify), config); config->stroke_options = gimp_stroke_options_new (priv->gimp, context, TRUE); gimp_context_set_serialize_properties (GIMP_CONTEXT (config->stroke_options), 0); g_signal_connect (config->stroke_options, "notify", G_CALLBACK (gimp_dialog_config_stroke_options_notify), config); } static void gimp_dialog_config_finalize (GObject *object) { GimpDialogConfig *config = GIMP_DIALOG_CONFIG (object); g_clear_pointer (&config->color_profile_path, g_free); g_clear_pointer (&config->layer_new_name, g_free); g_clear_pointer (&config->channel_new_name, g_free); g_clear_pointer (&config->vectors_new_name, g_free); g_clear_pointer (&config->vectors_export_path, g_free); g_clear_pointer (&config->vectors_import_path, g_free); g_clear_object (&config->fill_options); g_clear_object (&config->stroke_options); G_OBJECT_CLASS (parent_class)->finalize (object); } static void gimp_dialog_config_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GimpDialogConfig *config = GIMP_DIALOG_CONFIG (object); GimpDialogConfigPrivate *priv = GET_PRIVATE (object); switch (property_id) { case PROP_GIMP: priv->gimp = g_value_get_object (value); /* don't ref */ break; case PROP_COLOR_PROFILE_POLICY: config->color_profile_policy = g_value_get_enum (value); break; case PROP_COLOR_PROFILE_PATH: if (config->color_profile_path) g_free (config->color_profile_path); config->color_profile_path = g_value_dup_string (value); break; case PROP_IMAGE_CONVERT_PROFILE_INTENT: config->image_convert_profile_intent = g_value_get_enum (value); break; case PROP_IMAGE_CONVERT_PROFILE_BPC: config->image_convert_profile_bpc = g_value_get_boolean (value); break; case PROP_IMAGE_CONVERT_PRECISION_LAYER_DITHER_METHOD: config->image_convert_precision_layer_dither_method = g_value_get_enum (value); break; case PROP_IMAGE_CONVERT_PRECISION_TEXT_LAYER_DITHER_METHOD: config->image_convert_precision_text_layer_dither_method = g_value_get_enum (value); break; case PROP_IMAGE_CONVERT_PRECISION_CHANNEL_DITHER_METHOD: config->image_convert_precision_channel_dither_method = g_value_get_enum (value); break; case PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE: config->image_convert_indexed_palette_type = g_value_get_enum (value); break; case PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS: config->image_convert_indexed_max_colors = g_value_get_int (value); break; case PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES: config->image_convert_indexed_remove_duplicates = g_value_get_boolean (value); break; case PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE: config->image_convert_indexed_dither_type = g_value_get_enum (value); break; case PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA: config->image_convert_indexed_dither_alpha = g_value_get_boolean (value); break; case PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS: config->image_convert_indexed_dither_text_layers = g_value_get_boolean (value); break; case PROP_IMAGE_RESIZE_FILL_TYPE: config->image_resize_fill_type = g_value_get_enum (value); break; case PROP_IMAGE_RESIZE_LAYER_SET: config->image_resize_layer_set = g_value_get_enum (value); break; case PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS: config->image_resize_resize_text_layers = g_value_get_boolean (value); break; case PROP_LAYER_NEW_NAME: if (config->layer_new_name) g_free (config->layer_new_name); config->layer_new_name = g_value_dup_string (value); break; case PROP_LAYER_NEW_MODE: config->layer_new_mode = g_value_get_enum (value); break; case PROP_LAYER_NEW_BLEND_SPACE: config->layer_new_blend_space = g_value_get_enum (value); break; case PROP_LAYER_NEW_COMPOSITE_SPACE: config->layer_new_composite_space = g_value_get_enum (value); break; case PROP_LAYER_NEW_COMPOSITE_MODE: config->layer_new_composite_mode = g_value_get_enum (value); break; case PROP_LAYER_NEW_OPACITY: config->layer_new_opacity = g_value_get_double (value); break; case PROP_LAYER_NEW_FILL_TYPE: config->layer_new_fill_type = g_value_get_enum (value); break; case PROP_LAYER_RESIZE_FILL_TYPE: config->layer_resize_fill_type = g_value_get_enum (value); break; case PROP_LAYER_ADD_MASK_TYPE: config->layer_add_mask_type = g_value_get_enum (value); break; case PROP_LAYER_ADD_MASK_INVERT: config->layer_add_mask_invert = g_value_get_boolean (value); break; case PROP_LAYER_MERGE_TYPE: config->layer_merge_type = g_value_get_enum (value); break; case PROP_LAYER_MERGE_ACTIVE_GROUP_ONLY: config->layer_merge_active_group_only = g_value_get_boolean (value); break; case PROP_LAYER_MERGE_DISCARD_INVISIBLE: config->layer_merge_discard_invisible = g_value_get_boolean (value); break; case PROP_CHANNEL_NEW_NAME: if (config->channel_new_name) g_free (config->channel_new_name); config->channel_new_name = g_value_dup_string (value); break; case PROP_CHANNEL_NEW_COLOR: gimp_value_get_rgb (value, &config->channel_new_color); break; case PROP_VECTORS_NEW_NAME: if (config->vectors_new_name) g_free (config->vectors_new_name); config->vectors_new_name = g_value_dup_string (value); break; case PROP_VECTORS_EXPORT_PATH: if (config->vectors_export_path) g_free (config->vectors_export_path); config->vectors_export_path = g_value_dup_string (value); break; case PROP_VECTORS_EXPORT_ACTIVE_ONLY: config->vectors_export_active_only = g_value_get_boolean (value); break; case PROP_VECTORS_IMPORT_PATH: if (config->vectors_import_path) g_free (config->vectors_import_path); config->vectors_import_path = g_value_dup_string (value); break; case PROP_VECTORS_IMPORT_MERGE: config->vectors_import_merge = g_value_get_boolean (value); break; case PROP_VECTORS_IMPORT_SCALE: config->vectors_import_scale = g_value_get_boolean (value); break; case PROP_SELECTION_FEATHER_RADIUS: config->selection_feather_radius = g_value_get_double (value); break; case PROP_SELECTION_FEATHER_EDGE_LOCK: config->selection_feather_edge_lock = g_value_get_boolean (value); break; case PROP_SELECTION_GROW_RADIUS: config->selection_grow_radius = g_value_get_double (value); break; case PROP_SELECTION_SHRINK_RADIUS: config->selection_shrink_radius = g_value_get_double (value); break; case PROP_SELECTION_SHRINK_EDGE_LOCK: config->selection_shrink_edge_lock = g_value_get_boolean (value); break; case PROP_SELECTION_BORDER_RADIUS: config->selection_border_radius = g_value_get_double (value); break; case PROP_SELECTION_BORDER_EDGE_LOCK: config->selection_border_edge_lock = g_value_get_boolean (value); break; case PROP_SELECTION_BORDER_STYLE: config->selection_border_style = g_value_get_enum (value); break; case PROP_FILL_OPTIONS: if (g_value_get_object (value)) gimp_config_sync (g_value_get_object (value) , G_OBJECT (config->fill_options), 0); break; case PROP_STROKE_OPTIONS: if (g_value_get_object (value)) gimp_config_sync (g_value_get_object (value) , G_OBJECT (config->stroke_options), 0); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void gimp_dialog_config_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { GimpDialogConfig *config = GIMP_DIALOG_CONFIG (object); GimpDialogConfigPrivate *priv = GET_PRIVATE (object); switch (property_id) { case PROP_GIMP: g_value_set_object (value, priv->gimp); break; case PROP_COLOR_PROFILE_POLICY: g_value_set_enum (value, config->color_profile_policy); break; case PROP_COLOR_PROFILE_PATH: g_value_set_string (value, config->color_profile_path); break; case PROP_IMAGE_CONVERT_PROFILE_INTENT: g_value_set_enum (value, config->image_convert_profile_intent); break; case PROP_IMAGE_CONVERT_PROFILE_BPC: g_value_set_boolean (value, config->image_convert_profile_bpc); break; case PROP_IMAGE_CONVERT_PRECISION_LAYER_DITHER_METHOD: g_value_set_enum (value, config->image_convert_precision_layer_dither_method); break; case PROP_IMAGE_CONVERT_PRECISION_TEXT_LAYER_DITHER_METHOD: g_value_set_enum (value, config->image_convert_precision_text_layer_dither_method); break; case PROP_IMAGE_CONVERT_PRECISION_CHANNEL_DITHER_METHOD: g_value_set_enum (value, config->image_convert_precision_channel_dither_method); break; case PROP_IMAGE_CONVERT_INDEXED_PALETTE_TYPE: g_value_set_enum (value, config->image_convert_indexed_palette_type); break; case PROP_IMAGE_CONVERT_INDEXED_MAX_COLORS: g_value_set_int (value, config->image_convert_indexed_max_colors); break; case PROP_IMAGE_CONVERT_INDEXED_REMOVE_DUPLICATES: g_value_set_boolean (value, config->image_convert_indexed_remove_duplicates); break; case PROP_IMAGE_CONVERT_INDEXED_DITHER_TYPE: g_value_set_enum (value, config->image_convert_indexed_dither_type); break; case PROP_IMAGE_CONVERT_INDEXED_DITHER_ALPHA: g_value_set_boolean (value, config->image_convert_indexed_dither_alpha); break; case PROP_IMAGE_CONVERT_INDEXED_DITHER_TEXT_LAYERS: g_value_set_boolean (value, config->image_convert_indexed_dither_text_layers); break; case PROP_IMAGE_RESIZE_FILL_TYPE: g_value_set_enum (value, config->image_resize_fill_type); break; case PROP_IMAGE_RESIZE_LAYER_SET: g_value_set_enum (value, config->image_resize_layer_set); break; case PROP_IMAGE_RESIZE_RESIZE_TEXT_LAYERS: g_value_set_boolean (value, config->image_resize_resize_text_layers); break; case PROP_LAYER_NEW_NAME: g_value_set_string (value, config->layer_new_name); break; case PROP_LAYER_NEW_MODE: g_value_set_enum (value, config->layer_new_mode); break; case PROP_LAYER_NEW_BLEND_SPACE: g_value_set_enum (value, config->layer_new_blend_space); break; case PROP_LAYER_NEW_COMPOSITE_SPACE: g_value_set_enum (value, config->layer_new_composite_space); break; case PROP_LAYER_NEW_COMPOSITE_MODE: g_value_set_enum (value, config->layer_new_composite_mode); break; case PROP_LAYER_NEW_OPACITY: g_value_set_double (value, config->layer_new_opacity); break; case PROP_LAYER_NEW_FILL_TYPE: g_value_set_enum (value, config->layer_new_fill_type); break; case PROP_LAYER_RESIZE_FILL_TYPE: g_value_set_enum (value, config->layer_resize_fill_type); break; case PROP_LAYER_ADD_MASK_TYPE: g_value_set_enum (value, config->layer_add_mask_type); break; case PROP_LAYER_ADD_MASK_INVERT: g_value_set_boolean (value, config->layer_add_mask_invert); break; case PROP_LAYER_MERGE_TYPE: g_value_set_enum (value, config->layer_merge_type); break; case PROP_LAYER_MERGE_ACTIVE_GROUP_ONLY: g_value_set_boolean (value, config->layer_merge_active_group_only); break; case PROP_LAYER_MERGE_DISCARD_INVISIBLE: g_value_set_boolean (value, config->layer_merge_discard_invisible); break; case PROP_CHANNEL_NEW_NAME: g_value_set_string (value, config->channel_new_name); break; case PROP_CHANNEL_NEW_COLOR: gimp_value_set_rgb (value, &config->channel_new_color); break; case PROP_VECTORS_NEW_NAME: g_value_set_string (value, config->vectors_new_name); break; case PROP_VECTORS_EXPORT_PATH: g_value_set_string (value, config->vectors_export_path); break; case PROP_VECTORS_EXPORT_ACTIVE_ONLY: g_value_set_boolean (value, config->vectors_export_active_only); break; case PROP_VECTORS_IMPORT_PATH: g_value_set_string (value, config->vectors_import_path); break; case PROP_VECTORS_IMPORT_MERGE: g_value_set_boolean (value, config->vectors_import_merge); break; case PROP_VECTORS_IMPORT_SCALE: g_value_set_boolean (value, config->vectors_import_scale); break; case PROP_SELECTION_FEATHER_RADIUS: g_value_set_double (value, config->selection_feather_radius); break; case PROP_SELECTION_FEATHER_EDGE_LOCK: g_value_set_boolean (value, config->selection_feather_edge_lock); break; case PROP_SELECTION_GROW_RADIUS: g_value_set_double (value, config->selection_grow_radius); break; case PROP_SELECTION_SHRINK_RADIUS: g_value_set_double (value, config->selection_shrink_radius); break; case PROP_SELECTION_SHRINK_EDGE_LOCK: g_value_set_boolean (value, config->selection_shrink_edge_lock); break; case PROP_SELECTION_BORDER_RADIUS: g_value_set_double (value, config->selection_border_radius); break; case PROP_SELECTION_BORDER_EDGE_LOCK: g_value_set_boolean (value, config->selection_border_edge_lock); break; case PROP_SELECTION_BORDER_STYLE: g_value_set_enum (value, config->selection_border_style); break; case PROP_FILL_OPTIONS: g_value_set_object (value, config->fill_options); break; case PROP_STROKE_OPTIONS: g_value_set_object (value, config->stroke_options); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } } static void gimp_dialog_config_fill_options_notify (GObject *object, GParamSpec *pspec, gpointer data) { /* ignore notifications on parent class properties such as fg/bg */ if (pspec->owner_type == G_TYPE_FROM_INSTANCE (object)) g_object_notify (G_OBJECT (data), "fill-options"); } static void gimp_dialog_config_stroke_options_notify (GObject *object, GParamSpec *pspec, gpointer data) { /* see above */ if (pspec->owner_type == G_TYPE_FROM_INSTANCE (object)) g_object_notify (G_OBJECT (data), "stroke-options"); }