gimp/app/tools/gimpbrushtool.h
Michael Natterer 99e78c7074 General cleanup of the selection tools and their PDB wrappers:
2001-10-22  Michael Natterer  <mitch@gimp.org>

	General cleanup of the selection tools and their PDB wrappers:

	* app/core/Makefile.am
	* app/core/gimpimage-contiguous-region.[ch]
	* app/core/gimpimage-mask-select.[ch]: new files providing a clean,
	uniform API for the selection functionalities. Changed order of
	parameters to be consistent, removed code duplication.

	The region returned by the "by_color" function is not really
	contiguous but the API is so similar to "by_seed" and it's used
	in the same context so it's fair enough to put them together.

	Also, I'm not sure if the two is_pixel_sufficiently_different()
	I've optimized away were meant to do *exactly* the same. Added
	a comment there to remember the former difference.

	* app/core/gimpchannel.[ch] (gimp_channel_feather): removed the
	"output" channel parameter and made it optionally push an undo
	(like the other channel operations do).

	* app/core/gimpimage-mask.c: call gimp_channel_feather() with
	"push_undo == TRUE", removed some useless comments.

	* app/tools/gimpbycolorselecttool.[ch]
	* app/tools/gimpellipseselecttool.[ch]
	* app/tools/gimpfreeselecttool.[ch]
	* app/tools/gimpfuzzyselecttool.[ch]
	* app/tools/gimprectselecttool.[ch]: removed all the actual
	selection functionality and call the new gimp_image_mask_select_*()
	and gimp_image_contiguous_region_*() functions instead.

	* app/tools/gimpbezierselecttool.c
	* app/tools/gimpiscissorstool.c: use new function
	gimp_image_mask_select_channel() instead of doing the same manually.

	* app/tools/gimpbucketfilltool.c: find_contiguous_region() ->
	gimp_image_contiguous_region_by_seed().

	* tools/pdbgen/Makefile.am
	* tools/pdbgen/groups.pl
	* tools/pdbgen/pdb/selection_tools.pdb: added new group "Selection
	Tools" which depends only on "core/" stuff (not on "tools/" any
	more, brrrr).

	* tools/pdbgen/pdb/text_tool.pdb: don't include "appenv.h"

	* tools/pdbgen/pdb/tools.pdb: removed the selection tools.

	* app/pdb/Makefile.am
	* app/pdb/selection_tools_cmds.c: new file.

	* app/pdb/internal_procs.c
	* app/pdb/text_tool_cmds.c
	* app/pdb/tools_cmds.c: regenerated.

	* libgimp/Makefile.am
	* libgimp/gimp_pdb.h
	* libgimp/gimpselectiontools_pdb.[ch]: new files.

	* libgimp/gimptools_pdb.[ch]: regenerated

	Misc cleanups:

	* app/app_procs.c: call splash_create() with "no_splash_image"
	as parameter.

	* app/display/gimpdisplay-render.c
	* app/display/gximage.c: don't include "appenv.h".

	* app/gui/gui.c: call session_restore() only if "restore_session"
	is TRUE.

	* app/gui/session.c: don't "if(restore_session)" here and don't
	include "appenv.h"

	* app/gui/splash.[ch]: added "gboolean show_image" parameter to
	splash_create(), don't include "appenv.h"

	* app/tools/gimppainttool.[ch]: added a "GimpGradient" parameter
	to gimp_paint_tool_get_color_from_gradient().

	* app/tools/gimppaintbrushtool.c: pass the gradient.

	* app/tools/gimpselectiontool.c
	* app/tools/gimptransformtool.c
	* app/tools/tool_manager.c: s/GDisplay/GimpDisplay/.

	* app/widgets/gimpcontainergridview.[ch]: removed the "white_style"
	class variable and don't fiddle around with colors and styles...

	* themes/Default/gtkrc: ...do the same here with a simple rc style.
2001-10-22 12:13:44 +00:00

188 lines
7.2 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.
*/
#ifndef __GIMP_PAINT_TOOL_H__
#define __GIMP_PAINT_TOOL_H__
#include "gimpdrawtool.h"
/* the different states that the painting function can be called with */
typedef enum /*< skip >*/
{
INIT_PAINT, /* Setup PaintFunc internals */
MOTION_PAINT, /* PaintFunc performs motion-related rendering */
PAUSE_PAINT, /* Unused. Reserved */
RESUME_PAINT, /* Unused. Reserved */
FINISH_PAINT, /* Cleanup and/or reset PaintFunc operation */
PRETRACE_PAINT, /* PaintFunc performs window tracing activity prior to rendering */
POSTTRACE_PAINT /* PaintFunc performs window tracing activity following rendering */
} PaintState;
typedef enum /*< skip >*/
{
TOOL_CAN_HANDLE_CHANGING_BRUSH = 0x0001, /* Set for tools that don't mind
* if the brush changes while
* painting.
*/
TOOL_TRACES_ON_WINDOW /* Set for tools that perform temporary
* rendering directly to the window. These
* require sequencing with gdisplay_flush()
* routines. See clone.c for example.
*/
} ToolFlags;
#define GIMP_TYPE_PAINT_TOOL (gimp_paint_tool_get_type ())
#define GIMP_PAINT_TOOL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_PAINT_TOOL, GimpPaintTool))
#define GIMP_PAINT_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PAINT_TOOL, GimpPaintToolClass))
#define GIMP_IS_PAINT_TOOL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_PAINT_TOOL))
#define GIMP_IS_PAINT_TOOL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PAINT_TOOL))
#define GIMP_PAINT_TOOL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PAINT_TOOL, GimpPaintToolClass))
typedef struct _GimpPaintToolClass GimpPaintToolClass;
struct _GimpPaintTool
{
GimpDrawTool parent_instance;
gdouble startx; /* starting x coord */
gdouble starty; /* starting y coord */
gdouble startpressure; /* starting pressure */
gdouble startxtilt; /* starting xtilt */
gdouble startytilt; /* starting ytilt */
gdouble curx; /* current x coord */
gdouble cury; /* current y coord */
gdouble curpressure; /* current pressure */
gdouble curxtilt; /* current xtilt */
gdouble curytilt; /* current ytilt */
gdouble lastx; /* last x coord */
gdouble lasty; /* last y coord */
gdouble lastpressure; /* last pressure */
gdouble lastxtilt; /* last xtilt */
gdouble lastytilt; /* last ytilt */
gint state; /* state of buttons and keys */
gdouble distance; /* distance traveled by brush */
gdouble pixel_dist; /* distance in pixels */
gdouble spacing; /* spacing */
gint x1, y1; /* image space coordinate */
gint x2, y2; /* image space coords */
GimpBrush * brush; /* current brush */
gboolean pick_colors; /* pick color if ctrl or alt is pressed */
gboolean pick_state; /* was ctrl or alt pressed when clicked? */
ToolFlags flags; /* tool flags, see ToolFlags above */
guint context_id; /* for the statusbar */
};
struct _GimpPaintToolClass
{
GimpDrawToolClass parent_class;
void (* paint) (GimpPaintTool *tool,
GimpDrawable *drawable,
PaintState paint_state);
};
/* Special undo type */
typedef struct _PaintUndo PaintUndo;
struct _PaintUndo
{
gint tool_ID;
GType tool_type;
gdouble lastx;
gdouble lasty;
gdouble lastpressure;
gdouble lastxtilt;
gdouble lastytilt;
};
GType gimp_paint_tool_get_type (void);
void gimp_paint_tool_paint (GimpPaintTool *tool,
GimpDrawable *drawable,
PaintState state);
void gimp_paint_tool_no_draw (GimpPaintTool *tool);
int gimp_paint_tool_start (GimpPaintTool *tool,
GimpDrawable *drawable,
gdouble x,
gdouble y);
void gimp_paint_tool_interpolate (GimpPaintTool *tool,
GimpDrawable *drawable);
void gimp_paint_tool_finish (GimpPaintTool *tool,
GimpDrawable *drawable);
void gimp_paint_tool_cleanup (void);
void gimp_paint_tool_get_color_from_gradient (GimpPaintTool *tool,
GimpGradient *gradient,
gdouble gradient_length,
GimpRGB *color,
GradientPaintMode mode);
/* paint tool painting functions */
TempBuf * gimp_paint_tool_get_paint_area (GimpPaintTool *tool,
GimpDrawable *drawable,
gdouble scale);
TempBuf * gimp_paint_tool_get_orig_image (GimpPaintTool *tool,
GimpDrawable *drawable,
gint x1,
gint y1,
gint x2,
gint y2);
void gimp_paint_tool_paste_canvas (GimpPaintTool *tool,
GimpDrawable *drawable,
gint brush_opacity,
gint image_opacity,
LayerModeEffects paint_mode,
BrushApplicationMode brush_hardness,
gdouble brush_scale,
PaintApplicationMode mode);
void gimp_paint_tool_replace_canvas (GimpPaintTool *tool,
GimpDrawable *drawable,
gint brush_opacity,
gint image_opacity,
BrushApplicationMode brush_hardness,
gdouble brush_scale,
PaintApplicationMode mode);
void gimp_paint_tool_color_area_with_pixmap (GimpPaintTool *tool,
GimpImage *dest,
GimpDrawable *drawable,
TempBuf *area,
gdouble scale,
BrushApplicationMode mode);
#endif /* __GIMP_PAINT_TOOL_H__ */