static void gimp_image_map_tool_notify_preview (GObject *config, GParamSpec *pspec, GimpImageMapTool *image_map_tool) { GimpTool *tool = GIMP_TOOL (image_map_tool); GimpImageMapOptions *options = GIMP_IMAGE_MAP_OPTIONS (config); if (image_map_tool->image_map) { if (options->preview) { gimp_tool_control_set_preserve (tool->control, TRUE); gimp_image_map_tool_map (image_map_tool); gimp_tool_control_set_preserve (tool->control, FALSE); } else { gimp_tool_control_set_preserve (tool->control, TRUE); gimp_image_map_clear (image_map_tool->image_map); gimp_tool_control_set_preserve (tool->control, FALSE); gimp_image_map_tool_flush (image_map_tool->image_map, image_map_tool); } } }
static void gimp_image_map_tool_options_notify (GimpTool *tool, GimpToolOptions *options, const GParamSpec *pspec) { GimpImageMapTool *image_map_tool = GIMP_IMAGE_MAP_TOOL (tool); GimpImageMapOptions *im_options = GIMP_IMAGE_MAP_OPTIONS (options); if (! strcmp (pspec->name, "preview") && image_map_tool->image_map) { if (im_options->preview) { gimp_tool_control_push_preserve (tool->control, TRUE); gimp_image_map_tool_map (image_map_tool); gimp_tool_control_pop_preserve (tool->control); } else { gimp_tool_control_push_preserve (tool->control, TRUE); gimp_image_map_abort (image_map_tool->image_map); gimp_tool_control_pop_preserve (tool->control); } } else if (! strcmp (pspec->name, "region") && image_map_tool->image_map) { gimp_image_map_set_region (image_map_tool->image_map, im_options->region); gimp_image_map_tool_preview (image_map_tool); } }
static void gimp_image_map_options_finalize (GObject *object) { GimpImageMapOptions *options = GIMP_IMAGE_MAP_OPTIONS (object); if (options->settings) { g_free (options->settings); options->settings = NULL; } G_OBJECT_CLASS (parent_class)->finalize (object); }
static void gimp_image_map_options_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { GimpImageMapOptions *options = GIMP_IMAGE_MAP_OPTIONS (object); switch (property_id) { case PROP_PREVIEW: g_value_set_boolean (value, options->preview); break; case PROP_SETTINGS: g_value_set_string (value, options->settings); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; } }
static void gimp_image_map_tool_options_notify (GimpTool *tool, GimpToolOptions *options, const GParamSpec *pspec) { GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool); GimpImageMapOptions *im_options = GIMP_IMAGE_MAP_OPTIONS (options); if (! strcmp (pspec->name, "preview") && im_tool->image_map) { if (im_options->preview) { gimp_tool_control_push_preserve (tool->control, TRUE); gimp_image_map_apply (im_tool->image_map, NULL); gimp_tool_control_pop_preserve (tool->control); if (im_options->preview_split) gimp_image_map_tool_add_guide (im_tool); } else { gimp_tool_control_push_preserve (tool->control, TRUE); gimp_image_map_abort (im_tool->image_map); gimp_tool_control_pop_preserve (tool->control); if (im_options->preview_split) gimp_image_map_tool_remove_guide (im_tool); } } else if (! strcmp (pspec->name, "preview-split") && im_tool->image_map) { if (im_options->preview_split) { GimpDisplayShell *shell = gimp_display_get_shell (tool->display); GimpItem *item = GIMP_ITEM (im_tool->drawable); gint x, y, width, height; gimp_display_shell_untransform_viewport (shell, &x, &y, &width, &height); if (gimp_rectangle_intersect (gimp_item_get_offset_x (item), gimp_item_get_offset_y (item), gimp_item_get_width (item), gimp_item_get_height (item), x, y, width, height, &x, &y, &width, &height)) { gdouble position; if (im_options->preview_alignment == GIMP_ALIGN_LEFT || im_options->preview_alignment == GIMP_ALIGN_RIGHT) { position = ((gdouble) ((x + width / 2) - gimp_item_get_offset_x (item)) / (gdouble) gimp_item_get_width (item)); } else { position = ((gdouble) ((y + height / 2) - gimp_item_get_offset_y (item)) / (gdouble) gimp_item_get_height (item)); } g_object_set (options, "preview-position", CLAMP (position, 0.0, 1.0), NULL); } } gimp_image_map_set_preview (im_tool->image_map, im_options->preview_split, im_options->preview_alignment, im_options->preview_position); if (im_options->preview_split) gimp_image_map_tool_add_guide (im_tool); else gimp_image_map_tool_remove_guide (im_tool); } else if (! strcmp (pspec->name, "preview-alignment") && im_tool->image_map) { gimp_image_map_set_preview (im_tool->image_map, im_options->preview_split, im_options->preview_alignment, im_options->preview_position); if (im_options->preview_split) gimp_image_map_tool_move_guide (im_tool); } else if (! strcmp (pspec->name, "preview-position") && im_tool->image_map) { gimp_image_map_set_preview (im_tool->image_map, im_options->preview_split, im_options->preview_alignment, im_options->preview_position); if (im_options->preview_split) gimp_image_map_tool_move_guide (im_tool); } else if (! strcmp (pspec->name, "region") && im_tool->image_map) { gimp_image_map_set_region (im_tool->image_map, im_options->region); gimp_image_map_tool_preview (im_tool); } }