add mask smooth boundary
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / unsharp / unsharpwindow.C
1
2 /*
3  * CINELERRA
4  * Copyright (C) 2008 Adam Williams <broadcast at earthling dot net>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  */
21
22 #include "bcdisplayinfo.h"
23 #include "language.h"
24 #include "theme.h"
25 #include "unsharp.h"
26 #include "unsharpwindow.h"
27
28
29 UnsharpWindow::UnsharpWindow(UnsharpMain *plugin)
30  : PluginClientWindow(plugin, 285, 170, 285, 170, 0)
31 {
32         this->plugin = plugin;
33 }
34
35 UnsharpWindow::~UnsharpWindow()
36 {
37 }
38
39 void UnsharpWindow::create_objects()
40 {
41         int x = 10, y = 10, x1 = 90;
42         int x2 = 0; int clrBtn_w = 50;
43         int defaultBtn_w = 100;
44         BC_Title *title;
45
46         add_subwindow(title = new BC_Title(x, y + 10, _("Radius:")));
47         add_subwindow(radius = new UnsharpRadius(plugin, x + x1, y));
48         x2 = 285 - 10 - clrBtn_w;
49         add_subwindow(radiusClr = new UnsharpSliderClr(plugin, this, x2, y + 10, clrBtn_w, RESET_RADIUS));
50
51         y += 40;
52         add_subwindow(title = new BC_Title(x, y + 10, _("Amount:")));
53         add_subwindow(amount = new UnsharpAmount(plugin, x + x1, y));
54         add_subwindow(amountClr = new UnsharpSliderClr(plugin, this, x2, y + 10, clrBtn_w, RESET_AMOUNT));
55
56         y += 40;
57         add_subwindow(title = new BC_Title(x, y + 10, _("Threshold:")));
58         add_subwindow(threshold = new UnsharpThreshold(plugin, x + x1, y));
59         add_subwindow(thresholdClr = new UnsharpSliderClr(plugin, this, x2, y + 10, clrBtn_w, RESET_THRESHOLD));
60
61         y += 50;
62         add_subwindow(reset = new UnsharpReset(plugin, this, x, y));
63         add_subwindow(default_settings = new UnsharpDefaultSettings(plugin, this,
64                 (285 - 10 - defaultBtn_w), y, defaultBtn_w));
65
66         show_window();
67         flush();
68 }
69
70
71 void UnsharpWindow::update_gui(int clear)
72 {
73         switch(clear) {
74                 case RESET_RADIUS : radius->update(plugin->config.radius);
75                         break;
76                 case RESET_AMOUNT : amount->update(plugin->config.amount);
77                         break;
78                 case RESET_THRESHOLD : threshold->update(plugin->config.threshold);
79                         break;
80                 case RESET_ALL :
81                 case RESET_DEFAULT_SETTINGS :
82                 default:
83                         radius->update(plugin->config.radius);
84                         amount->update(plugin->config.amount);
85                         threshold->update(plugin->config.threshold);
86                         break;
87         }
88 }
89
90
91
92
93
94
95
96
97
98
99 UnsharpRadius::UnsharpRadius(UnsharpMain *plugin, int x, int y)
100  : BC_FPot(x, y, plugin->config.radius, 0.1, 120)
101 {
102         this->plugin = plugin;
103 }
104 int UnsharpRadius::handle_event()
105 {
106         plugin->config.radius = get_value();
107         plugin->send_configure_change();
108         return 1;
109 }
110
111 UnsharpAmount::UnsharpAmount(UnsharpMain *plugin, int x, int y)
112  : BC_FPot(x, y, plugin->config.amount, 0, 5)
113 {
114         this->plugin = plugin;
115 }
116 int UnsharpAmount::handle_event()
117 {
118         plugin->config.amount = get_value();
119         plugin->send_configure_change();
120         return 1;
121 }
122
123 UnsharpThreshold::UnsharpThreshold(UnsharpMain *plugin, int x, int y)
124  : BC_IPot(x, y, plugin->config.threshold, 0, 255)
125 {
126         this->plugin = plugin;
127 }
128 int UnsharpThreshold::handle_event()
129 {
130         plugin->config.threshold = get_value();
131         plugin->send_configure_change();
132         return 1;
133 }
134
135 UnsharpReset::UnsharpReset(UnsharpMain *plugin, UnsharpWindow *window, int x, int y)
136  : BC_GenericButton(x, y, _("Reset"))
137 {
138         this->plugin = plugin;
139         this->window = window;
140 }
141 UnsharpReset::~UnsharpReset()
142 {
143 }
144 int UnsharpReset::handle_event()
145 {
146         plugin->config.reset(RESET_ALL);
147         window->update_gui(RESET_ALL);
148         plugin->send_configure_change();
149         return 1;
150 }
151
152 UnsharpDefaultSettings::UnsharpDefaultSettings(UnsharpMain *plugin, UnsharpWindow *window, int x, int y, int w)
153  : BC_GenericButton(x, y, w, _("Default"))
154 {
155         this->plugin = plugin;
156         this->window = window;
157 }
158 UnsharpDefaultSettings::~UnsharpDefaultSettings()
159 {
160 }
161 int UnsharpDefaultSettings::handle_event()
162 {
163         plugin->config.reset(RESET_DEFAULT_SETTINGS);
164         window->update_gui(RESET_DEFAULT_SETTINGS);
165         plugin->send_configure_change();
166         return 1;
167 }
168
169 UnsharpSliderClr::UnsharpSliderClr(UnsharpMain *plugin, UnsharpWindow *window, int x, int y, int w, int clear)
170  : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button"))
171 {
172         this->plugin = plugin;
173         this->window = window;
174         this->clear = clear;
175 }
176 UnsharpSliderClr::~UnsharpSliderClr()
177 {
178 }
179 int UnsharpSliderClr::handle_event()
180 {
181         // clear==1 ==> Radius slider
182         // clear==2 ==> Amount slider
183         // clear==3 ==> Threshold slider
184         plugin->config.reset(clear);
185         window->update_gui(clear);
186         plugin->send_configure_change();
187         return 1;
188 }