[gimp] Issue #3533 - Tool preset doesn't restore opacity and paint mode



commit 97b714d4284ec25debffef780deac50e582f88f1
Author: Michael Natterer <mitch gimp org>
Date:   Tue May 12 21:10:21 2020 +0200

    Issue #3533 - Tool preset doesn't restore opacity and paint mode
    
    There is no non-hackish way of fixing this without adding a new
    "use-opacity-paint-mode" property to GimpToolPreset and a new toggle
    in GimpToolPresetEditor. Restoring opacity and paint mode can now be
    controlled explicitly, and defaults to TRUE.

 app/core/gimptoolpreset.c          | 41 ++++++++++++++++++++++++++++++--------
 app/core/gimptoolpreset.h          |  1 +
 app/widgets/gimptoolpreseteditor.c |  9 +++++++++
 3 files changed, 43 insertions(+), 8 deletions(-)
---
diff --git a/app/core/gimptoolpreset.c b/app/core/gimptoolpreset.c
index bc8a8fa3f6..696ed335ce 100644
--- a/app/core/gimptoolpreset.c
+++ b/app/core/gimptoolpreset.c
@@ -40,14 +40,15 @@
  *  with gradients, which is why we special case the gradient tool in
  *  gimp_tool_preset_set_options().
  */
-#define DEFAULT_USE_FG_BG    FALSE
-#define DEFAULT_USE_BRUSH    TRUE
-#define DEFAULT_USE_DYNAMICS TRUE
-#define DEFAULT_USE_MYBRUSH  TRUE
-#define DEFAULT_USE_GRADIENT FALSE
-#define DEFAULT_USE_PATTERN  TRUE
-#define DEFAULT_USE_PALETTE  FALSE
-#define DEFAULT_USE_FONT     TRUE
+#define DEFAULT_USE_FG_BG              FALSE
+#define DEFAULT_USE_OPACITY_PAINT_MODE TRUE
+#define DEFAULT_USE_BRUSH              TRUE
+#define DEFAULT_USE_DYNAMICS           TRUE
+#define DEFAULT_USE_MYBRUSH            TRUE
+#define DEFAULT_USE_GRADIENT           FALSE
+#define DEFAULT_USE_PATTERN            TRUE
+#define DEFAULT_USE_PALETTE            FALSE
+#define DEFAULT_USE_FONT               TRUE
 
 enum
 {
@@ -56,6 +57,7 @@ enum
   PROP_GIMP,
   PROP_TOOL_OPTIONS,
   PROP_USE_FG_BG,
+  PROP_USE_OPACITY_PAINT_MODE,
   PROP_USE_BRUSH,
   PROP_USE_DYNAMICS,
   PROP_USE_MYBRUSH,
@@ -150,6 +152,13 @@ gimp_tool_preset_class_init (GimpToolPresetClass *klass)
                             DEFAULT_USE_FG_BG,
                             GIMP_PARAM_STATIC_STRINGS);
 
+  GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_USE_OPACITY_PAINT_MODE,
+                            "use-opacity-paint-mode",
+                            _("Apply stored opacity/paint mode"),
+                            NULL,
+                            DEFAULT_USE_OPACITY_PAINT_MODE,
+                            GIMP_PARAM_STATIC_STRINGS);
+
   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_USE_BRUSH,
                             "use-brush",
                             _("Apply stored brush"),
@@ -258,6 +267,9 @@ gimp_tool_preset_set_property (GObject      *object,
     case PROP_USE_FG_BG:
       tool_preset->use_fg_bg = g_value_get_boolean (value);
       break;
+    case PROP_USE_OPACITY_PAINT_MODE:
+      tool_preset->use_opacity_paint_mode = g_value_get_boolean (value);
+      break;
     case PROP_USE_BRUSH:
       tool_preset->use_brush = g_value_get_boolean (value);
       break;
@@ -311,6 +323,9 @@ gimp_tool_preset_get_property (GObject    *object,
     case PROP_USE_FG_BG:
       g_value_set_boolean (value, tool_preset->use_fg_bg);
       break;
+    case PROP_USE_OPACITY_PAINT_MODE:
+      g_value_set_boolean (value, tool_preset->use_opacity_paint_mode);
+      break;
     case PROP_USE_BRUSH:
       g_value_set_boolean (value, tool_preset->use_brush);
       break;
@@ -535,6 +550,10 @@ gimp_tool_preset_set_options (GimpToolPreset  *preset,
           ! (serialize_props & GIMP_CONTEXT_PROP_MASK_BACKGROUND))
         g_object_set (preset, "use-fg-bg", FALSE, NULL);
 
+      if (! (serialize_props & GIMP_CONTEXT_PROP_MASK_OPACITY) &&
+          ! (serialize_props & GIMP_CONTEXT_PROP_MASK_PAINT_MODE))
+        g_object_set (preset, "use-opacity-paint-mode", FALSE, NULL);
+
       if (! (serialize_props & GIMP_CONTEXT_PROP_MASK_BRUSH))
         g_object_set (preset, "use-brush", FALSE, NULL);
 
@@ -655,6 +674,12 @@ gimp_tool_preset_get_prop_mask (GimpToolPreset *preset)
       use_props |= (GIMP_CONTEXT_PROP_MASK_BACKGROUND & serialize_props);
     }
 
+  if (preset->use_opacity_paint_mode)
+    {
+      use_props |= (GIMP_CONTEXT_PROP_MASK_OPACITY    & serialize_props);
+      use_props |= (GIMP_CONTEXT_PROP_MASK_PAINT_MODE & serialize_props);
+    }
+
   if (preset->use_brush)
     use_props |= (GIMP_CONTEXT_PROP_MASK_BRUSH & serialize_props);
 
diff --git a/app/core/gimptoolpreset.h b/app/core/gimptoolpreset.h
index 757e44abbf..bf2cceb6ca 100644
--- a/app/core/gimptoolpreset.h
+++ b/app/core/gimptoolpreset.h
@@ -40,6 +40,7 @@ struct _GimpToolPreset
   GimpToolOptions *tool_options;
 
   gboolean         use_fg_bg;
+  gboolean         use_opacity_paint_mode;
   gboolean         use_brush;
   gboolean         use_dynamics;
   gboolean         use_mybrush;
diff --git a/app/widgets/gimptoolpreseteditor.c b/app/widgets/gimptoolpreseteditor.c
index de51c38480..923a1d273b 100644
--- a/app/widgets/gimptoolpreseteditor.c
+++ b/app/widgets/gimptoolpreseteditor.c
@@ -46,6 +46,7 @@ struct _GimpToolPresetEditorPrivate
   GtkWidget      *tool_label;
 
   GtkWidget      *fg_bg_toggle;
+  GtkWidget      *opacity_paint_mode_toggle;
   GtkWidget      *brush_toggle;
   GtkWidget      *dynamics_toggle;
   GtkWidget      *mybrush_toggle;
@@ -155,6 +156,10 @@ gimp_tool_preset_editor_constructed (GObject *object)
     gimp_prop_check_button_new (G_OBJECT (preset), "use-fg-bg", NULL);
   gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
 
+  button = editor->priv->opacity_paint_mode_toggle =
+    gimp_prop_check_button_new (G_OBJECT (preset), "use-opacity-paint-mode", NULL);
+  gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
+
   button = editor->priv->brush_toggle =
     gimp_prop_check_button_new (G_OBJECT (preset), "use-brush", NULL);
   gtk_box_pack_start (GTK_BOX (data_editor), button, FALSE, FALSE, 0);
@@ -300,6 +305,10 @@ gimp_tool_preset_editor_sync_data (GimpToolPresetEditor *editor)
                             (serialize_props &
                              (GIMP_CONTEXT_PROP_MASK_FOREGROUND |
                               GIMP_CONTEXT_PROP_MASK_BACKGROUND)) != 0);
+  gtk_widget_set_sensitive (priv->opacity_paint_mode_toggle,
+                            (serialize_props &
+                             (GIMP_CONTEXT_PROP_MASK_OPACITY |
+                              GIMP_CONTEXT_PROP_MASK_PAINT_MODE)) != 0);
   gtk_widget_set_sensitive (priv->brush_toggle,
                             (serialize_props &
                              GIMP_CONTEXT_PROP_MASK_BRUSH) != 0);


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