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:
Michael Natterer 1999-06-26 11:16:47 +00:00 committed by Michael Natterer
parent a7a466484c
commit c456ba93ba
108 changed files with 1361 additions and 917 deletions

View File

@ -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>

View File

@ -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

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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 ());
}

View File

@ -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;

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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 ());
}

View File

@ -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:

View File

@ -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,

View File

@ -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,

View File

@ -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)
{

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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 ());
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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,

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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 */

View File

@ -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;

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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,

View File

@ -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;
}

View File

@ -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

View File

@ -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

View File

@ -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 */

View File

@ -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;

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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 */

View File

@ -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;
}

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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,

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;

View File

@ -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

View File

@ -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;

View File

@ -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;
}

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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