[gimp] app: add gimp_image_map_set_mode()



commit 1ff1c687f41b4d4cc3c3197725f8ee223ab48c43
Author: Michael Natterer <mitch gimp org>
Date:   Tue Jun 24 20:18:34 2014 +0200

    app: add gimp_image_map_set_mode()
    
    which allows to set opacity and paint_mode on the contained
    GimpApplicator.

 app/core/gimpimagemap.c |   65 ++++++++++++++++++++++++++++++++--------------
 app/core/gimpimagemap.h |   36 ++++++++++++++-----------
 2 files changed, 65 insertions(+), 36 deletions(-)
---
diff --git a/app/core/gimpimagemap.c b/app/core/gimpimagemap.c
index 73439b0..d3d947b 100644
--- a/app/core/gimpimagemap.c
+++ b/app/core/gimpimagemap.c
@@ -60,23 +60,26 @@ enum
 
 struct _GimpImageMap
 {
-  GimpObject          parent_instance;
-
-  GimpDrawable       *drawable;
-  gchar              *undo_desc;
-  GeglNode           *operation;
-  gchar              *icon_name;
-  GimpImageMapRegion  region;
-  gboolean            gamma_hack;
-
-  GeglRectangle       filter_area;
-
-  GimpFilter         *filter;
-  GeglNode           *translate;
-  GeglNode           *crop;
-  GeglNode           *cast_before;
-  GeglNode           *cast_after;
-  GimpApplicator     *applicator;
+  GimpObject            parent_instance;
+
+  GimpDrawable         *drawable;
+  gchar                *undo_desc;
+  GeglNode             *operation;
+  gchar                *icon_name;
+  GimpImageMapRegion    region;
+  gboolean              gamma_hack;
+
+  GeglRectangle         filter_area;
+
+  gdouble               opacity;
+  GimpLayerModeEffects  paint_mode;
+
+  GimpFilter           *filter;
+  GeglNode             *translate;
+  GeglNode             *crop;
+  GeglNode             *cast_before;
+  GeglNode             *cast_after;
+  GimpApplicator       *applicator;
 };
 
 
@@ -120,7 +123,9 @@ gimp_image_map_class_init (GimpImageMapClass *klass)
 static void
 gimp_image_map_init (GimpImageMap *image_map)
 {
-  image_map->region = GIMP_IMAGE_MAP_REGION_SELECTION;
+  image_map->region     = GIMP_IMAGE_MAP_REGION_SELECTION;
+  image_map->opacity    = GIMP_OPACITY_OPAQUE;
+  image_map->paint_mode = GIMP_REPLACE_MODE;
 }
 
 static void
@@ -222,6 +227,26 @@ gimp_image_map_set_gamma_hack (GimpImageMap *image_map,
 }
 
 void
+gimp_image_map_set_mode (GimpImageMap         *image_map,
+                         gdouble               opacity,
+                         GimpLayerModeEffects  paint_mode)
+{
+  g_return_if_fail (GIMP_IS_IMAGE_MAP (image_map));
+
+  if (opacity    != image_map->opacity ||
+      paint_mode != image_map->paint_mode)
+    {
+      image_map->opacity    = opacity;
+      image_map->paint_mode = paint_mode;
+
+      if (image_map->applicator)
+        gimp_applicator_set_mode (image_map->applicator,
+                                  image_map->opacity,
+                                  image_map->paint_mode);
+    }
+}
+
+void
 gimp_image_map_apply (GimpImageMap        *image_map,
                       const GeglRectangle *area)
 {
@@ -396,8 +421,8 @@ gimp_image_map_apply (GimpImageMap        *image_map,
                             filter_node,   "aux");
 
       gimp_applicator_set_mode (image_map->applicator,
-                                GIMP_OPACITY_OPAQUE,
-                                GIMP_REPLACE_MODE);
+                                image_map->opacity,
+                                image_map->paint_mode);
     }
 
   if (image_map->region == GIMP_IMAGE_MAP_REGION_SELECTION)
diff --git a/app/core/gimpimagemap.h b/app/core/gimpimagemap.h
index c41eb6e..d06ae52 100644
--- a/app/core/gimpimagemap.h
+++ b/app/core/gimpimagemap.h
@@ -49,22 +49,26 @@ struct _GimpImageMapClass
 
 GType          gimp_image_map_get_type   (void) G_GNUC_CONST;
 
-GimpImageMap * gimp_image_map_new        (GimpDrawable        *drawable,
-                                          const gchar         *undo_desc,
-                                          GeglNode            *operation,
-                                          const gchar         *icon_name);
-
-void           gimp_image_map_set_region (GimpImageMap        *image_map,
-                                          GimpImageMapRegion   region);
-void       gimp_image_map_set_gamma_hack (GimpImageMap        *image_map,
-                                          gboolean             gamma_hack);
-
-void           gimp_image_map_apply      (GimpImageMap        *image_map,
-                                          const GeglRectangle *area);
-
-void           gimp_image_map_commit     (GimpImageMap        *image_map,
-                                          GimpProgress        *progress);
-void           gimp_image_map_abort      (GimpImageMap        *image_map);
+GimpImageMap * gimp_image_map_new        (GimpDrawable         *drawable,
+                                          const gchar          *undo_desc,
+                                          GeglNode             *operation,
+                                          const gchar          *icon_name);
+
+void           gimp_image_map_set_region (GimpImageMap         *image_map,
+                                          GimpImageMapRegion    region);
+void       gimp_image_map_set_gamma_hack (GimpImageMap         *image_map,
+                                          gboolean              gamma_hack);
+
+void           gimp_image_map_set_mode   (GimpImageMap         *image_map,
+                                          gdouble               opacity,
+                                          GimpLayerModeEffects  paint_mode);
+
+void           gimp_image_map_apply      (GimpImageMap         *image_map,
+                                          const GeglRectangle  *area);
+
+void           gimp_image_map_commit     (GimpImageMap         *image_map,
+                                          GimpProgress         *progress);
+void           gimp_image_map_abort      (GimpImageMap         *image_map);
 
 
 #endif /* __GIMP_IMAGE_MAP_H__ */


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]