2006-12-10 05:33:38 +08:00
|
|
|
/* GIMP - The GNU Image Manipulation Program
|
1998-07-09 13:31:06 +08:00
|
|
|
* Copyright (C) 1995 Spencer Kimball and Peter Mattis
|
|
|
|
*
|
2009-01-18 06:28:01 +08:00
|
|
|
* This program is free software: you can redistribute it and/or modify
|
1998-07-09 13:31:06 +08:00
|
|
|
* it under the terms of the GNU General Public License as published by
|
2009-01-18 06:28:01 +08:00
|
|
|
* the Free Software Foundation; either version 3 of the License, or
|
1998-07-09 13:31:06 +08:00
|
|
|
* (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
|
2009-01-18 06:28:01 +08:00
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
1998-07-09 13:31:06 +08:00
|
|
|
*/
|
2000-09-29 20:00:00 +08:00
|
|
|
|
|
|
|
#ifndef __GIMP_BRUSH_H__
|
|
|
|
#define __GIMP_BRUSH_H__
|
|
|
|
|
1998-07-09 13:31:06 +08:00
|
|
|
|
2007-03-09 21:00:01 +08:00
|
|
|
#include "libgimpmath/gimpvector.h"
|
2001-02-11 09:39:24 +08:00
|
|
|
#include "gimpdata.h"
|
1998-07-09 13:31:06 +08:00
|
|
|
|
Jens Lautenbacher <jtl@gimp.org>
2000-12-18 Sven Neumann <sven@gimp.org>
Jens Lautenbacher <jtl@gimp.org>
* app/Makefile.am
* app/gimpbrushlistP.h
* app/gimpbrushpipeP.h
* app/gimpobjectP.h: removed these three files
* app/parasitelistP.h
* app/channels_dialog.c
* app/docindex.c
* app/gimpdrawable.c
* app/gimpdrawableP.h
* app/gimpimage.c
* app/gimpimageP.h
* app/gimplist.[ch]
* app/gimpobject.c
* app/gimpobject.h
* app/gimpsetP.h: changed according to header removal
* app/airbrush.c
* app/brush_select.[ch]
* app/brushes_cmds.c
* app/gimpbrush.[ch]
* app/gimpbrushgenerated.[ch]
* app/gimpbrushlist.[ch]
* app/gimpbrushpipe.[ch]
* app/gimpcontextpreview.c
* app/paint_core.c
* app/paintbrush.c
* app/pencil.c
* tools/pdbgen/pdb/brushes.pdb: Big Brushes Cleanup.
The GimpBrush* object hierarchy and the file formats were broken by
"design". This made it overly difficult to read and write pixmap
brushes and brush pipes, leading to the situation that The GIMP was
not able to read it's very own file formats. Since the GimpBrush
format did support arbitrary color depths, the introduction of a
file format for pixmap brushes was unnecessary.
The GimpBrushPixmap object is dead. GimpBrush has an additional
pixmap temp_buf and handles pixmap brushes transparently. The file
format of pixmap brushes is not any longer a grayscale brush plus
a pattern, but a simple brush with RGBA data. The old brushes can
still be loaded, but the .gpb format is deprecated.
GimpBrushPipe derives from GimpBrush. The fileformat is still a text
header, followed by a number of brushes, but those brushes are stored
in the new GimpBrush format (no pattern anymore). The pipe does not
care about the depth of the contained GimpBrushes, so we get
grayscale BrushPipes for free. Since the brush loader still loads the
old format, old .gih files can also still be loaded.
Since the brushes in the GimpBrushPipe do not any longer contain a
pointer to the pipe object, we do only temporarily switch brushes
in the paint_core routines. This is not very elegant, but the best
we can do without a major redesign.
* app/patterns.[ch]: changed the loader to work with a filedescriptor
instead of a filehandle to make it work with the new brush loading
code.
* plug-ins/common/.cvsignore
* plug-ins/common/Makefile.am
* plug-ins/common/plugin-defs.pl
* plug-ins/common/gih.c: new plug-in that saves GIH files in the
new format (loader will follow soon)
* plug-ins/common/gpb.c: removed since Pixmap Brushes are no longer
supported as a special file format.
* plug-ins/common/gbr.c: load and save brushes in the new brush format
which allows RGBA brushes too.
* plug-ins/common/pat.c: load and save grayscale patterns too
2000-12-18 23:14:08 +08:00
|
|
|
|
2001-01-14 11:55:56 +08:00
|
|
|
#define GIMP_TYPE_BRUSH (gimp_brush_get_type ())
|
Port to glib/gtk+ 2.0 episode I (every segfault has it's beginning)
2001-07-24 Michael Natterer <mitch@gimp.org>
Port to glib/gtk+ 2.0 episode I (every segfault has it's beginning)
* configure.in: require glib/gtk+ >= 1.3.7, commented out the
gtkxmhtml stuff.
From now on, you will need glib, pango, atk and gtk+ HEAD from CVS
to hack or use GIMP HEAD.
Beware, it crashes randomly :)
* app/core/Makefile.am
* app/core/gimpmarshal.list: new file plus rules to generate
gimpmarshal.[ch] from it.
* app/core/*
* app/tools/*
* app/widgets/*
* libgimpwidgets/*: started to use the glib object system. All
core/ objects are still gtk objects however. All signals are
created using g_signal_new(). There are many gtk+ artefacts left.
Finally, we will _not_ use the gtk_signal_foo() wrappers and
friends any more.
* app/colormaps.c
* app/devices.[ch]
* app/disp_callbacks.c
* app/errorconsole.c
* app/file-save.[ch]
* app/interface.c
* app/module_db.c
* app/nav_window.c
* app/ops_buttons.c
* app/scroll.c
* app/user_install.c
* app/gui/about-dialog.c
* app/gui/brush-editor.c
* app/gui/brushes-commands.c
* app/gui/color-notebook.c
* app/gui/colormap-dialog.c
* app/gui/dialogs-commands.c
* app/gui/dialogs-constructors.c
* app/gui/file-commands.c
* app/gui/file-dialog-utils.c
* app/gui/file-new-dialog.c
* app/gui/file-open-dialog.[ch]
* app/gui/file-save-dialog.c
* app/gui/gradient-editor.c
* app/gui/gradients-commands.c
* app/gui/image-commands.c
* app/gui/info-dialog.[ch]
* app/gui/layer-select.c
* app/gui/layers-commands.c
* app/gui/menus.c
* app/gui/offset-dialog.c
* app/gui/palette-editor.c
* app/gui/palettes-commands.c
* app/gui/patterns-commands.c
* app/gui/preferences-dialog.c
* app/gui/resize-dialog.[ch]
* app/gui/splash.c
* app/gui/tips-dialog.c
* app/gui/tool-options-dialog.c
* app/gui/toolbox.c
* app/gui/tools-commands.c
* libgimp/gimpbrushmenu.c
* libgimp/gimpmenu.c
* libgimp/gimppatternmenu.c
* libgimp/gimpui.c
* libgimpbase/gimpenv.c: tons and tons of changes like "const
gchar*", switch from GdkDeviceInfo to GdkDevice (very incomplete
and currently disables), lots of s/gtk_signal/g_signal/,
removal/replacement of deprecated stuff,
s/GtkSignalFunc/GCallback/ and lots of small changes and fixes
while I was on it, zillions of warnings left...
* modules/Makefile.am: disabled the water color selector
temporarily (XInput issues).
* plug-ins/Makefile.am
* plug-ins/common/.cvsignore
* plug-ins/common/Makefile.am
* plug-ins/common/plugin-defs.pl: simply excluded all plug-ins
which did not build (including Script-Fu). They are trivial to
fix.
2001-07-25 05:27:11 +08:00
|
|
|
#define GIMP_BRUSH(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_BRUSH, GimpBrush))
|
|
|
|
#define GIMP_BRUSH_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_BRUSH, GimpBrushClass))
|
|
|
|
#define GIMP_IS_BRUSH(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_BRUSH))
|
|
|
|
#define GIMP_IS_BRUSH_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_BRUSH))
|
|
|
|
#define GIMP_BRUSH_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_BRUSH, GimpBrushClass))
|
2001-01-10 08:36:54 +08:00
|
|
|
|
|
|
|
|
|
|
|
typedef struct _GimpBrushClass GimpBrushClass;
|
2000-12-17 05:37:03 +08:00
|
|
|
|
1998-07-09 13:31:06 +08:00
|
|
|
struct _GimpBrush
|
|
|
|
{
|
2001-02-11 09:39:24 +08:00
|
|
|
GimpData parent_instance;
|
|
|
|
|
|
|
|
TempBuf *mask; /* the actual mask */
|
|
|
|
TempBuf *pixmap; /* optional pixmap data */
|
|
|
|
|
|
|
|
gint spacing; /* brush's spacing */
|
|
|
|
GimpVector2 x_axis; /* for calculating brush spacing */
|
|
|
|
GimpVector2 y_axis; /* for calculating brush spacing */
|
1998-07-09 13:31:06 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
struct _GimpBrushClass
|
|
|
|
{
|
2001-02-11 09:39:24 +08:00
|
|
|
GimpDataClass parent_class;
|
1999-10-27 02:27:27 +08:00
|
|
|
|
2002-10-31 02:25:40 +08:00
|
|
|
/* virtual functions */
|
2009-05-20 03:37:56 +08:00
|
|
|
GimpBrush * (* select_brush) (GimpBrush *brush,
|
|
|
|
const GimpCoords *last_coords,
|
|
|
|
const GimpCoords *current_coords);
|
|
|
|
gboolean (* want_null_motion) (GimpBrush *brush,
|
|
|
|
const GimpCoords *last_coords,
|
|
|
|
const GimpCoords *current_coords);
|
|
|
|
void (* transform_size) (GimpBrush *brush,
|
2011-04-05 00:57:48 +08:00
|
|
|
gdouble scale,
|
|
|
|
gdouble aspect_ratio,
|
2009-05-20 03:37:56 +08:00
|
|
|
gdouble angle,
|
|
|
|
gint *width,
|
|
|
|
gint *height);
|
|
|
|
TempBuf * (* transform_mask) (GimpBrush *brush,
|
2011-04-05 00:57:48 +08:00
|
|
|
gdouble scale,
|
|
|
|
gdouble aspect_ratio,
|
2010-01-01 21:41:07 +08:00
|
|
|
gdouble angle,
|
|
|
|
gdouble hardness);
|
2009-05-20 03:37:56 +08:00
|
|
|
TempBuf * (* transform_pixmap) (GimpBrush *brush,
|
2011-04-05 00:57:48 +08:00
|
|
|
gdouble scale,
|
|
|
|
gdouble aspect_ratio,
|
2010-01-01 21:41:07 +08:00
|
|
|
gdouble angle,
|
|
|
|
gdouble hardness);
|
2002-10-31 02:25:40 +08:00
|
|
|
|
|
|
|
/* signals */
|
2009-05-20 03:37:56 +08:00
|
|
|
void (* spacing_changed) (GimpBrush *brush);
|
1998-07-09 13:31:06 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2001-12-02 06:59:48 +08:00
|
|
|
GType gimp_brush_get_type (void) G_GNUC_CONST;
|
|
|
|
|
2010-04-11 01:55:42 +08:00
|
|
|
GimpData * gimp_brush_new (GimpContext *context,
|
|
|
|
const gchar *name);
|
2010-04-05 19:24:54 +08:00
|
|
|
GimpData * gimp_brush_get_standard (GimpContext *context);
|
2002-12-02 21:39:09 +08:00
|
|
|
|
|
|
|
GimpBrush * gimp_brush_select_brush (GimpBrush *brush,
|
2009-05-20 03:37:56 +08:00
|
|
|
const GimpCoords *last_coords,
|
|
|
|
const GimpCoords *current_coords);
|
2002-12-02 21:39:09 +08:00
|
|
|
gboolean gimp_brush_want_null_motion (GimpBrush *brush,
|
2009-05-20 03:37:56 +08:00
|
|
|
const GimpCoords *last_coords,
|
|
|
|
const GimpCoords *current_coords);
|
2002-12-02 21:39:09 +08:00
|
|
|
|
2009-02-01 19:08:22 +08:00
|
|
|
/* Gets width and height of a transformed mask of the brush, for provided parameters. */
|
|
|
|
void gimp_brush_transform_size (GimpBrush *brush,
|
2011-04-05 00:57:48 +08:00
|
|
|
gdouble scale,
|
|
|
|
gdouble aspect_ratio,
|
2009-02-06 05:47:57 +08:00
|
|
|
gdouble angle,
|
2007-03-14 08:18:01 +08:00
|
|
|
gint *width,
|
|
|
|
gint *height);
|
2009-02-01 19:08:22 +08:00
|
|
|
TempBuf * gimp_brush_transform_mask (GimpBrush *brush,
|
2011-04-05 00:57:48 +08:00
|
|
|
gdouble scale,
|
|
|
|
gdouble aspect_ratio,
|
2010-01-01 21:41:07 +08:00
|
|
|
gdouble angle,
|
|
|
|
gdouble hardness);
|
2009-02-01 19:08:22 +08:00
|
|
|
TempBuf * gimp_brush_transform_pixmap (GimpBrush *brush,
|
2011-04-05 00:57:48 +08:00
|
|
|
gdouble scale,
|
|
|
|
gdouble aspect_ratio,
|
2010-01-01 21:41:07 +08:00
|
|
|
gdouble angle,
|
|
|
|
gdouble hardness);
|
2006-11-09 22:54:49 +08:00
|
|
|
|
2011-01-18 06:20:01 +08:00
|
|
|
gdouble gimp_brush_clamp_scale (GimpBrush *brush,
|
|
|
|
gdouble scale);
|
|
|
|
|
2002-12-02 21:39:09 +08:00
|
|
|
TempBuf * gimp_brush_get_mask (const GimpBrush *brush);
|
|
|
|
TempBuf * gimp_brush_get_pixmap (const GimpBrush *brush);
|
|
|
|
|
|
|
|
gint gimp_brush_get_spacing (const GimpBrush *brush);
|
|
|
|
void gimp_brush_set_spacing (GimpBrush *brush,
|
|
|
|
gint spacing);
|
|
|
|
void gimp_brush_spacing_changed (GimpBrush *brush);
|
1998-07-09 13:31:06 +08:00
|
|
|
|
2000-09-29 20:00:00 +08:00
|
|
|
|
|
|
|
#endif /* __GIMP_BRUSH_H__ */
|