gimppaintcore.h 9.94 KB
Newer Older
1
/* GIMP - The GNU Image Manipulation Program
Elliot Lee's avatar
Elliot Lee committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15
 * 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
16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Elliot Lee's avatar
Elliot Lee committed
17
 */
18

19 20
#ifndef __GIMP_PAINT_CORE_H__
#define __GIMP_PAINT_CORE_H__
Elliot Lee's avatar
Elliot Lee committed
21

22

23
#include "libgimpmath/gimpvector.h"
24
#include "core/gimpobject.h"
25

26 27 28 29 30 31 32

#define GIMP_TYPE_PAINT_CORE            (gimp_paint_core_get_type ())
#define GIMP_PAINT_CORE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_PAINT_CORE, GimpPaintCore))
#define GIMP_PAINT_CORE_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), GIMP_TYPE_PAINT_CORE, GimpPaintCoreClass))
#define GIMP_IS_PAINT_CORE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_PAINT_CORE))
#define GIMP_IS_PAINT_CORE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GIMP_TYPE_PAINT_CORE))
#define GIMP_PAINT_CORE_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS ((obj), GIMP_TYPE_PAINT_CORE, GimpPaintCoreClass))
33 34


35
typedef struct _GimpPaintCoreClass GimpPaintCoreClass;
36

37
struct _GimpPaintCore
Elliot Lee's avatar
Elliot Lee committed
38
{
39
  GimpObject   parent_instance;
Elliot Lee's avatar
Elliot Lee committed
40

41
  gint         ID;               /*  unique instance ID                  */
42 43

  gchar       *undo_desc;        /*  undo description                    */
Elliot Lee's avatar
Elliot Lee committed
44

45
  GimpCoords   start_coords;     /*  starting coords (for undo only)     */
Elliot Lee's avatar
Elliot Lee committed
46

47 48
  GimpCoords   cur_coords;       /*  current coords                      */
  GimpCoords   last_coords;      /*  last coords                         */
Elliot Lee's avatar
Elliot Lee committed
49

50
  GimpVector2  last_paint;       /*  last point that was painted         */
51

52 53
  gdouble      distance;         /*  distance traveled by brush          */
  gdouble      pixel_dist;       /*  distance in pixels                  */
54

55 56
  gint         x1, y1;           /*  undo extents in image coords        */
  gint         x2, y2;           /*  undo extents in image coords        */
Elliot Lee's avatar
Elliot Lee committed
57

58
  gboolean     use_saved_proj;   /*  keep the unmodified proj around     */
59

60 61 62
  TileManager *undo_tiles;       /*  tiles which have been modified      */
  TileManager *saved_proj_tiles; /*  proj tiles which have been modified */
  TileManager *canvas_tiles;     /*  the buffer to paint the mask to     */
63

64 65 66
  TempBuf     *orig_buf;         /*  the unmodified drawable pixels      */
  TempBuf     *orig_proj_buf;    /*  the unmodified projection pixels    */
  TempBuf     *canvas_buf;       /*  the buffer to paint pixels to       */
Elliot Lee's avatar
Elliot Lee committed
67 68
};

69
struct _GimpPaintCoreClass
70
{
71
  GimpObjectClass  parent_class;
72

73
  /*  virtual functions  */
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
  gboolean   (* start)          (GimpPaintCore    *core,
                                 GimpDrawable     *drawable,
                                 GimpPaintOptions *paint_options,
                                 GimpCoords       *coords,
                                 GError          **error);

  gboolean   (* pre_paint)      (GimpPaintCore    *core,
                                 GimpDrawable     *drawable,
                                 GimpPaintOptions *paint_options,
                                 GimpPaintState    paint_state,
                                 guint32           time);
  void       (* paint)          (GimpPaintCore    *core,
                                 GimpDrawable     *drawable,
                                 GimpPaintOptions *paint_options,
                                 GimpPaintState    paint_state,
                                 guint32           time);
  void       (* post_paint)     (GimpPaintCore    *core,
                                 GimpDrawable     *drawable,
                                 GimpPaintOptions *paint_options,
                                 GimpPaintState    paint_state,
                                 guint32           time);

  void       (* interpolate)    (GimpPaintCore    *core,
                                 GimpDrawable     *drawable,
                                 GimpPaintOptions *paint_options,
                                 guint32           time);

  TempBuf  * (* get_paint_area) (GimpPaintCore    *core,
                                 GimpDrawable     *drawable,
                                 GimpPaintOptions *paint_options);

  GimpUndo * (* push_undo)      (GimpPaintCore    *core,
                                 GimpImage        *image,
                                 const gchar      *undo_desc);
108 109
};

Elliot Lee's avatar
Elliot Lee committed
110

111
GType     gimp_paint_core_get_type                  (void) G_GNUC_CONST;
112

113 114 115 116 117
void      gimp_paint_core_paint                     (GimpPaintCore    *core,
                                                     GimpDrawable     *drawable,
                                                     GimpPaintOptions *paint_options,
                                                     GimpPaintState    state,
                                                     guint32           time);
118

119 120 121
gboolean  gimp_paint_core_start                     (GimpPaintCore    *core,
                                                     GimpDrawable     *drawable,
                                                     GimpPaintOptions *paint_options,
122 123
                                                     GimpCoords       *coords,
                                                     GError          **error);
124
void      gimp_paint_core_finish                    (GimpPaintCore    *core,
125 126
                                                     GimpDrawable     *drawable,
                                                     gboolean          push_undo);
127 128 129
void      gimp_paint_core_cancel                    (GimpPaintCore    *core,
                                                     GimpDrawable     *drawable);
void      gimp_paint_core_cleanup                   (GimpPaintCore    *core);
130

131 132 133 134
void      gimp_paint_core_interpolate               (GimpPaintCore    *core,
                                                     GimpDrawable     *drawable,
                                                     GimpPaintOptions *paint_options,
                                                     guint32           time);
135 136


137
/*  protected functions  */
Sven Neumann's avatar
Sven Neumann committed
138

139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
TempBuf * gimp_paint_core_get_paint_area            (GimpPaintCore    *core,
                                                     GimpDrawable     *drawable,
                                                     GimpPaintOptions *options);
TempBuf * gimp_paint_core_get_orig_image            (GimpPaintCore    *core,
                                                     GimpDrawable     *drawable,
                                                     gint              x1,
                                                     gint              y1,
                                                     gint              x2,
                                                     gint              y2);
TempBuf * gimp_paint_core_get_orig_proj             (GimpPaintCore    *core,
                                                     GimpPickable     *pickable,
                                                     gint              x1,
                                                     gint              y1,
                                                     gint              x2,
                                                     gint              y2);

void      gimp_paint_core_paste             (GimpPaintCore            *core,
                                             PixelRegion              *paint_maskPR,
                                             GimpDrawable             *drawable,
158 159
                                             gdouble                   paint_opacity,
                                             gdouble                   image_opacity,
160 161 162 163 164
                                             GimpLayerModeEffects      paint_mode,
                                             GimpPaintApplicationMode  mode);
void      gimp_paint_core_replace           (GimpPaintCore            *core,
                                             PixelRegion              *paint_maskPR,
                                             GimpDrawable             *drawable,
165
                                             gdouble                   paint_opacity,
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185
                                             gdouble                   image_opacity,
                                             GimpPaintApplicationMode  mode);

void      gimp_paint_core_validate_undo_tiles       (GimpPaintCore    *core,
                                                     GimpDrawable     *drawable,
                                                     gint              x,
                                                     gint              y,
                                                     gint              w,
                                                     gint              h);
void      gimp_paint_core_validate_saved_proj_tiles (GimpPaintCore    *core,
                                                     GimpPickable     *pickable,
                                                     gint              x,
                                                     gint              y,
                                                     gint              w,
                                                     gint              h);
void      gimp_paint_core_validate_canvas_tiles     (GimpPaintCore    *core,
                                                     gint              x,
                                                     gint              y,
                                                     gint              w,
                                                     gint              h);
186

187

188
#endif  /*  __GIMP_PAINT_CORE_H__  */