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