mirror of https://github.com/GNOME/gimp.git
app: move stuff from GimpOperationTool to GimpImageMapTool
Add new string members to GimpImageMapTool and use them instead of the resp. fields of GimpToolInfo. Change ::get_operation() to return the operation name and a lot of strings for the UI, and create both the GeglNode and the config object in GimpOperationTool. Lots of various cleanups in GimpImageMapTool subclasses. This is an intermediate state on the way of making the whole filter applying mechanism more generic and less depending on subclasses.
This commit is contained in:
parent
b72d73377a
commit
8c09210d7d
|
@ -323,6 +323,7 @@ gimp_gegl_procedure_execute_async (GimpProcedure *procedure,
|
|||
procedure->original_name,
|
||||
gimp_procedure_get_label (procedure),
|
||||
gimp_procedure_get_label (procedure),
|
||||
gimp_procedure_get_label (procedure),
|
||||
gimp_viewable_get_icon_name (GIMP_VIEWABLE (procedure)),
|
||||
gimp_procedure_get_help_id (procedure));
|
||||
|
||||
|
|
|
@ -71,10 +71,13 @@ static void gimp_brightness_contrast_tool_motion (GimpTool
|
|||
GdkModifierType state,
|
||||
GimpDisplay *display);
|
||||
|
||||
static GeglNode *
|
||||
static gchar *
|
||||
gimp_brightness_contrast_tool_get_operation (GimpImageMapTool *image_map_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_brightness_contrast_tool_dialog (GimpImageMapTool *image_map_tool);
|
||||
|
||||
static void brightness_contrast_to_levels_callback (GtkWidget *widget,
|
||||
|
@ -114,7 +117,6 @@ gimp_brightness_contrast_tool_class_init (GimpBrightnessContrastToolClass *klass
|
|||
tool_class->button_release = gimp_brightness_contrast_tool_button_release;
|
||||
tool_class->motion = gimp_brightness_contrast_tool_motion;
|
||||
|
||||
im_tool_class->dialog_desc = _("Adjust Brightness and Contrast");
|
||||
im_tool_class->settings_name = "brightness-contrast";
|
||||
im_tool_class->import_dialog_title = _("Import Brightness-Contrast settings");
|
||||
im_tool_class->export_dialog_title = _("Export Brightness-Contrast settings");
|
||||
|
@ -160,21 +162,17 @@ gimp_brightness_contrast_tool_initialize (GimpTool *tool,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
static gchar *
|
||||
gimp_brightness_contrast_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
GimpBrightnessContrastTool *bc_tool = GIMP_BRIGHTNESS_CONTRAST_TOOL (im_tool);
|
||||
*description = g_strdup (_("Adjust Brightness and Contrast"));
|
||||
|
||||
bc_tool->config = g_object_new (GIMP_TYPE_BRIGHTNESS_CONTRAST_CONFIG, NULL);
|
||||
|
||||
*config = G_OBJECT (bc_tool->config);
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gimp:brightness-contrast",
|
||||
"config", bc_tool->config,
|
||||
NULL);
|
||||
return g_strdup ("gimp:brightness-contrast");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -186,11 +184,18 @@ gimp_brightness_contrast_tool_button_press (GimpTool *tool,
|
|||
GimpDisplay *display)
|
||||
{
|
||||
GimpBrightnessContrastTool *bc_tool = GIMP_BRIGHTNESS_CONTRAST_TOOL (tool);
|
||||
gdouble brightness;
|
||||
gdouble contrast;
|
||||
|
||||
bc_tool->x = coords->x - bc_tool->config->contrast * 127.0;
|
||||
bc_tool->y = coords->y + bc_tool->config->brightness * 127.0;
|
||||
bc_tool->dx = bc_tool->config->contrast * 127.0;
|
||||
bc_tool->dy = - bc_tool->config->brightness * 127.0;
|
||||
g_object_get (GIMP_IMAGE_MAP_TOOL (tool)->config,
|
||||
"brightness", &brightness,
|
||||
"contrast", &contrast,
|
||||
NULL);
|
||||
|
||||
bc_tool->x = coords->x - contrast * 127.0;
|
||||
bc_tool->y = coords->y + brightness * 127.0;
|
||||
bc_tool->dx = contrast * 127.0;
|
||||
bc_tool->dy = - brightness * 127.0;
|
||||
|
||||
gimp_tool_control_activate (tool->control);
|
||||
tool->display = display;
|
||||
|
@ -212,7 +217,7 @@ gimp_brightness_contrast_tool_button_release (GimpTool *tool,
|
|||
return;
|
||||
|
||||
if (release_type == GIMP_BUTTON_RELEASE_CANCEL)
|
||||
gimp_config_reset (GIMP_CONFIG (bc_tool->config));
|
||||
gimp_config_reset (GIMP_CONFIG (GIMP_IMAGE_MAP_TOOL (tool)->config));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -227,7 +232,7 @@ gimp_brightness_contrast_tool_motion (GimpTool *tool,
|
|||
bc_tool->dx = (coords->x - bc_tool->x);
|
||||
bc_tool->dy = - (coords->y - bc_tool->y);
|
||||
|
||||
g_object_set (bc_tool->config,
|
||||
g_object_set (GIMP_IMAGE_MAP_TOOL (tool)->config,
|
||||
"brightness", CLAMP (bc_tool->dy, -127.0, 127.0) / 127.0,
|
||||
"contrast", CLAMP (bc_tool->dx, -127.0, 127.0) / 127.0,
|
||||
NULL);
|
||||
|
|
|
@ -35,16 +35,14 @@ typedef struct _GimpBrightnessContrastToolClass GimpBrightnessContrastToolClass;
|
|||
|
||||
struct _GimpBrightnessContrastTool
|
||||
{
|
||||
GimpImageMapTool parent_instance;
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
GimpBrightnessContrastConfig *config;
|
||||
|
||||
gdouble x, y;
|
||||
gdouble dx, dy;
|
||||
gdouble x, y;
|
||||
gdouble dx, dy;
|
||||
|
||||
/* dialog */
|
||||
GtkWidget *brightness_scale;
|
||||
GtkWidget *contrast_scale;
|
||||
GtkWidget *brightness_scale;
|
||||
GtkWidget *contrast_scale;
|
||||
};
|
||||
|
||||
struct _GimpBrightnessContrastToolClass
|
||||
|
|
|
@ -51,14 +51,17 @@ static gboolean gimp_color_balance_tool_initialize (GimpTool *tool,
|
|||
GimpDisplay *display,
|
||||
GError **error);
|
||||
|
||||
static GeglNode * gimp_color_balance_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
static gchar * gimp_color_balance_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_color_balance_tool_dialog (GimpImageMapTool *im_tool);
|
||||
static void gimp_color_balance_tool_reset (GimpImageMapTool *im_tool);
|
||||
|
||||
static void color_balance_range_reset_callback (GtkWidget *widget,
|
||||
GimpColorBalanceTool *cb_tool);
|
||||
static void color_balance_range_reset_callback (GtkWidget *widget,
|
||||
GimpImageMapTool *im_tool);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpColorBalanceTool, gimp_color_balance_tool,
|
||||
|
@ -91,7 +94,6 @@ gimp_color_balance_tool_class_init (GimpColorBalanceToolClass *klass)
|
|||
|
||||
tool_class->initialize = gimp_color_balance_tool_initialize;
|
||||
|
||||
im_tool_class->dialog_desc = _("Adjust Color Balance");
|
||||
im_tool_class->settings_name = "color-balance";
|
||||
im_tool_class->import_dialog_title = _("Import Color Balance Settings");
|
||||
im_tool_class->export_dialog_title = _("Export Color Balance Settings");
|
||||
|
@ -127,21 +129,17 @@ gimp_color_balance_tool_initialize (GimpTool *tool,
|
|||
return GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error);
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
static gchar *
|
||||
gimp_color_balance_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (im_tool);
|
||||
*description = g_strdup (_("Adjust Color Balance"));
|
||||
|
||||
cb_tool->config = g_object_new (GIMP_TYPE_COLOR_BALANCE_CONFIG, NULL);
|
||||
|
||||
*config = G_OBJECT (cb_tool->config);
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gimp:color-balance",
|
||||
"config", cb_tool->config,
|
||||
NULL);
|
||||
return g_strdup ("gimp:color-balance");
|
||||
}
|
||||
|
||||
|
||||
|
@ -248,19 +246,22 @@ gimp_color_balance_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
static void
|
||||
gimp_color_balance_tool_reset (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpColorBalanceTool *cb_tool = GIMP_COLOR_BALANCE_TOOL (im_tool);
|
||||
GimpTransferMode range = cb_tool->config->range;
|
||||
GimpTransferMode range;
|
||||
|
||||
g_object_get (im_tool->config,
|
||||
"range", &range,
|
||||
NULL);
|
||||
|
||||
GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->reset (im_tool);
|
||||
|
||||
g_object_set (cb_tool->config,
|
||||
g_object_set (im_tool->config,
|
||||
"range", range,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
color_balance_range_reset_callback (GtkWidget *widget,
|
||||
GimpColorBalanceTool *cb_tool)
|
||||
color_balance_range_reset_callback (GtkWidget *widget,
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
gimp_color_balance_config_reset_range (cb_tool->config);
|
||||
gimp_color_balance_config_reset_range (GIMP_COLOR_BALANCE_CONFIG (im_tool->config));
|
||||
}
|
||||
|
|
|
@ -36,9 +36,7 @@ typedef struct _GimpColorBalanceToolClass GimpColorBalanceToolClass;
|
|||
|
||||
struct _GimpColorBalanceTool
|
||||
{
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
GimpColorBalanceConfig *config;
|
||||
GimpImageMapTool parent_instance;
|
||||
};
|
||||
|
||||
struct _GimpColorBalanceToolClass
|
||||
|
|
|
@ -27,8 +27,6 @@
|
|||
|
||||
#include "tools-types.h"
|
||||
|
||||
#include "operations/gimpcolorizeconfig.h"
|
||||
|
||||
#include "core/gimpdrawable.h"
|
||||
#include "core/gimperror.h"
|
||||
#include "core/gimpimage.h"
|
||||
|
@ -52,9 +50,12 @@ static gboolean gimp_colorize_tool_initialize (GimpTool *tool,
|
|||
GimpDisplay *display,
|
||||
GError **error);
|
||||
|
||||
static GeglNode * gimp_colorize_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
static gchar * gimp_colorize_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_colorize_tool_dialog (GimpImageMapTool *im_tool);
|
||||
static void gimp_colorize_tool_color_picked (GimpImageMapTool *im_tool,
|
||||
gpointer identifier,
|
||||
|
@ -94,7 +95,6 @@ gimp_colorize_tool_class_init (GimpColorizeToolClass *klass)
|
|||
|
||||
tool_class->initialize = gimp_colorize_tool_initialize;
|
||||
|
||||
im_tool_class->dialog_desc = _("Colorize the Image");
|
||||
im_tool_class->settings_name = "colorize";
|
||||
im_tool_class->import_dialog_title = _("Import Colorize Settings");
|
||||
im_tool_class->export_dialog_title = _("Export Colorize Settings");
|
||||
|
@ -130,17 +130,17 @@ gimp_colorize_tool_initialize (GimpTool *tool,
|
|||
return GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error);
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
static gchar *
|
||||
gimp_colorize_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
*config = g_object_new (GIMP_TYPE_COLORIZE_CONFIG, NULL);
|
||||
*description = g_strdup (_("Colorize the Image"));
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gimp:colorize",
|
||||
"config", *config,
|
||||
NULL);
|
||||
return g_strdup ("gimp:colorize");
|
||||
}
|
||||
|
||||
|
||||
|
@ -149,9 +149,9 @@ gimp_colorize_tool_get_operation (GimpImageMapTool *im_tool,
|
|||
/***************************/
|
||||
|
||||
static void
|
||||
gimp_colorize_tool_dialog (GimpImageMapTool *image_map_tool)
|
||||
gimp_colorize_tool_dialog (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpColorizeTool *col_tool = GIMP_COLORIZE_TOOL (image_map_tool);
|
||||
GimpColorizeTool *col_tool = GIMP_COLORIZE_TOOL (im_tool);
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
|
@ -159,7 +159,7 @@ gimp_colorize_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
GtkWidget *hbox;
|
||||
GtkWidget *button;
|
||||
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (image_map_tool);
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (im_tool);
|
||||
|
||||
frame = gimp_frame_new (_("Select Color"));
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame, FALSE, FALSE, 0);
|
||||
|
@ -170,21 +170,21 @@ gimp_colorize_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
gtk_widget_show (vbox);
|
||||
|
||||
/* Create the hue scale widget */
|
||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "hue",
|
||||
scale = gimp_prop_spin_scale_new (im_tool->config, "hue",
|
||||
_("_Hue"), 1.0 / 360.0, 15.0 / 360.0, 0);
|
||||
gimp_prop_widget_set_factor (scale, 360.0, 0.0, 0.0, 1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
|
||||
gtk_widget_show (scale);
|
||||
|
||||
/* Create the saturation scale widget */
|
||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "saturation",
|
||||
scale = gimp_prop_spin_scale_new (im_tool->config, "saturation",
|
||||
_("_Saturation"), 0.01, 0.1, 0);
|
||||
gimp_prop_widget_set_factor (scale, 100.0, 0.0, 0.0, 1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
|
||||
gtk_widget_show (scale);
|
||||
|
||||
/* Create the lightness scale widget */
|
||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "lightness",
|
||||
scale = gimp_prop_spin_scale_new (im_tool->config, "lightness",
|
||||
_("_Lightness"), 0.01, 0.1, 0);
|
||||
gimp_prop_widget_set_factor (scale, 100.0, 0.0, 0.0, 1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
|
||||
|
@ -195,7 +195,7 @@ gimp_colorize_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_widget_show (hbox);
|
||||
|
||||
button = gimp_prop_color_button_new (image_map_tool->config, "color",
|
||||
button = gimp_prop_color_button_new (im_tool->config, "color",
|
||||
_("Colorize Color"),
|
||||
128, 24,
|
||||
GIMP_COLOR_AREA_FLAT);
|
||||
|
@ -205,7 +205,7 @@ gimp_colorize_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
gtk_box_pack_start (GTK_BOX (hbox), button, TRUE, TRUE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
button = gimp_image_map_tool_add_color_picker (image_map_tool,
|
||||
button = gimp_image_map_tool_add_color_picker (im_tool,
|
||||
"colorize",
|
||||
GIMP_STOCK_COLOR_PICKER_GRAY,
|
||||
_("Pick color from image"));
|
||||
|
|
|
@ -89,15 +89,19 @@ static void gimp_curves_tool_color_picked (GimpColorTool *color_t
|
|||
const Babl *sample_format,
|
||||
gpointer pixel,
|
||||
const GimpRGB *color);
|
||||
static GeglNode * gimp_curves_tool_get_operation (GimpImageMapTool *image_map_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
static void gimp_curves_tool_dialog (GimpImageMapTool *image_map_tool);
|
||||
static void gimp_curves_tool_reset (GimpImageMapTool *image_map_tool);
|
||||
static gboolean gimp_curves_tool_settings_import(GimpImageMapTool *image_map_tool,
|
||||
|
||||
static gchar * gimp_curves_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_curves_tool_dialog (GimpImageMapTool *im_tool);
|
||||
static void gimp_curves_tool_reset (GimpImageMapTool *im_tool);
|
||||
static gboolean gimp_curves_tool_settings_import(GimpImageMapTool *im_tool,
|
||||
GInputStream *input,
|
||||
GError **error);
|
||||
static gboolean gimp_curves_tool_settings_export(GimpImageMapTool *image_map_tool,
|
||||
static gboolean gimp_curves_tool_settings_export(GimpImageMapTool *im_tool,
|
||||
GOutputStream *output,
|
||||
GError **error);
|
||||
|
||||
|
@ -168,7 +172,6 @@ gimp_curves_tool_class_init (GimpCurvesToolClass *klass)
|
|||
|
||||
color_tool_class->picked = gimp_curves_tool_color_picked;
|
||||
|
||||
im_tool_class->dialog_desc = _("Adjust Color Curves");
|
||||
im_tool_class->settings_name = "curves";
|
||||
im_tool_class->import_dialog_title = _("Import Curves");
|
||||
im_tool_class->export_dialog_title = _("Export Curves");
|
||||
|
@ -194,6 +197,10 @@ gimp_curves_tool_constructed (GObject *object)
|
|||
{
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (GIMP_IMAGE_MAP_TOOL (object)->config, "notify",
|
||||
G_CALLBACK (gimp_curves_tool_config_notify),
|
||||
object, 0);
|
||||
|
||||
/* always pick colors */
|
||||
gimp_color_tool_enable (GIMP_COLOR_TOOL (object),
|
||||
GIMP_COLOR_TOOL_GET_OPTIONS (object));
|
||||
|
@ -246,8 +253,9 @@ gimp_curves_tool_button_release (GimpTool *tool,
|
|||
GimpButtonReleaseType release_type,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpCurvesTool *c_tool = GIMP_CURVES_TOOL (tool);
|
||||
GimpCurvesConfig *config = c_tool->config;
|
||||
GimpCurvesTool *c_tool = GIMP_CURVES_TOOL (tool);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
|
||||
if (state & gimp_get_extend_selection_mask ())
|
||||
{
|
||||
|
@ -363,8 +371,10 @@ gimp_curves_tool_color_picked (GimpColorTool *color_tool,
|
|||
gpointer pixel,
|
||||
const GimpRGB *color)
|
||||
{
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (color_tool);
|
||||
GimpDrawable *drawable;
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (color_tool);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (color_tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
GimpDrawable *drawable;
|
||||
|
||||
drawable = GIMP_IMAGE_MAP_TOOL (tool)->drawable;
|
||||
|
||||
|
@ -381,28 +391,20 @@ gimp_curves_tool_color_picked (GimpColorTool *color_tool,
|
|||
color->b);
|
||||
|
||||
gimp_curve_view_set_xpos (GIMP_CURVE_VIEW (tool->graph),
|
||||
tool->picked_color[tool->config->channel]);
|
||||
tool->picked_color[config->channel]);
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
gimp_curves_tool_get_operation (GimpImageMapTool *image_map_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
static gchar *
|
||||
gimp_curves_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (image_map_tool);
|
||||
*description = g_strdup (_("Adjust Color Curves"));
|
||||
|
||||
tool->config = g_object_new (GIMP_TYPE_CURVES_CONFIG, NULL);
|
||||
|
||||
g_signal_connect_object (tool->config, "notify",
|
||||
G_CALLBACK (gimp_curves_tool_config_notify),
|
||||
tool, 0);
|
||||
|
||||
*config = G_OBJECT (tool->config);
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gimp:curves",
|
||||
"config", tool->config,
|
||||
NULL);
|
||||
return g_strdup ("gimp:curves");
|
||||
}
|
||||
|
||||
|
||||
|
@ -411,11 +413,11 @@ gimp_curves_tool_get_operation (GimpImageMapTool *image_map_tool,
|
|||
/*******************/
|
||||
|
||||
static void
|
||||
gimp_curves_tool_dialog (GimpImageMapTool *image_map_tool)
|
||||
gimp_curves_tool_dialog (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (image_map_tool);
|
||||
GimpToolOptions *tool_options = GIMP_TOOL_GET_OPTIONS (image_map_tool);
|
||||
GimpCurvesConfig *config = tool->config;
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (im_tool);
|
||||
GimpToolOptions *tool_options = GIMP_TOOL_GET_OPTIONS (im_tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
GtkListStore *store;
|
||||
GtkSizeGroup *label_group;
|
||||
GtkWidget *main_vbox;
|
||||
|
@ -429,12 +431,12 @@ gimp_curves_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
GtkWidget *bar;
|
||||
GtkWidget *combo;
|
||||
|
||||
g_signal_connect (image_map_tool->settings_box, "file-dialog-setup",
|
||||
g_signal_connect (im_tool->settings_box, "file-dialog-setup",
|
||||
G_CALLBACK (gimp_curves_tool_export_setup),
|
||||
image_map_tool);
|
||||
im_tool);
|
||||
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (image_map_tool);
|
||||
label_group = gimp_image_map_tool_dialog_get_label_group (image_map_tool);
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (im_tool);
|
||||
label_group = gimp_image_map_tool_dialog_get_label_group (im_tool);
|
||||
|
||||
/* The combo box for selecting channels */
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
|
@ -577,13 +579,13 @@ gimp_curves_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
}
|
||||
|
||||
static void
|
||||
gimp_curves_tool_reset (GimpImageMapTool *image_map_tool)
|
||||
gimp_curves_tool_reset (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (image_map_tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
GimpCurvesConfig *default_config;
|
||||
GimpHistogramChannel channel;
|
||||
|
||||
default_config = GIMP_CURVES_CONFIG (image_map_tool->default_config);
|
||||
default_config = GIMP_CURVES_CONFIG (im_tool->default_config);
|
||||
|
||||
for (channel = GIMP_HISTOGRAM_VALUE;
|
||||
channel <= GIMP_HISTOGRAM_ALPHA;
|
||||
|
@ -591,35 +593,35 @@ gimp_curves_tool_reset (GimpImageMapTool *image_map_tool)
|
|||
{
|
||||
if (default_config)
|
||||
{
|
||||
GimpCurveType curve_type = tool->config->curve[channel]->curve_type;
|
||||
GimpCurveType curve_type = config->curve[channel]->curve_type;
|
||||
|
||||
g_object_freeze_notify (G_OBJECT (tool->config->curve[channel]));
|
||||
g_object_freeze_notify (G_OBJECT (config->curve[channel]));
|
||||
|
||||
gimp_config_copy (GIMP_CONFIG (default_config->curve[channel]),
|
||||
GIMP_CONFIG (tool->config->curve[channel]),
|
||||
GIMP_CONFIG (config->curve[channel]),
|
||||
0);
|
||||
|
||||
g_object_set (tool->config->curve[channel],
|
||||
g_object_set (config->curve[channel],
|
||||
"curve-type", curve_type,
|
||||
NULL);
|
||||
|
||||
g_object_thaw_notify (G_OBJECT (tool->config->curve[channel]));
|
||||
g_object_thaw_notify (G_OBJECT (config->curve[channel]));
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_curve_reset (tool->config->curve[channel], FALSE);
|
||||
gimp_curve_reset (config->curve[channel], FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_curves_tool_settings_import (GimpImageMapTool *image_map_tool,
|
||||
gimp_curves_tool_settings_import (GimpImageMapTool *im_tool,
|
||||
GInputStream *input,
|
||||
GError **error)
|
||||
{
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (image_map_tool);
|
||||
gchar header[64];
|
||||
gsize bytes_read;
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
gchar header[64];
|
||||
gsize bytes_read;
|
||||
|
||||
if (! g_input_stream_read_all (input, header, sizeof (header),
|
||||
&bytes_read, NULL, error) ||
|
||||
|
@ -632,24 +634,25 @@ gimp_curves_tool_settings_import (GimpImageMapTool *image_map_tool,
|
|||
g_seekable_seek (G_SEEKABLE (input), 0, G_SEEK_SET, NULL, NULL);
|
||||
|
||||
if (g_str_has_prefix (header, "# GIMP Curves File\n"))
|
||||
return gimp_curves_config_load_cruft (tool->config, input, error);
|
||||
return gimp_curves_config_load_cruft (config, input, error);
|
||||
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_import (image_map_tool,
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_import (im_tool,
|
||||
input,
|
||||
error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_curves_tool_settings_export (GimpImageMapTool *image_map_tool,
|
||||
gimp_curves_tool_settings_export (GimpImageMapTool *im_tool,
|
||||
GOutputStream *output,
|
||||
GError **error)
|
||||
{
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (image_map_tool);
|
||||
GimpCurvesTool *tool = GIMP_CURVES_TOOL (im_tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
|
||||
if (tool->export_old_format)
|
||||
return gimp_curves_config_save_cruft (tool->config, output, error);
|
||||
return gimp_curves_config_save_cruft (config, output, error);
|
||||
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_export (image_map_tool,
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_export (im_tool,
|
||||
output,
|
||||
error);
|
||||
}
|
||||
|
@ -679,8 +682,9 @@ gimp_curves_tool_export_setup (GimpSettingsBox *settings_box,
|
|||
static void
|
||||
gimp_curves_tool_update_channel (GimpCurvesTool *tool)
|
||||
{
|
||||
GimpCurvesConfig *config = GIMP_CURVES_TOOL (tool)->config;
|
||||
GimpCurve *curve = config->curve[config->channel];
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
GimpCurve *curve = config->curve[config->channel];
|
||||
GimpHistogramChannel channel;
|
||||
|
||||
gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (tool->channel_menu),
|
||||
|
@ -773,7 +777,8 @@ static void
|
|||
curves_channel_callback (GtkWidget *widget,
|
||||
GimpCurvesTool *tool)
|
||||
{
|
||||
GimpCurvesConfig *config = tool->config;
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
gint value;
|
||||
|
||||
if (gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), &value) &&
|
||||
|
@ -789,7 +794,10 @@ static void
|
|||
curves_channel_reset_callback (GtkWidget *widget,
|
||||
GimpCurvesTool *tool)
|
||||
{
|
||||
gimp_curve_reset (tool->config->curve[tool->config->channel], FALSE);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
|
||||
gimp_curve_reset (config->curve[config->channel], FALSE);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -827,7 +835,8 @@ curves_curve_type_callback (GtkWidget *widget,
|
|||
|
||||
if (gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), &value))
|
||||
{
|
||||
GimpCurvesConfig *config = tool->config;
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpCurvesConfig *config = GIMP_CURVES_CONFIG (im_tool->config);
|
||||
GimpCurveType curve_type = value;
|
||||
|
||||
if (config->curve[config->channel]->curve_type != curve_type)
|
||||
|
|
|
@ -34,21 +34,19 @@ typedef struct _GimpCurvesToolClass GimpCurvesToolClass;
|
|||
|
||||
struct _GimpCurvesTool
|
||||
{
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
GimpCurvesConfig *config;
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
/* dialog */
|
||||
gdouble picked_color[5];
|
||||
gdouble picked_color[5];
|
||||
|
||||
GtkWidget *channel_menu;
|
||||
GtkWidget *xrange;
|
||||
GtkWidget *yrange;
|
||||
GtkWidget *graph;
|
||||
GtkWidget *curve_type;
|
||||
GtkWidget *channel_menu;
|
||||
GtkWidget *xrange;
|
||||
GtkWidget *yrange;
|
||||
GtkWidget *graph;
|
||||
GtkWidget *curve_type;
|
||||
|
||||
/* export dialog */
|
||||
gboolean export_old_format;
|
||||
gboolean export_old_format;
|
||||
};
|
||||
|
||||
struct _GimpCurvesToolClass
|
||||
|
|
|
@ -49,10 +49,16 @@ enum
|
|||
|
||||
/* local function prototypes */
|
||||
|
||||
static void gimp_gegl_tool_dialog (GimpImageMapTool *im_tool);
|
||||
static gchar * gimp_gegl_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_gegl_tool_dialog (GimpImageMapTool *im_tool);
|
||||
|
||||
static void gimp_gegl_tool_operation_changed (GtkWidget *widget,
|
||||
GimpGeglTool *tool);
|
||||
static void gimp_gegl_tool_operation_changed (GtkWidget *widget,
|
||||
GimpGeglTool *tool);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpGeglTool, gimp_gegl_tool, GIMP_TYPE_OPERATION_TOOL)
|
||||
|
@ -82,9 +88,8 @@ gimp_gegl_tool_class_init (GimpGeglToolClass *klass)
|
|||
{
|
||||
GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass);
|
||||
|
||||
im_tool_class->dialog_desc = _("GEGL Operation");
|
||||
|
||||
im_tool_class->dialog = gimp_gegl_tool_dialog;
|
||||
im_tool_class->get_operation = gimp_gegl_tool_get_operation;
|
||||
im_tool_class->dialog = gimp_gegl_tool_dialog;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -324,6 +329,31 @@ gimp_get_geglopclasses (void)
|
|||
/* Gegl dialog */
|
||||
/*****************/
|
||||
|
||||
static gchar *
|
||||
gimp_gegl_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
gchar *operation;
|
||||
|
||||
operation = GIMP_IMAGE_MAP_TOOL_GET_CLASS (im_tool)->get_operation (im_tool,
|
||||
title,
|
||||
description,
|
||||
undo_desc,
|
||||
icon_name,
|
||||
help_id);
|
||||
|
||||
if (*description)
|
||||
g_free (*description);
|
||||
|
||||
*description = g_strdup (_("GEGL Operation"));
|
||||
|
||||
return operation;
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_gegl_tool_dialog (GimpImageMapTool *image_map_tool)
|
||||
{
|
||||
|
@ -463,6 +493,7 @@ gimp_gegl_tool_operation_changed (GtkWidget *widget,
|
|||
gimp_operation_tool_set_operation (GIMP_OPERATION_TOOL (tool),
|
||||
operation,
|
||||
_("GEGL Operation"),
|
||||
_("GEGL Operation"),
|
||||
NULL,
|
||||
GIMP_STOCK_GEGL,
|
||||
GIMP_HELP_TOOL_GEGL);
|
||||
|
|
|
@ -52,13 +52,18 @@
|
|||
|
||||
/* local function prototypes */
|
||||
|
||||
static void gimp_hue_saturation_tool_constructed (GObject *object);
|
||||
|
||||
static gboolean gimp_hue_saturation_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
GError **error);
|
||||
|
||||
static GeglNode * gimp_hue_saturation_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
static gchar * gimp_hue_saturation_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_hue_saturation_tool_dialog (GimpImageMapTool *im_tool);
|
||||
static void gimp_hue_saturation_tool_reset (GimpImageMapTool *im_tool);
|
||||
|
||||
|
@ -69,9 +74,9 @@ static void hue_saturation_config_notify (GObject
|
|||
static void hue_saturation_update_color_areas (GimpHueSaturationTool *hs_tool);
|
||||
|
||||
static void hue_saturation_range_callback (GtkWidget *widget,
|
||||
GimpHueSaturationTool *hs_tool);
|
||||
GimpImageMapTool *im_tool);
|
||||
static void hue_saturation_range_reset_callback (GtkWidget *widget,
|
||||
GimpHueSaturationTool *hs_tool);
|
||||
GimpImageMapTool *hs_tool);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpHueSaturationTool, gimp_hue_saturation_tool,
|
||||
|
@ -99,12 +104,14 @@ gimp_hue_saturation_tool_register (GimpToolRegisterCallback callback,
|
|||
static void
|
||||
gimp_hue_saturation_tool_class_init (GimpHueSaturationToolClass *klass)
|
||||
{
|
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass);
|
||||
|
||||
object_class->constructed = gimp_hue_saturation_tool_constructed;
|
||||
|
||||
tool_class->initialize = gimp_hue_saturation_tool_initialize;
|
||||
|
||||
im_tool_class->dialog_desc = _("Adjust Hue / Lightness / Saturation");
|
||||
im_tool_class->settings_name = "hue-saturation";
|
||||
im_tool_class->import_dialog_title = _("Import Hue-Saturation Settings");
|
||||
im_tool_class->export_dialog_title = _("Export Hue-Saturation Settings");
|
||||
|
@ -119,6 +126,16 @@ gimp_hue_saturation_tool_init (GimpHueSaturationTool *hs_tool)
|
|||
{
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_hue_saturation_tool_constructed (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (GIMP_IMAGE_MAP_TOOL (object)->config, "notify",
|
||||
G_CALLBACK (hue_saturation_config_notify),
|
||||
object, 0);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_hue_saturation_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
|
@ -140,25 +157,17 @@ gimp_hue_saturation_tool_initialize (GimpTool *tool,
|
|||
return GIMP_TOOL_CLASS (parent_class)->initialize (tool, display, error);
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
static gchar *
|
||||
gimp_hue_saturation_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
GimpHueSaturationTool *hs_tool = GIMP_HUE_SATURATION_TOOL (im_tool);
|
||||
*description = g_strdup (_("Adjust Hue / Lightness / Saturation"));
|
||||
|
||||
hs_tool->config = g_object_new (GIMP_TYPE_HUE_SATURATION_CONFIG, NULL);
|
||||
|
||||
g_signal_connect_object (hs_tool->config, "notify",
|
||||
G_CALLBACK (hue_saturation_config_notify),
|
||||
G_OBJECT (hs_tool), 0);
|
||||
|
||||
*config = G_OBJECT (hs_tool->config);
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gimp:hue-saturation",
|
||||
"config", hs_tool->config,
|
||||
NULL);
|
||||
return g_strdup ("gimp:hue-saturation");
|
||||
}
|
||||
|
||||
|
||||
|
@ -167,10 +176,10 @@ gimp_hue_saturation_tool_get_operation (GimpImageMapTool *im_tool,
|
|||
/***************************/
|
||||
|
||||
static void
|
||||
gimp_hue_saturation_tool_dialog (GimpImageMapTool *image_map_tool)
|
||||
gimp_hue_saturation_tool_dialog (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpHueSaturationTool *hs_tool = GIMP_HUE_SATURATION_TOOL (image_map_tool);
|
||||
GimpHueSaturationConfig *config = hs_tool->config;
|
||||
GimpHueSaturationTool *hs_tool = GIMP_HUE_SATURATION_TOOL (im_tool);
|
||||
GimpHueSaturationConfig *config = GIMP_HUE_SATURATION_CONFIG (im_tool->config);
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *frame;
|
||||
GtkWidget *vbox;
|
||||
|
@ -202,7 +211,7 @@ gimp_hue_saturation_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
{ N_("_M"), N_("Magenta"), 3, 2, 4, 2 }
|
||||
};
|
||||
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (image_map_tool);
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (im_tool);
|
||||
|
||||
frame = gimp_frame_new (_("Select Primary Color to Adjust"));
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), frame, TRUE, TRUE, 0);
|
||||
|
@ -284,7 +293,7 @@ gimp_hue_saturation_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
gtk_widget_show (table);
|
||||
|
||||
/* Create the 'Overlap' option slider */
|
||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "overlap",
|
||||
scale = gimp_prop_spin_scale_new (im_tool->config, "overlap",
|
||||
_("_Overlap"), 0.01, 0.1, 0);
|
||||
gimp_prop_widget_set_factor (scale, 100.0, 0.0, 0.0, 1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
|
||||
|
@ -299,21 +308,21 @@ gimp_hue_saturation_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
gtk_widget_show (vbox);
|
||||
|
||||
/* Create the hue scale widget */
|
||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "hue",
|
||||
scale = gimp_prop_spin_scale_new (im_tool->config, "hue",
|
||||
_("_Hue"), 1.0 / 180.0, 15.0 / 180.0, 0);
|
||||
gimp_prop_widget_set_factor (scale, 180.0, 0.0, 0.0, 1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
|
||||
gtk_widget_show (scale);
|
||||
|
||||
/* Create the lightness scale widget */
|
||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "lightness",
|
||||
scale = gimp_prop_spin_scale_new (im_tool->config, "lightness",
|
||||
_("_Lightness"), 0.01, 0.1, 0);
|
||||
gimp_prop_widget_set_factor (scale, 100.0, 0.0, 0.0, 1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
|
||||
gtk_widget_show (scale);
|
||||
|
||||
/* Create the saturation scale widget */
|
||||
scale = gimp_prop_spin_scale_new (image_map_tool->config, "saturation",
|
||||
scale = gimp_prop_spin_scale_new (im_tool->config, "saturation",
|
||||
_("_Saturation"), 0.01, 0.1, 0);
|
||||
gimp_prop_widget_set_factor (scale, 100.0, 0.0, 0.0, 1);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0);
|
||||
|
@ -338,29 +347,32 @@ gimp_hue_saturation_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
}
|
||||
|
||||
static void
|
||||
gimp_hue_saturation_tool_reset (GimpImageMapTool *image_map_tool)
|
||||
gimp_hue_saturation_tool_reset (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpHueSaturationTool *hs_tool = GIMP_HUE_SATURATION_TOOL (image_map_tool);
|
||||
GimpHueRange range = hs_tool->config->range;
|
||||
GimpHueRange range;
|
||||
|
||||
g_object_freeze_notify (image_map_tool->config);
|
||||
g_object_freeze_notify (im_tool->config);
|
||||
|
||||
if (image_map_tool->default_config)
|
||||
g_object_get (im_tool->config,
|
||||
"range", &range,
|
||||
NULL);
|
||||
|
||||
if (im_tool->default_config)
|
||||
{
|
||||
gimp_config_copy (GIMP_CONFIG (image_map_tool->default_config),
|
||||
GIMP_CONFIG (image_map_tool->config),
|
||||
gimp_config_copy (GIMP_CONFIG (im_tool->default_config),
|
||||
GIMP_CONFIG (im_tool->config),
|
||||
0);
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_config_reset (GIMP_CONFIG (image_map_tool->config));
|
||||
gimp_config_reset (GIMP_CONFIG (im_tool->config));
|
||||
}
|
||||
|
||||
g_object_set (hs_tool->config,
|
||||
g_object_set (im_tool->config,
|
||||
"range", range,
|
||||
NULL);
|
||||
|
||||
g_object_thaw_notify (image_map_tool->config);
|
||||
g_object_thaw_notify (im_tool->config);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -395,13 +407,15 @@ hue_saturation_update_color_areas (GimpHueSaturationTool *hs_tool)
|
|||
{ 1.0, 0, 1.0, }
|
||||
};
|
||||
|
||||
gint i;
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (hs_tool);
|
||||
GimpHueSaturationConfig *config = GIMP_HUE_SATURATION_CONFIG (im_tool->config);
|
||||
gint i;
|
||||
|
||||
for (i = 0; i < 6; i++)
|
||||
{
|
||||
GimpRGB color = default_colors[i];
|
||||
|
||||
gimp_operation_hue_saturation_map (hs_tool->config, &color, i + 1,
|
||||
gimp_operation_hue_saturation_map (config, &color, i + 1,
|
||||
&color);
|
||||
|
||||
gimp_color_area_set_color (GIMP_COLOR_AREA (hs_tool->hue_range_color_area[i]),
|
||||
|
@ -410,23 +424,23 @@ hue_saturation_update_color_areas (GimpHueSaturationTool *hs_tool)
|
|||
}
|
||||
|
||||
static void
|
||||
hue_saturation_range_callback (GtkWidget *widget,
|
||||
GimpHueSaturationTool *hs_tool)
|
||||
hue_saturation_range_callback (GtkWidget *widget,
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (widget)))
|
||||
{
|
||||
GimpHueRange range;
|
||||
|
||||
gimp_radio_button_update (widget, &range);
|
||||
g_object_set (hs_tool->config,
|
||||
g_object_set (im_tool->config,
|
||||
"range", range,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
hue_saturation_range_reset_callback (GtkWidget *widget,
|
||||
GimpHueSaturationTool *hs_tool)
|
||||
hue_saturation_range_reset_callback (GtkWidget *widget,
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
gimp_hue_saturation_config_reset_range (hs_tool->config);
|
||||
gimp_hue_saturation_config_reset_range (GIMP_HUE_SATURATION_CONFIG (im_tool->config));
|
||||
}
|
||||
|
|
|
@ -35,13 +35,11 @@ typedef struct _GimpHueSaturationToolClass GimpHueSaturationToolClass;
|
|||
|
||||
struct _GimpHueSaturationTool
|
||||
{
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
GimpHueSaturationConfig *config;
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
/* dialog */
|
||||
GtkWidget *range_radio;
|
||||
GtkWidget *hue_range_color_area[6];
|
||||
GtkWidget *range_radio;
|
||||
GtkWidget *hue_range_color_area[6];
|
||||
};
|
||||
|
||||
struct _GimpHueSaturationToolClass
|
||||
|
|
|
@ -38,6 +38,8 @@
|
|||
|
||||
#include "config/gimpguiconfig.h"
|
||||
|
||||
#include "gegl/gimp-gegl-config.h"
|
||||
|
||||
#include "core/gimp.h"
|
||||
#include "core/gimpdrawable.h"
|
||||
#include "core/gimperror.h"
|
||||
|
@ -179,13 +181,11 @@ gimp_image_map_tool_class_init (GimpImageMapToolClass *klass)
|
|||
color_tool_class->pick = gimp_image_map_tool_pick_color;
|
||||
color_tool_class->picked = gimp_image_map_tool_color_picked;
|
||||
|
||||
klass->dialog_desc = NULL;
|
||||
klass->settings_name = NULL;
|
||||
klass->import_dialog_title = NULL;
|
||||
klass->export_dialog_title = NULL;
|
||||
|
||||
klass->get_operation = NULL;
|
||||
klass->map = NULL;
|
||||
klass->dialog = NULL;
|
||||
klass->reset = gimp_image_map_tool_real_reset;
|
||||
klass->get_settings_ui = gimp_image_map_tool_real_get_settings_ui;
|
||||
|
@ -249,12 +249,36 @@ gimp_image_map_tool_finalize (GObject *object)
|
|||
image_map_tool->default_config = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->title)
|
||||
{
|
||||
g_free (image_map_tool->title);
|
||||
image_map_tool->title = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->description)
|
||||
{
|
||||
g_free (image_map_tool->description);
|
||||
image_map_tool->description = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->undo_desc)
|
||||
{
|
||||
g_free (image_map_tool->undo_desc);
|
||||
image_map_tool->undo_desc = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->icon_name)
|
||||
{
|
||||
g_free (image_map_tool->icon_name);
|
||||
image_map_tool->icon_name = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->help_id)
|
||||
{
|
||||
g_free (image_map_tool->help_id);
|
||||
image_map_tool->help_id = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->label_group)
|
||||
{
|
||||
g_object_unref (image_map_tool->label_group);
|
||||
|
@ -290,11 +314,11 @@ gimp_image_map_tool_initialize (GimpTool *tool,
|
|||
GimpDisplay *display,
|
||||
GError **error)
|
||||
{
|
||||
GimpImageMapTool *image_map_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpToolInfo *tool_info = tool->tool_info;
|
||||
GimpImage *image = gimp_display_get_image (display);
|
||||
GimpDrawable *drawable = gimp_image_get_active_drawable (image);
|
||||
GimpDisplayShell *shell = gimp_display_get_shell (display);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpToolInfo *tool_info = tool->tool_info;
|
||||
GimpImage *image = gimp_display_get_image (display);
|
||||
GimpDrawable *drawable = gimp_image_get_active_drawable (image);
|
||||
GimpDisplayShell *shell = gimp_display_get_shell (display);
|
||||
|
||||
if (! drawable)
|
||||
return FALSE;
|
||||
|
@ -320,34 +344,32 @@ gimp_image_map_tool_initialize (GimpTool *tool,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
if (image_map_tool->active_picker)
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (image_map_tool->active_picker),
|
||||
if (im_tool->active_picker)
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (im_tool->active_picker),
|
||||
FALSE);
|
||||
|
||||
/* set display so the dialog can be hidden on display destruction */
|
||||
tool->display = display;
|
||||
|
||||
if (image_map_tool->config)
|
||||
gimp_config_reset (GIMP_CONFIG (image_map_tool->config));
|
||||
if (im_tool->config)
|
||||
gimp_config_reset (GIMP_CONFIG (im_tool->config));
|
||||
|
||||
if (! image_map_tool->gui)
|
||||
if (! im_tool->gui)
|
||||
{
|
||||
GimpImageMapToolClass *klass;
|
||||
GimpImageMapToolClass *klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (im_tool);
|
||||
GtkWidget *vbox;
|
||||
GtkWidget *toggle;
|
||||
gchar *operation_name;
|
||||
|
||||
klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (image_map_tool);
|
||||
|
||||
/* disabled for at least GIMP 2.8 */
|
||||
image_map_tool->overlay = FALSE;
|
||||
im_tool->overlay = FALSE;
|
||||
|
||||
image_map_tool->gui =
|
||||
im_tool->gui =
|
||||
gimp_tool_gui_new (tool_info,
|
||||
klass->dialog_desc,
|
||||
im_tool->description,
|
||||
gtk_widget_get_screen (GTK_WIDGET (shell)),
|
||||
gimp_widget_get_monitor (GTK_WIDGET (shell)),
|
||||
image_map_tool->overlay,
|
||||
im_tool->overlay,
|
||||
|
||||
GIMP_STOCK_RESET, RESPONSE_RESET,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
|
@ -355,21 +377,21 @@ gimp_image_map_tool_initialize (GimpTool *tool,
|
|||
|
||||
NULL);
|
||||
|
||||
gimp_tool_gui_set_default_response (image_map_tool->gui, GTK_RESPONSE_OK);
|
||||
gimp_tool_gui_set_default_response (im_tool->gui, GTK_RESPONSE_OK);
|
||||
|
||||
gimp_tool_gui_set_alternative_button_order (image_map_tool->gui,
|
||||
gimp_tool_gui_set_alternative_button_order (im_tool->gui,
|
||||
RESPONSE_RESET,
|
||||
GTK_RESPONSE_OK,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
|
||||
vbox = gimp_tool_gui_get_vbox (image_map_tool->gui);
|
||||
vbox = gimp_tool_gui_get_vbox (im_tool->gui);
|
||||
|
||||
g_signal_connect_object (image_map_tool->gui, "response",
|
||||
g_signal_connect_object (im_tool->gui, "response",
|
||||
G_CALLBACK (gimp_image_map_tool_response),
|
||||
G_OBJECT (image_map_tool), 0);
|
||||
G_OBJECT (im_tool), 0);
|
||||
|
||||
if (image_map_tool->config && klass->settings_name)
|
||||
if (im_tool->config && klass->settings_name)
|
||||
{
|
||||
GtkWidget *settings_ui;
|
||||
GFile *default_folder;
|
||||
|
@ -379,14 +401,14 @@ gimp_image_map_tool_initialize (GimpTool *tool,
|
|||
".settings");
|
||||
default_folder = gimp_directory_file (klass->settings_name, NULL);
|
||||
|
||||
settings_ui = klass->get_settings_ui (image_map_tool,
|
||||
settings_ui = klass->get_settings_ui (im_tool,
|
||||
klass->recent_settings,
|
||||
settings_file,
|
||||
klass->import_dialog_title,
|
||||
klass->export_dialog_title,
|
||||
tool_info->help_id,
|
||||
im_tool->help_id,
|
||||
default_folder,
|
||||
&image_map_tool->settings_box);
|
||||
&im_tool->settings_box);
|
||||
|
||||
g_object_unref (default_folder);
|
||||
g_object_unref (settings_file);
|
||||
|
@ -402,7 +424,7 @@ gimp_image_map_tool_initialize (GimpTool *tool,
|
|||
|
||||
g_signal_connect (toggle, "toggled",
|
||||
G_CALLBACK (gamma_hack),
|
||||
image_map_tool);
|
||||
im_tool);
|
||||
|
||||
/* The preview toggle */
|
||||
toggle = gimp_prop_check_button_new (G_OBJECT (tool_info->tool_options),
|
||||
|
@ -412,38 +434,49 @@ gimp_image_map_tool_initialize (GimpTool *tool,
|
|||
gtk_widget_show (toggle);
|
||||
|
||||
/* The area combo */
|
||||
gegl_node_get (image_map_tool->operation,
|
||||
gegl_node_get (im_tool->operation,
|
||||
"operation", &operation_name,
|
||||
NULL);
|
||||
|
||||
image_map_tool->region_combo =
|
||||
im_tool->region_combo =
|
||||
gimp_prop_enum_combo_box_new (G_OBJECT (tool_info->tool_options),
|
||||
"region",
|
||||
0, 0);
|
||||
gtk_box_pack_end (GTK_BOX (vbox), image_map_tool->region_combo,
|
||||
gtk_box_pack_end (GTK_BOX (vbox), im_tool->region_combo,
|
||||
FALSE, FALSE, 0);
|
||||
|
||||
if (operation_name &&
|
||||
gegl_operation_get_key (operation_name, "position-dependent"))
|
||||
{
|
||||
gtk_widget_show (image_map_tool->region_combo);
|
||||
gtk_widget_show (im_tool->region_combo);
|
||||
}
|
||||
|
||||
g_free (operation_name);
|
||||
|
||||
/* Fill in subclass widgets */
|
||||
gimp_image_map_tool_dialog (image_map_tool);
|
||||
gimp_image_map_tool_dialog (im_tool);
|
||||
}
|
||||
else
|
||||
{
|
||||
gimp_tool_gui_set_description (im_tool->gui, im_tool->description);
|
||||
}
|
||||
|
||||
gimp_tool_gui_set_shell (image_map_tool->gui, shell);
|
||||
gimp_tool_gui_set_viewable (image_map_tool->gui, GIMP_VIEWABLE (drawable));
|
||||
/* FIXME move these into the block above once gimp_tool_gui_new()
|
||||
* got more arguments
|
||||
*/
|
||||
gimp_tool_gui_set_title (im_tool->gui, im_tool->title);
|
||||
gimp_tool_gui_set_icon_name (im_tool->gui, im_tool->icon_name);
|
||||
gimp_tool_gui_set_help_id (im_tool->gui, im_tool->help_id);
|
||||
|
||||
gimp_tool_gui_show (image_map_tool->gui);
|
||||
gimp_tool_gui_set_shell (im_tool->gui, shell);
|
||||
gimp_tool_gui_set_viewable (im_tool->gui, GIMP_VIEWABLE (drawable));
|
||||
|
||||
image_map_tool->drawable = drawable;
|
||||
gimp_tool_gui_show (im_tool->gui);
|
||||
|
||||
gimp_image_map_tool_create_map (image_map_tool);
|
||||
gimp_image_map_tool_preview (image_map_tool);
|
||||
im_tool->drawable = drawable;
|
||||
|
||||
gimp_image_map_tool_create_map (im_tool);
|
||||
gimp_image_map_tool_preview (im_tool);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -453,7 +486,7 @@ gimp_image_map_tool_control (GimpTool *tool,
|
|||
GimpToolAction action,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpImageMapTool *image_map_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
|
||||
switch (action)
|
||||
{
|
||||
|
@ -462,11 +495,11 @@ gimp_image_map_tool_control (GimpTool *tool,
|
|||
break;
|
||||
|
||||
case GIMP_TOOL_ACTION_HALT:
|
||||
gimp_image_map_tool_halt (image_map_tool);
|
||||
gimp_image_map_tool_halt (im_tool);
|
||||
break;
|
||||
|
||||
case GIMP_TOOL_ACTION_COMMIT:
|
||||
gimp_image_map_tool_commit (image_map_tool);
|
||||
gimp_image_map_tool_commit (im_tool);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -478,30 +511,30 @@ gimp_image_map_tool_key_press (GimpTool *tool,
|
|||
GdkEventKey *kevent,
|
||||
GimpDisplay *display)
|
||||
{
|
||||
GimpImageMapTool *image_map_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
|
||||
if (image_map_tool->gui && display == tool->display)
|
||||
if (im_tool->gui && display == tool->display)
|
||||
{
|
||||
switch (kevent->keyval)
|
||||
{
|
||||
case GDK_KEY_Return:
|
||||
case GDK_KEY_KP_Enter:
|
||||
case GDK_KEY_ISO_Enter:
|
||||
gimp_image_map_tool_response (image_map_tool->gui,
|
||||
gimp_image_map_tool_response (im_tool->gui,
|
||||
GTK_RESPONSE_OK,
|
||||
image_map_tool);
|
||||
im_tool);
|
||||
return TRUE;
|
||||
|
||||
case GDK_KEY_BackSpace:
|
||||
gimp_image_map_tool_response (image_map_tool->gui,
|
||||
gimp_image_map_tool_response (im_tool->gui,
|
||||
RESPONSE_RESET,
|
||||
image_map_tool);
|
||||
im_tool);
|
||||
return TRUE;
|
||||
|
||||
case GDK_KEY_Escape:
|
||||
gimp_image_map_tool_response (image_map_tool->gui,
|
||||
gimp_image_map_tool_response (im_tool->gui,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
image_map_tool);
|
||||
im_tool);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -514,17 +547,17 @@ 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);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpImageMapOptions *im_options = GIMP_IMAGE_MAP_OPTIONS (options);
|
||||
|
||||
if (! strcmp (pspec->name, "preview") &&
|
||||
image_map_tool->image_map)
|
||||
im_tool->image_map)
|
||||
{
|
||||
if (im_options->preview)
|
||||
{
|
||||
gimp_tool_control_push_preserve (tool->control, TRUE);
|
||||
|
||||
gimp_image_map_tool_map (image_map_tool);
|
||||
gimp_image_map_tool_map (im_tool);
|
||||
|
||||
gimp_tool_control_pop_preserve (tool->control);
|
||||
}
|
||||
|
@ -532,16 +565,16 @@ gimp_image_map_tool_options_notify (GimpTool *tool,
|
|||
{
|
||||
gimp_tool_control_push_preserve (tool->control, TRUE);
|
||||
|
||||
gimp_image_map_abort (image_map_tool->image_map);
|
||||
gimp_image_map_abort (im_tool->image_map);
|
||||
|
||||
gimp_tool_control_pop_preserve (tool->control);
|
||||
}
|
||||
}
|
||||
else if (! strcmp (pspec->name, "region") &&
|
||||
image_map_tool->image_map)
|
||||
im_tool->image_map)
|
||||
{
|
||||
gimp_image_map_set_region (image_map_tool->image_map, im_options->region);
|
||||
gimp_image_map_tool_preview (image_map_tool);
|
||||
gimp_image_map_set_region (im_tool->image_map, im_options->region);
|
||||
gimp_image_map_tool_preview (im_tool);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -553,14 +586,14 @@ gimp_image_map_tool_pick_color (GimpColorTool *color_tool,
|
|||
gpointer pixel,
|
||||
GimpRGB *color)
|
||||
{
|
||||
GimpImageMapTool *tool = GIMP_IMAGE_MAP_TOOL (color_tool);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (color_tool);
|
||||
gint off_x, off_y;
|
||||
|
||||
gimp_item_get_offset (GIMP_ITEM (tool->drawable), &off_x, &off_y);
|
||||
gimp_item_get_offset (GIMP_ITEM (im_tool->drawable), &off_x, &off_y);
|
||||
|
||||
*sample_format = gimp_drawable_get_format (tool->drawable);
|
||||
*sample_format = gimp_drawable_get_format (im_tool->drawable);
|
||||
|
||||
return gimp_pickable_pick_color (GIMP_PICKABLE (tool->drawable),
|
||||
return gimp_pickable_pick_color (GIMP_PICKABLE (im_tool->drawable),
|
||||
x - off_x,
|
||||
y - off_y,
|
||||
color_tool->options->sample_average,
|
||||
|
@ -577,19 +610,19 @@ gimp_image_map_tool_color_picked (GimpColorTool *color_tool,
|
|||
gpointer pixel,
|
||||
const GimpRGB *color)
|
||||
{
|
||||
GimpImageMapTool *tool = GIMP_IMAGE_MAP_TOOL (color_tool);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (color_tool);
|
||||
gpointer identifier;
|
||||
|
||||
g_return_if_fail (GTK_IS_WIDGET (tool->active_picker));
|
||||
g_return_if_fail (GTK_IS_WIDGET (im_tool->active_picker));
|
||||
|
||||
identifier = g_object_get_data (G_OBJECT (tool->active_picker),
|
||||
identifier = g_object_get_data (G_OBJECT (im_tool->active_picker),
|
||||
"picker-identifier");
|
||||
|
||||
GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->color_picked (tool,
|
||||
identifier,
|
||||
x, y,
|
||||
sample_format,
|
||||
color);
|
||||
GIMP_IMAGE_MAP_TOOL_GET_CLASS (im_tool)->color_picked (im_tool,
|
||||
identifier,
|
||||
x, y,
|
||||
sample_format,
|
||||
color);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -673,8 +706,8 @@ gimp_image_map_tool_commit (GimpImageMapTool *im_tool)
|
|||
static void
|
||||
gimp_image_map_tool_map (GimpImageMapTool *tool)
|
||||
{
|
||||
if (GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->map)
|
||||
GIMP_IMAGE_MAP_TOOL_GET_CLASS (tool)->map (tool);
|
||||
gimp_gegl_config_sync_node (GIMP_OBJECT (tool->config),
|
||||
tool->operation);
|
||||
|
||||
gimp_image_map_apply (tool->image_map, NULL);
|
||||
}
|
||||
|
@ -713,8 +746,7 @@ gimp_image_map_tool_reset (GimpImageMapTool *tool)
|
|||
static void
|
||||
gimp_image_map_tool_create_map (GimpImageMapTool *tool)
|
||||
{
|
||||
GimpImageMapOptions *options = GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (tool);
|
||||
GimpToolInfo *tool_info = GIMP_TOOL (tool)->tool_info;
|
||||
GimpImageMapOptions *options = GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (tool);
|
||||
|
||||
if (tool->image_map)
|
||||
{
|
||||
|
@ -727,7 +759,7 @@ gimp_image_map_tool_create_map (GimpImageMapTool *tool)
|
|||
tool->image_map = gimp_image_map_new (tool->drawable,
|
||||
tool->undo_desc,
|
||||
tool->operation,
|
||||
gimp_viewable_get_icon_name (GIMP_VIEWABLE (tool_info)));
|
||||
tool->icon_name);
|
||||
|
||||
gimp_image_map_set_region (tool->image_map, options->region);
|
||||
|
||||
|
@ -738,9 +770,9 @@ gimp_image_map_tool_create_map (GimpImageMapTool *tool)
|
|||
|
||||
static void
|
||||
gimp_image_map_tool_flush (GimpImageMap *image_map,
|
||||
GimpImageMapTool *image_map_tool)
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpTool *tool = GIMP_TOOL (image_map_tool);
|
||||
GimpTool *tool = GIMP_TOOL (im_tool);
|
||||
GimpImage *image = gimp_display_get_image (tool->display);
|
||||
|
||||
gimp_projection_flush (gimp_image_get_projection (image));
|
||||
|
@ -749,23 +781,23 @@ gimp_image_map_tool_flush (GimpImageMap *image_map,
|
|||
static void
|
||||
gimp_image_map_tool_config_notify (GObject *object,
|
||||
const GParamSpec *pspec,
|
||||
GimpImageMapTool *image_map_tool)
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
gimp_image_map_tool_preview (image_map_tool);
|
||||
gimp_image_map_tool_preview (im_tool);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_image_map_tool_response (GimpToolGui *gui,
|
||||
gint response_id,
|
||||
GimpImageMapTool *image_map_tool)
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpTool *tool = GIMP_TOOL (image_map_tool);
|
||||
GimpTool *tool = GIMP_TOOL (im_tool);
|
||||
|
||||
switch (response_id)
|
||||
{
|
||||
case RESPONSE_RESET:
|
||||
gimp_image_map_tool_reset (image_map_tool);
|
||||
gimp_image_map_tool_preview (image_map_tool);
|
||||
gimp_image_map_tool_reset (im_tool);
|
||||
gimp_image_map_tool_preview (im_tool);
|
||||
break;
|
||||
|
||||
case GTK_RESPONSE_OK:
|
||||
|
@ -779,99 +811,158 @@ gimp_image_map_tool_response (GimpToolGui *gui,
|
|||
}
|
||||
|
||||
void
|
||||
gimp_image_map_tool_get_operation (GimpImageMapTool *image_map_tool)
|
||||
gimp_image_map_tool_get_operation (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpImageMapToolClass *klass;
|
||||
GimpToolInfo *tool_info;
|
||||
gchar *operation_name;
|
||||
|
||||
g_return_if_fail (GIMP_IS_IMAGE_MAP_TOOL (image_map_tool));
|
||||
g_return_if_fail (GIMP_IS_IMAGE_MAP_TOOL (im_tool));
|
||||
|
||||
klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (image_map_tool);
|
||||
klass = GIMP_IMAGE_MAP_TOOL_GET_CLASS (im_tool);
|
||||
|
||||
if (image_map_tool->image_map)
|
||||
tool_info = GIMP_TOOL (im_tool)->tool_info;
|
||||
|
||||
if (im_tool->image_map)
|
||||
{
|
||||
gimp_image_map_abort (image_map_tool->image_map);
|
||||
g_object_unref (image_map_tool->image_map);
|
||||
image_map_tool->image_map = NULL;
|
||||
gimp_image_map_abort (im_tool->image_map);
|
||||
g_object_unref (im_tool->image_map);
|
||||
im_tool->image_map = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->operation)
|
||||
if (im_tool->operation)
|
||||
{
|
||||
g_object_unref (image_map_tool->operation);
|
||||
image_map_tool->operation = NULL;
|
||||
g_object_unref (im_tool->operation);
|
||||
im_tool->operation = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->config)
|
||||
if (im_tool->config)
|
||||
{
|
||||
g_signal_handlers_disconnect_by_func (image_map_tool->config,
|
||||
g_signal_handlers_disconnect_by_func (im_tool->config,
|
||||
gimp_image_map_tool_config_notify,
|
||||
image_map_tool);
|
||||
im_tool);
|
||||
|
||||
g_object_unref (image_map_tool->config);
|
||||
image_map_tool->config = NULL;
|
||||
g_object_unref (im_tool->config);
|
||||
im_tool->config = NULL;
|
||||
}
|
||||
|
||||
if (image_map_tool->undo_desc)
|
||||
if (im_tool->title)
|
||||
{
|
||||
g_free (image_map_tool->undo_desc);
|
||||
image_map_tool->undo_desc = NULL;
|
||||
g_free (im_tool->title);
|
||||
im_tool->title = NULL;
|
||||
}
|
||||
|
||||
image_map_tool->operation = klass->get_operation (image_map_tool,
|
||||
&image_map_tool->config,
|
||||
&image_map_tool->undo_desc);
|
||||
if (im_tool->description)
|
||||
{
|
||||
g_free (im_tool->description);
|
||||
im_tool->description = NULL;
|
||||
}
|
||||
|
||||
if (! image_map_tool->undo_desc)
|
||||
image_map_tool->undo_desc =
|
||||
g_strdup (GIMP_TOOL (image_map_tool)->tool_info->blurb);
|
||||
if (im_tool->undo_desc)
|
||||
{
|
||||
g_free (im_tool->undo_desc);
|
||||
im_tool->undo_desc = NULL;
|
||||
}
|
||||
|
||||
gegl_node_get (image_map_tool->operation,
|
||||
"operation", &operation_name,
|
||||
NULL);
|
||||
if (im_tool->icon_name)
|
||||
{
|
||||
g_free (im_tool->icon_name);
|
||||
im_tool->icon_name = NULL;
|
||||
}
|
||||
|
||||
if (im_tool->help_id)
|
||||
{
|
||||
g_free (im_tool->help_id);
|
||||
im_tool->help_id = NULL;
|
||||
}
|
||||
|
||||
operation_name = klass->get_operation (im_tool,
|
||||
&im_tool->title,
|
||||
&im_tool->description,
|
||||
&im_tool->undo_desc,
|
||||
&im_tool->icon_name,
|
||||
&im_tool->help_id);
|
||||
|
||||
if (! operation_name)
|
||||
operation_name = g_strdup ("gegl:nop");
|
||||
|
||||
if (! im_tool->title)
|
||||
im_tool->title = g_strdup (tool_info->blurb);
|
||||
|
||||
if (! im_tool->description)
|
||||
im_tool->description = g_strdup (im_tool->title);
|
||||
|
||||
if (! im_tool->undo_desc)
|
||||
im_tool->undo_desc = g_strdup (tool_info->blurb);
|
||||
|
||||
if (! im_tool->icon_name)
|
||||
im_tool->icon_name =
|
||||
g_strdup (gimp_viewable_get_icon_name (GIMP_VIEWABLE (tool_info)));
|
||||
|
||||
if (! im_tool->help_id)
|
||||
im_tool->help_id = g_strdup (tool_info->help_id);
|
||||
|
||||
im_tool->operation = gegl_node_new_child (NULL,
|
||||
"operation", operation_name,
|
||||
NULL);
|
||||
im_tool->config = G_OBJECT (gimp_gegl_config_new (operation_name,
|
||||
im_tool->icon_name,
|
||||
GIMP_TYPE_SETTINGS));
|
||||
|
||||
gimp_gegl_config_sync_node (GIMP_OBJECT (im_tool->config),
|
||||
im_tool->operation);
|
||||
|
||||
if (im_tool->gui)
|
||||
{
|
||||
gimp_tool_gui_set_title (im_tool->gui, im_tool->title);
|
||||
gimp_tool_gui_set_description (im_tool->gui, im_tool->description);
|
||||
gimp_tool_gui_set_icon_name (im_tool->gui, im_tool->icon_name);
|
||||
gimp_tool_gui_set_help_id (im_tool->gui, im_tool->help_id);
|
||||
}
|
||||
|
||||
if (operation_name &&
|
||||
gegl_operation_get_key (operation_name, "position-dependent"))
|
||||
{
|
||||
if (image_map_tool->region_combo)
|
||||
gtk_widget_show (image_map_tool->region_combo);
|
||||
if (im_tool->gui)
|
||||
gtk_widget_show (im_tool->region_combo);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (image_map_tool->region_combo)
|
||||
gtk_widget_hide (image_map_tool->region_combo);
|
||||
if (im_tool->gui)
|
||||
gtk_widget_hide (im_tool->region_combo);
|
||||
|
||||
g_object_set (GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (image_map_tool),
|
||||
g_object_set (GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (im_tool),
|
||||
"region", GIMP_IMAGE_MAP_REGION_SELECTION,
|
||||
NULL);
|
||||
}
|
||||
|
||||
g_free (operation_name);
|
||||
|
||||
if (image_map_tool->config)
|
||||
g_signal_connect_object (image_map_tool->config, "notify",
|
||||
if (im_tool->config)
|
||||
g_signal_connect_object (im_tool->config, "notify",
|
||||
G_CALLBACK (gimp_image_map_tool_config_notify),
|
||||
G_OBJECT (image_map_tool), 0);
|
||||
G_OBJECT (im_tool), 0);
|
||||
|
||||
if (GIMP_TOOL (image_map_tool)->drawable)
|
||||
gimp_image_map_tool_create_map (image_map_tool);
|
||||
if (GIMP_TOOL (im_tool)->drawable)
|
||||
gimp_image_map_tool_create_map (im_tool);
|
||||
}
|
||||
|
||||
void
|
||||
gimp_image_map_tool_preview (GimpImageMapTool *image_map_tool)
|
||||
gimp_image_map_tool_preview (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpTool *tool;
|
||||
GimpImageMapOptions *options;
|
||||
|
||||
g_return_if_fail (GIMP_IS_IMAGE_MAP_TOOL (image_map_tool));
|
||||
g_return_if_fail (GIMP_IS_IMAGE_MAP_TOOL (im_tool));
|
||||
|
||||
tool = GIMP_TOOL (image_map_tool);
|
||||
tool = GIMP_TOOL (im_tool);
|
||||
options = GIMP_IMAGE_MAP_TOOL_GET_OPTIONS (tool);
|
||||
|
||||
if (image_map_tool->image_map && options->preview)
|
||||
if (im_tool->image_map && options->preview)
|
||||
{
|
||||
gimp_tool_control_push_preserve (tool->control, TRUE);
|
||||
|
||||
gimp_image_map_tool_map (image_map_tool);
|
||||
gimp_image_map_tool_map (im_tool);
|
||||
|
||||
gimp_tool_control_pop_preserve (tool->control);
|
||||
}
|
||||
|
|
|
@ -43,7 +43,12 @@ struct _GimpImageMapTool
|
|||
GeglNode *operation;
|
||||
GObject *config;
|
||||
GObject *default_config;
|
||||
|
||||
gchar *title;
|
||||
gchar *description;
|
||||
gchar *undo_desc;
|
||||
gchar *icon_name;
|
||||
gchar *help_id;
|
||||
|
||||
GimpImageMap *image_map;
|
||||
|
||||
|
@ -60,7 +65,6 @@ struct _GimpImageMapToolClass
|
|||
{
|
||||
GimpColorToolClass parent_class;
|
||||
|
||||
const gchar *dialog_desc;
|
||||
const gchar *settings_name;
|
||||
const gchar *import_dialog_title;
|
||||
const gchar *export_dialog_title;
|
||||
|
@ -68,10 +72,12 @@ struct _GimpImageMapToolClass
|
|||
GimpContainer *recent_settings;
|
||||
|
||||
/* virtual functions */
|
||||
GeglNode * (* get_operation) (GimpImageMapTool *image_map_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
void (* map) (GimpImageMapTool *image_map_tool);
|
||||
gchar * (* get_operation) (GimpImageMapTool *image_map_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
void (* dialog) (GimpImageMapTool *image_map_tool);
|
||||
void (* reset) (GimpImageMapTool *image_map_tool);
|
||||
|
||||
|
|
|
@ -65,15 +65,19 @@
|
|||
|
||||
/* local function prototypes */
|
||||
|
||||
static void gimp_levels_tool_constructed (GObject *object);
|
||||
static void gimp_levels_tool_finalize (GObject *object);
|
||||
|
||||
static gboolean gimp_levels_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
GError **error);
|
||||
|
||||
static GeglNode * gimp_levels_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
static gchar * gimp_levels_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_levels_tool_dialog (GimpImageMapTool *im_tool);
|
||||
static void gimp_levels_tool_reset (GimpImageMapTool *im_tool);
|
||||
static gboolean gimp_levels_tool_settings_import(GimpImageMapTool *im_tool,
|
||||
|
@ -100,9 +104,9 @@ static void gimp_levels_tool_config_notify (GObject *object,
|
|||
static void levels_update_input_bar (GimpLevelsTool *tool);
|
||||
|
||||
static void levels_channel_callback (GtkWidget *widget,
|
||||
GimpLevelsTool *tool);
|
||||
GimpImageMapTool *im_tool);
|
||||
static void levels_channel_reset_callback (GtkWidget *widget,
|
||||
GimpLevelsTool *tool);
|
||||
GimpImageMapTool *im_tool);
|
||||
|
||||
static gboolean levels_menu_sensitivity (gint value,
|
||||
gpointer data);
|
||||
|
@ -113,7 +117,7 @@ static void levels_linear_gamma_changed (GtkAdjustment *adjustment
|
|||
GimpLevelsTool *tool);
|
||||
|
||||
static void levels_to_curves_callback (GtkWidget *widget,
|
||||
GimpLevelsTool *tool);
|
||||
GimpImageMapTool *im_tool);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (GimpLevelsTool, gimp_levels_tool, GIMP_TYPE_IMAGE_MAP_TOOL)
|
||||
|
@ -145,11 +149,11 @@ gimp_levels_tool_class_init (GimpLevelsToolClass *klass)
|
|||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass);
|
||||
|
||||
object_class->constructed = gimp_levels_tool_constructed;
|
||||
object_class->finalize = gimp_levels_tool_finalize;
|
||||
|
||||
tool_class->initialize = gimp_levels_tool_initialize;
|
||||
|
||||
im_tool_class->dialog_desc = _("Adjust Color Levels");
|
||||
im_tool_class->settings_name = "levels";
|
||||
im_tool_class->import_dialog_title = _("Import Levels");
|
||||
im_tool_class->export_dialog_title = _("Export Levels");
|
||||
|
@ -168,6 +172,16 @@ gimp_levels_tool_init (GimpLevelsTool *tool)
|
|||
tool->histogram = gimp_histogram_new (TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_constructed (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (GIMP_IMAGE_MAP_TOOL (object)->config, "notify",
|
||||
G_CALLBACK (gimp_levels_tool_config_notify),
|
||||
object, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_finalize (GObject *object)
|
||||
{
|
||||
|
@ -242,25 +256,17 @@ gimp_levels_tool_initialize (GimpTool *tool,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
static gchar *
|
||||
gimp_levels_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (im_tool);
|
||||
*description = g_strdup (_("Adjust Color Levels"));
|
||||
|
||||
tool->config = g_object_new (GIMP_TYPE_LEVELS_CONFIG, NULL);
|
||||
|
||||
g_signal_connect_object (tool->config, "notify",
|
||||
G_CALLBACK (gimp_levels_tool_config_notify),
|
||||
G_OBJECT (tool), 0);
|
||||
|
||||
*config = G_OBJECT (tool->config);
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gimp:levels",
|
||||
"config", tool->config,
|
||||
NULL);
|
||||
return g_strdup ("gimp:levels");
|
||||
}
|
||||
|
||||
|
||||
|
@ -316,11 +322,11 @@ gimp_levels_tool_color_picker_new (GimpLevelsTool *tool,
|
|||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
||||
gimp_levels_tool_dialog (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (image_map_tool);
|
||||
GimpToolOptions *tool_options = GIMP_TOOL_GET_OPTIONS (image_map_tool);
|
||||
GimpLevelsConfig *config = tool->config;
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (im_tool);
|
||||
GimpToolOptions *tool_options = GIMP_TOOL_GET_OPTIONS (im_tool);
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (im_tool->config);
|
||||
GtkListStore *store;
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *frame_vbox;
|
||||
|
@ -341,11 +347,11 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
GtkWidget *handle_bar;
|
||||
gint border;
|
||||
|
||||
g_signal_connect (image_map_tool->settings_box, "file-dialog-setup",
|
||||
g_signal_connect (im_tool->settings_box, "file-dialog-setup",
|
||||
G_CALLBACK (gimp_levels_tool_export_setup),
|
||||
image_map_tool);
|
||||
im_tool);
|
||||
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (image_map_tool);
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (im_tool);
|
||||
|
||||
/* The option menu for selecting channels */
|
||||
main_frame = gimp_frame_new (NULL);
|
||||
|
@ -466,7 +472,7 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
gtk_widget_show (button);
|
||||
|
||||
tool->low_input_spinbutton = spinbutton =
|
||||
gimp_prop_spin_button_new (image_map_tool->config, "low-input",
|
||||
gimp_prop_spin_button_new (im_tool->config, "low-input",
|
||||
0.01, 0.1, 1);
|
||||
gtk_box_pack_start (GTK_BOX (hbox2), spinbutton, FALSE, FALSE, 0);
|
||||
gtk_widget_show (spinbutton);
|
||||
|
@ -476,7 +482,7 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
tool->low_input);
|
||||
|
||||
/* input gamma spin */
|
||||
spinbutton = gimp_prop_spin_button_new (image_map_tool->config, "gamma",
|
||||
spinbutton = gimp_prop_spin_button_new (im_tool->config, "gamma",
|
||||
0.01, 0.1, 2);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), spinbutton, TRUE, FALSE, 0);
|
||||
gimp_help_set_help_data (spinbutton, _("Gamma"), NULL);
|
||||
|
@ -503,7 +509,7 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
gtk_box_pack_start (GTK_BOX (hbox2), button, FALSE, FALSE, 0);
|
||||
gtk_widget_show (button);
|
||||
|
||||
spinbutton = gimp_prop_spin_button_new (image_map_tool->config, "high-input",
|
||||
spinbutton = gimp_prop_spin_button_new (im_tool->config, "high-input",
|
||||
0.01, 0.1, 1);
|
||||
gtk_box_pack_start (GTK_BOX (hbox2), spinbutton, FALSE, FALSE, 0);
|
||||
gtk_widget_show (spinbutton);
|
||||
|
@ -552,7 +558,7 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
|
||||
/* low output spin */
|
||||
tool->low_output_spinbutton = spinbutton =
|
||||
gimp_prop_spin_button_new (image_map_tool->config, "low-output",
|
||||
gimp_prop_spin_button_new (im_tool->config, "low-output",
|
||||
0.01, 0.1, 1);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0);
|
||||
gtk_widget_show (spinbutton);
|
||||
|
@ -562,7 +568,7 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
|
||||
/* high output spin */
|
||||
tool->high_output_spinbutton = spinbutton =
|
||||
gimp_prop_spin_button_new (image_map_tool->config, "high-output",
|
||||
gimp_prop_spin_button_new (im_tool->config, "high-output",
|
||||
0.01, 0.1, 1);
|
||||
gtk_box_pack_end (GTK_BOX (hbox), spinbutton, FALSE, FALSE, 0);
|
||||
gtk_widget_show (spinbutton);
|
||||
|
@ -624,26 +630,29 @@ gimp_levels_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
}
|
||||
|
||||
static void
|
||||
gimp_levels_tool_reset (GimpImageMapTool *image_map_tool)
|
||||
gimp_levels_tool_reset (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (image_map_tool);
|
||||
GimpHistogramChannel channel = tool->config->channel;
|
||||
GimpHistogramChannel channel;
|
||||
|
||||
GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->reset (image_map_tool);
|
||||
g_object_get (im_tool->config,
|
||||
"channel", &channel,
|
||||
NULL);
|
||||
|
||||
g_object_set (tool->config,
|
||||
GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->reset (im_tool);
|
||||
|
||||
g_object_set (im_tool->config,
|
||||
"channel", channel,
|
||||
NULL);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_levels_tool_settings_import (GimpImageMapTool *image_map_tool,
|
||||
gimp_levels_tool_settings_import (GimpImageMapTool *im_tool,
|
||||
GInputStream *input,
|
||||
GError **error)
|
||||
{
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (image_map_tool);
|
||||
gchar header[64];
|
||||
gsize bytes_read;
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (im_tool->config);
|
||||
gchar header[64];
|
||||
gsize bytes_read;
|
||||
|
||||
if (! g_input_stream_read_all (input, header, sizeof (header),
|
||||
&bytes_read, NULL, error) ||
|
||||
|
@ -656,24 +665,25 @@ gimp_levels_tool_settings_import (GimpImageMapTool *image_map_tool,
|
|||
g_seekable_seek (G_SEEKABLE (input), 0, G_SEEK_SET, NULL, NULL);
|
||||
|
||||
if (g_str_has_prefix (header, "# GIMP Levels File\n"))
|
||||
return gimp_levels_config_load_cruft (tool->config, input, error);
|
||||
return gimp_levels_config_load_cruft (config, input, error);
|
||||
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_import (image_map_tool,
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_import (im_tool,
|
||||
input,
|
||||
error);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gimp_levels_tool_settings_export (GimpImageMapTool *image_map_tool,
|
||||
gimp_levels_tool_settings_export (GimpImageMapTool *im_tool,
|
||||
GOutputStream *output,
|
||||
GError **error)
|
||||
{
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (image_map_tool);
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (im_tool);
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (im_tool->config);
|
||||
|
||||
if (tool->export_old_format)
|
||||
return gimp_levels_config_save_cruft (tool->config, output, error);
|
||||
return gimp_levels_config_save_cruft (config, output, error);
|
||||
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_export (image_map_tool,
|
||||
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_export (im_tool,
|
||||
output,
|
||||
error);
|
||||
}
|
||||
|
@ -708,8 +718,9 @@ gimp_levels_tool_color_picked (GimpImageMapTool *color_tool,
|
|||
const Babl *sample_format,
|
||||
const GimpRGB *color)
|
||||
{
|
||||
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (color_tool);
|
||||
guint value = GPOINTER_TO_UINT (identifier);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (color_tool);
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (im_tool->config);
|
||||
guint value = GPOINTER_TO_UINT (identifier);
|
||||
|
||||
if (value & PICK_ALL_CHANNELS &&
|
||||
gimp_babl_format_get_base_type (sample_format) == GIMP_RGB)
|
||||
|
@ -720,13 +731,13 @@ gimp_levels_tool_color_picked (GimpImageMapTool *color_tool,
|
|||
switch (value & 0xF)
|
||||
{
|
||||
case PICK_LOW_INPUT:
|
||||
tool->config->low_input[GIMP_HISTOGRAM_VALUE] = 0.0;
|
||||
config->low_input[GIMP_HISTOGRAM_VALUE] = 0.0;
|
||||
break;
|
||||
case PICK_GAMMA:
|
||||
tool->config->gamma[GIMP_HISTOGRAM_VALUE] = 1.0;
|
||||
config->gamma[GIMP_HISTOGRAM_VALUE] = 1.0;
|
||||
break;
|
||||
case PICK_HIGH_INPUT:
|
||||
tool->config->high_input[GIMP_HISTOGRAM_VALUE] = 1.0;
|
||||
config->high_input[GIMP_HISTOGRAM_VALUE] = 1.0;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -737,14 +748,12 @@ gimp_levels_tool_color_picked (GimpImageMapTool *color_tool,
|
|||
channel <= GIMP_HISTOGRAM_BLUE;
|
||||
channel++)
|
||||
{
|
||||
levels_input_adjust_by_color (tool->config,
|
||||
value, channel, color);
|
||||
levels_input_adjust_by_color (config, value, channel, color);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
levels_input_adjust_by_color (tool->config,
|
||||
value, tool->config->channel, color);
|
||||
levels_input_adjust_by_color (config, value, config->channel, color);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -807,7 +816,7 @@ gimp_levels_tool_config_notify (GObject *object,
|
|||
|
||||
delta = (high - low) / 2.0;
|
||||
mid = low + delta;
|
||||
tmp = log10 (1.0 / tool->config->gamma[tool->config->channel]);
|
||||
tmp = log10 (1.0 / config->gamma[config->channel]);
|
||||
value = mid + delta * tmp;
|
||||
|
||||
gtk_adjustment_set_value (tool->gamma_linear, value);
|
||||
|
@ -817,7 +826,8 @@ gimp_levels_tool_config_notify (GObject *object,
|
|||
static void
|
||||
levels_update_input_bar (GimpLevelsTool *tool)
|
||||
{
|
||||
GimpLevelsConfig *config = tool->config;
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (im_tool->config);
|
||||
|
||||
switch (config->channel)
|
||||
{
|
||||
|
@ -878,25 +888,26 @@ levels_update_input_bar (GimpLevelsTool *tool)
|
|||
}
|
||||
|
||||
static void
|
||||
levels_channel_callback (GtkWidget *widget,
|
||||
GimpLevelsTool *tool)
|
||||
levels_channel_callback (GtkWidget *widget,
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
gint value;
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (im_tool->config);
|
||||
gint value;
|
||||
|
||||
if (gimp_int_combo_box_get_active (GIMP_INT_COMBO_BOX (widget), &value) &&
|
||||
tool->config->channel != value)
|
||||
config->channel != value)
|
||||
{
|
||||
g_object_set (tool->config,
|
||||
g_object_set (config,
|
||||
"channel", value,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
levels_channel_reset_callback (GtkWidget *widget,
|
||||
GimpLevelsTool *tool)
|
||||
levels_channel_reset_callback (GtkWidget *widget,
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
gimp_levels_config_reset_channel (tool->config);
|
||||
gimp_levels_config_reset_channel (GIMP_LEVELS_CONFIG (im_tool->config));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
@ -930,10 +941,11 @@ static void
|
|||
levels_stretch_callback (GtkWidget *widget,
|
||||
GimpLevelsTool *tool)
|
||||
{
|
||||
GimpDrawable *drawable = GIMP_IMAGE_MAP_TOOL (tool)->drawable;
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (tool);
|
||||
|
||||
gimp_levels_config_stretch (tool->config, tool->histogram,
|
||||
gimp_drawable_is_rgb (drawable));
|
||||
gimp_levels_config_stretch (GIMP_LEVELS_CONFIG (im_tool->config),
|
||||
tool->histogram,
|
||||
gimp_drawable_is_rgb (im_tool->drawable));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -960,14 +972,15 @@ levels_linear_gamma_changed (GtkAdjustment *adjustment,
|
|||
}
|
||||
|
||||
static void
|
||||
levels_to_curves_callback (GtkWidget *widget,
|
||||
GimpLevelsTool *tool)
|
||||
levels_to_curves_callback (GtkWidget *widget,
|
||||
GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpLevelsConfig *config = GIMP_LEVELS_CONFIG (im_tool->config);
|
||||
GimpCurvesConfig *curves;
|
||||
|
||||
curves = gimp_levels_config_to_curves_config (tool->config);
|
||||
curves = gimp_levels_config_to_curves_config (config);
|
||||
|
||||
gimp_image_map_tool_edit_as (GIMP_IMAGE_MAP_TOOL (tool),
|
||||
gimp_image_map_tool_edit_as (im_tool,
|
||||
"gimp-curves-tool",
|
||||
GIMP_CONFIG (curves));
|
||||
|
||||
|
|
|
@ -37,8 +37,6 @@ struct _GimpLevelsTool
|
|||
{
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
GimpLevelsConfig *config;
|
||||
|
||||
/* dialog */
|
||||
GimpHistogram *histogram;
|
||||
|
||||
|
|
|
@ -78,10 +78,12 @@ static void gimp_operation_tool_control (GimpTool *tool,
|
|||
GimpToolAction action,
|
||||
GimpDisplay *display);
|
||||
|
||||
static GeglNode * gimp_operation_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
static void gimp_operation_tool_map (GimpImageMapTool *im_tool);
|
||||
static gchar * gimp_operation_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_operation_tool_dialog (GimpImageMapTool *im_tool);
|
||||
static void gimp_operation_tool_reset (GimpImageMapTool *im_tool);
|
||||
static GtkWidget * gimp_operation_tool_get_settings_ui (GimpImageMapTool *im_tool,
|
||||
|
@ -146,10 +148,7 @@ gimp_operation_tool_class_init (GimpOperationToolClass *klass)
|
|||
tool_class->initialize = gimp_operation_tool_initialize;
|
||||
tool_class->control = gimp_operation_tool_control;
|
||||
|
||||
im_tool_class->dialog_desc = _("GEGL Operation");
|
||||
|
||||
im_tool_class->get_operation = gimp_operation_tool_get_operation;
|
||||
im_tool_class->map = gimp_operation_tool_map;
|
||||
im_tool_class->dialog = gimp_operation_tool_dialog;
|
||||
im_tool_class->reset = gimp_operation_tool_reset;
|
||||
im_tool_class->get_settings_ui = gimp_operation_tool_get_settings_ui;
|
||||
|
@ -179,6 +178,12 @@ gimp_operation_tool_finalize (GObject *object)
|
|||
tool->title = NULL;
|
||||
}
|
||||
|
||||
if (tool->description)
|
||||
{
|
||||
g_free (tool->description);
|
||||
tool->description = NULL;
|
||||
}
|
||||
|
||||
if (tool->undo_desc)
|
||||
{
|
||||
g_free (tool->undo_desc);
|
||||
|
@ -250,37 +255,23 @@ gimp_operation_tool_control (GimpTool *tool,
|
|||
GIMP_TOOL_CLASS (parent_class)->control (tool, action, display);
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
static gchar *
|
||||
gimp_operation_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
GimpOperationTool *tool = GIMP_OPERATION_TOOL (im_tool);
|
||||
|
||||
if (tool->operation)
|
||||
*config = G_OBJECT (gimp_gegl_config_new (tool->operation,
|
||||
tool->icon_name,
|
||||
GIMP_TYPE_SETTINGS));
|
||||
*title = g_strdup (tool->title);
|
||||
*description = g_strdup (tool->description);
|
||||
*undo_desc = g_strdup (tool->undo_desc);
|
||||
*icon_name = g_strdup (tool->icon_name);
|
||||
*help_id = g_strdup (tool->help_id);
|
||||
|
||||
if (tool->undo_desc)
|
||||
*undo_desc = g_strdup (tool->undo_desc);
|
||||
|
||||
if (tool->operation)
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", tool->operation,
|
||||
NULL);
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gegl:nop",
|
||||
NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_operation_tool_map (GimpImageMapTool *im_tool)
|
||||
{
|
||||
if (im_tool->config)
|
||||
gimp_gegl_config_sync_node (GIMP_OBJECT (im_tool->config),
|
||||
im_tool->operation);
|
||||
return g_strdup (tool->operation);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -313,18 +304,6 @@ gimp_operation_tool_dialog (GimpImageMapTool *im_tool)
|
|||
FALSE, FALSE, 0);
|
||||
gtk_widget_show (tool->options_gui);
|
||||
}
|
||||
|
||||
if (tool->title)
|
||||
gimp_tool_gui_set_title (im_tool->gui, tool->title);
|
||||
|
||||
if (tool->undo_desc)
|
||||
gimp_tool_gui_set_description (im_tool->gui, tool->undo_desc);
|
||||
|
||||
if (tool->icon_name)
|
||||
gimp_tool_gui_set_icon_name (im_tool->gui, tool->icon_name);
|
||||
|
||||
if (tool->help_id)
|
||||
gimp_tool_gui_set_help_id (im_tool->gui, tool->help_id);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -366,8 +345,8 @@ gimp_operation_tool_get_settings_ui (GimpImageMapTool *im_tool,
|
|||
file = gimp_directory_file ("filters", basename, NULL);
|
||||
g_free (basename);
|
||||
|
||||
import_title = g_strdup_printf (_("Import '%s' Settings"), tool->undo_desc);
|
||||
export_title = g_strdup_printf (_("Export '%s' Settings"), tool->undo_desc);
|
||||
import_title = g_strdup_printf (_("Import '%s' Settings"), tool->title);
|
||||
export_title = g_strdup_printf (_("Export '%s' Settings"), tool->title);
|
||||
|
||||
widget =
|
||||
GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->get_settings_ui (im_tool,
|
||||
|
@ -638,6 +617,7 @@ void
|
|||
gimp_operation_tool_set_operation (GimpOperationTool *tool,
|
||||
const gchar *operation,
|
||||
const gchar *title,
|
||||
const gchar *description,
|
||||
const gchar *undo_desc,
|
||||
const gchar *icon_name,
|
||||
const gchar *help_id)
|
||||
|
@ -657,6 +637,9 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
|
|||
if (tool->title)
|
||||
g_free (tool->title);
|
||||
|
||||
if (tool->description)
|
||||
g_free (tool->description);
|
||||
|
||||
if (tool->undo_desc)
|
||||
g_free (tool->undo_desc);
|
||||
|
||||
|
@ -666,11 +649,12 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
|
|||
if (tool->help_id)
|
||||
g_free (tool->help_id);
|
||||
|
||||
tool->operation = g_strdup (operation);
|
||||
tool->title = g_strdup (title);
|
||||
tool->undo_desc = g_strdup (undo_desc);
|
||||
tool->icon_name = g_strdup (icon_name);
|
||||
tool->help_id = g_strdup (help_id);
|
||||
tool->operation = g_strdup (operation);
|
||||
tool->title = g_strdup (title);
|
||||
tool->description = g_strdup (description);
|
||||
tool->undo_desc = g_strdup (undo_desc);
|
||||
tool->icon_name = g_strdup (icon_name);
|
||||
tool->help_id = g_strdup (help_id);
|
||||
|
||||
g_list_free_full (tool->aux_inputs,
|
||||
(GDestroyNotify) gimp_operation_tool_aux_input_free);
|
||||
|
@ -761,21 +745,6 @@ gimp_operation_tool_set_operation (GimpOperationTool *tool,
|
|||
}
|
||||
}
|
||||
|
||||
if (im_tool->gui)
|
||||
{
|
||||
if (title)
|
||||
gimp_tool_gui_set_title (im_tool->gui, title);
|
||||
|
||||
if (undo_desc)
|
||||
gimp_tool_gui_set_description (im_tool->gui, undo_desc);
|
||||
|
||||
if (icon_name)
|
||||
gimp_tool_gui_set_icon_name (im_tool->gui, icon_name);
|
||||
|
||||
if (help_id)
|
||||
gimp_tool_gui_set_help_id (im_tool->gui, help_id);
|
||||
}
|
||||
|
||||
if (GIMP_TOOL (tool)->drawable)
|
||||
{
|
||||
gimp_operation_tool_sync_op (tool, GIMP_TOOL (tool)->drawable);
|
||||
|
|
|
@ -39,6 +39,7 @@ struct _GimpOperationTool
|
|||
|
||||
gchar *operation;
|
||||
gchar *title;
|
||||
gchar *description;
|
||||
gchar *undo_desc;
|
||||
gchar *icon_name;
|
||||
gchar *help_id;
|
||||
|
@ -64,6 +65,7 @@ GType gimp_operation_tool_get_type (void) G_GNUC_CONST;
|
|||
void gimp_operation_tool_set_operation (GimpOperationTool *tool,
|
||||
const gchar *operation,
|
||||
const gchar *title,
|
||||
const gchar *description,
|
||||
const gchar *undo_desc,
|
||||
const gchar *icon_name,
|
||||
const gchar *help_id);
|
||||
|
|
|
@ -25,8 +25,6 @@
|
|||
|
||||
#include "tools-types.h"
|
||||
|
||||
#include "operations/gimpthresholdconfig.h"
|
||||
|
||||
#include "core/gimpdrawable.h"
|
||||
#include "core/gimpdrawable-histogram.h"
|
||||
#include "core/gimperror.h"
|
||||
|
@ -47,15 +45,19 @@
|
|||
|
||||
/* local function prototypes */
|
||||
|
||||
static void gimp_threshold_tool_constructed (GObject *object);
|
||||
static void gimp_threshold_tool_finalize (GObject *object);
|
||||
|
||||
static gboolean gimp_threshold_tool_initialize (GimpTool *tool,
|
||||
GimpDisplay *display,
|
||||
GError **error);
|
||||
|
||||
static GeglNode * gimp_threshold_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc);
|
||||
static gchar * gimp_threshold_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id);
|
||||
static void gimp_threshold_tool_dialog (GimpImageMapTool *im_tool);
|
||||
|
||||
static void gimp_threshold_tool_config_notify (GObject *object,
|
||||
|
@ -100,11 +102,11 @@ gimp_threshold_tool_class_init (GimpThresholdToolClass *klass)
|
|||
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
|
||||
GimpImageMapToolClass *im_tool_class = GIMP_IMAGE_MAP_TOOL_CLASS (klass);
|
||||
|
||||
object_class->constructed = gimp_threshold_tool_constructed;
|
||||
object_class->finalize = gimp_threshold_tool_finalize;
|
||||
|
||||
tool_class->initialize = gimp_threshold_tool_initialize;
|
||||
|
||||
im_tool_class->dialog_desc = _("Apply Threshold");
|
||||
im_tool_class->settings_name = "threshold";
|
||||
im_tool_class->import_dialog_title = _("Import Threshold Settings");
|
||||
im_tool_class->export_dialog_title = _("Export Threshold Settings");
|
||||
|
@ -119,6 +121,16 @@ gimp_threshold_tool_init (GimpThresholdTool *t_tool)
|
|||
t_tool->histogram = gimp_histogram_new (TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_threshold_tool_constructed (GObject *object)
|
||||
{
|
||||
G_OBJECT_CLASS (parent_class)->constructed (object);
|
||||
|
||||
g_signal_connect_object (GIMP_IMAGE_MAP_TOOL (object)->config, "notify",
|
||||
G_CALLBACK (gimp_threshold_tool_config_notify),
|
||||
object, 0);
|
||||
}
|
||||
|
||||
static void
|
||||
gimp_threshold_tool_finalize (GObject *object)
|
||||
{
|
||||
|
@ -154,25 +166,17 @@ gimp_threshold_tool_initialize (GimpTool *tool,
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static GeglNode *
|
||||
gimp_threshold_tool_get_operation (GimpImageMapTool *image_map_tool,
|
||||
GObject **config,
|
||||
gchar **undo_desc)
|
||||
static gchar *
|
||||
gimp_threshold_tool_get_operation (GimpImageMapTool *im_tool,
|
||||
gchar **title,
|
||||
gchar **description,
|
||||
gchar **undo_desc,
|
||||
gchar **icon_name,
|
||||
gchar **help_id)
|
||||
{
|
||||
GimpThresholdTool *t_tool = GIMP_THRESHOLD_TOOL (image_map_tool);
|
||||
*description = g_strdup (_("Apply Threshold"));
|
||||
|
||||
t_tool->config = g_object_new (GIMP_TYPE_THRESHOLD_CONFIG, NULL);
|
||||
|
||||
g_signal_connect_object (t_tool->config, "notify",
|
||||
G_CALLBACK (gimp_threshold_tool_config_notify),
|
||||
G_OBJECT (t_tool), 0);
|
||||
|
||||
*config = G_OBJECT (t_tool->config);
|
||||
|
||||
return gegl_node_new_child (NULL,
|
||||
"operation", "gimp:threshold",
|
||||
"config", t_tool->config,
|
||||
NULL);
|
||||
return g_strdup ("gimp:threshold");
|
||||
}
|
||||
|
||||
|
||||
|
@ -181,19 +185,20 @@ gimp_threshold_tool_get_operation (GimpImageMapTool *image_map_tool,
|
|||
/**********************/
|
||||
|
||||
static void
|
||||
gimp_threshold_tool_dialog (GimpImageMapTool *image_map_tool)
|
||||
gimp_threshold_tool_dialog (GimpImageMapTool *im_tool)
|
||||
{
|
||||
GimpThresholdTool *t_tool = GIMP_THRESHOLD_TOOL (image_map_tool);
|
||||
GimpToolOptions *tool_options = GIMP_TOOL_GET_OPTIONS (image_map_tool);
|
||||
GimpThresholdConfig *config = t_tool->config;
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *menu;
|
||||
GtkWidget *box;
|
||||
GtkWidget *button;
|
||||
gint n_bins;
|
||||
GimpThresholdTool *t_tool = GIMP_THRESHOLD_TOOL (im_tool);
|
||||
GimpToolOptions *tool_options = GIMP_TOOL_GET_OPTIONS (im_tool);
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *hbox;
|
||||
GtkWidget *menu;
|
||||
GtkWidget *box;
|
||||
GtkWidget *button;
|
||||
gdouble low;
|
||||
gdouble high;
|
||||
gint n_bins;
|
||||
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (image_map_tool);
|
||||
main_vbox = gimp_image_map_tool_dialog_get_vbox (im_tool);
|
||||
|
||||
hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
|
||||
gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0);
|
||||
|
@ -211,11 +216,16 @@ gimp_threshold_tool_dialog (GimpImageMapTool *image_map_tool)
|
|||
|
||||
t_tool->histogram_box = GIMP_HISTOGRAM_BOX (box);
|
||||
|
||||
g_object_get (im_tool->config,
|
||||
"low", &low,
|
||||
"high", &high,
|
||||
NULL);
|
||||
|
||||
n_bins = gimp_histogram_n_bins (t_tool->histogram);
|
||||
|
||||
gimp_histogram_view_set_range (t_tool->histogram_box->view,
|
||||
config->low * (n_bins - 0.0001),
|
||||
config->high * (n_bins - 0.0001));
|
||||
low * (n_bins - 0.0001),
|
||||
high * (n_bins - 0.0001));
|
||||
|
||||
g_signal_connect (t_tool->histogram_box->view, "range-changed",
|
||||
G_CALLBACK (gimp_threshold_tool_histogram_range),
|
||||
|
@ -244,17 +254,23 @@ gimp_threshold_tool_config_notify (GObject *object,
|
|||
GParamSpec *pspec,
|
||||
GimpThresholdTool *t_tool)
|
||||
{
|
||||
GimpThresholdConfig *config = GIMP_THRESHOLD_CONFIG (object);
|
||||
gint n_bins;
|
||||
gdouble low;
|
||||
gdouble high;
|
||||
gint n_bins;
|
||||
|
||||
if (! t_tool->histogram_box)
|
||||
return;
|
||||
|
||||
g_object_get (object,
|
||||
"low", &low,
|
||||
"high", &high,
|
||||
NULL);
|
||||
|
||||
n_bins = gimp_histogram_n_bins (t_tool->histogram);
|
||||
|
||||
gimp_histogram_view_set_range (t_tool->histogram_box->view,
|
||||
config->low * (n_bins - 0.0001),
|
||||
config->high * (n_bins - 0.0001));
|
||||
low * (n_bins - 0.0001),
|
||||
high * (n_bins - 0.0001));
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -263,14 +279,22 @@ gimp_threshold_tool_histogram_range (GimpHistogramView *widget,
|
|||
gint end,
|
||||
GimpThresholdTool *t_tool)
|
||||
{
|
||||
gint n_bins = gimp_histogram_n_bins (t_tool->histogram);
|
||||
gdouble low = (gdouble) start / (n_bins - 1);
|
||||
gdouble high = (gdouble) end / (n_bins - 1);
|
||||
GimpImageMapTool *im_tool = GIMP_IMAGE_MAP_TOOL (t_tool);
|
||||
gint n_bins = gimp_histogram_n_bins (t_tool->histogram);
|
||||
gdouble low = (gdouble) start / (n_bins - 1);
|
||||
gdouble high = (gdouble) end / (n_bins - 1);
|
||||
gdouble config_low;
|
||||
gdouble config_high;
|
||||
|
||||
if (low != t_tool->config->low ||
|
||||
high != t_tool->config->high)
|
||||
g_object_get (im_tool->config,
|
||||
"low", &config_low,
|
||||
"high", &config_high,
|
||||
NULL);
|
||||
|
||||
if (low != config_low ||
|
||||
high != config_high)
|
||||
{
|
||||
g_object_set (t_tool->config,
|
||||
g_object_set (im_tool->config,
|
||||
"low", low,
|
||||
"high", high,
|
||||
NULL);
|
||||
|
|
|
@ -35,13 +35,11 @@ typedef struct _GimpThresholdToolClass GimpThresholdToolClass;
|
|||
|
||||
struct _GimpThresholdTool
|
||||
{
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
GimpThresholdConfig *config;
|
||||
GimpImageMapTool parent_instance;
|
||||
|
||||
/* dialog */
|
||||
GimpHistogram *histogram;
|
||||
GimpHistogramBox *histogram_box;
|
||||
GimpHistogram *histogram;
|
||||
GimpHistogramBox *histogram_box;
|
||||
};
|
||||
|
||||
struct _GimpThresholdToolClass
|
||||
|
|
Loading…
Reference in New Issue