1 /* GIMP - The GNU Image Manipulation Program
2  * Copyright (C) 1995 Spencer Kimball and Peter Mattis
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <https://www.gnu.org/licenses/>.
16  */
17 
18 #include "config.h"
19 
20 #include <gdk-pixbuf/gdk-pixbuf.h>
21 #include <gegl.h>
22 
23 #include "libgimpconfig/gimpconfig.h"
24 
25 #include "paint-types.h"
26 
27 #include "gimpsmudgeoptions.h"
28 
29 #include "gimp-intl.h"
30 
31 
32 #define SMUDGE_DEFAULT_RATE       50.0
33 #define SMUDGE_DEFAULT_FLOW       0.0
34 #define SMUDGE_DEFAULT_NO_ERASING FALSE
35 
36 
37 enum
38 {
39   PROP_0,
40   PROP_RATE,
41   PROP_FLOW,
42   PROP_NO_ERASING,
43   PROP_SAMPLE_MERGED
44 };
45 
46 
47 static void   gimp_smudge_options_set_property (GObject      *object,
48                                                 guint         property_id,
49                                                 const GValue *value,
50                                                 GParamSpec   *pspec);
51 static void   gimp_smudge_options_get_property (GObject      *object,
52                                                 guint         property_id,
53                                                 GValue       *value,
54                                                 GParamSpec   *pspec);
55 
56 
G_DEFINE_TYPE(GimpSmudgeOptions,gimp_smudge_options,GIMP_TYPE_PAINT_OPTIONS)57 G_DEFINE_TYPE (GimpSmudgeOptions, gimp_smudge_options,
58                GIMP_TYPE_PAINT_OPTIONS)
59 
60 
61 static void
62 gimp_smudge_options_class_init (GimpSmudgeOptionsClass *klass)
63 {
64   GObjectClass *object_class = G_OBJECT_CLASS (klass);
65 
66   object_class->set_property = gimp_smudge_options_set_property;
67   object_class->get_property = gimp_smudge_options_get_property;
68 
69   GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_RATE,
70                            "rate",
71                            C_("smudge-tool", "Rate"),
72                            _("The strength of smudging"),
73                            0.0, 100.0, SMUDGE_DEFAULT_RATE,
74                            GIMP_PARAM_STATIC_STRINGS);
75 
76   GIMP_CONFIG_PROP_DOUBLE (object_class, PROP_FLOW,
77                            "flow",
78                            C_("smudge-tool", "Flow"),
79                            _("The amount of brush color to blend"),
80                            0.0, 100.0, SMUDGE_DEFAULT_FLOW,
81                            GIMP_PARAM_STATIC_STRINGS);
82 
83   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_NO_ERASING,
84                             "no-erasing",
85                             C_("smudge-tool", "No erasing effect"),
86                             _("Never decrease alpha of existing pixels"),
87                             SMUDGE_DEFAULT_NO_ERASING,
88                             GIMP_PARAM_STATIC_STRINGS);
89 
90   GIMP_CONFIG_PROP_BOOLEAN (object_class, PROP_SAMPLE_MERGED,
91                             "sample-merged",
92                             _("Sample merged"),
93                             NULL,
94                             FALSE,
95                             GIMP_PARAM_STATIC_STRINGS);
96 }
97 
98 static void
gimp_smudge_options_init(GimpSmudgeOptions * options)99 gimp_smudge_options_init (GimpSmudgeOptions *options)
100 {
101 }
102 
103 static void
gimp_smudge_options_set_property(GObject * object,guint property_id,const GValue * value,GParamSpec * pspec)104 gimp_smudge_options_set_property (GObject      *object,
105                                   guint         property_id,
106                                   const GValue *value,
107                                   GParamSpec   *pspec)
108 {
109   GimpSmudgeOptions *options = GIMP_SMUDGE_OPTIONS (object);
110 
111   switch (property_id)
112     {
113     case PROP_RATE:
114       options->rate = g_value_get_double (value);
115       break;
116     case PROP_FLOW:
117       options->flow = g_value_get_double (value);
118       break;
119     case PROP_NO_ERASING:
120       options->no_erasing = g_value_get_boolean (value);
121       break;
122     case PROP_SAMPLE_MERGED:
123       options->sample_merged = g_value_get_boolean (value);
124       break;
125 
126     default:
127       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
128       break;
129     }
130 }
131 
132 static void
gimp_smudge_options_get_property(GObject * object,guint property_id,GValue * value,GParamSpec * pspec)133 gimp_smudge_options_get_property (GObject    *object,
134                                   guint       property_id,
135                                   GValue     *value,
136                                   GParamSpec *pspec)
137 {
138   GimpSmudgeOptions *options = GIMP_SMUDGE_OPTIONS (object);
139 
140   switch (property_id)
141     {
142     case PROP_RATE:
143       g_value_set_double (value, options->rate);
144       break;
145     case PROP_FLOW:
146       g_value_set_double (value, options->flow);
147       break;
148     case PROP_NO_ERASING:
149       g_value_set_boolean (value, options->no_erasing);
150       break;
151     case PROP_SAMPLE_MERGED:
152       g_value_set_boolean (value, options->sample_merged);
153       break;
154 
155     default:
156       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
157       break;
158     }
159 }
160