mirror of https://github.com/GNOME/gimp.git
1691 lines
34 KiB
C
1691 lines
34 KiB
C
![]() |
/* The GIMP -- an image manipulation program
|
||
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
||
|
*
|
||
|
* This program is free software; you can redistribute it and/or modify
|
||
|
* it under the terms of the GNU General Public License as published by
|
||
|
* the Free Software Foundation; either version 2 of the License, or
|
||
|
* (at your option) any later version.
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* 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 <gtk/gtk.h>
|
||
|
|
||
|
#include "apptypes.h"
|
||
|
|
||
|
#include "appenv.h"
|
||
|
#include "context_manager.h"
|
||
|
#include "gdisplay.h"
|
||
|
#include "gimpcontext.h"
|
||
|
#include "gimpdnd.h"
|
||
|
#include "gimpimage.h"
|
||
|
#include "gimpui.h"
|
||
|
#include "session.h"
|
||
|
#include "tool.h"
|
||
|
#include "tool_options.h"
|
||
|
#include "tool_manager.h"
|
||
|
#include "dialog_handler.h"
|
||
|
|
||
|
#include "libgimp/gimpintl.h"
|
||
|
|
||
|
/* Local Data */
|
||
|
|
||
|
enum {
|
||
|
/* ??? SET_DISPLAY, ??? */
|
||
|
BUTTON_PRESSED,
|
||
|
BUTTON_RELEASED,
|
||
|
MOTION,
|
||
|
ARROW_KEYS,
|
||
|
MODIFIER_KEY,
|
||
|
CURSOR_UPDATED,
|
||
|
OPER_UPDATE,
|
||
|
TOOL_CONTROL,
|
||
|
RESERVED1,
|
||
|
RESERVED2,
|
||
|
RESERVED3,
|
||
|
LAST_SIGNAL
|
||
|
};
|
||
|
|
||
|
static guint gimp_tool_signals[LAST_SIGNAL] = { 0 };
|
||
|
|
||
|
static GimpObjectClass *parent_class = NULL;
|
||
|
|
||
|
static void gimp_tool_class_init (GimpToolClass *klass);
|
||
|
static void standard_control_func (GimpTool *,
|
||
|
ToolAction,
|
||
|
GDisplay *);
|
||
|
|
||
|
static gint global_tool_ID = 0;
|
||
|
#warning obsolete crap
|
||
|
#ifdef STONE_AGE
|
||
|
ToolInfo tool_info[] =
|
||
|
{
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Rect Select"),
|
||
|
N_("/Tools/Select Tools/Rect Select"),
|
||
|
"R",
|
||
|
(char **) rect_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Select rectangular regions"),
|
||
|
"tools/rect_select.html",
|
||
|
RECT_SELECT,
|
||
|
tools_new_rect_select,
|
||
|
tools_free_rect_select,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
rect_select_small_bits, rect_select_small_mask_bits,
|
||
|
rect_select_small_width, rect_select_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Ellipse Select"),
|
||
|
N_("/Tools/Select Tools/Ellipse Select"),
|
||
|
"E",
|
||
|
(char **) circ_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Select elliptical regions"),
|
||
|
"tools/ellipse_select.html",
|
||
|
ELLIPSE_SELECT,
|
||
|
tools_new_ellipse_select,
|
||
|
tools_free_ellipse_select,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
ellipse_select_small_bits, ellipse_select_small_mask_bits,
|
||
|
ellipse_select_small_width, ellipse_select_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Free Select"),
|
||
|
N_("/Tools/Select Tools/Free Select"),
|
||
|
"F",
|
||
|
(char **) free_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Select hand-drawn regions"),
|
||
|
"tools/free_select.html",
|
||
|
FREE_SELECT,
|
||
|
tools_new_free_select,
|
||
|
tools_free_free_select,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
free_select_small_bits, free_select_small_mask_bits,
|
||
|
free_select_small_width, free_select_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Fuzzy Select"),
|
||
|
N_("/Tools/Select Tools/Fuzzy Select"),
|
||
|
"Z",
|
||
|
(char **) fuzzy_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Select contiguous regions"),
|
||
|
"tools/fuzzy_select.html",
|
||
|
FUZZY_SELECT,
|
||
|
tools_new_fuzzy_select,
|
||
|
tools_free_fuzzy_select,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
fuzzy_select_small_bits, fuzzy_select_small_mask_bits,
|
||
|
fuzzy_select_small_width, fuzzy_select_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Bezier Select"),
|
||
|
N_("/Tools/Select Tools/Bezier Select"),
|
||
|
"B",
|
||
|
(char **) bezier_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Select regions using Bezier curves"),
|
||
|
"tools/bezier_select.html",
|
||
|
BEZIER_SELECT,
|
||
|
tools_new_bezier_select,
|
||
|
tools_free_bezier_select,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
bezier_select_small_bits, bezier_select_small_mask_bits,
|
||
|
bezier_select_small_width, bezier_select_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Intelligent Scissors"),
|
||
|
N_("/Tools/Select Tools/Intelligent Scissors"),
|
||
|
"I",
|
||
|
(char **) iscissors_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Select shapes from image"),
|
||
|
"tools/intelligent_scissors.html",
|
||
|
ISCISSORS,
|
||
|
tools_new_iscissors,
|
||
|
tools_free_iscissors,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
scissors_small_bits, scissors_small_mask_bits,
|
||
|
scissors_small_width, scissors_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Move"),
|
||
|
N_("/Tools/Transform Tools/Move"),
|
||
|
"M",
|
||
|
(char **) move_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Move layers & selections"),
|
||
|
"tools/move.html",
|
||
|
MOVE,
|
||
|
tools_new_move_tool,
|
||
|
tools_free_move_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
move_small_bits, move_small_mask_bits,
|
||
|
move_small_width, move_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Magnify"),
|
||
|
N_("/Tools/Transform Tools/Magnify"),
|
||
|
"<shift>M",
|
||
|
(char **) magnify_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Zoom in & out"),
|
||
|
"tools/magnify.html",
|
||
|
MAGNIFY,
|
||
|
tools_new_magnify,
|
||
|
tools_free_magnify,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
zoom_small_bits, zoom_small_mask_bits,
|
||
|
zoom_small_width, zoom_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Crop & Resize"),
|
||
|
N_("/Tools/Transform Tools/Crop & Resize"),
|
||
|
"<shift>C",
|
||
|
(char **) crop_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Crop or resize the image"),
|
||
|
"tools/crop.html",
|
||
|
CROP,
|
||
|
tools_new_crop,
|
||
|
tools_free_crop,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
crop_small_bits, crop_small_mask_bits,
|
||
|
crop_small_width, crop_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
resize_small_bits, resize_small_mask_bits,
|
||
|
resize_small_width, resize_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Transform"),
|
||
|
N_("/Tools/Transform Tools/Transform"),
|
||
|
"<shift>T",
|
||
|
(char **) scale_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Rotation, scaling, shearing, perspective."),
|
||
|
"tools/transform.html",
|
||
|
ROTATE,
|
||
|
tools_new_transform_tool,
|
||
|
tools_free_transform_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
rotate_small_bits, rotate_small_mask_bits,
|
||
|
rotate_small_width, rotate_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
}, /* rotate */
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Transform"),
|
||
|
NULL,
|
||
|
NULL,
|
||
|
(char **) scale_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Rotation, scaling, shearing, perspective."),
|
||
|
"tools/transform.html",
|
||
|
SCALE,
|
||
|
tools_new_transform_tool,
|
||
|
tools_free_transform_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
resize_small_bits, resize_small_mask_bits,
|
||
|
resize_small_width, resize_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
}, /* scale */
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Transform"),
|
||
|
NULL,
|
||
|
NULL,
|
||
|
(char **) scale_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Rotation, scaling, shearing, perspective."),
|
||
|
"tools/transform.html",
|
||
|
SHEAR,
|
||
|
tools_new_transform_tool,
|
||
|
tools_free_transform_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
shear_small_bits, shear_small_mask_bits,
|
||
|
shear_small_width, shear_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
}, /* shear */
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Transform"),
|
||
|
NULL,
|
||
|
NULL,
|
||
|
(char **) scale_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Rotation, scaling, shearing, perspective."),
|
||
|
"tools/transform.html",
|
||
|
PERSPECTIVE,
|
||
|
tools_new_transform_tool,
|
||
|
tools_free_transform_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
perspective_small_bits, perspective_small_mask_bits,
|
||
|
perspective_small_width, perspective_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
}, /* perspective */
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Flip"),
|
||
|
N_("/Tools/Transform Tools/Flip"),
|
||
|
"<shift>F",
|
||
|
(char **) flip_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Flip the layer or selection"),
|
||
|
"tools/flip.html",
|
||
|
FLIP,
|
||
|
tools_new_flip,
|
||
|
tools_free_flip_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
flip_horizontal_small_bits, flip_horizontal_small_mask_bits,
|
||
|
flip_horizontal_small_width, flip_horizontal_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
flip_vertical_small_bits, flip_vertical_small_mask_bits,
|
||
|
flip_vertical_small_width, flip_vertical_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Text"),
|
||
|
N_("/Tools/Text"),
|
||
|
"T",
|
||
|
(char **) text_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Add text to the image"),
|
||
|
"tools/text.html",
|
||
|
TEXT,
|
||
|
tools_new_text,
|
||
|
tools_free_text,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
text_small_bits, text_small_mask_bits,
|
||
|
text_small_width, text_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Bucket Fill"),
|
||
|
N_("/Tools/Paint Tools/Bucket Fill"),
|
||
|
"<shift>B",
|
||
|
(char **) fill_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Fill with a color or pattern"),
|
||
|
"tools/bucket_fill.html",
|
||
|
BUCKET_FILL,
|
||
|
tools_new_bucket_fill,
|
||
|
tools_free_bucket_fill,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
bucket_fill_small_bits, bucket_fill_small_mask_bits,
|
||
|
bucket_fill_small_width, bucket_fill_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Blend"),
|
||
|
N_("/Tools/Paint Tools/Blend"),
|
||
|
"L",
|
||
|
(char **) gradient_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Fill with a color gradient"),
|
||
|
"tools/blend.html",
|
||
|
BLEND,
|
||
|
tools_new_blend,
|
||
|
tools_free_blend,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
blend_small_bits, blend_small_mask_bits,
|
||
|
blend_small_width, blend_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Pencil"),
|
||
|
N_("/Tools/Paint Tools/Pencil"),
|
||
|
"<shift>P",
|
||
|
(char **) pencil_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Draw sharp pencil strokes"),
|
||
|
"tools/pencil.html",
|
||
|
PENCIL,
|
||
|
tools_new_pencil,
|
||
|
tools_free_pencil,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
pencil_small_bits, pencil_small_mask_bits,
|
||
|
pencil_small_width, pencil_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Paintbrush"),
|
||
|
N_("/Tools/Paint Tools/Paintbrush"),
|
||
|
"P",
|
||
|
(char **) paint_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Paint fuzzy brush strokes"),
|
||
|
"tools/paintbrush.html",
|
||
|
PAINTBRUSH,
|
||
|
tools_new_paintbrush,
|
||
|
tools_free_paintbrush,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
paintbrush_small_bits, paintbrush_small_mask_bits,
|
||
|
paintbrush_small_width, paintbrush_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Airbrush"),
|
||
|
N_("/Tools/Paint Tools/Airbrush"),
|
||
|
"A",
|
||
|
(char **) airbrush_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Airbrush with variable pressure"),
|
||
|
"tools/airbrush.html",
|
||
|
AIRBRUSH,
|
||
|
tools_new_airbrush,
|
||
|
tools_free_airbrush,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
airbrush_small_bits, airbrush_small_mask_bits,
|
||
|
airbrush_small_width, airbrush_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Ink"),
|
||
|
N_("/Tools/Paint Tools/Ink"),
|
||
|
"K",
|
||
|
(char **) ink_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Draw in ink"),
|
||
|
"tools/ink.html",
|
||
|
INK,
|
||
|
tools_new_ink,
|
||
|
tools_free_ink,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
ink_small_bits, ink_small_mask_bits,
|
||
|
ink_small_width, ink_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Clone"),
|
||
|
N_("/Tools/Paint Tools/Clone"),
|
||
|
"C",
|
||
|
(char **) clone_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Paint using patterns or image regions"),
|
||
|
"tools/clone.html",
|
||
|
CLONE,
|
||
|
tools_new_clone,
|
||
|
tools_free_clone,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
clone_small_bits, clone_small_mask_bits,
|
||
|
clone_small_width, clone_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Eraser"),
|
||
|
N_("/Tools/Paint Tools/Eraser"),
|
||
|
"<shift>E",
|
||
|
(char **) erase_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Erase to background or transparency"),
|
||
|
"tools/eraser.html",
|
||
|
ERASER,
|
||
|
tools_new_eraser,
|
||
|
tools_free_eraser,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
eraser_small_bits, eraser_small_mask_bits,
|
||
|
eraser_small_width, eraser_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Smudge"),
|
||
|
N_("/Tools/Paint Tools/Smudge"),
|
||
|
"<shift>S",
|
||
|
(char **) smudge_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Smudge"),
|
||
|
"tools/smudge.html",
|
||
|
SMUDGE,
|
||
|
tools_new_smudge,
|
||
|
tools_free_smudge,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
smudge_small_bits, smudge_small_mask_bits,
|
||
|
smudge_small_width, smudge_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Convolve"),
|
||
|
N_("/Tools/Paint Tools/Convolve"),
|
||
|
"V",
|
||
|
(char **) blur_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Blur or sharpen"),
|
||
|
"tools/convolve.html",
|
||
|
CONVOLVE,
|
||
|
tools_new_convolve,
|
||
|
tools_free_convolve,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
blur_small_bits, blur_small_mask_bits,
|
||
|
blur_small_width, blur_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Dodge or Burn"),
|
||
|
N_("/Tools/Paint Tools/DodgeBurn"),
|
||
|
"<shift>D",
|
||
|
(char **) dodge_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Dodge or Burn"),
|
||
|
"tools/dodgeburn.html",
|
||
|
DODGEBURN,
|
||
|
tools_new_dodgeburn,
|
||
|
tools_free_dodgeburn,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
dodge_small_bits, dodge_small_mask_bits,
|
||
|
dodge_small_width, dodge_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
burn_small_bits, burn_small_mask_bits,
|
||
|
burn_small_width, burn_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/*
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Xinput Airbrush"),
|
||
|
N_("/Tools/Paint Tools/XinputAirbrush"),
|
||
|
"<shift>A",
|
||
|
(char **) xinput_airbrush_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Natural Airbrush"),
|
||
|
"tools/xinput_airbrush.html",
|
||
|
XINPUT_AIRBRUSH,
|
||
|
tools_new_xinput_airbrush,
|
||
|
tools_free_xinput_airbrush,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
*/
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Measure"),
|
||
|
N_("/Tools/Measure"),
|
||
|
"",
|
||
|
(char **) measure_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Measure distances and angles"),
|
||
|
"tools/measure.html",
|
||
|
MEASURE,
|
||
|
tools_new_measure_tool,
|
||
|
tools_free_measure_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
measure_small_bits, measure_small_mask_bits,
|
||
|
measure_small_width, measure_small_height,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/*
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Path"),
|
||
|
N_("/Tools/Path"),
|
||
|
"",
|
||
|
(char **) path_tool_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Manipulate paths"),
|
||
|
"tools/path.html",
|
||
|
PATH_TOOL,
|
||
|
tools_new_path_tool,
|
||
|
tools_free_path_tool,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
*/
|
||
|
|
||
|
/* Non-toolbox tools */
|
||
|
{
|
||
|
NULL,
|
||
|
N_("By Color Select"),
|
||
|
N_("/Select/By Color..."),
|
||
|
NULL,
|
||
|
(char **) by_color_select_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Select regions by color"),
|
||
|
"tools/by_color_select.html",
|
||
|
BY_COLOR_SELECT,
|
||
|
tools_new_by_color_select,
|
||
|
tools_free_by_color_select,
|
||
|
by_color_select_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Color Balance"),
|
||
|
N_("/Image/Colors/Color Balance..."),
|
||
|
NULL,
|
||
|
(char **) adjustment_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Adjust color balance"),
|
||
|
"tools/color_balance.html",
|
||
|
COLOR_BALANCE,
|
||
|
tools_new_color_balance,
|
||
|
tools_free_color_balance,
|
||
|
color_balance_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Brightness-Contrast"),
|
||
|
N_("/Image/Colors/Brightness-Contrast..."),
|
||
|
NULL,
|
||
|
(char **) adjustment_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Adjust brightness and contrast"),
|
||
|
"tools/brightness_contrast.html",
|
||
|
BRIGHTNESS_CONTRAST,
|
||
|
tools_new_brightness_contrast,
|
||
|
tools_free_brightness_contrast,
|
||
|
brightness_contrast_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Hue-Saturation"),
|
||
|
N_("/Image/Colors/Hue-Saturation..."),
|
||
|
NULL,
|
||
|
(char **) adjustment_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Adjust hue and saturation"),
|
||
|
"tools/hue_saturation.html",
|
||
|
HUE_SATURATION,
|
||
|
tools_new_hue_saturation,
|
||
|
tools_free_hue_saturation,
|
||
|
hue_saturation_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Posterize"),
|
||
|
N_("/Image/Colors/Posterize..."),
|
||
|
NULL,
|
||
|
(char **) adjustment_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Reduce image to a fixed numer of colors"),
|
||
|
"tools/posterize.html",
|
||
|
POSTERIZE,
|
||
|
tools_new_posterize,
|
||
|
tools_free_posterize,
|
||
|
posterize_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Threshold"),
|
||
|
N_("/Image/Colors/Threshold..."),
|
||
|
NULL,
|
||
|
(char **) levels_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Reduce image to two colors using a threshold"),
|
||
|
"tools/threshold.html",
|
||
|
THRESHOLD,
|
||
|
tools_new_threshold,
|
||
|
tools_free_threshold,
|
||
|
threshold_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Curves"),
|
||
|
N_("/Image/Colors/Curves..."),
|
||
|
NULL,
|
||
|
(char **) curves_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Adjust color curves"),
|
||
|
"tools/curves.html",
|
||
|
CURVES,
|
||
|
tools_new_curves,
|
||
|
tools_free_curves,
|
||
|
curves_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Levels"),
|
||
|
N_("/Image/Colors/Levels..."),
|
||
|
NULL,
|
||
|
(char **) levels_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("Adjust color levels"),
|
||
|
"tools/levels.html",
|
||
|
LEVELS,
|
||
|
tools_new_levels,
|
||
|
tools_free_levels,
|
||
|
levels_initialize,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
},
|
||
|
|
||
|
{
|
||
|
NULL,
|
||
|
N_("Histogram"),
|
||
|
N_("/Image/Histogram..."),
|
||
|
NULL,
|
||
|
(char **) histogram_bits,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
N_("View image histogram"),
|
||
|
"tools/histogram.html",
|
||
|
HISTOGRAM,
|
||
|
tools_new_histogram_tool,
|
||
|
tools_free_histogram_tool,
|
||
|
histogram_tool_initialize ,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
},
|
||
|
{
|
||
|
NULL, NULL,
|
||
|
0, 0,
|
||
|
0, 0, NULL, NULL, NULL
|
||
|
}
|
||
|
}
|
||
|
};
|
||
|
|
||
|
gint num_tools = sizeof (tool_info) / sizeof (tool_info[0]);
|
||
|
#endif
|
||
|
/* dnd stuff */
|
||
|
static GtkTargetEntry tool_target_table[] =
|
||
|
{
|
||
|
GIMP_TARGET_TOOL
|
||
|
};
|
||
|
static guint n_tool_targets = (sizeof (tool_target_table) /
|
||
|
sizeof (tool_target_table[0]));
|
||
|
|
||
|
|
||
|
/* Local function declarations */
|
||
|
void gimp_tool_show_options (GimpTool *);
|
||
|
|
||
|
|
||
|
/* Function definitions */
|
||
|
|
||
|
GtkType
|
||
|
gimp_tool_get_type (void)
|
||
|
{
|
||
|
static GtkType tool_type = 0;
|
||
|
|
||
|
if (! tool_type)
|
||
|
{
|
||
|
GtkTypeInfo tool_info =
|
||
|
{
|
||
|
"GimpTool",
|
||
|
sizeof (GimpTool),
|
||
|
sizeof (GimpToolClass),
|
||
|
(GtkClassInitFunc) gimp_tool_class_init,
|
||
|
(GtkObjectInitFunc) gimp_tool_initialize,
|
||
|
/* reserved_1 */ NULL,
|
||
|
/* reserved_2 */ NULL,
|
||
|
(GtkClassInitFunc) NULL,
|
||
|
};
|
||
|
|
||
|
tool_type = gtk_type_unique (GIMP_TYPE_OBJECT, &tool_info);
|
||
|
}
|
||
|
|
||
|
return tool_type;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void
|
||
|
gimp_tool_old_initialize (GimpTool *tool,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
/* Tools which have an init function have dialogs and
|
||
|
* cannot be initialized without a display
|
||
|
*/
|
||
|
/*if (tool_info[(gint) tool_type].init_func && !gdisp)
|
||
|
tool_type = RECT_SELECT;*/
|
||
|
|
||
|
/* Force the emission of the "tool_changed" signal
|
||
|
*/
|
||
|
/*if (active_tool->type == tool_type)
|
||
|
{
|
||
|
gimp_context_tool_changed (gimp_context_get_user ());
|
||
|
}
|
||
|
else*/
|
||
|
{
|
||
|
gimp_context_set_tool (gimp_context_get_user (), tool);
|
||
|
}
|
||
|
|
||
|
/*if (tool_info[(gint) tool_type].init_func)
|
||
|
{
|
||
|
(* tool_info[(gint) tool_type].init_func) (gdisp);*/
|
||
|
|
||
|
active_tool->drawable = gimp_image_active_drawable (gdisp->gimage);
|
||
|
/* } */
|
||
|
/* don't set tool->gdisp here! (see commands.c) */
|
||
|
}
|
||
|
|
||
|
|
||
|
/* standard member functions */
|
||
|
|
||
|
static void
|
||
|
standard_button_press_func (GimpTool *tool,
|
||
|
GdkEventButton *bevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
tool->gdisp = gdisp;
|
||
|
tool->drawable = gimp_image_active_drawable (gdisp->gimage);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
standard_button_release_func (GimpTool *tool,
|
||
|
GdkEventButton *bevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
standard_motion_func (GimpTool *tool,
|
||
|
GdkEventMotion *mevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
standard_arrow_keys_func (GimpTool *tool,
|
||
|
GdkEventKey *kevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
standard_modifier_key_func (GimpTool *tool,
|
||
|
GdkEventKey *kevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
standard_cursor_update_func (GimpTool *tool,
|
||
|
GdkEventMotion *mevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gdisplay_install_tool_cursor (gdisp, GDK_TOP_LEFT_ARROW,
|
||
|
TOOL_TYPE_NONE,
|
||
|
CURSOR_MODIFIER_NONE,
|
||
|
FALSE);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
standard_operator_update_func (GimpTool *tool,
|
||
|
GdkEventMotion *mevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
}
|
||
|
|
||
|
|
||
|
/* Create a default tool object
|
||
|
*/
|
||
|
|
||
|
GimpTool *
|
||
|
gimp_tool_new (void)
|
||
|
{
|
||
|
GimpTool *tool;
|
||
|
|
||
|
tool = gtk_type_new (GIMP_TYPE_TOOL);
|
||
|
|
||
|
return tool;
|
||
|
}
|
||
|
|
||
|
|
||
|
/* set tool object defaults */
|
||
|
void gimp_tool_initialize (GimpTool *tool)
|
||
|
{
|
||
|
tool->state = INACTIVE;
|
||
|
tool->paused_count = 0;
|
||
|
tool->scroll_lock = FALSE; /* Allow scrolling */
|
||
|
tool->auto_snap_to = TRUE; /* Snap to guides */
|
||
|
|
||
|
tool->preserve = TRUE; /* Preserve tool across drawable changes */
|
||
|
tool->gdisp = NULL;
|
||
|
tool->drawable = NULL;
|
||
|
|
||
|
tool->toggled = FALSE;
|
||
|
|
||
|
}
|
||
|
|
||
|
static void gimp_tool_class_init (GimpToolClass *klass)
|
||
|
{
|
||
|
GtkObjectClass *object_class = (GtkObjectClass *) klass;
|
||
|
|
||
|
parent_class = gtk_type_class (GIMP_TYPE_OBJECT);
|
||
|
|
||
|
/* Welcome to signal registration syntax hell.
|
||
|
Abandon hope, all ye developers that enter here. */
|
||
|
|
||
|
gimp_tool_signals[BUTTON_PRESSED]=
|
||
|
gtk_signal_new ("button_pressed",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
button_press_func),
|
||
|
gtk_marshal_NONE__POINTER_POINTER, /* type that five times fast */
|
||
|
GTK_TYPE_NONE, /* now it's time for the exercise in redundancy exercise */
|
||
|
2, GTK_TYPE_POINTER,
|
||
|
GTK_TYPE_POINTER); /* now do I get a cookie? */
|
||
|
|
||
|
gimp_tool_signals[BUTTON_RELEASED]=
|
||
|
gtk_signal_new ("button_released",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
button_release_func),
|
||
|
gtk_marshal_NONE__POINTER_POINTER,
|
||
|
GTK_TYPE_NONE,
|
||
|
2, GTK_TYPE_POINTER,
|
||
|
GTK_TYPE_POINTER);
|
||
|
|
||
|
|
||
|
gimp_tool_signals[MOTION]=
|
||
|
gtk_signal_new ("motion",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
motion_func),
|
||
|
gtk_marshal_NONE__POINTER_POINTER,
|
||
|
GTK_TYPE_NONE,
|
||
|
2, GTK_TYPE_POINTER,
|
||
|
GTK_TYPE_POINTER);
|
||
|
|
||
|
|
||
|
gimp_tool_signals[ARROW_KEYS]=
|
||
|
|
||
|
gtk_signal_new ("arrow_keys",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
arrow_keys_func),
|
||
|
gtk_marshal_NONE__POINTER_POINTER,
|
||
|
GTK_TYPE_NONE,
|
||
|
2, GTK_TYPE_POINTER,
|
||
|
GTK_TYPE_POINTER);
|
||
|
|
||
|
gimp_tool_signals[MODIFIER_KEY]=
|
||
|
gtk_signal_new ("modifier_key",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
modifier_key_func),
|
||
|
gtk_marshal_NONE__POINTER_POINTER,
|
||
|
GTK_TYPE_NONE,
|
||
|
2, GTK_TYPE_POINTER,
|
||
|
GTK_TYPE_POINTER);
|
||
|
|
||
|
gimp_tool_signals[CURSOR_UPDATED]=
|
||
|
gtk_signal_new ("cursor_update",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
cursor_update_func),
|
||
|
gtk_marshal_NONE__POINTER_POINTER,
|
||
|
GTK_TYPE_NONE,
|
||
|
2, GTK_TYPE_POINTER,
|
||
|
GTK_TYPE_POINTER);
|
||
|
|
||
|
|
||
|
|
||
|
gimp_tool_signals[OPER_UPDATE]=
|
||
|
gtk_signal_new ("oper_update",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
oper_update_func),
|
||
|
gtk_marshal_NONE__POINTER_POINTER,
|
||
|
GTK_TYPE_NONE,
|
||
|
2, GTK_TYPE_POINTER,
|
||
|
GTK_TYPE_POINTER);
|
||
|
|
||
|
gimp_tool_signals[TOOL_CONTROL]=
|
||
|
gtk_signal_new ("tool_control",
|
||
|
GTK_RUN_FIRST,
|
||
|
object_class->type,
|
||
|
GTK_SIGNAL_OFFSET (GimpToolClass,
|
||
|
control_func),
|
||
|
gtk_marshal_NONE__INT_POINTER,
|
||
|
GTK_TYPE_NONE,
|
||
|
2, GTK_TYPE_INT,
|
||
|
GTK_TYPE_POINTER);
|
||
|
|
||
|
gtk_object_class_add_signals (object_class, gimp_tool_signals, LAST_SIGNAL);
|
||
|
|
||
|
|
||
|
klass->button_press_func = standard_button_press_func;
|
||
|
klass->button_release_func = standard_button_release_func;
|
||
|
klass->motion_func = standard_motion_func;
|
||
|
klass->arrow_keys_func = standard_arrow_keys_func;
|
||
|
klass->modifier_key_func = standard_modifier_key_func;
|
||
|
klass->cursor_update_func = standard_cursor_update_func;
|
||
|
klass->oper_update_func = standard_operator_update_func;
|
||
|
klass->control_func = standard_control_func;
|
||
|
}
|
||
|
|
||
|
|
||
|
void
|
||
|
gimp_tool_help_func (const gchar *help_data)
|
||
|
{
|
||
|
gimp_standard_help_func (tool_manager_active_get_help_data());
|
||
|
}
|
||
|
|
||
|
gchar *
|
||
|
gimp_tool_get_PDB_string (GimpTool *tool)
|
||
|
{
|
||
|
GtkObject *object;
|
||
|
GimpToolClass *klass;
|
||
|
|
||
|
g_return_val_if_fail(tool, "gimp_core_nothing");
|
||
|
|
||
|
object = GTK_OBJECT (tool);
|
||
|
|
||
|
klass = GIMP_TOOL_CLASS (object->klass);
|
||
|
|
||
|
return klass->pdb_string;
|
||
|
}
|
||
|
|
||
|
GdkPixmap *
|
||
|
gimp_tool_get_pixmap (GimpToolClass *type)
|
||
|
{
|
||
|
g_return_val_if_fail(type, NULL);
|
||
|
return (type->icon_pixmap);
|
||
|
}
|
||
|
|
||
|
GdkPixmap *
|
||
|
gimp_tool_get_mask (GimpToolClass *type)
|
||
|
{
|
||
|
g_return_val_if_fail(type, NULL);
|
||
|
return (type->icon_mask);
|
||
|
}
|
||
|
|
||
|
gchar *
|
||
|
gimp_tool_get_help_data (GimpTool *tool)
|
||
|
{
|
||
|
GtkObject *object;
|
||
|
GimpToolClass *klass;
|
||
|
|
||
|
g_return_val_if_fail(tool, NULL);
|
||
|
|
||
|
object = GTK_OBJECT (tool);
|
||
|
|
||
|
klass = GIMP_TOOL_CLASS (object->klass);
|
||
|
|
||
|
return klass->help_data;
|
||
|
}
|
||
|
|
||
|
|
||
|
void gimp_tool_control(GimpTool *tool,
|
||
|
ToolAction action,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[TOOL_CONTROL], action, gdisp);
|
||
|
}
|
||
|
|
||
|
|
||
|
static void
|
||
|
standard_control_func (GimpTool *tool,
|
||
|
ToolAction action,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
if (tool)
|
||
|
{
|
||
|
if (tool->gdisp == gdisp)
|
||
|
{
|
||
|
switch (action)
|
||
|
{
|
||
|
case PAUSE :
|
||
|
if (tool->state == ACTIVE)
|
||
|
{
|
||
|
if (! tool->paused_count)
|
||
|
{
|
||
|
tool->state = PAUSED;
|
||
|
}
|
||
|
}
|
||
|
tool->paused_count++;
|
||
|
break;
|
||
|
|
||
|
case RESUME :
|
||
|
tool->paused_count--;
|
||
|
if (tool->state == PAUSED)
|
||
|
{
|
||
|
if (! tool->paused_count)
|
||
|
{
|
||
|
tool->state = ACTIVE;
|
||
|
}
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
case HALT :
|
||
|
tool->state = INACTIVE;
|
||
|
break;
|
||
|
|
||
|
case DESTROY :
|
||
|
gtk_object_unref (GTK_OBJECT(tool));
|
||
|
tool_options_hide_shell();
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else if (action == HALT)
|
||
|
{
|
||
|
tool->state = INACTIVE;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void gimp_tool_emit_button_press (GimpTool *tool,
|
||
|
GdkEventButton *bevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[BUTTON_PRESSED], bevent, gdisp);
|
||
|
|
||
|
}
|
||
|
|
||
|
void gimp_tool_emit_button_release (GimpTool *tool,
|
||
|
GdkEventButton *bevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[BUTTON_RELEASED], bevent, gdisp);
|
||
|
}
|
||
|
|
||
|
void gimp_tool_emit_motion (GimpTool *tool,
|
||
|
GdkEventMotion *mevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[MOTION], mevent, gdisp);
|
||
|
}
|
||
|
|
||
|
void gimp_tool_emit_arrow_keys (GimpTool *tool,
|
||
|
GdkEventKey *kevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[ARROW_KEYS], kevent, gdisp);
|
||
|
|
||
|
}
|
||
|
void gimp_tool_emit_modifier_key (GimpTool *tool,
|
||
|
GdkEventKey *kevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[MODIFIER_KEY], kevent, gdisp);
|
||
|
}
|
||
|
void gimp_tool_emit_cursor_update (GimpTool *tool,
|
||
|
GdkEventMotion *mevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[CURSOR_UPDATED], mevent, gdisp);
|
||
|
}
|
||
|
|
||
|
void gimp_tool_emit_oper_update (GimpTool *tool,
|
||
|
GdkEventMotion *mevent,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[OPER_UPDATE], mevent, gdisp);
|
||
|
}
|
||
|
|
||
|
void gimp_tool_emit_control (GimpTool *tool,
|
||
|
ToolAction action,
|
||
|
GDisplay *gdisp)
|
||
|
{
|
||
|
gtk_signal_emit (GTK_OBJECT (tool), gimp_tool_signals[TOOL_CONTROL], action, gdisp);
|
||
|
}
|
||
|
|
||
|
#define STUB(x) void * x (void){g_message ("stub function %s called",#x); return NULL;}
|
||
|
|
||
|
#define QUIET_STUB(x) void * x (void){return NULL;}
|
||
|
|
||
|
STUB(curves_free)
|
||
|
STUB(hue_saturation_free)
|
||
|
STUB(levels_free)
|
||
|
STUB(tool_options_dialog_free)
|
||
|
STUB(paint_mode_menu_new)
|
||
|
STUB(curves_calculate_curve)
|
||
|
STUB(curves_lut_func)
|
||
|
STUB(color_balance_create_lookup_tables)
|
||
|
STUB(color_balance)
|
||
|
STUB(hue_saturation_calculate_transfers)
|
||
|
STUB(hue_saturation)
|
||
|
STUB(threshold_2)
|
||
|
STUB(tool_options_dialog_show)
|
||
|
STUB(paint_options_set_global)
|
||
|
STUB(color_balance_dialog_hide)
|
||
|
STUB(hue_saturation_dialog_hide)
|
||
|
STUB(brightness_contrast_dialog_hide)
|
||
|
STUB(threshold_dialog_hide)
|
||
|
STUB(levels_dialog_hide)
|
||
|
STUB(curves_dialog_hide)
|
||
|
STUB(posterize_dialog_hide)
|
||
|
STUB(move_tool_start_hguide)
|
||
|
STUB(move_tool_start_vguide)
|
||
|
STUB(bucket_fill_region)
|
||
|
STUB(pathpoints_copy)
|
||
|
STUB(pathpoints_free)
|
||
|
STUB(bezier_stroke)
|
||
|
STUB(bezier_distance_along)
|
||
|
STUB(bezier_select_free)
|
||
|
STUB(paths_dialog_destroy_cb)
|
||
|
STUB(bezier_select_reset)
|
||
|
STUB(bezier_add_point)
|
||
|
STUB(path_set_path)
|
||
|
STUB(path_set_path_points)
|
||
|
STUB(path_delete_path)
|
||
|
STUB(text_render)
|
||
|
STUB(text_get_extents)
|
||
|
STUB(tool_options_hide_shell)
|
||
|
STUB(gimp_tool_hide_options)
|
||
|
STUB(tool_options_show)
|
||
|
STUB(by_color_select_initialize_by_image)
|
||
|
STUB(path_transform_start_undo)
|
||
|
STUB(path_transform_do_undo)
|
||
|
STUB(path_transform_free_undo)
|
||
|
STUB(undo_pop_paint)
|
||
|
STUB(histogram_tool_histogram_range)
|
||
|
STUB(paths_dialog_create)
|
||
|
STUB(paths_dialog_flush)
|
||
|
STUB(paths_dialog_update)
|
||
|
STUB(paths_dialog_new_path_callback)
|
||
|
STUB(paths_dialog_dup_path_callback)
|
||
|
STUB(paths_dialog_path_to_sel_callback)
|
||
|
STUB(paths_dialog_sel_to_path_callback)
|
||
|
STUB(paths_dialog_stroke_path_callback)
|
||
|
STUB(paths_dialog_delete_path_callback)
|
||
|
STUB(paths_dialog_copy_path_callback)
|
||
|
STUB(paths_dialog_paste_path_callback)
|
||
|
STUB(paths_dialog_import_path_callback)
|
||
|
STUB(paths_dialog_export_path_callback)
|
||
|
STUB(paths_dialog_edit_path_attributes_callback)
|
||
|
STUB(tool_options_dialog_new)
|
||
|
STUB(tools_register)
|
||
|
QUIET_STUB(GIMP_IS_FUZZY_SELECT)
|
||
|
QUIET_STUB(GIMP_IS_MOVE_TOOL)
|
||
|
STUB(crop_image)
|
||
|
STUB(dodgeburn_non_gui)
|
||
|
STUB(dodgeburn_non_gui_default)
|
||
|
STUB(ellipse_select)
|
||
|
STUB(eraser_non_gui)
|
||
|
STUB(eraser_non_gui_default)
|
||
|
STUB(transform_core_cut)
|
||
|
STUB(flip_tool_flip)
|
||
|
STUB(transform_core_paste)
|
||
|
STUB(free_select)
|
||
|
STUB(find_contiguous_region)
|
||
|
STUB(fuzzy_mask)
|
||
|
STUB(fuzzy_select)
|
||
|
STUB(paintbrush_non_gui)
|
||
|
STUB(paintbrush_non_gui_default)
|
||
|
STUB(pencil_non_gui)
|
||
|
STUB(perspective_find_transform)
|
||
|
STUB(perspective_tool_perspective)
|
||
|
STUB(rect_select)
|
||
|
STUB(rotate_tool_rotate)
|
||
|
STUB(scale_tool_scale)
|
||
|
STUB(shear_tool_shear)
|
||
|
STUB(smudge_non_gui)
|
||
|
STUB(smudge_non_gui_default)
|
||
|
STUB(transform_core_do)
|
||
|
STUB(airbrush_non_gui)
|
||
|
STUB(airbrush_non_gui_default)
|
||
|
STUB(blend)
|
||
|
STUB(bucket_fill)
|
||
|
STUB(by_color_select)
|
||
|
STUB(clone_non_gui)
|
||
|
STUB(clone_non_gui_default)
|
||
|
STUB(convolve_non_gui)
|
||
|
STUB(convolve_non_gui_default)
|