mirror of https://github.com/GNOME/gimp.git
app/[all tool related files] app/commands.c app/disp_callbacks.c
1999-06-26 Michael Natterer <mitschel@cs.tu-berlin.de> * app/[all tool related files] * app/commands.c * app/disp_callbacks.c * app/gdisplay.c * app/gimage.c * app/interface.c: hopefully fixed the bugs that appeared with my last fix. And some more changes... - Slightly changed the conditions which cause the tools to be re-initialized on button_press events and the global initialisation functions. - The dialog tools now explicitly set tool->gdisp_ptr so they can be properly hidden on display deletion. - Create the crop info dialog only once and avoid ugly redraw bugs by blocking the sizeentries' signal when initializing them. - Standardized the tools_new_<tool>() functions. They are scheduled to be moved to a common constructor in tools.c - Various stuff...
This commit is contained in:
parent
a7a466484c
commit
c456ba93ba
28
ChangeLog
28
ChangeLog
|
@ -1,4 +1,25 @@
|
|||
1999-06-26 Sven Neumann <sven@gimp.org>
|
||||
1999-06-26 Michael Natterer <mitschel@cs.tu-berlin.de>
|
||||
|
||||
* app/[all tool related files]
|
||||
* app/commands.c
|
||||
* app/disp_callbacks.c
|
||||
* app/gdisplay.c
|
||||
* app/gimage.c
|
||||
* app/interface.c: hopefully fixed the bugs that appeared with my
|
||||
last fix. And some more changes...
|
||||
|
||||
- Slightly changed the conditions which cause the tools to be
|
||||
re-initialized on button_press events and the global
|
||||
initialisation functions.
|
||||
- The dialog tools now explicitly set tool->gdisp_ptr so they can
|
||||
be properly hidden on display deletion.
|
||||
- Create the crop info dialog only once and avoid ugly redraw bugs
|
||||
by blocking the sizeentries' signal when initializing them.
|
||||
- Standardized the tools_new_<tool>() functions. They are
|
||||
scheduled to be moved to a common constructor in tools.c
|
||||
- Various stuff...
|
||||
|
||||
1999-06-26 Sven Neumann <sven@gimp.org>
|
||||
Michael Natterer <mitschel@cs.tu-berlin.de>
|
||||
|
||||
* app/app_procs.c
|
||||
|
@ -12,8 +33,9 @@ Fri Jun 25 22:09:04 BST 1999 Andy Thomas <alt@gimp.org>
|
|||
dialog and then the busy cursors stuff tried to change
|
||||
the cursor on a dialog that has been removed. (ie
|
||||
the LCP dialog should be unregistered when it is destroyed)
|
||||
|
||||
Small previews in LCP dialog image menu do not get created when no preview preference is set.
|
||||
|
||||
Small previews in LCP dialog image menu do not get created when
|
||||
no preview preference is set.
|
||||
|
||||
Thu Jun 24 18:13:35 PDT 1999 Manish Singh <yosh@gimp.org>
|
||||
|
||||
|
|
|
@ -976,20 +976,30 @@ tools_select_cmd_callback (GtkWidget *widget,
|
|||
GDisplay * gdisp;
|
||||
gdisp = gdisplay_active ();
|
||||
|
||||
/* Activate the approriate widget.
|
||||
/* Activate the appropriate widget.
|
||||
* Implicitly calls tools_select()
|
||||
*/
|
||||
gtk_widget_activate (tool_info[callback_action].tool_widget);
|
||||
|
||||
/* Paranoia */
|
||||
active_tool->drawable = NULL;
|
||||
|
||||
/* Complete the initialisation by doing the same stuff
|
||||
* tools_initialize() does after it did what tools_select() does
|
||||
*/
|
||||
if (tool_info[callback_action].init_func && gdisp)
|
||||
if (tool_info[callback_action].init_func)
|
||||
{
|
||||
(* tool_info[callback_action].init_func) (gdisp);
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
/* setting the gdisp_ptr here is a HACK to allow the tools'
|
||||
* dialog windows being hidden if the tool was selected from
|
||||
* a tear-off-menu and there was no mouse click in the display
|
||||
* before deleting it
|
||||
*/
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -34,10 +34,10 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
/* The maximum amount of pressure that can be exerted */
|
||||
#define MAX_PRESSURE 0.075
|
||||
#define MAX_PRESSURE 0.075
|
||||
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
|
||||
/* the airbrush structures */
|
||||
|
||||
|
|
|
@ -157,6 +157,8 @@ color_balance_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -204,13 +206,7 @@ color_balance_control (Tool *tool,
|
|||
|
||||
case HALT:
|
||||
if (color_balance_dialog)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (color_balance_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
color_balance_dialog->image_map = NULL;
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
}
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -237,18 +233,20 @@ tools_new_color_balance ()
|
|||
tool->type = COLOR_BALANCE;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->private = (void *) private;
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = color_balance_button_press;
|
||||
tool->button_release_func = color_balance_button_release;
|
||||
tool->motion_func = color_balance_motion;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func; tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func;
|
||||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = color_balance_cursor_update;
|
||||
tool->control_func = color_balance_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -294,22 +292,18 @@ color_balance_initialize (GDisplay *gdisp)
|
|||
color_balance_dialog->yellow_blue[i] = 0.0;
|
||||
}
|
||||
color_balance_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
color_balance_dialog->image_map = image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
color_balance_dialog->image_map =
|
||||
image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
|
||||
color_balance_update (color_balance_dialog, ALL);
|
||||
}
|
||||
|
||||
|
||||
/****************************/
|
||||
/* Select by Color dialog */
|
||||
/****************************/
|
||||
/**************************/
|
||||
/* Color Balance dialog */
|
||||
/**************************/
|
||||
|
||||
/* the action area structure */
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
static ColorBalanceDialog *
|
||||
color_balance_new_dialog ()
|
||||
{
|
||||
|
@ -326,13 +320,21 @@ color_balance_new_dialog ()
|
|||
GtkObject *data;
|
||||
GSList *group = NULL;
|
||||
int i;
|
||||
char *appl_mode_names[3] =
|
||||
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
char *appl_mode_names[] =
|
||||
{
|
||||
N_("Shadows"),
|
||||
N_("Midtones"),
|
||||
N_("Highlights")
|
||||
};
|
||||
ActionCallback appl_mode_callbacks[3] =
|
||||
|
||||
ActionCallback appl_mode_callbacks[] =
|
||||
{
|
||||
color_balance_shadows_callback,
|
||||
color_balance_midtones_callback,
|
||||
|
@ -657,6 +659,9 @@ color_balance_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cbd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -684,10 +689,13 @@ color_balance_cancel_callback (GtkWidget *widget,
|
|||
active_tool->preserve = TRUE;
|
||||
image_map_abort (cbd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
gdisplays_flush ();
|
||||
cbd->image_map = NULL;
|
||||
}
|
||||
|
||||
cbd->image_map = NULL;
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -177,12 +177,17 @@ curves_button_press (Tool *tool,
|
|||
gdisp = gdisp_ptr;
|
||||
drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (drawable != tool->drawable)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (curves_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
curves_dialog->drawable = tool->drawable = drawable;
|
||||
|
||||
tool->drawable = drawable;
|
||||
|
||||
curves_dialog->drawable = drawable;
|
||||
curves_dialog->color = drawable_color (drawable);
|
||||
curves_dialog->image_map = image_map_create (gdisp, drawable);
|
||||
}
|
||||
|
@ -380,6 +385,10 @@ tools_new_curves ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = curves_button_press;
|
||||
tool->button_release_func = curves_button_release;
|
||||
tool->motion_func = curves_motion;
|
||||
|
@ -388,8 +397,6 @@ tools_new_curves ()
|
|||
tool->cursor_update_func = curves_cursor_update;
|
||||
tool->control_func = curves_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -471,12 +478,11 @@ curves_initialize (GDisplay *gdisp)
|
|||
gtk_widget_set_sensitive( channel_items[i].widget, FALSE);
|
||||
|
||||
/* set the current selection */
|
||||
gtk_option_menu_set_history ( GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
|
||||
if (!GTK_WIDGET_VISIBLE (curves_dialog->shell))
|
||||
gtk_widget_show (curves_dialog->shell);
|
||||
|
||||
|
||||
curves_update (curves_dialog, GRAPH | DRAW);
|
||||
}
|
||||
|
||||
|
@ -1174,6 +1180,9 @@ curves_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1192,9 +1201,12 @@ curves_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (cd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
cd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
|
|
@ -237,6 +237,8 @@ hue_saturation_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -310,6 +312,10 @@ tools_new_hue_saturation ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = hue_saturation_button_press;
|
||||
tool->button_release_func = hue_saturation_button_release;
|
||||
tool->motion_func = hue_saturation_motion;
|
||||
|
@ -317,9 +323,6 @@ tools_new_hue_saturation ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = hue_saturation_cursor_update;
|
||||
tool->control_func = hue_saturation_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -744,6 +747,9 @@ hue_saturation_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -772,9 +778,12 @@ hue_saturation_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (hsd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
hsd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -166,6 +166,8 @@ threshold_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -246,6 +248,10 @@ tools_new_threshold ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = threshold_button_press;
|
||||
tool->button_release_func = threshold_button_release;
|
||||
tool->motion_func = threshold_motion;
|
||||
|
@ -254,8 +260,6 @@ tools_new_threshold ()
|
|||
tool->cursor_update_func = threshold_cursor_update;
|
||||
tool->control_func = threshold_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -291,16 +295,18 @@ threshold_initialize (GDisplay *gdisp)
|
|||
|
||||
threshold_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
threshold_dialog->color = drawable_color (threshold_dialog->drawable);
|
||||
threshold_dialog->image_map = image_map_create (gdisp, threshold_dialog->drawable);
|
||||
threshold_dialog->image_map =
|
||||
image_map_create (gdisp, threshold_dialog->drawable);
|
||||
|
||||
gimp_histogram_calculate_drawable(threshold_dialog->hist,
|
||||
threshold_dialog->drawable);
|
||||
gimp_histogram_calculate_drawable (threshold_dialog->hist,
|
||||
threshold_dialog->drawable);
|
||||
|
||||
histogram_widget_update (threshold_dialog->histogram,
|
||||
threshold_dialog->hist);
|
||||
histogram_widget_range (threshold_dialog->histogram,
|
||||
threshold_dialog->low_threshold,
|
||||
threshold_dialog->high_threshold);
|
||||
|
||||
if (threshold_dialog->preview)
|
||||
threshold_preview (threshold_dialog);
|
||||
}
|
||||
|
@ -453,6 +459,9 @@ threshold_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
td->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -484,6 +493,9 @@ threshold_cancel_callback (GtkWidget *widget,
|
|||
td->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -202,7 +202,7 @@ Tool*
|
|||
tools_new_bezier_select ()
|
||||
{
|
||||
Tool * tool;
|
||||
BezierSelect * bezier_sel;
|
||||
BezierSelect * private;
|
||||
|
||||
/* The tool options */
|
||||
if (! bezier_options)
|
||||
|
@ -213,19 +213,23 @@ tools_new_bezier_select ()
|
|||
}
|
||||
|
||||
tool = g_malloc (sizeof (Tool));
|
||||
private = g_malloc (sizeof (BezierSelect));
|
||||
|
||||
bezier_sel = g_new0(BezierSelect,1);
|
||||
|
||||
bezier_sel->num_points = 0;
|
||||
bezier_sel->mask = NULL;
|
||||
bezier_sel->core = draw_core_new (bezier_select_draw);
|
||||
bezier_select_reset (bezier_sel);
|
||||
private->num_points = 0;
|
||||
private->mask = NULL;
|
||||
private->core = draw_core_new (bezier_select_draw);
|
||||
bezier_select_reset (private);
|
||||
|
||||
tool->type = BEZIER_SELECT;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Do not allow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) bezier_sel;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = bezier_select_button_press;
|
||||
tool->button_release_func = bezier_select_button_release;
|
||||
tool->motion_func = bezier_select_motion;
|
||||
|
@ -233,13 +237,12 @@ tools_new_bezier_select ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = bezier_select_cursor_update;
|
||||
tool->control_func = bezier_select_control;
|
||||
tool->preserve = FALSE;
|
||||
|
||||
curCore = bezier_sel->core;
|
||||
curSel = bezier_sel;
|
||||
curCore = private->core;
|
||||
curSel = private;
|
||||
curTool = tool;
|
||||
|
||||
paths_new_bezier_select_tool();
|
||||
paths_new_bezier_select_tool ();
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -834,6 +837,9 @@ bezier_select_button_press (Tool *tool,
|
|||
int halfwidth, dummy;
|
||||
|
||||
gdisp = (GDisplay *) gdisp_ptr;
|
||||
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
bezier_sel = tool->private;
|
||||
grab_pointer = 0;
|
||||
|
||||
|
|
|
@ -1741,7 +1741,11 @@ tools_new_blend ()
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = blend_button_press;
|
||||
tool->button_release_func = blend_button_release;
|
||||
|
@ -1750,7 +1754,6 @@ tools_new_blend ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = blend_cursor_update;
|
||||
tool->control_func = blend_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -112,6 +112,8 @@ brightness_contrast_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -186,6 +188,10 @@ tools_new_brightness_contrast ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = brightness_contrast_button_press;
|
||||
tool->button_release_func = brightness_contrast_button_release;
|
||||
tool->motion_func = brightness_contrast_motion;
|
||||
|
@ -193,9 +199,6 @@ tools_new_brightness_contrast ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = brightness_contrast_cursor_update;
|
||||
tool->control_func = brightness_contrast_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -236,8 +239,8 @@ brightness_contrast_initialize (GDisplay *gdisp)
|
|||
brightness_contrast_dialog->contrast = 0.0;
|
||||
|
||||
brightness_contrast_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
brightness_contrast_dialog->image_map = image_map_create (gdisp,
|
||||
brightness_contrast_dialog->drawable);
|
||||
brightness_contrast_dialog->image_map =
|
||||
image_map_create (gdisp, brightness_contrast_dialog->drawable);
|
||||
|
||||
brightness_contrast_update (brightness_contrast_dialog, ALL);
|
||||
}
|
||||
|
@ -454,6 +457,9 @@ brightness_contrast_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
bcd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -485,6 +491,9 @@ brightness_contrast_cancel_callback (GtkWidget *widget,
|
|||
bcd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -611,7 +611,11 @@ tools_new_bucket_fill (void)
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = bucket_fill_button_press;
|
||||
tool->button_release_func = bucket_fill_button_release;
|
||||
|
@ -620,7 +624,6 @@ tools_new_bucket_fill (void)
|
|||
tool->modifier_key_func = bucket_fill_modifier_key_func;
|
||||
tool->cursor_update_func = bucket_fill_cursor_update;
|
||||
tool->control_func = bucket_fill_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -483,6 +483,10 @@ tools_new_by_color_select ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = by_color_select_button_press;
|
||||
tool->button_release_func = by_color_select_button_release;
|
||||
tool->motion_func = by_color_select_motion;
|
||||
|
@ -490,9 +494,6 @@ tools_new_by_color_select ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = by_color_select_cursor_update;
|
||||
tool->control_func = by_color_select_control;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -157,6 +157,8 @@ color_balance_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -204,13 +206,7 @@ color_balance_control (Tool *tool,
|
|||
|
||||
case HALT:
|
||||
if (color_balance_dialog)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (color_balance_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
color_balance_dialog->image_map = NULL;
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
}
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -237,18 +233,20 @@ tools_new_color_balance ()
|
|||
tool->type = COLOR_BALANCE;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->private = (void *) private;
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = color_balance_button_press;
|
||||
tool->button_release_func = color_balance_button_release;
|
||||
tool->motion_func = color_balance_motion;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func; tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func;
|
||||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = color_balance_cursor_update;
|
||||
tool->control_func = color_balance_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -294,22 +292,18 @@ color_balance_initialize (GDisplay *gdisp)
|
|||
color_balance_dialog->yellow_blue[i] = 0.0;
|
||||
}
|
||||
color_balance_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
color_balance_dialog->image_map = image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
color_balance_dialog->image_map =
|
||||
image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
|
||||
color_balance_update (color_balance_dialog, ALL);
|
||||
}
|
||||
|
||||
|
||||
/****************************/
|
||||
/* Select by Color dialog */
|
||||
/****************************/
|
||||
/**************************/
|
||||
/* Color Balance dialog */
|
||||
/**************************/
|
||||
|
||||
/* the action area structure */
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
static ColorBalanceDialog *
|
||||
color_balance_new_dialog ()
|
||||
{
|
||||
|
@ -326,13 +320,21 @@ color_balance_new_dialog ()
|
|||
GtkObject *data;
|
||||
GSList *group = NULL;
|
||||
int i;
|
||||
char *appl_mode_names[3] =
|
||||
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
char *appl_mode_names[] =
|
||||
{
|
||||
N_("Shadows"),
|
||||
N_("Midtones"),
|
||||
N_("Highlights")
|
||||
};
|
||||
ActionCallback appl_mode_callbacks[3] =
|
||||
|
||||
ActionCallback appl_mode_callbacks[] =
|
||||
{
|
||||
color_balance_shadows_callback,
|
||||
color_balance_midtones_callback,
|
||||
|
@ -657,6 +659,9 @@ color_balance_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cbd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -684,10 +689,13 @@ color_balance_cancel_callback (GtkWidget *widget,
|
|||
active_tool->preserve = TRUE;
|
||||
image_map_abort (cbd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
gdisplays_flush ();
|
||||
cbd->image_map = NULL;
|
||||
}
|
||||
|
||||
cbd->image_map = NULL;
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -625,7 +625,11 @@ tools_new_color_picker ()
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = color_picker_button_press;
|
||||
tool->button_release_func = color_picker_button_release;
|
||||
|
@ -634,7 +638,6 @@ tools_new_color_picker ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = color_picker_cursor_update;
|
||||
tool->control_func = color_picker_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -976,20 +976,30 @@ tools_select_cmd_callback (GtkWidget *widget,
|
|||
GDisplay * gdisp;
|
||||
gdisp = gdisplay_active ();
|
||||
|
||||
/* Activate the approriate widget.
|
||||
/* Activate the appropriate widget.
|
||||
* Implicitly calls tools_select()
|
||||
*/
|
||||
gtk_widget_activate (tool_info[callback_action].tool_widget);
|
||||
|
||||
/* Paranoia */
|
||||
active_tool->drawable = NULL;
|
||||
|
||||
/* Complete the initialisation by doing the same stuff
|
||||
* tools_initialize() does after it did what tools_select() does
|
||||
*/
|
||||
if (tool_info[callback_action].init_func && gdisp)
|
||||
if (tool_info[callback_action].init_func)
|
||||
{
|
||||
(* tool_info[callback_action].init_func) (gdisp);
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
/* setting the gdisp_ptr here is a HACK to allow the tools'
|
||||
* dialog windows being hidden if the tool was selected from
|
||||
* a tear-off-menu and there was no mouse click in the display
|
||||
* before deleting it
|
||||
*/
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -1741,7 +1741,11 @@ tools_new_blend ()
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = blend_button_press;
|
||||
tool->button_release_func = blend_button_release;
|
||||
|
@ -1750,7 +1754,6 @@ tools_new_blend ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = blend_cursor_update;
|
||||
tool->control_func = blend_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -1731,6 +1731,14 @@ gdisplay_expose_full (GDisplay *gdisp)
|
|||
GDisplay *
|
||||
gdisplay_active ()
|
||||
{
|
||||
GdkEvent *event;
|
||||
|
||||
event = gtk_get_current_event ();
|
||||
if (event != NULL)
|
||||
{
|
||||
gdk_event_free (event);
|
||||
}
|
||||
|
||||
return gimp_context_get_display (gimp_context_get_user ());
|
||||
}
|
||||
|
||||
|
|
171
app/crop.c
171
app/crop.c
|
@ -113,7 +113,7 @@ static void crop_control (Tool *, ToolAction, gpointer);
|
|||
static void crop_arrow_keys_func (Tool *, GdkEventKey *, gpointer);
|
||||
static void crop_modifier_key_func (Tool *, GdkEventKey *, gpointer);
|
||||
|
||||
/* Crop helper functions */
|
||||
/* Crop helper functions */
|
||||
static void crop_recalc (Tool *, Crop *);
|
||||
static void crop_start (Tool *, Crop *);
|
||||
static void crop_adjust_guides (GImage *, int, int, int, int);
|
||||
|
@ -132,18 +132,18 @@ typedef enum {
|
|||
AUTO_CROP_COLOR = 2
|
||||
} AutoCropType;
|
||||
|
||||
typedef guchar * (*GetColorFunc) (GtkObject *, int, int);
|
||||
typedef AutoCropType (*ColorsEqualFunc) (guchar *, guchar *, int);
|
||||
typedef guchar * (*GetColorFunc) (GtkObject *, int, int);
|
||||
typedef AutoCropType (*ColorsEqualFunc) (guchar *, guchar *, int);
|
||||
|
||||
static void crop_selection_callback (GtkWidget *, gpointer);
|
||||
static void crop_automatic_callback (GtkWidget *, gpointer);
|
||||
static void crop_selection_callback (GtkWidget *, gpointer);
|
||||
static void crop_automatic_callback (GtkWidget *, gpointer);
|
||||
static AutoCropType crop_guess_bgcolor (GtkObject *, GetColorFunc, int, int, int, int, guchar *);
|
||||
static int crop_colors_equal (guchar *, guchar *, int);
|
||||
static int crop_colors_alpha (guchar *, guchar *, int);
|
||||
static int crop_colors_equal (guchar *, guchar *, int);
|
||||
static int crop_colors_alpha (guchar *, guchar *, int);
|
||||
|
||||
/* Crop dialog callback funtions */
|
||||
static void crop_orig_changed (GtkWidget *, gpointer);
|
||||
static void crop_size_changed (GtkWidget *, gpointer);
|
||||
static void crop_orig_changed (GtkWidget *, gpointer);
|
||||
static void crop_size_changed (GtkWidget *, gpointer);
|
||||
|
||||
|
||||
/* Functions */
|
||||
|
@ -168,7 +168,7 @@ crop_options_new (void)
|
|||
GtkWidget *frame;
|
||||
gchar* type_label[2] = { N_("Crop"), N_("Resize") };
|
||||
gint type_value[2] = { CROP_CROP, RESIZE_CROP };
|
||||
|
||||
|
||||
/* the new crop tool options structure */
|
||||
options = (CropOptions *) g_malloc (sizeof (CropOptions));
|
||||
tool_options_init ((ToolOptions *) options,
|
||||
|
@ -205,7 +205,7 @@ crop_options_new (void)
|
|||
gtk_widget_show (options->allow_enlarge_w);
|
||||
|
||||
/* tool toggle */
|
||||
frame = tool_options_radio_buttons_new (N_("Tool Toggle"),
|
||||
frame = tool_options_radio_buttons_new (_("Tool Toggle"),
|
||||
&options->type,
|
||||
options->type_w,
|
||||
type_label,
|
||||
|
@ -218,7 +218,6 @@ crop_options_new (void)
|
|||
return options;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
crop_button_press (Tool *tool,
|
||||
GdkEventButton *bevent,
|
||||
|
@ -230,10 +229,11 @@ crop_button_press (Tool *tool,
|
|||
gdisp = (GDisplay *) gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
if (tool->state == INACTIVE)
|
||||
crop->function = CREATING;
|
||||
else if (gdisp_ptr != tool->gdisp_ptr)
|
||||
crop->function = CREATING;
|
||||
if (tool->state == INACTIVE ||
|
||||
gdisp_ptr != tool->gdisp_ptr)
|
||||
{
|
||||
crop->function = CREATING;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the cursor is in either the upper left or lower right boxes,
|
||||
|
@ -268,6 +268,7 @@ crop_button_press (Tool *tool,
|
|||
draw_core_stop (crop->core, tool);
|
||||
|
||||
tool->gdisp_ptr = gdisp_ptr;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
gdisplay_untransform_coords (gdisp, bevent->x, bevent->y,
|
||||
&crop->tx1, &crop->ty1, TRUE, FALSE);
|
||||
|
@ -283,7 +284,8 @@ crop_button_press (Tool *tool,
|
|||
crop->lasty = crop->starty;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
|
@ -317,9 +319,7 @@ crop_button_release (Tool *tool,
|
|||
crop_options->layer_only, FALSE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
else
|
||||
crop_info_update (tool);
|
||||
|
@ -671,18 +671,17 @@ crop_control (Tool *tool,
|
|||
|
||||
switch (action)
|
||||
{
|
||||
case PAUSE :
|
||||
case PAUSE:
|
||||
draw_core_pause (crop->core, tool);
|
||||
break;
|
||||
|
||||
case RESUME :
|
||||
case RESUME:
|
||||
crop_recalc (tool, crop);
|
||||
draw_core_resume (crop->core, tool);
|
||||
break;
|
||||
|
||||
case HALT :
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
case HALT:
|
||||
crop_close_callback (NULL, NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -696,12 +695,12 @@ crop_draw (Tool *tool)
|
|||
Crop * crop;
|
||||
GDisplay * gdisp;
|
||||
|
||||
#define SRW 10
|
||||
#define SRH 10
|
||||
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
#define SRW 10
|
||||
#define SRH 10
|
||||
|
||||
gdk_draw_line (crop->core->win, crop->core->gc,
|
||||
crop->x1, crop->y1, gdisp->disp_width, crop->y1);
|
||||
gdk_draw_line (crop->core->win, crop->core->gc,
|
||||
|
@ -723,6 +722,9 @@ crop_draw (Tool *tool)
|
|||
gdk_draw_rectangle (crop->core->win, crop->core->gc, 1,
|
||||
crop->x1, crop->y2-crop->srh, crop->srw, crop->srh);
|
||||
|
||||
#undef SRW
|
||||
#undef SRH
|
||||
|
||||
crop_info_update (tool);
|
||||
}
|
||||
|
||||
|
@ -752,6 +754,10 @@ tools_new_crop ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE; /* XXX Check me */
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = crop_button_press;
|
||||
tool->button_release_func = crop_button_release;
|
||||
tool->motion_func = crop_motion;
|
||||
|
@ -759,7 +765,6 @@ tools_new_crop ()
|
|||
tool->modifier_key_func = crop_modifier_key_func;
|
||||
tool->cursor_update_func = crop_cursor_update;
|
||||
tool->control_func = crop_control;
|
||||
tool->preserve = TRUE; /* XXX Check me */
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -777,10 +782,7 @@ tools_free_crop (Tool *tool)
|
|||
draw_core_free (crop->core);
|
||||
|
||||
if (crop_info)
|
||||
{
|
||||
info_dialog_popdown (crop_info);
|
||||
crop_info = NULL;
|
||||
}
|
||||
crop_close_callback (NULL, NULL);
|
||||
|
||||
g_free (crop);
|
||||
}
|
||||
|
@ -957,6 +959,9 @@ crop_start (Tool *tool,
|
|||
if (! crop_info)
|
||||
crop_info_create (tool);
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (origin_sizeentry), crop_info);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (size_sizeentry), crop_info);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
|
@ -993,6 +998,9 @@ crop_start (Tool *tool,
|
|||
}
|
||||
}
|
||||
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (size_sizeentry), crop_info);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (origin_sizeentry), crop_info);
|
||||
|
||||
old_gdisp = gdisp;
|
||||
|
||||
/* initialize the statusbar display */
|
||||
|
@ -1005,16 +1013,9 @@ crop_start (Tool *tool,
|
|||
}
|
||||
|
||||
|
||||
/*******************************************************/
|
||||
/* Crop dialog functions */
|
||||
/*******************************************************/
|
||||
|
||||
static ActionAreaItem action_items[3] =
|
||||
{
|
||||
{ N_("Crop"), crop_crop_callback, NULL, NULL },
|
||||
{ N_("Resize"), crop_resize_callback, NULL, NULL },
|
||||
{ N_("Close"), crop_close_callback, NULL, NULL },
|
||||
};
|
||||
/***************************/
|
||||
/* Crop dialog functions */
|
||||
/***************************/
|
||||
|
||||
static void
|
||||
crop_info_create (Tool *tool)
|
||||
|
@ -1024,6 +1025,13 @@ crop_info_create (Tool *tool)
|
|||
GtkWidget *bbox;
|
||||
GtkWidget *button;
|
||||
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("Crop"), crop_crop_callback, NULL, NULL },
|
||||
{ N_("Resize"), crop_resize_callback, NULL, NULL },
|
||||
{ N_("Close"), crop_close_callback, NULL, NULL },
|
||||
};
|
||||
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
|
||||
/* create the info dialog */
|
||||
|
@ -1037,30 +1045,15 @@ crop_info_create (Tool *tool)
|
|||
gdisp->dot_for_dot ?
|
||||
UNIT_PIXEL : gdisp->gimage->unit, "%a",
|
||||
TRUE, TRUE, FALSE, GIMP_SIZE_ENTRY_UPDATE_SIZE,
|
||||
crop_orig_changed, tool);
|
||||
crop_orig_changed, crop_info);
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (origin_sizeentry),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
gdisp->gimage->yresolution, FALSE);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
-65536, 65536);
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
-65536, 65536);
|
||||
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
0, gdisp->gimage->width);
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
0, gdisp->gimage->height);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
orig_vals[0]);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
orig_vals[1]);
|
||||
|
||||
spinbutton = info_dialog_add_spinbutton (crop_info, _("Width:"), NULL,
|
||||
-1, 1, 1, 10, 1, 1, 2, NULL, NULL);
|
||||
size_sizeentry =
|
||||
|
@ -1068,28 +1061,15 @@ crop_info_create (Tool *tool)
|
|||
gdisp->dot_for_dot ?
|
||||
UNIT_PIXEL : gdisp->gimage->unit, "%a",
|
||||
TRUE, TRUE, FALSE, GIMP_SIZE_ENTRY_UPDATE_SIZE,
|
||||
crop_size_changed, tool);
|
||||
crop_size_changed, crop_info);
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (size_sizeentry),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
gdisp->gimage->yresolution, FALSE);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
-65536, 65536);
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
-65536, 65536);
|
||||
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
0, gdisp->gimage->width);
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
0, gdisp->gimage->height);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (size_sizeentry), 0, size_vals[0]);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (size_sizeentry), 1, size_vals[1]);
|
||||
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 0, 0);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 1, 6);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 2, 0);
|
||||
|
@ -1151,9 +1131,7 @@ crop_crop_callback (GtkWidget *w,
|
|||
crop_options->layer_only, TRUE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1171,8 +1149,26 @@ crop_resize_callback (GtkWidget *w,
|
|||
crop_options->layer_only, FALSE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
crop_close_callback (GtkWidget *w,
|
||||
gpointer client_data)
|
||||
{
|
||||
Tool * tool;
|
||||
Crop * crop;
|
||||
|
||||
tool = active_tool;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
if (tool->state == ACTIVE)
|
||||
draw_core_stop (crop->core, tool);
|
||||
|
||||
info_dialog_popdown (crop_info);
|
||||
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
tool->state = INACTIVE;
|
||||
}
|
||||
|
||||
|
@ -1442,19 +1438,6 @@ crop_colors_alpha (guchar *dummy,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
crop_close_callback (GtkWidget *w,
|
||||
gpointer client_data)
|
||||
{
|
||||
Tool * tool;
|
||||
|
||||
tool = active_tool;
|
||||
|
||||
draw_core_stop (((Crop *) tool->private)->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
}
|
||||
|
||||
static void
|
||||
crop_orig_changed (GtkWidget *w,
|
||||
gpointer data)
|
||||
|
@ -1465,9 +1448,9 @@ crop_orig_changed (GtkWidget *w,
|
|||
int ox;
|
||||
int oy;
|
||||
|
||||
tool = (Tool *)data;
|
||||
tool = active_tool;
|
||||
|
||||
if (tool)
|
||||
if (tool && active_tool->type == CROP)
|
||||
{
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
@ -1498,9 +1481,9 @@ crop_size_changed (GtkWidget *w,
|
|||
int sx;
|
||||
int sy;
|
||||
|
||||
tool = (Tool *)data;
|
||||
tool = active_tool;
|
||||
|
||||
if (tool)
|
||||
if (tool && active_tool->type == CROP)
|
||||
{
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
|
24
app/curves.c
24
app/curves.c
|
@ -177,12 +177,17 @@ curves_button_press (Tool *tool,
|
|||
gdisp = gdisp_ptr;
|
||||
drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (drawable != tool->drawable)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (curves_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
curves_dialog->drawable = tool->drawable = drawable;
|
||||
|
||||
tool->drawable = drawable;
|
||||
|
||||
curves_dialog->drawable = drawable;
|
||||
curves_dialog->color = drawable_color (drawable);
|
||||
curves_dialog->image_map = image_map_create (gdisp, drawable);
|
||||
}
|
||||
|
@ -380,6 +385,10 @@ tools_new_curves ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = curves_button_press;
|
||||
tool->button_release_func = curves_button_release;
|
||||
tool->motion_func = curves_motion;
|
||||
|
@ -388,8 +397,6 @@ tools_new_curves ()
|
|||
tool->cursor_update_func = curves_cursor_update;
|
||||
tool->control_func = curves_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -471,12 +478,11 @@ curves_initialize (GDisplay *gdisp)
|
|||
gtk_widget_set_sensitive( channel_items[i].widget, FALSE);
|
||||
|
||||
/* set the current selection */
|
||||
gtk_option_menu_set_history ( GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
|
||||
if (!GTK_WIDGET_VISIBLE (curves_dialog->shell))
|
||||
gtk_widget_show (curves_dialog->shell);
|
||||
|
||||
|
||||
curves_update (curves_dialog, GRAPH | DRAW);
|
||||
}
|
||||
|
||||
|
@ -1174,6 +1180,9 @@ curves_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1192,9 +1201,12 @@ curves_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (cd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
cd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
|
|
@ -202,6 +202,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
case GDK_LEAVE_NOTIFY:
|
||||
gdisplay_update_cursor (gdisp, 0, 0);
|
||||
gtk_label_set_text (GTK_LABEL (gdisp->cursor_label), "");
|
||||
|
||||
case GDK_PROXIMITY_OUT:
|
||||
gdisp->proximity = FALSE;
|
||||
break;
|
||||
|
@ -245,23 +246,26 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
update_cursor = TRUE;
|
||||
}
|
||||
|
||||
/* reset the current tool if ... */
|
||||
/* reset the current tool if ... */
|
||||
if ((/* it has no drawable */
|
||||
! active_tool->drawable ||
|
||||
|
||||
if (/* it has no display */
|
||||
! active_tool->gdisp_ptr ||
|
||||
/* or a drawable different from the current one */
|
||||
(gimage_active_drawable (gdisp->gimage) !=
|
||||
active_tool->drawable)) &&
|
||||
|
||||
/* or no drawable */
|
||||
! active_tool->drawable ||
|
||||
|
||||
/* or a drawable different from it's current one... */
|
||||
((gimage_active_drawable (gdisp->gimage) !=
|
||||
active_tool->drawable) &&
|
||||
/* ...and doesn't want to preserve it */
|
||||
! active_tool->preserve))
|
||||
/* and doesn't want to be preserved across drawable changes */
|
||||
! active_tool->preserve)
|
||||
{
|
||||
tools_initialize (active_tool->type, gdisp);
|
||||
}
|
||||
|
||||
/* otherwise set it's drawable if it has none */
|
||||
else if (! active_tool->drawable)
|
||||
{
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
(* active_tool->button_press_func) (active_tool, bevent, gdisp);
|
||||
}
|
||||
break;
|
||||
|
@ -277,6 +281,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
state |= GDK_BUTTON3_MASK;
|
||||
gtk_menu_popup (GTK_MENU (gdisp->popup),
|
||||
NULL, NULL, NULL, NULL, 3, bevent->time);
|
||||
return_val = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -202,6 +202,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
case GDK_LEAVE_NOTIFY:
|
||||
gdisplay_update_cursor (gdisp, 0, 0);
|
||||
gtk_label_set_text (GTK_LABEL (gdisp->cursor_label), "");
|
||||
|
||||
case GDK_PROXIMITY_OUT:
|
||||
gdisp->proximity = FALSE;
|
||||
break;
|
||||
|
@ -245,23 +246,26 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
update_cursor = TRUE;
|
||||
}
|
||||
|
||||
/* reset the current tool if ... */
|
||||
/* reset the current tool if ... */
|
||||
if ((/* it has no drawable */
|
||||
! active_tool->drawable ||
|
||||
|
||||
if (/* it has no display */
|
||||
! active_tool->gdisp_ptr ||
|
||||
/* or a drawable different from the current one */
|
||||
(gimage_active_drawable (gdisp->gimage) !=
|
||||
active_tool->drawable)) &&
|
||||
|
||||
/* or no drawable */
|
||||
! active_tool->drawable ||
|
||||
|
||||
/* or a drawable different from it's current one... */
|
||||
((gimage_active_drawable (gdisp->gimage) !=
|
||||
active_tool->drawable) &&
|
||||
/* ...and doesn't want to preserve it */
|
||||
! active_tool->preserve))
|
||||
/* and doesn't want to be preserved across drawable changes */
|
||||
! active_tool->preserve)
|
||||
{
|
||||
tools_initialize (active_tool->type, gdisp);
|
||||
}
|
||||
|
||||
/* otherwise set it's drawable if it has none */
|
||||
else if (! active_tool->drawable)
|
||||
{
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
(* active_tool->button_press_func) (active_tool, bevent, gdisp);
|
||||
}
|
||||
break;
|
||||
|
@ -277,6 +281,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
state |= GDK_BUTTON3_MASK;
|
||||
gtk_menu_popup (GTK_MENU (gdisp->popup),
|
||||
NULL, NULL, NULL, NULL, 3, bevent->time);
|
||||
return_val = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -1731,6 +1731,14 @@ gdisplay_expose_full (GDisplay *gdisp)
|
|||
GDisplay *
|
||||
gdisplay_active ()
|
||||
{
|
||||
GdkEvent *event;
|
||||
|
||||
event = gtk_get_current_event ();
|
||||
if (event != NULL)
|
||||
{
|
||||
gdk_event_free (event);
|
||||
}
|
||||
|
||||
return gimp_context_get_display (gimp_context_get_user ());
|
||||
}
|
||||
|
||||
|
|
|
@ -202,6 +202,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
case GDK_LEAVE_NOTIFY:
|
||||
gdisplay_update_cursor (gdisp, 0, 0);
|
||||
gtk_label_set_text (GTK_LABEL (gdisp->cursor_label), "");
|
||||
|
||||
case GDK_PROXIMITY_OUT:
|
||||
gdisp->proximity = FALSE;
|
||||
break;
|
||||
|
@ -245,23 +246,26 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
update_cursor = TRUE;
|
||||
}
|
||||
|
||||
/* reset the current tool if ... */
|
||||
/* reset the current tool if ... */
|
||||
if ((/* it has no drawable */
|
||||
! active_tool->drawable ||
|
||||
|
||||
if (/* it has no display */
|
||||
! active_tool->gdisp_ptr ||
|
||||
/* or a drawable different from the current one */
|
||||
(gimage_active_drawable (gdisp->gimage) !=
|
||||
active_tool->drawable)) &&
|
||||
|
||||
/* or no drawable */
|
||||
! active_tool->drawable ||
|
||||
|
||||
/* or a drawable different from it's current one... */
|
||||
((gimage_active_drawable (gdisp->gimage) !=
|
||||
active_tool->drawable) &&
|
||||
/* ...and doesn't want to preserve it */
|
||||
! active_tool->preserve))
|
||||
/* and doesn't want to be preserved across drawable changes */
|
||||
! active_tool->preserve)
|
||||
{
|
||||
tools_initialize (active_tool->type, gdisp);
|
||||
}
|
||||
|
||||
/* otherwise set it's drawable if it has none */
|
||||
else if (! active_tool->drawable)
|
||||
{
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
(* active_tool->button_press_func) (active_tool, bevent, gdisp);
|
||||
}
|
||||
break;
|
||||
|
@ -277,6 +281,7 @@ gdisplay_canvas_events (GtkWidget *canvas,
|
|||
state |= GDK_BUTTON3_MASK;
|
||||
gtk_menu_popup (GTK_MENU (gdisp->popup),
|
||||
NULL, NULL, NULL, NULL, 3, bevent->time);
|
||||
return_val = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
|
@ -690,10 +690,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->hrule = gtk_hruler_new ();
|
||||
gtk_widget_set_events (GTK_WIDGET (gdisp->hrule),
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
/* Still need to sort out the best way of using this metrics stuff.
|
||||
* For the moment, we do everything in terms of pixels
|
||||
* -- austin 25/Jan/99 */
|
||||
/*gtk_ruler_set_metric (GTK_RULER (gdisp->hrule), ruler_units);*/
|
||||
gtk_signal_connect_object (GTK_OBJECT (gdisp->shell), "motion_notify_event",
|
||||
(GtkSignalFunc) GTK_WIDGET_CLASS (GTK_OBJECT (gdisp->hrule)->klass)->motion_notify_event,
|
||||
GTK_OBJECT (gdisp->hrule));
|
||||
|
@ -704,7 +700,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->vrule = gtk_vruler_new ();
|
||||
gtk_widget_set_events (GTK_WIDGET (gdisp->vrule),
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
/*gtk_ruler_set_metric (GTK_RULER (gdisp->vrule), ruler_units);*/
|
||||
gtk_signal_connect_object (GTK_OBJECT (gdisp->shell), "motion_notify_event",
|
||||
(GtkSignalFunc) GTK_WIDGET_CLASS (GTK_OBJECT (gdisp->vrule)->klass)->motion_notify_event,
|
||||
GTK_OBJECT (gdisp->vrule));
|
||||
|
@ -722,11 +717,16 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_widget_set_events (gdisp->canvas, CANVAS_EVENT_MASK);
|
||||
gtk_widget_set_extension_events (gdisp->canvas, GDK_EXTENSION_EVENTS_ALL);
|
||||
GTK_WIDGET_SET_FLAGS (gdisp->canvas, GTK_CAN_FOCUS);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->canvas), (gpointer) gdisp);
|
||||
|
||||
/* set the active display before doing any other canvas event processing */
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->canvas), "event",
|
||||
(GtkSignalFunc) gdisplay_shell_events,
|
||||
gdisp);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->canvas), "event",
|
||||
(GtkSignalFunc) gdisplay_canvas_events,
|
||||
gdisp);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->canvas), (gpointer) gdisp);
|
||||
|
||||
|
||||
/* pack all the widgets */
|
||||
gtk_table_attach (GTK_TABLE (table), table_inner, 0, 1, 0, 1,
|
||||
|
|
|
@ -690,10 +690,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->hrule = gtk_hruler_new ();
|
||||
gtk_widget_set_events (GTK_WIDGET (gdisp->hrule),
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
/* Still need to sort out the best way of using this metrics stuff.
|
||||
* For the moment, we do everything in terms of pixels
|
||||
* -- austin 25/Jan/99 */
|
||||
/*gtk_ruler_set_metric (GTK_RULER (gdisp->hrule), ruler_units);*/
|
||||
gtk_signal_connect_object (GTK_OBJECT (gdisp->shell), "motion_notify_event",
|
||||
(GtkSignalFunc) GTK_WIDGET_CLASS (GTK_OBJECT (gdisp->hrule)->klass)->motion_notify_event,
|
||||
GTK_OBJECT (gdisp->hrule));
|
||||
|
@ -704,7 +700,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->vrule = gtk_vruler_new ();
|
||||
gtk_widget_set_events (GTK_WIDGET (gdisp->vrule),
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
/*gtk_ruler_set_metric (GTK_RULER (gdisp->vrule), ruler_units);*/
|
||||
gtk_signal_connect_object (GTK_OBJECT (gdisp->shell), "motion_notify_event",
|
||||
(GtkSignalFunc) GTK_WIDGET_CLASS (GTK_OBJECT (gdisp->vrule)->klass)->motion_notify_event,
|
||||
GTK_OBJECT (gdisp->vrule));
|
||||
|
@ -722,11 +717,16 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_widget_set_events (gdisp->canvas, CANVAS_EVENT_MASK);
|
||||
gtk_widget_set_extension_events (gdisp->canvas, GDK_EXTENSION_EVENTS_ALL);
|
||||
GTK_WIDGET_SET_FLAGS (gdisp->canvas, GTK_CAN_FOCUS);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->canvas), (gpointer) gdisp);
|
||||
|
||||
/* set the active display before doing any other canvas event processing */
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->canvas), "event",
|
||||
(GtkSignalFunc) gdisplay_shell_events,
|
||||
gdisp);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->canvas), "event",
|
||||
(GtkSignalFunc) gdisplay_canvas_events,
|
||||
gdisp);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->canvas), (gpointer) gdisp);
|
||||
|
||||
|
||||
/* pack all the widgets */
|
||||
gtk_table_attach (GTK_TABLE (table), table_inner, 0, 1, 0, 1,
|
||||
|
|
|
@ -15,14 +15,12 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include <stdlib.h>
|
||||
#include "appenv.h"
|
||||
#include "draw_core.h"
|
||||
|
||||
|
||||
DrawCore *
|
||||
draw_core_new (draw_func)
|
||||
DrawCoreDraw draw_func;
|
||||
draw_core_new (DrawCoreDraw draw_func)
|
||||
{
|
||||
DrawCore * core;
|
||||
|
||||
|
@ -43,10 +41,9 @@ draw_core_new (draw_func)
|
|||
|
||||
|
||||
void
|
||||
draw_core_start (core, win, tool)
|
||||
DrawCore *core;
|
||||
GdkWindow *win;
|
||||
Tool *tool;
|
||||
draw_core_start (DrawCore *core,
|
||||
GdkWindow *win,
|
||||
Tool *tool)
|
||||
{
|
||||
GdkColor fg, bg;
|
||||
|
||||
|
@ -76,9 +73,8 @@ draw_core_start (core, win, tool)
|
|||
|
||||
|
||||
void
|
||||
draw_core_stop (core, tool)
|
||||
DrawCore * core;
|
||||
Tool * tool;
|
||||
draw_core_stop (DrawCore *core,
|
||||
Tool *tool)
|
||||
{
|
||||
if (core->draw_state == INVISIBLE)
|
||||
return;
|
||||
|
@ -90,9 +86,8 @@ draw_core_stop (core, tool)
|
|||
|
||||
|
||||
void
|
||||
draw_core_resume (core, tool)
|
||||
DrawCore * core;
|
||||
Tool * tool;
|
||||
draw_core_resume (DrawCore *core,
|
||||
Tool *tool)
|
||||
{
|
||||
core->paused_count = (core->paused_count > 0) ? core->paused_count - 1 : 0;
|
||||
if (core->paused_count == 0)
|
||||
|
@ -104,9 +99,8 @@ draw_core_resume (core, tool)
|
|||
|
||||
|
||||
void
|
||||
draw_core_pause (core, tool)
|
||||
DrawCore * core;
|
||||
Tool * tool;
|
||||
draw_core_pause (DrawCore *core,
|
||||
Tool *tool)
|
||||
{
|
||||
if (core->paused_count == 0)
|
||||
{
|
||||
|
@ -118,8 +112,7 @@ draw_core_pause (core, tool)
|
|||
|
||||
|
||||
void
|
||||
draw_core_free (core)
|
||||
DrawCore * core;
|
||||
draw_core_free (DrawCore *core)
|
||||
{
|
||||
if (core)
|
||||
{
|
||||
|
|
|
@ -136,6 +136,10 @@ tools_new_ellipse_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = rect_select_button_press;
|
||||
tool->button_release_func = rect_select_button_release;
|
||||
tool->motion_func = rect_select_motion;
|
||||
|
@ -143,7 +147,6 @@ tools_new_ellipse_select (void)
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = rect_select_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -190,7 +190,6 @@ flip_cursor_update (Tool *tool,
|
|||
Tool *
|
||||
tools_new_flip ()
|
||||
{
|
||||
|
||||
Tool * tool;
|
||||
TransformCore * private;
|
||||
|
||||
|
@ -205,9 +204,10 @@ tools_new_flip ()
|
|||
private = tool->private;
|
||||
|
||||
private->trans_func = flip_tool_transform;
|
||||
private->trans_info[FLIP_INFO] = -1.0;
|
||||
|
||||
tool->modifier_key_func = flip_modifier_key_func;
|
||||
tool->cursor_update_func = flip_cursor_update;
|
||||
private->trans_info[FLIP_INFO] = -1.0;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -476,6 +476,10 @@ tools_new_free_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = free_select_button_press;
|
||||
tool->button_release_func = free_select_button_release;
|
||||
tool->motion_func = free_select_motion;
|
||||
|
@ -483,7 +487,6 @@ tools_new_free_select (void)
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = free_select_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -340,11 +340,13 @@ fuzzy_select_button_press (Tool *tool, GdkEventButton *bevent,
|
|||
fuzzy_sel->threshold = default_threshold;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK |
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
tool->gdisp_ptr = gdisp_ptr;
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (fuzzy_sel->op == SELECTION_MOVE_MASK)
|
||||
{
|
||||
|
@ -385,10 +387,11 @@ fuzzy_select_button_release (Tool *tool, GdkEventButton *bevent,
|
|||
/* First take care of the case where the user "cancels" the action */
|
||||
if (! (bevent->state & GDK_BUTTON3_MASK))
|
||||
{
|
||||
drawable = (fuzzy_options->sample_merged) ? NULL : gimage_active_drawable (gdisp->gimage);
|
||||
drawable = ((fuzzy_options->sample_merged) ?
|
||||
NULL : gimage_active_drawable (gdisp->gimage));
|
||||
|
||||
fuzzy_select (gdisp->gimage, drawable, fuzzy_sel->op,
|
||||
fuzzy_options->feather, fuzzy_options->feather_radius);
|
||||
|
||||
gdisplays_flush ();
|
||||
|
||||
/* adapt the threshold based on the final value of this use */
|
||||
|
@ -569,6 +572,10 @@ tools_new_fuzzy_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = fuzzy_select_button_press;
|
||||
tool->button_release_func = fuzzy_select_button_release;
|
||||
tool->motion_func = fuzzy_select_motion;
|
||||
|
|
|
@ -1731,6 +1731,14 @@ gdisplay_expose_full (GDisplay *gdisp)
|
|||
GDisplay *
|
||||
gdisplay_active ()
|
||||
{
|
||||
GdkEvent *event;
|
||||
|
||||
event = gtk_get_current_event ();
|
||||
if (event != NULL)
|
||||
{
|
||||
gdk_event_free (event);
|
||||
}
|
||||
|
||||
return gimp_context_get_display (gimp_context_get_user ());
|
||||
}
|
||||
|
||||
|
|
22
app/gimage.c
22
app/gimage.c
|
@ -90,16 +90,20 @@ gimage_invalidate_previews (void)
|
|||
}
|
||||
|
||||
static void
|
||||
gimage_dirty_handler (GimpImage* gimage){
|
||||
if (active_tool && !active_tool->preserve) {
|
||||
GDisplay* gdisp = active_tool->gdisp_ptr;
|
||||
if (gdisp) {
|
||||
if (gdisp->gimage == gimage)
|
||||
tools_initialize (active_tool->type, gdisp);
|
||||
else
|
||||
tools_initialize (active_tool->type, NULL);
|
||||
gimage_dirty_handler (GimpImage* gimage)
|
||||
{
|
||||
if (active_tool && !active_tool->preserve)
|
||||
{
|
||||
GDisplay* gdisp = active_tool->gdisp_ptr;
|
||||
|
||||
if (gdisp)
|
||||
{
|
||||
if (gdisp->gimage == gimage)
|
||||
tools_initialize (active_tool->type, gdisp);
|
||||
else
|
||||
tools_initialize (active_tool->type, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -976,20 +976,30 @@ tools_select_cmd_callback (GtkWidget *widget,
|
|||
GDisplay * gdisp;
|
||||
gdisp = gdisplay_active ();
|
||||
|
||||
/* Activate the approriate widget.
|
||||
/* Activate the appropriate widget.
|
||||
* Implicitly calls tools_select()
|
||||
*/
|
||||
gtk_widget_activate (tool_info[callback_action].tool_widget);
|
||||
|
||||
/* Paranoia */
|
||||
active_tool->drawable = NULL;
|
||||
|
||||
/* Complete the initialisation by doing the same stuff
|
||||
* tools_initialize() does after it did what tools_select() does
|
||||
*/
|
||||
if (tool_info[callback_action].init_func && gdisp)
|
||||
if (tool_info[callback_action].init_func)
|
||||
{
|
||||
(* tool_info[callback_action].init_func) (gdisp);
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
/* setting the gdisp_ptr here is a HACK to allow the tools'
|
||||
* dialog windows being hidden if the tool was selected from
|
||||
* a tear-off-menu and there was no mouse click in the display
|
||||
* before deleting it
|
||||
*/
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -976,20 +976,30 @@ tools_select_cmd_callback (GtkWidget *widget,
|
|||
GDisplay * gdisp;
|
||||
gdisp = gdisplay_active ();
|
||||
|
||||
/* Activate the approriate widget.
|
||||
/* Activate the appropriate widget.
|
||||
* Implicitly calls tools_select()
|
||||
*/
|
||||
gtk_widget_activate (tool_info[callback_action].tool_widget);
|
||||
|
||||
/* Paranoia */
|
||||
active_tool->drawable = NULL;
|
||||
|
||||
/* Complete the initialisation by doing the same stuff
|
||||
* tools_initialize() does after it did what tools_select() does
|
||||
*/
|
||||
if (tool_info[callback_action].init_func && gdisp)
|
||||
if (tool_info[callback_action].init_func)
|
||||
{
|
||||
(* tool_info[callback_action].init_func) (gdisp);
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
/* setting the gdisp_ptr here is a HACK to allow the tools'
|
||||
* dialog windows being hidden if the tool was selected from
|
||||
* a tear-off-menu and there was no mouse click in the display
|
||||
* before deleting it
|
||||
*/
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <math.h>
|
||||
#include "appenv.h"
|
||||
#include "actionarea.h"
|
||||
|
@ -89,7 +89,6 @@ histogram_tool_histogram_range (HistogramWidget *w,
|
|||
pixels = gimp_histogram_get_count(htd->hist, 0, 255);
|
||||
count = gimp_histogram_get_count(htd->hist, start, end);
|
||||
|
||||
|
||||
htd->mean = gimp_histogram_get_mean(htd->hist, htd->channel, start, end);
|
||||
htd->std_dev = gimp_histogram_get_std_dev(htd->hist, htd->channel,
|
||||
start, end);
|
||||
|
@ -110,34 +109,34 @@ histogram_tool_dialog_update (HistogramToolDialog *htd,
|
|||
char text[12];
|
||||
|
||||
/* mean */
|
||||
sprintf (text, "%3.1f", htd->mean);
|
||||
g_snprintf (text, 12, "%3.1f", htd->mean);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[0]), text);
|
||||
|
||||
/* std dev */
|
||||
sprintf (text, "%3.1f", htd->std_dev);
|
||||
g_snprintf (text, 12, "%3.1f", htd->std_dev);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[1]), text);
|
||||
|
||||
/* median */
|
||||
sprintf (text, "%3.1f", htd->median);
|
||||
g_snprintf (text, 12, "%3.1f", htd->median);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[2]), text);
|
||||
|
||||
/* pixels */
|
||||
sprintf (text, "%8.1f", htd->pixels);
|
||||
g_snprintf (text, 12, "%8.1f", htd->pixels);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[3]), text);
|
||||
|
||||
/* intensity */
|
||||
if (start == end)
|
||||
sprintf (text, "%d", start);
|
||||
g_snprintf (text, 12, "%d", start);
|
||||
else
|
||||
sprintf (text, "%d..%d", start, end);
|
||||
g_snprintf (text, 12, "%d..%d", start, end);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[4]), text);
|
||||
|
||||
/* count */
|
||||
sprintf (text, "%8.1f", htd->count);
|
||||
g_snprintf (text, 12, "%8.1f", htd->count);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[5]), text);
|
||||
|
||||
/* percentile */
|
||||
sprintf (text, "%2.2f", htd->percentile * 100);
|
||||
g_snprintf (text, 12, "%2.2f", htd->percentile * 100);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[6]), text);
|
||||
}
|
||||
|
||||
|
@ -151,6 +150,8 @@ histogram_tool_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -224,6 +225,10 @@ tools_new_histogram_tool ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = histogram_tool_button_press;
|
||||
tool->button_release_func = histogram_tool_button_release;
|
||||
tool->motion_func = histogram_tool_motion;
|
||||
|
@ -232,8 +237,6 @@ tools_new_histogram_tool ()
|
|||
tool->cursor_update_func = histogram_tool_cursor_update;
|
||||
tool->control_func = histogram_tool_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -428,7 +431,7 @@ histogram_tool_new_dialog ()
|
|||
|
||||
static void
|
||||
histogram_tool_close_callback (GtkWidget *widget,
|
||||
gpointer client_data)
|
||||
gpointer client_data)
|
||||
{
|
||||
HistogramToolDialog *htd;
|
||||
|
||||
|
|
|
@ -237,6 +237,8 @@ hue_saturation_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -310,6 +312,10 @@ tools_new_hue_saturation ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = hue_saturation_button_press;
|
||||
tool->button_release_func = hue_saturation_button_release;
|
||||
tool->motion_func = hue_saturation_motion;
|
||||
|
@ -317,9 +323,6 @@ tools_new_hue_saturation ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = hue_saturation_cursor_update;
|
||||
tool->control_func = hue_saturation_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -744,6 +747,9 @@ hue_saturation_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -772,9 +778,12 @@ hue_saturation_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (hsd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
hsd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1564,7 +1564,10 @@ tools_new_ink (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->private = private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = ink_button_press;
|
||||
tool->button_release_func = ink_button_release;
|
||||
|
|
|
@ -690,10 +690,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->hrule = gtk_hruler_new ();
|
||||
gtk_widget_set_events (GTK_WIDGET (gdisp->hrule),
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
/* Still need to sort out the best way of using this metrics stuff.
|
||||
* For the moment, we do everything in terms of pixels
|
||||
* -- austin 25/Jan/99 */
|
||||
/*gtk_ruler_set_metric (GTK_RULER (gdisp->hrule), ruler_units);*/
|
||||
gtk_signal_connect_object (GTK_OBJECT (gdisp->shell), "motion_notify_event",
|
||||
(GtkSignalFunc) GTK_WIDGET_CLASS (GTK_OBJECT (gdisp->hrule)->klass)->motion_notify_event,
|
||||
GTK_OBJECT (gdisp->hrule));
|
||||
|
@ -704,7 +700,6 @@ create_display_shell (GDisplay* gdisp,
|
|||
gdisp->vrule = gtk_vruler_new ();
|
||||
gtk_widget_set_events (GTK_WIDGET (gdisp->vrule),
|
||||
GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK);
|
||||
/*gtk_ruler_set_metric (GTK_RULER (gdisp->vrule), ruler_units);*/
|
||||
gtk_signal_connect_object (GTK_OBJECT (gdisp->shell), "motion_notify_event",
|
||||
(GtkSignalFunc) GTK_WIDGET_CLASS (GTK_OBJECT (gdisp->vrule)->klass)->motion_notify_event,
|
||||
GTK_OBJECT (gdisp->vrule));
|
||||
|
@ -722,11 +717,16 @@ create_display_shell (GDisplay* gdisp,
|
|||
gtk_widget_set_events (gdisp->canvas, CANVAS_EVENT_MASK);
|
||||
gtk_widget_set_extension_events (gdisp->canvas, GDK_EXTENSION_EVENTS_ALL);
|
||||
GTK_WIDGET_SET_FLAGS (gdisp->canvas, GTK_CAN_FOCUS);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->canvas), (gpointer) gdisp);
|
||||
|
||||
/* set the active display before doing any other canvas event processing */
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->canvas), "event",
|
||||
(GtkSignalFunc) gdisplay_shell_events,
|
||||
gdisp);
|
||||
|
||||
gtk_signal_connect (GTK_OBJECT (gdisp->canvas), "event",
|
||||
(GtkSignalFunc) gdisplay_canvas_events,
|
||||
gdisp);
|
||||
gtk_object_set_user_data (GTK_OBJECT (gdisp->canvas), (gpointer) gdisp);
|
||||
|
||||
|
||||
/* pack all the widgets */
|
||||
gtk_table_attach (GTK_TABLE (table), table_inner, 0, 1, 0, 1,
|
||||
|
|
|
@ -431,8 +431,13 @@ tools_new_iscissors ()
|
|||
tool->type = ISCISSORS;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = iscissors_button_press;
|
||||
tool->button_release_func = iscissors_button_release;
|
||||
tool->motion_func = iscissors_motion;
|
||||
|
@ -440,8 +445,6 @@ tools_new_iscissors ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = iscissors_control;
|
||||
tool->auto_snap_to = 0;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
last_tool = tool;
|
||||
|
||||
|
|
16
app/levels.c
16
app/levels.c
|
@ -174,6 +174,8 @@ levels_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -247,6 +249,10 @@ tools_new_levels ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = levels_button_press;
|
||||
tool->button_release_func = levels_button_release;
|
||||
tool->motion_func = levels_motion;
|
||||
|
@ -254,9 +260,6 @@ tools_new_levels ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = levels_cursor_update;
|
||||
tool->control_func = levels_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -971,6 +974,9 @@ levels_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
ld->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -999,10 +1005,12 @@ levels_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (ld->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
ld->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
ld->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -372,6 +372,10 @@ tools_new_magnify (void)
|
|||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = magnify_button_press;
|
||||
tool->button_release_func = magnify_button_release;
|
||||
tool->motion_func = magnify_motion;
|
||||
|
|
13
app/move.c
13
app/move.c
|
@ -447,12 +447,20 @@ tools_new_move_tool ()
|
|||
tool = (Tool *) g_malloc (sizeof (Tool));
|
||||
private = (MoveTool *) g_malloc (sizeof (MoveTool));
|
||||
|
||||
private->layer = NULL;
|
||||
private->guide = NULL;
|
||||
private->disp = NULL;
|
||||
|
||||
tool->type = MOVE;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = move_tool_button_press;
|
||||
tool->button_release_func = move_tool_button_release;
|
||||
tool->motion_func = move_tool_motion;
|
||||
|
@ -460,11 +468,6 @@ tools_new_move_tool ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = move_tool_cursor_update;
|
||||
tool->control_func = move_tool_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
private->layer = NULL;
|
||||
private->guide = NULL;
|
||||
private->disp = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -34,10 +34,10 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
/* The maximum amount of pressure that can be exerted */
|
||||
#define MAX_PRESSURE 0.075
|
||||
#define MAX_PRESSURE 0.075
|
||||
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
|
||||
/* the airbrush structures */
|
||||
|
||||
|
|
|
@ -1564,7 +1564,10 @@ tools_new_ink (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->private = private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = ink_button_press;
|
||||
tool->button_release_func = ink_button_release;
|
||||
|
|
|
@ -529,7 +529,10 @@ paint_core_new (int type)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = paint_core_button_press;
|
||||
tool->button_release_func = paint_core_button_release;
|
||||
|
|
|
@ -98,6 +98,8 @@ posterize_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -178,6 +180,10 @@ tools_new_posterize ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = posterize_button_press;
|
||||
tool->button_release_func = posterize_button_release;
|
||||
tool->motion_func = posterize_motion;
|
||||
|
@ -186,10 +192,6 @@ tools_new_posterize ()
|
|||
tool->cursor_update_func = posterize_cursor_update;
|
||||
tool->control_func = posterize_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -200,7 +202,7 @@ tools_free_posterize (Tool *tool)
|
|||
|
||||
post = (Posterize *) tool->private;
|
||||
|
||||
/* Close the color select dialog */
|
||||
/* Close the posterize dialog */
|
||||
if (posterize_dialog)
|
||||
posterize_cancel_callback (NULL, (gpointer) posterize_dialog);
|
||||
|
||||
|
@ -222,8 +224,11 @@ posterize_initialize (GDisplay *gdisp)
|
|||
else
|
||||
if (!GTK_WIDGET_VISIBLE (posterize_dialog->shell))
|
||||
gtk_widget_show (posterize_dialog->shell);
|
||||
|
||||
posterize_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
posterize_dialog->image_map = image_map_create (gdisp, posterize_dialog->drawable);
|
||||
posterize_dialog->image_map =
|
||||
image_map_create (gdisp, posterize_dialog->drawable);
|
||||
|
||||
if (posterize_dialog->preview)
|
||||
posterize_preview (posterize_dialog);
|
||||
}
|
||||
|
@ -351,6 +356,9 @@ posterize_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
pd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -380,6 +388,9 @@ posterize_cancel_callback (GtkWidget *widget,
|
|||
pd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -418,4 +429,3 @@ posterize_levels_text_update (GtkWidget *w,
|
|||
posterize_preview (pd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -154,7 +154,8 @@ rect_select_button_press (Tool *tool,
|
|||
rect_sel->center = FALSE;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
|
@ -447,8 +448,10 @@ rect_select_draw (Tool *tool)
|
|||
|
||||
|
||||
void
|
||||
static selection_tool_update_op_state(RectSelect *rect_sel, int x, int y, int state,
|
||||
GDisplay *gdisp)
|
||||
static selection_tool_update_op_state (RectSelect *rect_sel,
|
||||
int x, int y,
|
||||
int state,
|
||||
GDisplay *gdisp)
|
||||
{
|
||||
if (active_tool->state == ACTIVE)
|
||||
return;
|
||||
|
@ -485,8 +488,8 @@ rect_select_cursor_update (Tool *tool,
|
|||
active = (active_tool->state == ACTIVE);
|
||||
rect_sel = (RectSelect*)tool->private;
|
||||
|
||||
selection_tool_update_op_state(rect_sel, mevent->x, mevent->y,
|
||||
mevent->state, gdisp_ptr);
|
||||
selection_tool_update_op_state (rect_sel, mevent->x, mevent->y,
|
||||
mevent->state, gdisp_ptr);
|
||||
|
||||
switch (rect_sel->op)
|
||||
{
|
||||
|
@ -505,7 +508,7 @@ rect_select_cursor_update (Tool *tool,
|
|||
case SELECTION_MOVE_MASK:
|
||||
gdisplay_install_tool_cursor (gdisp, GDK_DIAMOND_CROSS);
|
||||
break;
|
||||
case SELECTION_MOVE:
|
||||
case SELECTION_MOVE:
|
||||
gdisplay_install_tool_cursor (gdisp, GDK_FLEUR);
|
||||
}
|
||||
}
|
||||
|
@ -572,6 +575,10 @@ tools_new_rect_select ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = rect_select_button_press;
|
||||
tool->button_release_func = rect_select_button_release;
|
||||
tool->motion_func = rect_select_motion;
|
||||
|
@ -580,8 +587,6 @@ tools_new_rect_select ()
|
|||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = rect_select_control;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,33 +35,33 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif /* M_PI */
|
||||
|
||||
/* index into trans_info array */
|
||||
#define ANGLE 0
|
||||
#define REAL_ANGLE 1
|
||||
#define CENTER_X 2
|
||||
#define CENTER_Y 3
|
||||
#define ANGLE 0
|
||||
#define REAL_ANGLE 1
|
||||
#define CENTER_X 2
|
||||
#define CENTER_Y 3
|
||||
|
||||
#define EPSILON 0.018 /* ~ 1 degree */
|
||||
#define FIFTEEN_DEG (M_PI / 12.0)
|
||||
#define EPSILON 0.018 /* ~ 1 degree */
|
||||
#define FIFTEEN_DEG (M_PI / 12.0)
|
||||
|
||||
/* variables local to this file */
|
||||
static gdouble angle_val;
|
||||
static gdouble center_vals[2];
|
||||
static gdouble angle_val;
|
||||
static gdouble center_vals[2];
|
||||
|
||||
/* needed for size update */
|
||||
static GtkWidget *sizeentry;
|
||||
static GtkWidget *sizeentry;
|
||||
|
||||
/* forward function declarations */
|
||||
static void * rotate_tool_recalc (Tool *, void *);
|
||||
static void rotate_tool_motion (Tool *, void *);
|
||||
static void rotate_info_update (Tool *);
|
||||
static void * rotate_tool_recalc (Tool *, void *);
|
||||
static void rotate_tool_motion (Tool *, void *);
|
||||
static void rotate_info_update (Tool *);
|
||||
|
||||
/* callback functions for the info dialog sizeentries */
|
||||
static void rotate_angle_changed (GtkWidget *entry, gpointer data);
|
||||
static void rotate_center_changed (GtkWidget *entry, gpointer data);
|
||||
static void rotate_angle_changed (GtkWidget *entry, gpointer data);
|
||||
static void rotate_center_changed (GtkWidget *entry, gpointer data);
|
||||
|
||||
void *
|
||||
rotate_tool_transform (Tool *tool,
|
||||
|
|
|
@ -251,6 +251,10 @@ tools_new_text ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) the_text_tool;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = text_button_press;
|
||||
tool->button_release_func = text_button_release;
|
||||
tool->motion_func = text_motion;
|
||||
|
@ -259,8 +263,6 @@ tools_new_text ()
|
|||
tool->cursor_update_func = text_cursor_update;
|
||||
tool->control_func = text_control;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
|
|
@ -166,6 +166,8 @@ threshold_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -246,6 +248,10 @@ tools_new_threshold ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = threshold_button_press;
|
||||
tool->button_release_func = threshold_button_release;
|
||||
tool->motion_func = threshold_motion;
|
||||
|
@ -254,8 +260,6 @@ tools_new_threshold ()
|
|||
tool->cursor_update_func = threshold_cursor_update;
|
||||
tool->control_func = threshold_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -291,16 +295,18 @@ threshold_initialize (GDisplay *gdisp)
|
|||
|
||||
threshold_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
threshold_dialog->color = drawable_color (threshold_dialog->drawable);
|
||||
threshold_dialog->image_map = image_map_create (gdisp, threshold_dialog->drawable);
|
||||
threshold_dialog->image_map =
|
||||
image_map_create (gdisp, threshold_dialog->drawable);
|
||||
|
||||
gimp_histogram_calculate_drawable(threshold_dialog->hist,
|
||||
threshold_dialog->drawable);
|
||||
gimp_histogram_calculate_drawable (threshold_dialog->hist,
|
||||
threshold_dialog->drawable);
|
||||
|
||||
histogram_widget_update (threshold_dialog->histogram,
|
||||
threshold_dialog->hist);
|
||||
histogram_widget_range (threshold_dialog->histogram,
|
||||
threshold_dialog->low_threshold,
|
||||
threshold_dialog->high_threshold);
|
||||
|
||||
if (threshold_dialog->preview)
|
||||
threshold_preview (threshold_dialog);
|
||||
}
|
||||
|
@ -453,6 +459,9 @@ threshold_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
td->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -484,6 +493,9 @@ threshold_cancel_callback (GtkWidget *widget,
|
|||
td->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
42
app/tools.c
42
app/tools.c
|
@ -605,7 +605,7 @@ active_tool_free (void)
|
|||
return;
|
||||
|
||||
tools_options_hide (active_tool->type);
|
||||
|
||||
|
||||
(* tool_info[(int) active_tool->type].free_func) (active_tool);
|
||||
|
||||
g_free (active_tool);
|
||||
|
@ -636,37 +636,25 @@ void
|
|||
tools_initialize (ToolType type,
|
||||
GDisplay *gdisp)
|
||||
{
|
||||
if (active_tool)
|
||||
active_tool_free ();
|
||||
/* Tools which have an init function have dialogs and
|
||||
* cannot be initialized without a display
|
||||
*/
|
||||
if (tool_info[(int) type].init_func && !gdisp)
|
||||
type = RECT_SELECT;
|
||||
|
||||
/* Activate the appropriate widget.
|
||||
* Implicitly calls tools_select()
|
||||
*/
|
||||
tools_select (type);
|
||||
|
||||
/* If you're wondering... only these dialog type tools have init functions */
|
||||
if (tool_info[(int) type].init_func)
|
||||
{
|
||||
if (gdisp)
|
||||
{
|
||||
active_tool = (* tool_info[(int) type].new_func) ();
|
||||
(* tool_info[(int) type].init_func) (gdisp);
|
||||
}
|
||||
else
|
||||
{
|
||||
active_tool = tools_new_rect_select ();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
active_tool = (* tool_info[(int) type].new_func) ();
|
||||
(* tool_info[(int) type].init_func) (gdisp);
|
||||
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
tools_options_show (active_tool->type);
|
||||
|
||||
/* Set the paused count variable to 0 */
|
||||
active_tool->paused_count = 0;
|
||||
active_tool->gdisp_ptr = gdisp;
|
||||
active_tool->drawable = NULL;
|
||||
active_tool->ID = global_tool_ID++;
|
||||
|
||||
if (gdisp)
|
||||
active_tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
/* don't set gdisp_ptr here !!! (see commands.c) */
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -34,10 +34,10 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
/* The maximum amount of pressure that can be exerted */
|
||||
#define MAX_PRESSURE 0.075
|
||||
#define MAX_PRESSURE 0.075
|
||||
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
|
||||
/* the airbrush structures */
|
||||
|
||||
|
|
|
@ -202,7 +202,7 @@ Tool*
|
|||
tools_new_bezier_select ()
|
||||
{
|
||||
Tool * tool;
|
||||
BezierSelect * bezier_sel;
|
||||
BezierSelect * private;
|
||||
|
||||
/* The tool options */
|
||||
if (! bezier_options)
|
||||
|
@ -213,19 +213,23 @@ tools_new_bezier_select ()
|
|||
}
|
||||
|
||||
tool = g_malloc (sizeof (Tool));
|
||||
private = g_malloc (sizeof (BezierSelect));
|
||||
|
||||
bezier_sel = g_new0(BezierSelect,1);
|
||||
|
||||
bezier_sel->num_points = 0;
|
||||
bezier_sel->mask = NULL;
|
||||
bezier_sel->core = draw_core_new (bezier_select_draw);
|
||||
bezier_select_reset (bezier_sel);
|
||||
private->num_points = 0;
|
||||
private->mask = NULL;
|
||||
private->core = draw_core_new (bezier_select_draw);
|
||||
bezier_select_reset (private);
|
||||
|
||||
tool->type = BEZIER_SELECT;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Do not allow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) bezier_sel;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = bezier_select_button_press;
|
||||
tool->button_release_func = bezier_select_button_release;
|
||||
tool->motion_func = bezier_select_motion;
|
||||
|
@ -233,13 +237,12 @@ tools_new_bezier_select ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = bezier_select_cursor_update;
|
||||
tool->control_func = bezier_select_control;
|
||||
tool->preserve = FALSE;
|
||||
|
||||
curCore = bezier_sel->core;
|
||||
curSel = bezier_sel;
|
||||
curCore = private->core;
|
||||
curSel = private;
|
||||
curTool = tool;
|
||||
|
||||
paths_new_bezier_select_tool();
|
||||
paths_new_bezier_select_tool ();
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -834,6 +837,9 @@ bezier_select_button_press (Tool *tool,
|
|||
int halfwidth, dummy;
|
||||
|
||||
gdisp = (GDisplay *) gdisp_ptr;
|
||||
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
bezier_sel = tool->private;
|
||||
grab_pointer = 0;
|
||||
|
||||
|
|
|
@ -1741,7 +1741,11 @@ tools_new_blend ()
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = blend_button_press;
|
||||
tool->button_release_func = blend_button_release;
|
||||
|
@ -1750,7 +1754,6 @@ tools_new_blend ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = blend_cursor_update;
|
||||
tool->control_func = blend_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -112,6 +112,8 @@ brightness_contrast_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -186,6 +188,10 @@ tools_new_brightness_contrast ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = brightness_contrast_button_press;
|
||||
tool->button_release_func = brightness_contrast_button_release;
|
||||
tool->motion_func = brightness_contrast_motion;
|
||||
|
@ -193,9 +199,6 @@ tools_new_brightness_contrast ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = brightness_contrast_cursor_update;
|
||||
tool->control_func = brightness_contrast_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -236,8 +239,8 @@ brightness_contrast_initialize (GDisplay *gdisp)
|
|||
brightness_contrast_dialog->contrast = 0.0;
|
||||
|
||||
brightness_contrast_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
brightness_contrast_dialog->image_map = image_map_create (gdisp,
|
||||
brightness_contrast_dialog->drawable);
|
||||
brightness_contrast_dialog->image_map =
|
||||
image_map_create (gdisp, brightness_contrast_dialog->drawable);
|
||||
|
||||
brightness_contrast_update (brightness_contrast_dialog, ALL);
|
||||
}
|
||||
|
@ -454,6 +457,9 @@ brightness_contrast_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
bcd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -485,6 +491,9 @@ brightness_contrast_cancel_callback (GtkWidget *widget,
|
|||
bcd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -611,7 +611,11 @@ tools_new_bucket_fill (void)
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = bucket_fill_button_press;
|
||||
tool->button_release_func = bucket_fill_button_release;
|
||||
|
@ -620,7 +624,6 @@ tools_new_bucket_fill (void)
|
|||
tool->modifier_key_func = bucket_fill_modifier_key_func;
|
||||
tool->cursor_update_func = bucket_fill_cursor_update;
|
||||
tool->control_func = bucket_fill_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -483,6 +483,10 @@ tools_new_by_color_select ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = by_color_select_button_press;
|
||||
tool->button_release_func = by_color_select_button_release;
|
||||
tool->motion_func = by_color_select_motion;
|
||||
|
@ -490,9 +494,6 @@ tools_new_by_color_select ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = by_color_select_cursor_update;
|
||||
tool->control_func = by_color_select_control;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -157,6 +157,8 @@ color_balance_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -204,13 +206,7 @@ color_balance_control (Tool *tool,
|
|||
|
||||
case HALT:
|
||||
if (color_balance_dialog)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (color_balance_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
color_balance_dialog->image_map = NULL;
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
}
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -237,18 +233,20 @@ tools_new_color_balance ()
|
|||
tool->type = COLOR_BALANCE;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->private = (void *) private;
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = color_balance_button_press;
|
||||
tool->button_release_func = color_balance_button_release;
|
||||
tool->motion_func = color_balance_motion;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func; tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func;
|
||||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = color_balance_cursor_update;
|
||||
tool->control_func = color_balance_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -294,22 +292,18 @@ color_balance_initialize (GDisplay *gdisp)
|
|||
color_balance_dialog->yellow_blue[i] = 0.0;
|
||||
}
|
||||
color_balance_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
color_balance_dialog->image_map = image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
color_balance_dialog->image_map =
|
||||
image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
|
||||
color_balance_update (color_balance_dialog, ALL);
|
||||
}
|
||||
|
||||
|
||||
/****************************/
|
||||
/* Select by Color dialog */
|
||||
/****************************/
|
||||
/**************************/
|
||||
/* Color Balance dialog */
|
||||
/**************************/
|
||||
|
||||
/* the action area structure */
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
static ColorBalanceDialog *
|
||||
color_balance_new_dialog ()
|
||||
{
|
||||
|
@ -326,13 +320,21 @@ color_balance_new_dialog ()
|
|||
GtkObject *data;
|
||||
GSList *group = NULL;
|
||||
int i;
|
||||
char *appl_mode_names[3] =
|
||||
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
char *appl_mode_names[] =
|
||||
{
|
||||
N_("Shadows"),
|
||||
N_("Midtones"),
|
||||
N_("Highlights")
|
||||
};
|
||||
ActionCallback appl_mode_callbacks[3] =
|
||||
|
||||
ActionCallback appl_mode_callbacks[] =
|
||||
{
|
||||
color_balance_shadows_callback,
|
||||
color_balance_midtones_callback,
|
||||
|
@ -657,6 +659,9 @@ color_balance_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cbd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -684,10 +689,13 @@ color_balance_cancel_callback (GtkWidget *widget,
|
|||
active_tool->preserve = TRUE;
|
||||
image_map_abort (cbd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
gdisplays_flush ();
|
||||
cbd->image_map = NULL;
|
||||
}
|
||||
|
||||
cbd->image_map = NULL;
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -625,7 +625,11 @@ tools_new_color_picker ()
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = color_picker_button_press;
|
||||
tool->button_release_func = color_picker_button_release;
|
||||
|
@ -634,7 +638,6 @@ tools_new_color_picker ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = color_picker_cursor_update;
|
||||
tool->control_func = color_picker_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
171
app/tools/crop.c
171
app/tools/crop.c
|
@ -113,7 +113,7 @@ static void crop_control (Tool *, ToolAction, gpointer);
|
|||
static void crop_arrow_keys_func (Tool *, GdkEventKey *, gpointer);
|
||||
static void crop_modifier_key_func (Tool *, GdkEventKey *, gpointer);
|
||||
|
||||
/* Crop helper functions */
|
||||
/* Crop helper functions */
|
||||
static void crop_recalc (Tool *, Crop *);
|
||||
static void crop_start (Tool *, Crop *);
|
||||
static void crop_adjust_guides (GImage *, int, int, int, int);
|
||||
|
@ -132,18 +132,18 @@ typedef enum {
|
|||
AUTO_CROP_COLOR = 2
|
||||
} AutoCropType;
|
||||
|
||||
typedef guchar * (*GetColorFunc) (GtkObject *, int, int);
|
||||
typedef AutoCropType (*ColorsEqualFunc) (guchar *, guchar *, int);
|
||||
typedef guchar * (*GetColorFunc) (GtkObject *, int, int);
|
||||
typedef AutoCropType (*ColorsEqualFunc) (guchar *, guchar *, int);
|
||||
|
||||
static void crop_selection_callback (GtkWidget *, gpointer);
|
||||
static void crop_automatic_callback (GtkWidget *, gpointer);
|
||||
static void crop_selection_callback (GtkWidget *, gpointer);
|
||||
static void crop_automatic_callback (GtkWidget *, gpointer);
|
||||
static AutoCropType crop_guess_bgcolor (GtkObject *, GetColorFunc, int, int, int, int, guchar *);
|
||||
static int crop_colors_equal (guchar *, guchar *, int);
|
||||
static int crop_colors_alpha (guchar *, guchar *, int);
|
||||
static int crop_colors_equal (guchar *, guchar *, int);
|
||||
static int crop_colors_alpha (guchar *, guchar *, int);
|
||||
|
||||
/* Crop dialog callback funtions */
|
||||
static void crop_orig_changed (GtkWidget *, gpointer);
|
||||
static void crop_size_changed (GtkWidget *, gpointer);
|
||||
static void crop_orig_changed (GtkWidget *, gpointer);
|
||||
static void crop_size_changed (GtkWidget *, gpointer);
|
||||
|
||||
|
||||
/* Functions */
|
||||
|
@ -168,7 +168,7 @@ crop_options_new (void)
|
|||
GtkWidget *frame;
|
||||
gchar* type_label[2] = { N_("Crop"), N_("Resize") };
|
||||
gint type_value[2] = { CROP_CROP, RESIZE_CROP };
|
||||
|
||||
|
||||
/* the new crop tool options structure */
|
||||
options = (CropOptions *) g_malloc (sizeof (CropOptions));
|
||||
tool_options_init ((ToolOptions *) options,
|
||||
|
@ -205,7 +205,7 @@ crop_options_new (void)
|
|||
gtk_widget_show (options->allow_enlarge_w);
|
||||
|
||||
/* tool toggle */
|
||||
frame = tool_options_radio_buttons_new (N_("Tool Toggle"),
|
||||
frame = tool_options_radio_buttons_new (_("Tool Toggle"),
|
||||
&options->type,
|
||||
options->type_w,
|
||||
type_label,
|
||||
|
@ -218,7 +218,6 @@ crop_options_new (void)
|
|||
return options;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
crop_button_press (Tool *tool,
|
||||
GdkEventButton *bevent,
|
||||
|
@ -230,10 +229,11 @@ crop_button_press (Tool *tool,
|
|||
gdisp = (GDisplay *) gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
if (tool->state == INACTIVE)
|
||||
crop->function = CREATING;
|
||||
else if (gdisp_ptr != tool->gdisp_ptr)
|
||||
crop->function = CREATING;
|
||||
if (tool->state == INACTIVE ||
|
||||
gdisp_ptr != tool->gdisp_ptr)
|
||||
{
|
||||
crop->function = CREATING;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the cursor is in either the upper left or lower right boxes,
|
||||
|
@ -268,6 +268,7 @@ crop_button_press (Tool *tool,
|
|||
draw_core_stop (crop->core, tool);
|
||||
|
||||
tool->gdisp_ptr = gdisp_ptr;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
gdisplay_untransform_coords (gdisp, bevent->x, bevent->y,
|
||||
&crop->tx1, &crop->ty1, TRUE, FALSE);
|
||||
|
@ -283,7 +284,8 @@ crop_button_press (Tool *tool,
|
|||
crop->lasty = crop->starty;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
|
@ -317,9 +319,7 @@ crop_button_release (Tool *tool,
|
|||
crop_options->layer_only, FALSE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
else
|
||||
crop_info_update (tool);
|
||||
|
@ -671,18 +671,17 @@ crop_control (Tool *tool,
|
|||
|
||||
switch (action)
|
||||
{
|
||||
case PAUSE :
|
||||
case PAUSE:
|
||||
draw_core_pause (crop->core, tool);
|
||||
break;
|
||||
|
||||
case RESUME :
|
||||
case RESUME:
|
||||
crop_recalc (tool, crop);
|
||||
draw_core_resume (crop->core, tool);
|
||||
break;
|
||||
|
||||
case HALT :
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
case HALT:
|
||||
crop_close_callback (NULL, NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -696,12 +695,12 @@ crop_draw (Tool *tool)
|
|||
Crop * crop;
|
||||
GDisplay * gdisp;
|
||||
|
||||
#define SRW 10
|
||||
#define SRH 10
|
||||
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
#define SRW 10
|
||||
#define SRH 10
|
||||
|
||||
gdk_draw_line (crop->core->win, crop->core->gc,
|
||||
crop->x1, crop->y1, gdisp->disp_width, crop->y1);
|
||||
gdk_draw_line (crop->core->win, crop->core->gc,
|
||||
|
@ -723,6 +722,9 @@ crop_draw (Tool *tool)
|
|||
gdk_draw_rectangle (crop->core->win, crop->core->gc, 1,
|
||||
crop->x1, crop->y2-crop->srh, crop->srw, crop->srh);
|
||||
|
||||
#undef SRW
|
||||
#undef SRH
|
||||
|
||||
crop_info_update (tool);
|
||||
}
|
||||
|
||||
|
@ -752,6 +754,10 @@ tools_new_crop ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE; /* XXX Check me */
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = crop_button_press;
|
||||
tool->button_release_func = crop_button_release;
|
||||
tool->motion_func = crop_motion;
|
||||
|
@ -759,7 +765,6 @@ tools_new_crop ()
|
|||
tool->modifier_key_func = crop_modifier_key_func;
|
||||
tool->cursor_update_func = crop_cursor_update;
|
||||
tool->control_func = crop_control;
|
||||
tool->preserve = TRUE; /* XXX Check me */
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -777,10 +782,7 @@ tools_free_crop (Tool *tool)
|
|||
draw_core_free (crop->core);
|
||||
|
||||
if (crop_info)
|
||||
{
|
||||
info_dialog_popdown (crop_info);
|
||||
crop_info = NULL;
|
||||
}
|
||||
crop_close_callback (NULL, NULL);
|
||||
|
||||
g_free (crop);
|
||||
}
|
||||
|
@ -957,6 +959,9 @@ crop_start (Tool *tool,
|
|||
if (! crop_info)
|
||||
crop_info_create (tool);
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (origin_sizeentry), crop_info);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (size_sizeentry), crop_info);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
|
@ -993,6 +998,9 @@ crop_start (Tool *tool,
|
|||
}
|
||||
}
|
||||
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (size_sizeentry), crop_info);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (origin_sizeentry), crop_info);
|
||||
|
||||
old_gdisp = gdisp;
|
||||
|
||||
/* initialize the statusbar display */
|
||||
|
@ -1005,16 +1013,9 @@ crop_start (Tool *tool,
|
|||
}
|
||||
|
||||
|
||||
/*******************************************************/
|
||||
/* Crop dialog functions */
|
||||
/*******************************************************/
|
||||
|
||||
static ActionAreaItem action_items[3] =
|
||||
{
|
||||
{ N_("Crop"), crop_crop_callback, NULL, NULL },
|
||||
{ N_("Resize"), crop_resize_callback, NULL, NULL },
|
||||
{ N_("Close"), crop_close_callback, NULL, NULL },
|
||||
};
|
||||
/***************************/
|
||||
/* Crop dialog functions */
|
||||
/***************************/
|
||||
|
||||
static void
|
||||
crop_info_create (Tool *tool)
|
||||
|
@ -1024,6 +1025,13 @@ crop_info_create (Tool *tool)
|
|||
GtkWidget *bbox;
|
||||
GtkWidget *button;
|
||||
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("Crop"), crop_crop_callback, NULL, NULL },
|
||||
{ N_("Resize"), crop_resize_callback, NULL, NULL },
|
||||
{ N_("Close"), crop_close_callback, NULL, NULL },
|
||||
};
|
||||
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
|
||||
/* create the info dialog */
|
||||
|
@ -1037,30 +1045,15 @@ crop_info_create (Tool *tool)
|
|||
gdisp->dot_for_dot ?
|
||||
UNIT_PIXEL : gdisp->gimage->unit, "%a",
|
||||
TRUE, TRUE, FALSE, GIMP_SIZE_ENTRY_UPDATE_SIZE,
|
||||
crop_orig_changed, tool);
|
||||
crop_orig_changed, crop_info);
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (origin_sizeentry),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
gdisp->gimage->yresolution, FALSE);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
-65536, 65536);
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
-65536, 65536);
|
||||
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
0, gdisp->gimage->width);
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
0, gdisp->gimage->height);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
orig_vals[0]);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
orig_vals[1]);
|
||||
|
||||
spinbutton = info_dialog_add_spinbutton (crop_info, _("Width:"), NULL,
|
||||
-1, 1, 1, 10, 1, 1, 2, NULL, NULL);
|
||||
size_sizeentry =
|
||||
|
@ -1068,28 +1061,15 @@ crop_info_create (Tool *tool)
|
|||
gdisp->dot_for_dot ?
|
||||
UNIT_PIXEL : gdisp->gimage->unit, "%a",
|
||||
TRUE, TRUE, FALSE, GIMP_SIZE_ENTRY_UPDATE_SIZE,
|
||||
crop_size_changed, tool);
|
||||
crop_size_changed, crop_info);
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (size_sizeentry),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
gdisp->gimage->yresolution, FALSE);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
-65536, 65536);
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
-65536, 65536);
|
||||
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
0, gdisp->gimage->width);
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
0, gdisp->gimage->height);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (size_sizeentry), 0, size_vals[0]);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (size_sizeentry), 1, size_vals[1]);
|
||||
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 0, 0);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 1, 6);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 2, 0);
|
||||
|
@ -1151,9 +1131,7 @@ crop_crop_callback (GtkWidget *w,
|
|||
crop_options->layer_only, TRUE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1171,8 +1149,26 @@ crop_resize_callback (GtkWidget *w,
|
|||
crop_options->layer_only, FALSE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
crop_close_callback (GtkWidget *w,
|
||||
gpointer client_data)
|
||||
{
|
||||
Tool * tool;
|
||||
Crop * crop;
|
||||
|
||||
tool = active_tool;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
if (tool->state == ACTIVE)
|
||||
draw_core_stop (crop->core, tool);
|
||||
|
||||
info_dialog_popdown (crop_info);
|
||||
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
tool->state = INACTIVE;
|
||||
}
|
||||
|
||||
|
@ -1442,19 +1438,6 @@ crop_colors_alpha (guchar *dummy,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
crop_close_callback (GtkWidget *w,
|
||||
gpointer client_data)
|
||||
{
|
||||
Tool * tool;
|
||||
|
||||
tool = active_tool;
|
||||
|
||||
draw_core_stop (((Crop *) tool->private)->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
}
|
||||
|
||||
static void
|
||||
crop_orig_changed (GtkWidget *w,
|
||||
gpointer data)
|
||||
|
@ -1465,9 +1448,9 @@ crop_orig_changed (GtkWidget *w,
|
|||
int ox;
|
||||
int oy;
|
||||
|
||||
tool = (Tool *)data;
|
||||
tool = active_tool;
|
||||
|
||||
if (tool)
|
||||
if (tool && active_tool->type == CROP)
|
||||
{
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
@ -1498,9 +1481,9 @@ crop_size_changed (GtkWidget *w,
|
|||
int sx;
|
||||
int sy;
|
||||
|
||||
tool = (Tool *)data;
|
||||
tool = active_tool;
|
||||
|
||||
if (tool)
|
||||
if (tool && active_tool->type == CROP)
|
||||
{
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
|
|
@ -177,12 +177,17 @@ curves_button_press (Tool *tool,
|
|||
gdisp = gdisp_ptr;
|
||||
drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (drawable != tool->drawable)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (curves_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
curves_dialog->drawable = tool->drawable = drawable;
|
||||
|
||||
tool->drawable = drawable;
|
||||
|
||||
curves_dialog->drawable = drawable;
|
||||
curves_dialog->color = drawable_color (drawable);
|
||||
curves_dialog->image_map = image_map_create (gdisp, drawable);
|
||||
}
|
||||
|
@ -380,6 +385,10 @@ tools_new_curves ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = curves_button_press;
|
||||
tool->button_release_func = curves_button_release;
|
||||
tool->motion_func = curves_motion;
|
||||
|
@ -388,8 +397,6 @@ tools_new_curves ()
|
|||
tool->cursor_update_func = curves_cursor_update;
|
||||
tool->control_func = curves_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -471,12 +478,11 @@ curves_initialize (GDisplay *gdisp)
|
|||
gtk_widget_set_sensitive( channel_items[i].widget, FALSE);
|
||||
|
||||
/* set the current selection */
|
||||
gtk_option_menu_set_history ( GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
|
||||
if (!GTK_WIDGET_VISIBLE (curves_dialog->shell))
|
||||
gtk_widget_show (curves_dialog->shell);
|
||||
|
||||
|
||||
curves_update (curves_dialog, GRAPH | DRAW);
|
||||
}
|
||||
|
||||
|
@ -1174,6 +1180,9 @@ curves_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1192,9 +1201,12 @@ curves_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (cd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
cd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
|
|
@ -136,6 +136,10 @@ tools_new_ellipse_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = rect_select_button_press;
|
||||
tool->button_release_func = rect_select_button_release;
|
||||
tool->motion_func = rect_select_motion;
|
||||
|
@ -143,7 +147,6 @@ tools_new_ellipse_select (void)
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = rect_select_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -190,7 +190,6 @@ flip_cursor_update (Tool *tool,
|
|||
Tool *
|
||||
tools_new_flip ()
|
||||
{
|
||||
|
||||
Tool * tool;
|
||||
TransformCore * private;
|
||||
|
||||
|
@ -205,9 +204,10 @@ tools_new_flip ()
|
|||
private = tool->private;
|
||||
|
||||
private->trans_func = flip_tool_transform;
|
||||
private->trans_info[FLIP_INFO] = -1.0;
|
||||
|
||||
tool->modifier_key_func = flip_modifier_key_func;
|
||||
tool->cursor_update_func = flip_cursor_update;
|
||||
private->trans_info[FLIP_INFO] = -1.0;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -476,6 +476,10 @@ tools_new_free_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = free_select_button_press;
|
||||
tool->button_release_func = free_select_button_release;
|
||||
tool->motion_func = free_select_motion;
|
||||
|
@ -483,7 +487,6 @@ tools_new_free_select (void)
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = free_select_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -340,11 +340,13 @@ fuzzy_select_button_press (Tool *tool, GdkEventButton *bevent,
|
|||
fuzzy_sel->threshold = default_threshold;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK |
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
tool->gdisp_ptr = gdisp_ptr;
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (fuzzy_sel->op == SELECTION_MOVE_MASK)
|
||||
{
|
||||
|
@ -385,10 +387,11 @@ fuzzy_select_button_release (Tool *tool, GdkEventButton *bevent,
|
|||
/* First take care of the case where the user "cancels" the action */
|
||||
if (! (bevent->state & GDK_BUTTON3_MASK))
|
||||
{
|
||||
drawable = (fuzzy_options->sample_merged) ? NULL : gimage_active_drawable (gdisp->gimage);
|
||||
drawable = ((fuzzy_options->sample_merged) ?
|
||||
NULL : gimage_active_drawable (gdisp->gimage));
|
||||
|
||||
fuzzy_select (gdisp->gimage, drawable, fuzzy_sel->op,
|
||||
fuzzy_options->feather, fuzzy_options->feather_radius);
|
||||
|
||||
gdisplays_flush ();
|
||||
|
||||
/* adapt the threshold based on the final value of this use */
|
||||
|
@ -569,6 +572,10 @@ tools_new_fuzzy_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = fuzzy_select_button_press;
|
||||
tool->button_release_func = fuzzy_select_button_release;
|
||||
tool->motion_func = fuzzy_select_motion;
|
||||
|
|
|
@ -34,10 +34,10 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
/* The maximum amount of pressure that can be exerted */
|
||||
#define MAX_PRESSURE 0.075
|
||||
#define MAX_PRESSURE 0.075
|
||||
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
#define OFF 0
|
||||
#define ON 1
|
||||
|
||||
/* the airbrush structures */
|
||||
|
||||
|
|
|
@ -1741,7 +1741,11 @@ tools_new_blend ()
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = blend_button_press;
|
||||
tool->button_release_func = blend_button_release;
|
||||
|
@ -1750,7 +1754,6 @@ tools_new_blend ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = blend_cursor_update;
|
||||
tool->control_func = blend_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -112,6 +112,8 @@ brightness_contrast_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -186,6 +188,10 @@ tools_new_brightness_contrast ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = brightness_contrast_button_press;
|
||||
tool->button_release_func = brightness_contrast_button_release;
|
||||
tool->motion_func = brightness_contrast_motion;
|
||||
|
@ -193,9 +199,6 @@ tools_new_brightness_contrast ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = brightness_contrast_cursor_update;
|
||||
tool->control_func = brightness_contrast_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -236,8 +239,8 @@ brightness_contrast_initialize (GDisplay *gdisp)
|
|||
brightness_contrast_dialog->contrast = 0.0;
|
||||
|
||||
brightness_contrast_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
brightness_contrast_dialog->image_map = image_map_create (gdisp,
|
||||
brightness_contrast_dialog->drawable);
|
||||
brightness_contrast_dialog->image_map =
|
||||
image_map_create (gdisp, brightness_contrast_dialog->drawable);
|
||||
|
||||
brightness_contrast_update (brightness_contrast_dialog, ALL);
|
||||
}
|
||||
|
@ -454,6 +457,9 @@ brightness_contrast_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
bcd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -485,6 +491,9 @@ brightness_contrast_cancel_callback (GtkWidget *widget,
|
|||
bcd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -611,7 +611,11 @@ tools_new_bucket_fill (void)
|
|||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = private;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = bucket_fill_button_press;
|
||||
tool->button_release_func = bucket_fill_button_release;
|
||||
|
@ -620,7 +624,6 @@ tools_new_bucket_fill (void)
|
|||
tool->modifier_key_func = bucket_fill_modifier_key_func;
|
||||
tool->cursor_update_func = bucket_fill_cursor_update;
|
||||
tool->control_func = bucket_fill_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -483,6 +483,10 @@ tools_new_by_color_select ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = by_color_select_button_press;
|
||||
tool->button_release_func = by_color_select_button_release;
|
||||
tool->motion_func = by_color_select_motion;
|
||||
|
@ -490,9 +494,6 @@ tools_new_by_color_select ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = by_color_select_cursor_update;
|
||||
tool->control_func = by_color_select_control;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -157,6 +157,8 @@ color_balance_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -204,13 +206,7 @@ color_balance_control (Tool *tool,
|
|||
|
||||
case HALT:
|
||||
if (color_balance_dialog)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (color_balance_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
color_balance_dialog->image_map = NULL;
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
}
|
||||
color_balance_cancel_callback (NULL, (gpointer) color_balance_dialog);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -237,18 +233,20 @@ tools_new_color_balance ()
|
|||
tool->type = COLOR_BALANCE;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 1; /* Disallow scrolling */
|
||||
tool->private = (void *) private;
|
||||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = color_balance_button_press;
|
||||
tool->button_release_func = color_balance_button_release;
|
||||
tool->motion_func = color_balance_motion;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func; tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->arrow_keys_func = standard_arrow_keys_func;
|
||||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = color_balance_cursor_update;
|
||||
tool->control_func = color_balance_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -294,22 +292,18 @@ color_balance_initialize (GDisplay *gdisp)
|
|||
color_balance_dialog->yellow_blue[i] = 0.0;
|
||||
}
|
||||
color_balance_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
color_balance_dialog->image_map = image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
color_balance_dialog->image_map =
|
||||
image_map_create (gdisp, color_balance_dialog->drawable);
|
||||
|
||||
color_balance_update (color_balance_dialog, ALL);
|
||||
}
|
||||
|
||||
|
||||
/****************************/
|
||||
/* Select by Color dialog */
|
||||
/****************************/
|
||||
/**************************/
|
||||
/* Color Balance dialog */
|
||||
/**************************/
|
||||
|
||||
/* the action area structure */
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
static ColorBalanceDialog *
|
||||
color_balance_new_dialog ()
|
||||
{
|
||||
|
@ -326,13 +320,21 @@ color_balance_new_dialog ()
|
|||
GtkObject *data;
|
||||
GSList *group = NULL;
|
||||
int i;
|
||||
char *appl_mode_names[3] =
|
||||
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("OK"), color_balance_ok_callback, NULL, NULL },
|
||||
{ N_("Cancel"), color_balance_cancel_callback, NULL, NULL }
|
||||
};
|
||||
|
||||
char *appl_mode_names[] =
|
||||
{
|
||||
N_("Shadows"),
|
||||
N_("Midtones"),
|
||||
N_("Highlights")
|
||||
};
|
||||
ActionCallback appl_mode_callbacks[3] =
|
||||
|
||||
ActionCallback appl_mode_callbacks[] =
|
||||
{
|
||||
color_balance_shadows_callback,
|
||||
color_balance_midtones_callback,
|
||||
|
@ -657,6 +659,9 @@ color_balance_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cbd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -684,10 +689,13 @@ color_balance_cancel_callback (GtkWidget *widget,
|
|||
active_tool->preserve = TRUE;
|
||||
image_map_abort (cbd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
gdisplays_flush ();
|
||||
cbd->image_map = NULL;
|
||||
}
|
||||
|
||||
cbd->image_map = NULL;
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -113,7 +113,7 @@ static void crop_control (Tool *, ToolAction, gpointer);
|
|||
static void crop_arrow_keys_func (Tool *, GdkEventKey *, gpointer);
|
||||
static void crop_modifier_key_func (Tool *, GdkEventKey *, gpointer);
|
||||
|
||||
/* Crop helper functions */
|
||||
/* Crop helper functions */
|
||||
static void crop_recalc (Tool *, Crop *);
|
||||
static void crop_start (Tool *, Crop *);
|
||||
static void crop_adjust_guides (GImage *, int, int, int, int);
|
||||
|
@ -132,18 +132,18 @@ typedef enum {
|
|||
AUTO_CROP_COLOR = 2
|
||||
} AutoCropType;
|
||||
|
||||
typedef guchar * (*GetColorFunc) (GtkObject *, int, int);
|
||||
typedef AutoCropType (*ColorsEqualFunc) (guchar *, guchar *, int);
|
||||
typedef guchar * (*GetColorFunc) (GtkObject *, int, int);
|
||||
typedef AutoCropType (*ColorsEqualFunc) (guchar *, guchar *, int);
|
||||
|
||||
static void crop_selection_callback (GtkWidget *, gpointer);
|
||||
static void crop_automatic_callback (GtkWidget *, gpointer);
|
||||
static void crop_selection_callback (GtkWidget *, gpointer);
|
||||
static void crop_automatic_callback (GtkWidget *, gpointer);
|
||||
static AutoCropType crop_guess_bgcolor (GtkObject *, GetColorFunc, int, int, int, int, guchar *);
|
||||
static int crop_colors_equal (guchar *, guchar *, int);
|
||||
static int crop_colors_alpha (guchar *, guchar *, int);
|
||||
static int crop_colors_equal (guchar *, guchar *, int);
|
||||
static int crop_colors_alpha (guchar *, guchar *, int);
|
||||
|
||||
/* Crop dialog callback funtions */
|
||||
static void crop_orig_changed (GtkWidget *, gpointer);
|
||||
static void crop_size_changed (GtkWidget *, gpointer);
|
||||
static void crop_orig_changed (GtkWidget *, gpointer);
|
||||
static void crop_size_changed (GtkWidget *, gpointer);
|
||||
|
||||
|
||||
/* Functions */
|
||||
|
@ -168,7 +168,7 @@ crop_options_new (void)
|
|||
GtkWidget *frame;
|
||||
gchar* type_label[2] = { N_("Crop"), N_("Resize") };
|
||||
gint type_value[2] = { CROP_CROP, RESIZE_CROP };
|
||||
|
||||
|
||||
/* the new crop tool options structure */
|
||||
options = (CropOptions *) g_malloc (sizeof (CropOptions));
|
||||
tool_options_init ((ToolOptions *) options,
|
||||
|
@ -205,7 +205,7 @@ crop_options_new (void)
|
|||
gtk_widget_show (options->allow_enlarge_w);
|
||||
|
||||
/* tool toggle */
|
||||
frame = tool_options_radio_buttons_new (N_("Tool Toggle"),
|
||||
frame = tool_options_radio_buttons_new (_("Tool Toggle"),
|
||||
&options->type,
|
||||
options->type_w,
|
||||
type_label,
|
||||
|
@ -218,7 +218,6 @@ crop_options_new (void)
|
|||
return options;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
crop_button_press (Tool *tool,
|
||||
GdkEventButton *bevent,
|
||||
|
@ -230,10 +229,11 @@ crop_button_press (Tool *tool,
|
|||
gdisp = (GDisplay *) gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
if (tool->state == INACTIVE)
|
||||
crop->function = CREATING;
|
||||
else if (gdisp_ptr != tool->gdisp_ptr)
|
||||
crop->function = CREATING;
|
||||
if (tool->state == INACTIVE ||
|
||||
gdisp_ptr != tool->gdisp_ptr)
|
||||
{
|
||||
crop->function = CREATING;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* If the cursor is in either the upper left or lower right boxes,
|
||||
|
@ -268,6 +268,7 @@ crop_button_press (Tool *tool,
|
|||
draw_core_stop (crop->core, tool);
|
||||
|
||||
tool->gdisp_ptr = gdisp_ptr;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
gdisplay_untransform_coords (gdisp, bevent->x, bevent->y,
|
||||
&crop->tx1, &crop->ty1, TRUE, FALSE);
|
||||
|
@ -283,7 +284,8 @@ crop_button_press (Tool *tool,
|
|||
crop->lasty = crop->starty;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
|
@ -317,9 +319,7 @@ crop_button_release (Tool *tool,
|
|||
crop_options->layer_only, FALSE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
else
|
||||
crop_info_update (tool);
|
||||
|
@ -671,18 +671,17 @@ crop_control (Tool *tool,
|
|||
|
||||
switch (action)
|
||||
{
|
||||
case PAUSE :
|
||||
case PAUSE:
|
||||
draw_core_pause (crop->core, tool);
|
||||
break;
|
||||
|
||||
case RESUME :
|
||||
case RESUME:
|
||||
crop_recalc (tool, crop);
|
||||
draw_core_resume (crop->core, tool);
|
||||
break;
|
||||
|
||||
case HALT :
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
case HALT:
|
||||
crop_close_callback (NULL, NULL);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -696,12 +695,12 @@ crop_draw (Tool *tool)
|
|||
Crop * crop;
|
||||
GDisplay * gdisp;
|
||||
|
||||
#define SRW 10
|
||||
#define SRH 10
|
||||
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
#define SRW 10
|
||||
#define SRH 10
|
||||
|
||||
gdk_draw_line (crop->core->win, crop->core->gc,
|
||||
crop->x1, crop->y1, gdisp->disp_width, crop->y1);
|
||||
gdk_draw_line (crop->core->win, crop->core->gc,
|
||||
|
@ -723,6 +722,9 @@ crop_draw (Tool *tool)
|
|||
gdk_draw_rectangle (crop->core->win, crop->core->gc, 1,
|
||||
crop->x1, crop->y2-crop->srh, crop->srw, crop->srh);
|
||||
|
||||
#undef SRW
|
||||
#undef SRH
|
||||
|
||||
crop_info_update (tool);
|
||||
}
|
||||
|
||||
|
@ -752,6 +754,10 @@ tools_new_crop ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE; /* XXX Check me */
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = crop_button_press;
|
||||
tool->button_release_func = crop_button_release;
|
||||
tool->motion_func = crop_motion;
|
||||
|
@ -759,7 +765,6 @@ tools_new_crop ()
|
|||
tool->modifier_key_func = crop_modifier_key_func;
|
||||
tool->cursor_update_func = crop_cursor_update;
|
||||
tool->control_func = crop_control;
|
||||
tool->preserve = TRUE; /* XXX Check me */
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -777,10 +782,7 @@ tools_free_crop (Tool *tool)
|
|||
draw_core_free (crop->core);
|
||||
|
||||
if (crop_info)
|
||||
{
|
||||
info_dialog_popdown (crop_info);
|
||||
crop_info = NULL;
|
||||
}
|
||||
crop_close_callback (NULL, NULL);
|
||||
|
||||
g_free (crop);
|
||||
}
|
||||
|
@ -957,6 +959,9 @@ crop_start (Tool *tool,
|
|||
if (! crop_info)
|
||||
crop_info_create (tool);
|
||||
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (origin_sizeentry), crop_info);
|
||||
gtk_signal_handler_block_by_data (GTK_OBJECT (size_sizeentry), crop_info);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
|
@ -993,6 +998,9 @@ crop_start (Tool *tool,
|
|||
}
|
||||
}
|
||||
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (size_sizeentry), crop_info);
|
||||
gtk_signal_handler_unblock_by_data (GTK_OBJECT (origin_sizeentry), crop_info);
|
||||
|
||||
old_gdisp = gdisp;
|
||||
|
||||
/* initialize the statusbar display */
|
||||
|
@ -1005,16 +1013,9 @@ crop_start (Tool *tool,
|
|||
}
|
||||
|
||||
|
||||
/*******************************************************/
|
||||
/* Crop dialog functions */
|
||||
/*******************************************************/
|
||||
|
||||
static ActionAreaItem action_items[3] =
|
||||
{
|
||||
{ N_("Crop"), crop_crop_callback, NULL, NULL },
|
||||
{ N_("Resize"), crop_resize_callback, NULL, NULL },
|
||||
{ N_("Close"), crop_close_callback, NULL, NULL },
|
||||
};
|
||||
/***************************/
|
||||
/* Crop dialog functions */
|
||||
/***************************/
|
||||
|
||||
static void
|
||||
crop_info_create (Tool *tool)
|
||||
|
@ -1024,6 +1025,13 @@ crop_info_create (Tool *tool)
|
|||
GtkWidget *bbox;
|
||||
GtkWidget *button;
|
||||
|
||||
static ActionAreaItem action_items[] =
|
||||
{
|
||||
{ N_("Crop"), crop_crop_callback, NULL, NULL },
|
||||
{ N_("Resize"), crop_resize_callback, NULL, NULL },
|
||||
{ N_("Close"), crop_close_callback, NULL, NULL },
|
||||
};
|
||||
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
|
||||
/* create the info dialog */
|
||||
|
@ -1037,30 +1045,15 @@ crop_info_create (Tool *tool)
|
|||
gdisp->dot_for_dot ?
|
||||
UNIT_PIXEL : gdisp->gimage->unit, "%a",
|
||||
TRUE, TRUE, FALSE, GIMP_SIZE_ENTRY_UPDATE_SIZE,
|
||||
crop_orig_changed, tool);
|
||||
crop_orig_changed, crop_info);
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (origin_sizeentry),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
gdisp->gimage->yresolution, FALSE);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
-65536, 65536);
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
-65536, 65536);
|
||||
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
0, gdisp->gimage->width);
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
0, gdisp->gimage->height);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (origin_sizeentry), 0,
|
||||
orig_vals[0]);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (origin_sizeentry), 1,
|
||||
orig_vals[1]);
|
||||
|
||||
spinbutton = info_dialog_add_spinbutton (crop_info, _("Width:"), NULL,
|
||||
-1, 1, 1, 10, 1, 1, 2, NULL, NULL);
|
||||
size_sizeentry =
|
||||
|
@ -1068,28 +1061,15 @@ crop_info_create (Tool *tool)
|
|||
gdisp->dot_for_dot ?
|
||||
UNIT_PIXEL : gdisp->gimage->unit, "%a",
|
||||
TRUE, TRUE, FALSE, GIMP_SIZE_ENTRY_UPDATE_SIZE,
|
||||
crop_size_changed, tool);
|
||||
crop_size_changed, crop_info);
|
||||
gimp_size_entry_add_field (GIMP_SIZE_ENTRY (size_sizeentry),
|
||||
GTK_SPIN_BUTTON (spinbutton), NULL);
|
||||
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
gdisp->gimage->xresolution, FALSE);
|
||||
gimp_size_entry_set_resolution (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
gdisp->gimage->yresolution, FALSE);
|
||||
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
-65536, 65536);
|
||||
gimp_size_entry_set_refval_boundaries (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
-65536, 65536);
|
||||
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (size_sizeentry), 0,
|
||||
0, gdisp->gimage->width);
|
||||
gimp_size_entry_set_size (GIMP_SIZE_ENTRY (size_sizeentry), 1,
|
||||
0, gdisp->gimage->height);
|
||||
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (size_sizeentry), 0, size_vals[0]);
|
||||
gimp_size_entry_set_refval (GIMP_SIZE_ENTRY (size_sizeentry), 1, size_vals[1]);
|
||||
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 0, 0);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 1, 6);
|
||||
gtk_table_set_row_spacing (GTK_TABLE (crop_info->info_table), 2, 0);
|
||||
|
@ -1151,9 +1131,7 @@ crop_crop_callback (GtkWidget *w,
|
|||
crop_options->layer_only, TRUE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1171,8 +1149,26 @@ crop_resize_callback (GtkWidget *w,
|
|||
crop_options->layer_only, FALSE);
|
||||
|
||||
/* Finish the tool */
|
||||
draw_core_stop (crop->core, tool);
|
||||
crop_close_callback (NULL, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
crop_close_callback (GtkWidget *w,
|
||||
gpointer client_data)
|
||||
{
|
||||
Tool * tool;
|
||||
Crop * crop;
|
||||
|
||||
tool = active_tool;
|
||||
crop = (Crop *) tool->private;
|
||||
|
||||
if (tool->state == ACTIVE)
|
||||
draw_core_stop (crop->core, tool);
|
||||
|
||||
info_dialog_popdown (crop_info);
|
||||
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
tool->state = INACTIVE;
|
||||
}
|
||||
|
||||
|
@ -1442,19 +1438,6 @@ crop_colors_alpha (guchar *dummy,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
crop_close_callback (GtkWidget *w,
|
||||
gpointer client_data)
|
||||
{
|
||||
Tool * tool;
|
||||
|
||||
tool = active_tool;
|
||||
|
||||
draw_core_stop (((Crop *) tool->private)->core, tool);
|
||||
info_dialog_popdown (crop_info);
|
||||
tool->state = INACTIVE;
|
||||
}
|
||||
|
||||
static void
|
||||
crop_orig_changed (GtkWidget *w,
|
||||
gpointer data)
|
||||
|
@ -1465,9 +1448,9 @@ crop_orig_changed (GtkWidget *w,
|
|||
int ox;
|
||||
int oy;
|
||||
|
||||
tool = (Tool *)data;
|
||||
tool = active_tool;
|
||||
|
||||
if (tool)
|
||||
if (tool && active_tool->type == CROP)
|
||||
{
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
@ -1498,9 +1481,9 @@ crop_size_changed (GtkWidget *w,
|
|||
int sx;
|
||||
int sy;
|
||||
|
||||
tool = (Tool *)data;
|
||||
tool = active_tool;
|
||||
|
||||
if (tool)
|
||||
if (tool && active_tool->type == CROP)
|
||||
{
|
||||
gdisp = (GDisplay *) tool->gdisp_ptr;
|
||||
crop = (Crop *) tool->private;
|
||||
|
|
|
@ -177,12 +177,17 @@ curves_button_press (Tool *tool,
|
|||
gdisp = gdisp_ptr;
|
||||
drawable = gimage_active_drawable (gdisp->gimage);
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (drawable != tool->drawable)
|
||||
{
|
||||
active_tool->preserve = TRUE;
|
||||
image_map_abort (curves_dialog->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
curves_dialog->drawable = tool->drawable = drawable;
|
||||
|
||||
tool->drawable = drawable;
|
||||
|
||||
curves_dialog->drawable = drawable;
|
||||
curves_dialog->color = drawable_color (drawable);
|
||||
curves_dialog->image_map = image_map_create (gdisp, drawable);
|
||||
}
|
||||
|
@ -380,6 +385,10 @@ tools_new_curves ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = curves_button_press;
|
||||
tool->button_release_func = curves_button_release;
|
||||
tool->motion_func = curves_motion;
|
||||
|
@ -388,8 +397,6 @@ tools_new_curves ()
|
|||
tool->cursor_update_func = curves_cursor_update;
|
||||
tool->control_func = curves_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -471,12 +478,11 @@ curves_initialize (GDisplay *gdisp)
|
|||
gtk_widget_set_sensitive( channel_items[i].widget, FALSE);
|
||||
|
||||
/* set the current selection */
|
||||
gtk_option_menu_set_history ( GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
gtk_option_menu_set_history (GTK_OPTION_MENU (curves_dialog->channel_menu), 0);
|
||||
|
||||
if (!GTK_WIDGET_VISIBLE (curves_dialog->shell))
|
||||
gtk_widget_show (curves_dialog->shell);
|
||||
|
||||
|
||||
curves_update (curves_dialog, GRAPH | DRAW);
|
||||
}
|
||||
|
||||
|
@ -1174,6 +1180,9 @@ curves_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1192,9 +1201,12 @@ curves_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (cd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
cd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
cd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
|
|
@ -136,6 +136,10 @@ tools_new_ellipse_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = rect_select_button_press;
|
||||
tool->button_release_func = rect_select_button_release;
|
||||
tool->motion_func = rect_select_motion;
|
||||
|
@ -143,7 +147,6 @@ tools_new_ellipse_select (void)
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = rect_select_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -190,7 +190,6 @@ flip_cursor_update (Tool *tool,
|
|||
Tool *
|
||||
tools_new_flip ()
|
||||
{
|
||||
|
||||
Tool * tool;
|
||||
TransformCore * private;
|
||||
|
||||
|
@ -205,9 +204,10 @@ tools_new_flip ()
|
|||
private = tool->private;
|
||||
|
||||
private->trans_func = flip_tool_transform;
|
||||
private->trans_info[FLIP_INFO] = -1.0;
|
||||
|
||||
tool->modifier_key_func = flip_modifier_key_func;
|
||||
tool->cursor_update_func = flip_cursor_update;
|
||||
private->trans_info[FLIP_INFO] = -1.0;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -476,6 +476,10 @@ tools_new_free_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = free_select_button_press;
|
||||
tool->button_release_func = free_select_button_release;
|
||||
tool->motion_func = free_select_motion;
|
||||
|
@ -483,7 +487,6 @@ tools_new_free_select (void)
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = free_select_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -340,11 +340,13 @@ fuzzy_select_button_press (Tool *tool, GdkEventButton *bevent,
|
|||
fuzzy_sel->threshold = default_threshold;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK |
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
tool->gdisp_ptr = gdisp_ptr;
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (fuzzy_sel->op == SELECTION_MOVE_MASK)
|
||||
{
|
||||
|
@ -385,10 +387,11 @@ fuzzy_select_button_release (Tool *tool, GdkEventButton *bevent,
|
|||
/* First take care of the case where the user "cancels" the action */
|
||||
if (! (bevent->state & GDK_BUTTON3_MASK))
|
||||
{
|
||||
drawable = (fuzzy_options->sample_merged) ? NULL : gimage_active_drawable (gdisp->gimage);
|
||||
drawable = ((fuzzy_options->sample_merged) ?
|
||||
NULL : gimage_active_drawable (gdisp->gimage));
|
||||
|
||||
fuzzy_select (gdisp->gimage, drawable, fuzzy_sel->op,
|
||||
fuzzy_options->feather, fuzzy_options->feather_radius);
|
||||
|
||||
gdisplays_flush ();
|
||||
|
||||
/* adapt the threshold based on the final value of this use */
|
||||
|
@ -569,6 +572,10 @@ tools_new_fuzzy_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = fuzzy_select_button_press;
|
||||
tool->button_release_func = fuzzy_select_button_release;
|
||||
tool->motion_func = fuzzy_select_motion;
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <math.h>
|
||||
#include "appenv.h"
|
||||
#include "actionarea.h"
|
||||
|
@ -89,7 +89,6 @@ histogram_tool_histogram_range (HistogramWidget *w,
|
|||
pixels = gimp_histogram_get_count(htd->hist, 0, 255);
|
||||
count = gimp_histogram_get_count(htd->hist, start, end);
|
||||
|
||||
|
||||
htd->mean = gimp_histogram_get_mean(htd->hist, htd->channel, start, end);
|
||||
htd->std_dev = gimp_histogram_get_std_dev(htd->hist, htd->channel,
|
||||
start, end);
|
||||
|
@ -110,34 +109,34 @@ histogram_tool_dialog_update (HistogramToolDialog *htd,
|
|||
char text[12];
|
||||
|
||||
/* mean */
|
||||
sprintf (text, "%3.1f", htd->mean);
|
||||
g_snprintf (text, 12, "%3.1f", htd->mean);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[0]), text);
|
||||
|
||||
/* std dev */
|
||||
sprintf (text, "%3.1f", htd->std_dev);
|
||||
g_snprintf (text, 12, "%3.1f", htd->std_dev);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[1]), text);
|
||||
|
||||
/* median */
|
||||
sprintf (text, "%3.1f", htd->median);
|
||||
g_snprintf (text, 12, "%3.1f", htd->median);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[2]), text);
|
||||
|
||||
/* pixels */
|
||||
sprintf (text, "%8.1f", htd->pixels);
|
||||
g_snprintf (text, 12, "%8.1f", htd->pixels);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[3]), text);
|
||||
|
||||
/* intensity */
|
||||
if (start == end)
|
||||
sprintf (text, "%d", start);
|
||||
g_snprintf (text, 12, "%d", start);
|
||||
else
|
||||
sprintf (text, "%d..%d", start, end);
|
||||
g_snprintf (text, 12, "%d..%d", start, end);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[4]), text);
|
||||
|
||||
/* count */
|
||||
sprintf (text, "%8.1f", htd->count);
|
||||
g_snprintf (text, 12, "%8.1f", htd->count);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[5]), text);
|
||||
|
||||
/* percentile */
|
||||
sprintf (text, "%2.2f", htd->percentile * 100);
|
||||
g_snprintf (text, 12, "%2.2f", htd->percentile * 100);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[6]), text);
|
||||
}
|
||||
|
||||
|
@ -151,6 +150,8 @@ histogram_tool_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -224,6 +225,10 @@ tools_new_histogram_tool ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = histogram_tool_button_press;
|
||||
tool->button_release_func = histogram_tool_button_release;
|
||||
tool->motion_func = histogram_tool_motion;
|
||||
|
@ -232,8 +237,6 @@ tools_new_histogram_tool ()
|
|||
tool->cursor_update_func = histogram_tool_cursor_update;
|
||||
tool->control_func = histogram_tool_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -428,7 +431,7 @@ histogram_tool_new_dialog ()
|
|||
|
||||
static void
|
||||
histogram_tool_close_callback (GtkWidget *widget,
|
||||
gpointer client_data)
|
||||
gpointer client_data)
|
||||
{
|
||||
HistogramToolDialog *htd;
|
||||
|
||||
|
|
|
@ -237,6 +237,8 @@ hue_saturation_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -310,6 +312,10 @@ tools_new_hue_saturation ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = hue_saturation_button_press;
|
||||
tool->button_release_func = hue_saturation_button_release;
|
||||
tool->motion_func = hue_saturation_motion;
|
||||
|
@ -317,9 +323,6 @@ tools_new_hue_saturation ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = hue_saturation_cursor_update;
|
||||
tool->control_func = hue_saturation_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -744,6 +747,9 @@ hue_saturation_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -772,9 +778,12 @@ hue_saturation_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (hsd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
hsd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1564,7 +1564,10 @@ tools_new_ink (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->private = private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = ink_button_press;
|
||||
tool->button_release_func = ink_button_release;
|
||||
|
|
|
@ -431,8 +431,13 @@ tools_new_iscissors ()
|
|||
tool->type = ISCISSORS;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = iscissors_button_press;
|
||||
tool->button_release_func = iscissors_button_release;
|
||||
tool->motion_func = iscissors_motion;
|
||||
|
@ -440,8 +445,6 @@ tools_new_iscissors ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = iscissors_control;
|
||||
tool->auto_snap_to = 0;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
last_tool = tool;
|
||||
|
||||
|
|
|
@ -174,6 +174,8 @@ levels_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -247,6 +249,10 @@ tools_new_levels ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = levels_button_press;
|
||||
tool->button_release_func = levels_button_release;
|
||||
tool->motion_func = levels_motion;
|
||||
|
@ -254,9 +260,6 @@ tools_new_levels ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = levels_cursor_update;
|
||||
tool->control_func = levels_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -971,6 +974,9 @@ levels_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
ld->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -999,10 +1005,12 @@ levels_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (ld->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
ld->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
ld->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -372,6 +372,10 @@ tools_new_magnify (void)
|
|||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = magnify_button_press;
|
||||
tool->button_release_func = magnify_button_release;
|
||||
tool->motion_func = magnify_motion;
|
||||
|
|
|
@ -447,12 +447,20 @@ tools_new_move_tool ()
|
|||
tool = (Tool *) g_malloc (sizeof (Tool));
|
||||
private = (MoveTool *) g_malloc (sizeof (MoveTool));
|
||||
|
||||
private->layer = NULL;
|
||||
private->guide = NULL;
|
||||
private->disp = NULL;
|
||||
|
||||
tool->type = MOVE;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = move_tool_button_press;
|
||||
tool->button_release_func = move_tool_button_release;
|
||||
tool->motion_func = move_tool_motion;
|
||||
|
@ -460,11 +468,6 @@ tools_new_move_tool ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = move_tool_cursor_update;
|
||||
tool->control_func = move_tool_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
private->layer = NULL;
|
||||
private->guide = NULL;
|
||||
private->disp = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -98,6 +98,8 @@ posterize_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -178,6 +180,10 @@ tools_new_posterize ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = posterize_button_press;
|
||||
tool->button_release_func = posterize_button_release;
|
||||
tool->motion_func = posterize_motion;
|
||||
|
@ -186,10 +192,6 @@ tools_new_posterize ()
|
|||
tool->cursor_update_func = posterize_cursor_update;
|
||||
tool->control_func = posterize_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -200,7 +202,7 @@ tools_free_posterize (Tool *tool)
|
|||
|
||||
post = (Posterize *) tool->private;
|
||||
|
||||
/* Close the color select dialog */
|
||||
/* Close the posterize dialog */
|
||||
if (posterize_dialog)
|
||||
posterize_cancel_callback (NULL, (gpointer) posterize_dialog);
|
||||
|
||||
|
@ -222,8 +224,11 @@ posterize_initialize (GDisplay *gdisp)
|
|||
else
|
||||
if (!GTK_WIDGET_VISIBLE (posterize_dialog->shell))
|
||||
gtk_widget_show (posterize_dialog->shell);
|
||||
|
||||
posterize_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
posterize_dialog->image_map = image_map_create (gdisp, posterize_dialog->drawable);
|
||||
posterize_dialog->image_map =
|
||||
image_map_create (gdisp, posterize_dialog->drawable);
|
||||
|
||||
if (posterize_dialog->preview)
|
||||
posterize_preview (posterize_dialog);
|
||||
}
|
||||
|
@ -351,6 +356,9 @@ posterize_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
pd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -380,6 +388,9 @@ posterize_cancel_callback (GtkWidget *widget,
|
|||
pd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -418,4 +429,3 @@ posterize_levels_text_update (GtkWidget *w,
|
|||
posterize_preview (pd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -154,7 +154,8 @@ rect_select_button_press (Tool *tool,
|
|||
rect_sel->center = FALSE;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
|
@ -447,8 +448,10 @@ rect_select_draw (Tool *tool)
|
|||
|
||||
|
||||
void
|
||||
static selection_tool_update_op_state(RectSelect *rect_sel, int x, int y, int state,
|
||||
GDisplay *gdisp)
|
||||
static selection_tool_update_op_state (RectSelect *rect_sel,
|
||||
int x, int y,
|
||||
int state,
|
||||
GDisplay *gdisp)
|
||||
{
|
||||
if (active_tool->state == ACTIVE)
|
||||
return;
|
||||
|
@ -485,8 +488,8 @@ rect_select_cursor_update (Tool *tool,
|
|||
active = (active_tool->state == ACTIVE);
|
||||
rect_sel = (RectSelect*)tool->private;
|
||||
|
||||
selection_tool_update_op_state(rect_sel, mevent->x, mevent->y,
|
||||
mevent->state, gdisp_ptr);
|
||||
selection_tool_update_op_state (rect_sel, mevent->x, mevent->y,
|
||||
mevent->state, gdisp_ptr);
|
||||
|
||||
switch (rect_sel->op)
|
||||
{
|
||||
|
@ -505,7 +508,7 @@ rect_select_cursor_update (Tool *tool,
|
|||
case SELECTION_MOVE_MASK:
|
||||
gdisplay_install_tool_cursor (gdisp, GDK_DIAMOND_CROSS);
|
||||
break;
|
||||
case SELECTION_MOVE:
|
||||
case SELECTION_MOVE:
|
||||
gdisplay_install_tool_cursor (gdisp, GDK_FLEUR);
|
||||
}
|
||||
}
|
||||
|
@ -572,6 +575,10 @@ tools_new_rect_select ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = rect_select_button_press;
|
||||
tool->button_release_func = rect_select_button_release;
|
||||
tool->motion_func = rect_select_motion;
|
||||
|
@ -580,8 +587,6 @@ tools_new_rect_select ()
|
|||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = rect_select_control;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
|
|
@ -340,11 +340,13 @@ fuzzy_select_button_press (Tool *tool, GdkEventButton *bevent,
|
|||
fuzzy_sel->threshold = default_threshold;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK |
|
||||
GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
tool->gdisp_ptr = gdisp_ptr;
|
||||
tool->gdisp_ptr = gdisp;
|
||||
|
||||
if (fuzzy_sel->op == SELECTION_MOVE_MASK)
|
||||
{
|
||||
|
@ -385,10 +387,11 @@ fuzzy_select_button_release (Tool *tool, GdkEventButton *bevent,
|
|||
/* First take care of the case where the user "cancels" the action */
|
||||
if (! (bevent->state & GDK_BUTTON3_MASK))
|
||||
{
|
||||
drawable = (fuzzy_options->sample_merged) ? NULL : gimage_active_drawable (gdisp->gimage);
|
||||
drawable = ((fuzzy_options->sample_merged) ?
|
||||
NULL : gimage_active_drawable (gdisp->gimage));
|
||||
|
||||
fuzzy_select (gdisp->gimage, drawable, fuzzy_sel->op,
|
||||
fuzzy_options->feather, fuzzy_options->feather_radius);
|
||||
|
||||
gdisplays_flush ();
|
||||
|
||||
/* adapt the threshold based on the final value of this use */
|
||||
|
@ -569,6 +572,10 @@ tools_new_fuzzy_select (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = fuzzy_select_button_press;
|
||||
tool->button_release_func = fuzzy_select_button_release;
|
||||
tool->motion_func = fuzzy_select_motion;
|
||||
|
|
|
@ -35,33 +35,33 @@
|
|||
#include "libgimp/gimpintl.h"
|
||||
|
||||
#ifndef M_PI
|
||||
#define M_PI 3.14159265358979323846
|
||||
#define M_PI 3.14159265358979323846
|
||||
#endif /* M_PI */
|
||||
|
||||
/* index into trans_info array */
|
||||
#define ANGLE 0
|
||||
#define REAL_ANGLE 1
|
||||
#define CENTER_X 2
|
||||
#define CENTER_Y 3
|
||||
#define ANGLE 0
|
||||
#define REAL_ANGLE 1
|
||||
#define CENTER_X 2
|
||||
#define CENTER_Y 3
|
||||
|
||||
#define EPSILON 0.018 /* ~ 1 degree */
|
||||
#define FIFTEEN_DEG (M_PI / 12.0)
|
||||
#define EPSILON 0.018 /* ~ 1 degree */
|
||||
#define FIFTEEN_DEG (M_PI / 12.0)
|
||||
|
||||
/* variables local to this file */
|
||||
static gdouble angle_val;
|
||||
static gdouble center_vals[2];
|
||||
static gdouble angle_val;
|
||||
static gdouble center_vals[2];
|
||||
|
||||
/* needed for size update */
|
||||
static GtkWidget *sizeentry;
|
||||
static GtkWidget *sizeentry;
|
||||
|
||||
/* forward function declarations */
|
||||
static void * rotate_tool_recalc (Tool *, void *);
|
||||
static void rotate_tool_motion (Tool *, void *);
|
||||
static void rotate_info_update (Tool *);
|
||||
static void * rotate_tool_recalc (Tool *, void *);
|
||||
static void rotate_tool_motion (Tool *, void *);
|
||||
static void rotate_info_update (Tool *);
|
||||
|
||||
/* callback functions for the info dialog sizeentries */
|
||||
static void rotate_angle_changed (GtkWidget *entry, gpointer data);
|
||||
static void rotate_center_changed (GtkWidget *entry, gpointer data);
|
||||
static void rotate_angle_changed (GtkWidget *entry, gpointer data);
|
||||
static void rotate_center_changed (GtkWidget *entry, gpointer data);
|
||||
|
||||
void *
|
||||
rotate_tool_transform (Tool *tool,
|
||||
|
|
|
@ -251,6 +251,10 @@ tools_new_text ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) the_text_tool;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = text_button_press;
|
||||
tool->button_release_func = text_button_release;
|
||||
tool->motion_func = text_motion;
|
||||
|
@ -259,8 +263,6 @@ tools_new_text ()
|
|||
tool->cursor_update_func = text_cursor_update;
|
||||
tool->control_func = text_control;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
|
|
@ -166,6 +166,8 @@ threshold_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -246,6 +248,10 @@ tools_new_threshold ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = threshold_button_press;
|
||||
tool->button_release_func = threshold_button_release;
|
||||
tool->motion_func = threshold_motion;
|
||||
|
@ -254,8 +260,6 @@ tools_new_threshold ()
|
|||
tool->cursor_update_func = threshold_cursor_update;
|
||||
tool->control_func = threshold_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -291,16 +295,18 @@ threshold_initialize (GDisplay *gdisp)
|
|||
|
||||
threshold_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
threshold_dialog->color = drawable_color (threshold_dialog->drawable);
|
||||
threshold_dialog->image_map = image_map_create (gdisp, threshold_dialog->drawable);
|
||||
threshold_dialog->image_map =
|
||||
image_map_create (gdisp, threshold_dialog->drawable);
|
||||
|
||||
gimp_histogram_calculate_drawable(threshold_dialog->hist,
|
||||
threshold_dialog->drawable);
|
||||
gimp_histogram_calculate_drawable (threshold_dialog->hist,
|
||||
threshold_dialog->drawable);
|
||||
|
||||
histogram_widget_update (threshold_dialog->histogram,
|
||||
threshold_dialog->hist);
|
||||
histogram_widget_range (threshold_dialog->histogram,
|
||||
threshold_dialog->low_threshold,
|
||||
threshold_dialog->high_threshold);
|
||||
|
||||
if (threshold_dialog->preview)
|
||||
threshold_preview (threshold_dialog);
|
||||
}
|
||||
|
@ -453,6 +459,9 @@ threshold_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
td->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -484,6 +493,9 @@ threshold_cancel_callback (GtkWidget *widget,
|
|||
td->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -15,9 +15,9 @@
|
|||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <math.h>
|
||||
#include "appenv.h"
|
||||
#include "actionarea.h"
|
||||
|
@ -89,7 +89,6 @@ histogram_tool_histogram_range (HistogramWidget *w,
|
|||
pixels = gimp_histogram_get_count(htd->hist, 0, 255);
|
||||
count = gimp_histogram_get_count(htd->hist, start, end);
|
||||
|
||||
|
||||
htd->mean = gimp_histogram_get_mean(htd->hist, htd->channel, start, end);
|
||||
htd->std_dev = gimp_histogram_get_std_dev(htd->hist, htd->channel,
|
||||
start, end);
|
||||
|
@ -110,34 +109,34 @@ histogram_tool_dialog_update (HistogramToolDialog *htd,
|
|||
char text[12];
|
||||
|
||||
/* mean */
|
||||
sprintf (text, "%3.1f", htd->mean);
|
||||
g_snprintf (text, 12, "%3.1f", htd->mean);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[0]), text);
|
||||
|
||||
/* std dev */
|
||||
sprintf (text, "%3.1f", htd->std_dev);
|
||||
g_snprintf (text, 12, "%3.1f", htd->std_dev);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[1]), text);
|
||||
|
||||
/* median */
|
||||
sprintf (text, "%3.1f", htd->median);
|
||||
g_snprintf (text, 12, "%3.1f", htd->median);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[2]), text);
|
||||
|
||||
/* pixels */
|
||||
sprintf (text, "%8.1f", htd->pixels);
|
||||
g_snprintf (text, 12, "%8.1f", htd->pixels);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[3]), text);
|
||||
|
||||
/* intensity */
|
||||
if (start == end)
|
||||
sprintf (text, "%d", start);
|
||||
g_snprintf (text, 12, "%d", start);
|
||||
else
|
||||
sprintf (text, "%d..%d", start, end);
|
||||
g_snprintf (text, 12, "%d..%d", start, end);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[4]), text);
|
||||
|
||||
/* count */
|
||||
sprintf (text, "%8.1f", htd->count);
|
||||
g_snprintf (text, 12, "%8.1f", htd->count);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[5]), text);
|
||||
|
||||
/* percentile */
|
||||
sprintf (text, "%2.2f", htd->percentile * 100);
|
||||
g_snprintf (text, 12, "%2.2f", htd->percentile * 100);
|
||||
gtk_label_set_text (GTK_LABEL (htd->info_labels[6]), text);
|
||||
}
|
||||
|
||||
|
@ -151,6 +150,8 @@ histogram_tool_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -224,6 +225,10 @@ tools_new_histogram_tool ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = histogram_tool_button_press;
|
||||
tool->button_release_func = histogram_tool_button_release;
|
||||
tool->motion_func = histogram_tool_motion;
|
||||
|
@ -232,8 +237,6 @@ tools_new_histogram_tool ()
|
|||
tool->cursor_update_func = histogram_tool_cursor_update;
|
||||
tool->control_func = histogram_tool_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -428,7 +431,7 @@ histogram_tool_new_dialog ()
|
|||
|
||||
static void
|
||||
histogram_tool_close_callback (GtkWidget *widget,
|
||||
gpointer client_data)
|
||||
gpointer client_data)
|
||||
{
|
||||
HistogramToolDialog *htd;
|
||||
|
||||
|
|
|
@ -237,6 +237,8 @@ hue_saturation_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -310,6 +312,10 @@ tools_new_hue_saturation ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = hue_saturation_button_press;
|
||||
tool->button_release_func = hue_saturation_button_release;
|
||||
tool->motion_func = hue_saturation_motion;
|
||||
|
@ -317,9 +323,6 @@ tools_new_hue_saturation ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = hue_saturation_cursor_update;
|
||||
tool->control_func = hue_saturation_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -744,6 +747,9 @@ hue_saturation_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -772,9 +778,12 @@ hue_saturation_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (hsd->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
hsd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
hsd->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -1564,7 +1564,10 @@ tools_new_ink (void)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->private = private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = ink_button_press;
|
||||
tool->button_release_func = ink_button_release;
|
||||
|
|
|
@ -431,8 +431,13 @@ tools_new_iscissors ()
|
|||
tool->type = ISCISSORS;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = iscissors_button_press;
|
||||
tool->button_release_func = iscissors_button_release;
|
||||
tool->motion_func = iscissors_motion;
|
||||
|
@ -440,8 +445,6 @@ tools_new_iscissors ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = iscissors_control;
|
||||
tool->auto_snap_to = 0;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
last_tool = tool;
|
||||
|
||||
|
|
|
@ -174,6 +174,8 @@ levels_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -247,6 +249,10 @@ tools_new_levels ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = levels_button_press;
|
||||
tool->button_release_func = levels_button_release;
|
||||
tool->motion_func = levels_motion;
|
||||
|
@ -254,9 +260,6 @@ tools_new_levels ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = levels_cursor_update;
|
||||
tool->control_func = levels_control;
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
@ -971,6 +974,9 @@ levels_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
ld->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -999,10 +1005,12 @@ levels_cancel_callback (GtkWidget *widget,
|
|||
image_map_abort (ld->image_map);
|
||||
active_tool->preserve = FALSE;
|
||||
|
||||
ld->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
ld->image_map = NULL;
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
@ -372,6 +372,10 @@ tools_new_magnify (void)
|
|||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = magnify_button_press;
|
||||
tool->button_release_func = magnify_button_release;
|
||||
tool->motion_func = magnify_motion;
|
||||
|
|
|
@ -447,12 +447,20 @@ tools_new_move_tool ()
|
|||
tool = (Tool *) g_malloc (sizeof (Tool));
|
||||
private = (MoveTool *) g_malloc (sizeof (MoveTool));
|
||||
|
||||
private->layer = NULL;
|
||||
private->guide = NULL;
|
||||
private->disp = NULL;
|
||||
|
||||
tool->type = MOVE;
|
||||
tool->state = INACTIVE;
|
||||
tool->scroll_lock = 0; /* Allow scrolling */
|
||||
tool->auto_snap_to = FALSE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = move_tool_button_press;
|
||||
tool->button_release_func = move_tool_button_release;
|
||||
tool->motion_func = move_tool_motion;
|
||||
|
@ -460,11 +468,6 @@ tools_new_move_tool ()
|
|||
tool->modifier_key_func = standard_modifier_key_func;
|
||||
tool->cursor_update_func = move_tool_cursor_update;
|
||||
tool->control_func = move_tool_control;
|
||||
tool->preserve = TRUE;
|
||||
|
||||
private->layer = NULL;
|
||||
private->guide = NULL;
|
||||
private->disp = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
|
|
@ -529,7 +529,10 @@ paint_core_new (int type)
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = paint_core_button_press;
|
||||
tool->button_release_func = paint_core_button_release;
|
||||
|
|
|
@ -98,6 +98,8 @@ posterize_button_press (Tool *tool,
|
|||
GDisplay *gdisp;
|
||||
|
||||
gdisp = gdisp_ptr;
|
||||
|
||||
tool->gdisp_ptr = gdisp;
|
||||
tool->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
}
|
||||
|
||||
|
@ -178,6 +180,10 @@ tools_new_posterize ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = posterize_button_press;
|
||||
tool->button_release_func = posterize_button_release;
|
||||
tool->motion_func = posterize_motion;
|
||||
|
@ -186,10 +192,6 @@ tools_new_posterize ()
|
|||
tool->cursor_update_func = posterize_cursor_update;
|
||||
tool->control_func = posterize_control;
|
||||
|
||||
tool->preserve = FALSE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
@ -200,7 +202,7 @@ tools_free_posterize (Tool *tool)
|
|||
|
||||
post = (Posterize *) tool->private;
|
||||
|
||||
/* Close the color select dialog */
|
||||
/* Close the posterize dialog */
|
||||
if (posterize_dialog)
|
||||
posterize_cancel_callback (NULL, (gpointer) posterize_dialog);
|
||||
|
||||
|
@ -222,8 +224,11 @@ posterize_initialize (GDisplay *gdisp)
|
|||
else
|
||||
if (!GTK_WIDGET_VISIBLE (posterize_dialog->shell))
|
||||
gtk_widget_show (posterize_dialog->shell);
|
||||
|
||||
posterize_dialog->drawable = gimage_active_drawable (gdisp->gimage);
|
||||
posterize_dialog->image_map = image_map_create (gdisp, posterize_dialog->drawable);
|
||||
posterize_dialog->image_map =
|
||||
image_map_create (gdisp, posterize_dialog->drawable);
|
||||
|
||||
if (posterize_dialog->preview)
|
||||
posterize_preview (posterize_dialog);
|
||||
}
|
||||
|
@ -351,6 +356,9 @@ posterize_ok_callback (GtkWidget *widget,
|
|||
active_tool->preserve = FALSE;
|
||||
|
||||
pd->image_map = NULL;
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static gint
|
||||
|
@ -380,6 +388,9 @@ posterize_cancel_callback (GtkWidget *widget,
|
|||
pd->image_map = NULL;
|
||||
gdisplays_flush ();
|
||||
}
|
||||
|
||||
active_tool->gdisp_ptr = NULL;
|
||||
active_tool->drawable = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -418,4 +429,3 @@ posterize_levels_text_update (GtkWidget *w,
|
|||
posterize_preview (pd);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -154,7 +154,8 @@ rect_select_button_press (Tool *tool,
|
|||
rect_sel->center = FALSE;
|
||||
|
||||
gdk_pointer_grab (gdisp->canvas->window, FALSE,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON_RELEASE_MASK,
|
||||
GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON1_MOTION_MASK |
|
||||
GDK_BUTTON_RELEASE_MASK,
|
||||
NULL, NULL, bevent->time);
|
||||
|
||||
tool->state = ACTIVE;
|
||||
|
@ -447,8 +448,10 @@ rect_select_draw (Tool *tool)
|
|||
|
||||
|
||||
void
|
||||
static selection_tool_update_op_state(RectSelect *rect_sel, int x, int y, int state,
|
||||
GDisplay *gdisp)
|
||||
static selection_tool_update_op_state (RectSelect *rect_sel,
|
||||
int x, int y,
|
||||
int state,
|
||||
GDisplay *gdisp)
|
||||
{
|
||||
if (active_tool->state == ACTIVE)
|
||||
return;
|
||||
|
@ -485,8 +488,8 @@ rect_select_cursor_update (Tool *tool,
|
|||
active = (active_tool->state == ACTIVE);
|
||||
rect_sel = (RectSelect*)tool->private;
|
||||
|
||||
selection_tool_update_op_state(rect_sel, mevent->x, mevent->y,
|
||||
mevent->state, gdisp_ptr);
|
||||
selection_tool_update_op_state (rect_sel, mevent->x, mevent->y,
|
||||
mevent->state, gdisp_ptr);
|
||||
|
||||
switch (rect_sel->op)
|
||||
{
|
||||
|
@ -505,7 +508,7 @@ rect_select_cursor_update (Tool *tool,
|
|||
case SELECTION_MOVE_MASK:
|
||||
gdisplay_install_tool_cursor (gdisp, GDK_DIAMOND_CROSS);
|
||||
break;
|
||||
case SELECTION_MOVE:
|
||||
case SELECTION_MOVE:
|
||||
gdisplay_install_tool_cursor (gdisp, GDK_FLEUR);
|
||||
}
|
||||
}
|
||||
|
@ -572,6 +575,10 @@ tools_new_rect_select ()
|
|||
tool->auto_snap_to = TRUE;
|
||||
tool->private = (void *) private;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
tool->gdisp_ptr = NULL;
|
||||
tool->drawable = NULL;
|
||||
|
||||
tool->button_press_func = rect_select_button_press;
|
||||
tool->button_release_func = rect_select_button_release;
|
||||
tool->motion_func = rect_select_motion;
|
||||
|
@ -580,8 +587,6 @@ tools_new_rect_select ()
|
|||
tool->cursor_update_func = rect_select_cursor_update;
|
||||
tool->control_func = rect_select_control;
|
||||
|
||||
tool->preserve = TRUE;
|
||||
|
||||
return tool;
|
||||
}
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue