summaryrefslogtreecommitdiffstats
path: root/app/paint/gimppaintcore.h
diff options
context:
space:
mode:
Diffstat (limited to 'app/paint/gimppaintcore.h')
-rw-r--r--app/paint/gimppaintcore.h216
1 files changed, 216 insertions, 0 deletions
diff --git a/app/paint/gimppaintcore.h b/app/paint/gimppaintcore.h
new file mode 100644
index 0000000..6e7f4d4
--- /dev/null
+++ b/app/paint/gimppaintcore.h
@@ -0,0 +1,216 @@
+/* GIMP - The GNU 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 3 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, see <https://www.gnu.org/licenses/>.
+ */
+
+#ifndef __GIMP_PAINT_CORE_H__
+#define __GIMP_PAINT_CORE_H__
+
+
+#include "core/gimpobject.h"
+
+
+#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))
+
+
+typedef struct _GimpPaintCoreClass GimpPaintCoreClass;
+
+struct _GimpPaintCore
+{
+ GimpObject parent_instance;
+
+ gint ID; /* unique instance ID */
+
+ gchar *undo_desc; /* undo description */
+
+ gboolean show_all; /* whether working in show-all mode */
+
+ GimpCoords start_coords; /* the last stroke's endpoint for undo */
+
+ GimpCoords cur_coords; /* current coords */
+ GimpCoords last_coords; /* last coords */
+
+ GimpVector2 last_paint; /* last point that was painted */
+
+ gdouble distance; /* distance traveled by brush */
+ gdouble pixel_dist; /* distance in pixels */
+
+ gint x1, y1; /* undo extents in image coords */
+ gint x2, y2; /* undo extents in image coords */
+
+ gboolean use_saved_proj; /* keep the unmodified proj around */
+
+ GimpPickable *image_pickable; /* the image pickable */
+
+ GeglBuffer *undo_buffer; /* pixels which have been modified */
+ GeglBuffer *saved_proj_buffer; /* proj tiles which have been modified */
+ GeglBuffer *canvas_buffer; /* the buffer to paint the mask to */
+ GeglBuffer *paint_buffer; /* the buffer to paint pixels to */
+ gint paint_buffer_x;
+ gint paint_buffer_y;
+
+ GeglBuffer *mask_buffer; /* the target drawable's mask */
+ gint mask_x_offset;
+ gint mask_y_offset;
+
+ GimpApplicator *applicator;
+
+ GArray *stroke_buffer;
+};
+
+struct _GimpPaintCoreClass
+{
+ GimpObjectClass parent_class;
+
+ /* virtual functions */
+ gboolean (* start) (GimpPaintCore *core,
+ GimpDrawable *drawable,
+ GimpPaintOptions *paint_options,
+ const 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,
+ GimpSymmetry *sym,
+ 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);
+
+ GeglBuffer * (* get_paint_buffer) (GimpPaintCore *core,
+ GimpDrawable *drawable,
+ GimpPaintOptions *paint_options,
+ GimpLayerMode paint_mode,
+ const GimpCoords *coords,
+ gint *paint_buffer_x,
+ gint *paint_buffer_y,
+ gint *paint_width,
+ gint *paint_height);
+
+ GimpUndo * (* push_undo) (GimpPaintCore *core,
+ GimpImage *image,
+ const gchar *undo_desc);
+};
+
+
+GType gimp_paint_core_get_type (void) G_GNUC_CONST;
+
+void gimp_paint_core_paint (GimpPaintCore *core,
+ GimpDrawable *drawable,
+ GimpPaintOptions *paint_options,
+ GimpPaintState state,
+ guint32 time);
+
+gboolean gimp_paint_core_start (GimpPaintCore *core,
+ GimpDrawable *drawable,
+ GimpPaintOptions *paint_options,
+ const GimpCoords *coords,
+ GError **error);
+void gimp_paint_core_finish (GimpPaintCore *core,
+ GimpDrawable *drawable,
+ gboolean push_undo);
+void gimp_paint_core_cancel (GimpPaintCore *core,
+ GimpDrawable *drawable);
+void gimp_paint_core_cleanup (GimpPaintCore *core);
+
+void gimp_paint_core_interpolate (GimpPaintCore *core,
+ GimpDrawable *drawable,
+ GimpPaintOptions *paint_options,
+ const GimpCoords *coords,
+ guint32 time);
+
+void gimp_paint_core_set_show_all (GimpPaintCore *core,
+ gboolean show_all);
+gboolean gimp_paint_core_get_show_all (GimpPaintCore *core);
+
+void gimp_paint_core_set_current_coords (GimpPaintCore *core,
+ const GimpCoords *coords);
+void gimp_paint_core_get_current_coords (GimpPaintCore *core,
+ GimpCoords *coords);
+
+void gimp_paint_core_set_last_coords (GimpPaintCore *core,
+ const GimpCoords *coords);
+void gimp_paint_core_get_last_coords (GimpPaintCore *core,
+ GimpCoords *coords);
+
+void gimp_paint_core_round_line (GimpPaintCore *core,
+ GimpPaintOptions *options,
+ gboolean constrain_15_degrees,
+ gdouble constrain_offset_angle,
+ gdouble constrain_xres,
+ gdouble constrain_yres);
+
+
+/* protected functions */
+
+GeglBuffer * gimp_paint_core_get_paint_buffer (GimpPaintCore *core,
+ GimpDrawable *drawable,
+ GimpPaintOptions *options,
+ GimpLayerMode paint_mode,
+ const GimpCoords *coords,
+ gint *paint_buffer_x,
+ gint *paint_buffer_y,
+ gint *paint_width,
+ gint *paint_height);
+
+GimpPickable * gimp_paint_core_get_image_pickable (GimpPaintCore *core);
+
+GeglBuffer * gimp_paint_core_get_orig_image (GimpPaintCore *core);
+GeglBuffer * gimp_paint_core_get_orig_proj (GimpPaintCore *core);
+
+void gimp_paint_core_paste (GimpPaintCore *core,
+ const GimpTempBuf *paint_mask,
+ gint paint_mask_offset_x,
+ gint paint_mask_offset_y,
+ GimpDrawable *drawable,
+ gdouble paint_opacity,
+ gdouble image_opacity,
+ GimpLayerMode paint_mode,
+ GimpPaintApplicationMode mode);
+
+void gimp_paint_core_replace (GimpPaintCore *core,
+ const GimpTempBuf *paint_mask,
+ gint paint_mask_offset_x,
+ gint paint_mask_offset_y,
+ GimpDrawable *drawable,
+ gdouble paint_opacity,
+ gdouble image_opacity,
+ GimpPaintApplicationMode mode);
+
+void gimp_paint_core_smooth_coords (GimpPaintCore *core,
+ GimpPaintOptions *paint_options,
+ GimpCoords *coords);
+
+
+#endif /* __GIMP_PAINT_CORE_H__ */