static void gimp_tool_preset_finalize (GObject *object) { GimpToolPreset *tool_preset = GIMP_TOOL_PRESET (object); gimp_tool_preset_set_options (tool_preset, NULL); G_OBJECT_CLASS (parent_class)->finalize (object); }
static void gimp_tool_preset_constructed (GObject *object) { GimpToolPreset *preset = GIMP_TOOL_PRESET (object); G_OBJECT_CLASS (parent_class)->constructed (object); g_assert (GIMP_IS_GIMP (preset->gimp)); }
static gboolean gimp_tool_info_filter_preset (const GimpObject *object, gpointer user_data) { GimpToolPreset *preset = GIMP_TOOL_PRESET (object); GimpToolInfo *tool_info = user_data; return preset->tool_options->tool_info == tool_info; }
static void gimp_tool_preset_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { GimpToolPreset *tool_preset = GIMP_TOOL_PRESET (object); switch (property_id) { case PROP_NAME: gimp_object_set_name (GIMP_OBJECT (tool_preset), g_value_get_string (value)); break; case PROP_GIMP: tool_preset->gimp = g_value_get_object (value); /* don't ref */ break; case PROP_TOOL_OPTIONS: gimp_tool_preset_set_options (tool_preset, GIMP_TOOL_OPTIONS (g_value_get_object (value))); break; case PROP_USE_FG_BG: tool_preset->use_fg_bg = g_value_get_boolean (value); break; case PROP_USE_BRUSH: tool_preset->use_brush = g_value_get_boolean (value); break; case PROP_USE_DYNAMICS: tool_preset->use_dynamics = g_value_get_boolean (value); break; case PROP_USE_PATTERN: tool_preset->use_pattern = g_value_get_boolean (value); break; case PROP_USE_PALETTE: tool_preset->use_palette = g_value_get_boolean (value); break; case PROP_USE_GRADIENT: tool_preset->use_gradient = g_value_get_boolean (value); break; case PROP_USE_FONT: tool_preset->use_font = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
void tool_options_save_new_preset_cmd_callback (GtkAction *action, gpointer user_data) { GimpEditor *editor = GIMP_EDITOR (user_data); Gimp *gimp = gimp_editor_get_ui_manager (editor)->gimp; GimpContext *context = gimp_get_user_context (gimp); GimpData *data; data = gimp_data_factory_data_new (context->gimp->tool_preset_factory, context, _("Untitled")); tool_options_show_preset_editor (gimp, editor, GIMP_TOOL_PRESET (data)); }
static void gimp_tool_preset_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { GimpToolPreset *tool_preset = GIMP_TOOL_PRESET (object); switch (property_id) { case PROP_NAME: g_value_set_string (value, gimp_object_get_name (tool_preset)); break; case PROP_GIMP: g_value_set_object (value, tool_preset->gimp); break; case PROP_TOOL_OPTIONS: g_value_set_object (value, tool_preset->tool_options); break; case PROP_USE_FG_BG: g_value_set_boolean (value, tool_preset->use_fg_bg); break; case PROP_USE_BRUSH: g_value_set_boolean (value, tool_preset->use_brush); break; case PROP_USE_DYNAMICS: g_value_set_boolean (value, tool_preset->use_dynamics); break; case PROP_USE_PATTERN: g_value_set_boolean (value, tool_preset->use_pattern); break; case PROP_USE_PALETTE: g_value_set_boolean (value, tool_preset->use_palette); break; case PROP_USE_GRADIENT: g_value_set_boolean (value, tool_preset->use_gradient); break; case PROP_USE_FONT: g_value_set_boolean (value, tool_preset->use_font); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static gboolean gimp_tool_preset_deserialize_property (GimpConfig *config, guint property_id, GValue *value, GParamSpec *pspec, GScanner *scanner, GTokenType *expected) { GimpToolPreset *tool_preset = GIMP_TOOL_PRESET (config); switch (property_id) { case PROP_TOOL_OPTIONS: { GObject *options; gchar *type_name; GType type; GimpContextPropMask serialize_props; if (! gimp_scanner_parse_string (scanner, &type_name)) { *expected = G_TOKEN_STRING; break; } type = g_type_from_name (type_name); if (! type) { g_scanner_error (scanner, "unable to determine type of '%s'", type_name); *expected = G_TOKEN_STRING; g_free (type_name); break; } if (! g_type_is_a (type, GIMP_TYPE_TOOL_OPTIONS)) { g_scanner_error (scanner, "'%s' is not a subclass of GimpToolOptions", type_name); *expected = G_TOKEN_STRING; g_free (type_name); break; } g_free (type_name); options = g_object_new (type, "gimp", tool_preset->gimp, NULL); /* Initialize all GimpContext object properties that can be * used by presets with some non-NULL object, so loading a * broken preset won't leave us with NULL objects that have * bad effects. See bug #742159. */ gimp_context_copy_properties (gimp_get_user_context (tool_preset->gimp), GIMP_CONTEXT (options), GIMP_CONTEXT_BRUSH_MASK | GIMP_CONTEXT_DYNAMICS_MASK | GIMP_CONTEXT_PATTERN_MASK | GIMP_CONTEXT_GRADIENT_MASK | GIMP_CONTEXT_PALETTE_MASK | GIMP_CONTEXT_FONT_MASK); if (! GIMP_CONFIG_GET_INTERFACE (options)->deserialize (GIMP_CONFIG (options), scanner, 1, NULL)) { g_object_unref (options); break; } /* we need both tool and tool-info on the options */ if (gimp_context_get_tool (GIMP_CONTEXT (options))) { g_object_set (options, "tool-info", gimp_context_get_tool (GIMP_CONTEXT (options)), NULL); } else if (GIMP_TOOL_OPTIONS (options)->tool_info) { g_object_set (options, "tool", GIMP_TOOL_OPTIONS (options)->tool_info, NULL); } else { /* if we have none, the options set_property() logic will * replace the NULL with its best guess */ g_object_set (options, "tool", NULL, "tool-info", NULL, NULL); } serialize_props = gimp_context_get_serialize_properties (GIMP_CONTEXT (options)); gimp_context_set_serialize_properties (GIMP_CONTEXT (options), serialize_props | GIMP_CONTEXT_TOOL_MASK); g_value_take_object (value, options); } break; default: return FALSE; } return TRUE; }