Merge CV, ver=5.1; ops/methods from HV, and interface from CV where possible
[goodguy/history.git] / cinelerra-5.1 / plugins / bluebanana / bluebananawindow.h
1 /*
2  * Cinelerra :: Blue Banana - color modification plugin for Cinelerra-CV
3  * Copyright (C) 2012-2013 Monty <monty@xiph.org>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18  *
19  */
20
21 #ifndef BLUEBANANAWINDOW_H
22 #define BLUEBANANAWINDOW_H
23
24 #include "cicolors.h"
25 #include "pluginvclient.h"
26 #include "pluginserver.h"
27 #include "mwindow.h"
28
29 class BluebananaWindow;
30 class BluebananaMain;
31 class BluebananaThread;
32 class BluebananaMark;
33 class BluebananaActive;
34 class BluebananaA2Sel;
35 class BluebananaIS;
36 class BluebananaUnmask;
37
38 class BluebananaHActive;
39 class BluebananaSActive;
40 class BluebananaVActive;
41 class BluebananaFActive;
42 class BluebananaErode;
43 class BluebananaHAActive;
44 class BluebananaSAActive;
45 class BluebananaVAActive;
46 class BluebananaRAActive;
47 class BluebananaGAActive;
48 class BluebananaBAActive;
49 class BluebananaOAActive;
50
51 class BluebananaHSSlider;
52 class BluebananaSSSlider;
53 class BluebananaVSSlider;
54 class BluebananaFSSlider;
55 class BluebananaHASlider;
56 class BluebananaSASlider;
57 class BluebananaVASlider;
58 class BluebananaRASlider;
59 class BluebananaGASlider;
60 class BluebananaBASlider;
61 class BluebananaOASlider;
62
63 class BluebananaHSReadout0;
64 class BluebananaHSReadout1;
65 class BluebananaHSReadout2;
66 class BluebananaSSReadout0;
67 class BluebananaSSReadout1;
68 class BluebananaSSReadout2;
69 class BluebananaVSReadout0;
70 class BluebananaVSReadout1;
71 class BluebananaVSReadout2;
72 class BluebananaFSReadout0;
73 class BluebananaFSReadout1;
74 class BluebananaFSReadout2;
75 class BluebananaFSReadout3;
76 class BluebananaHAReadout;
77 class BluebananaSAReadout0;
78 class BluebananaSAReadout1;
79 class BluebananaSAReadout2;
80 class BluebananaVAReadout0;
81 class BluebananaVAReadout1;
82 class BluebananaVAReadout2;
83 class BluebananaRAReadout0;
84 class BluebananaRAReadout1;
85 class BluebananaRAReadout2;
86 class BluebananaGAReadout0;
87 class BluebananaGAReadout1;
88 class BluebananaGAReadout2;
89 class BluebananaBAReadout0;
90 class BluebananaBAReadout1;
91 class BluebananaBAReadout2;
92 class BluebananaOAReadout;
93
94 class BluebananaPreserve;
95
96 class BB_Tumble : public BC_TextBox {
97  public:
98   BB_Tumble(BluebananaMain *plugin,
99             BluebananaWindow *gui,
100             float min,
101             float mid,
102             float max,
103             int precision,
104             float inc,
105             int text_w);
106   virtual ~BB_Tumble() {}
107
108   int handle_event();
109   virtual int value_event() { return 1; }
110   int update(float value){ return BC_TextBox::update(value); }
111   float get_value();
112   void reposition_window(int x, int y){
113     this->x = x;
114     this->y = y;
115     BC_TextBox::reposition_window(x,y,text_w,1);
116   }
117
118  protected:
119   int x, y, text_w;
120   float min,mid,max;
121   int precision;
122   float increment;
123   BluebananaMain *plugin;
124   BluebananaWindow *gui;
125
126  private:
127   int activate();
128   int deactivate();
129   int button_press_event();
130   int keypress_event();
131   int active;
132   int suppress_events;
133   float prev;
134 };
135
136 class BluebananaWindow : public PluginClientWindow {
137 public:
138         BluebananaWindow(BluebananaMain *plugin);
139         ~BluebananaWindow();
140
141         int windowx;
142         int windowy;
143         int slider_x;
144         int slider_w;
145         int slider_top_x_tumblers;
146         int slider_top_w_tumblers;
147         int slider_bottom_x_tumblers;
148         int slider_bottom_w_tumblers;
149
150         void create_objects();
151         int close_event();
152         void enter_config_change();
153         void commit_config_change();
154         void leave_config_change();
155         int flush_config_change();
156
157         int config_refcount;
158         int config_change;
159         int config_produce;
160         int config_consume;
161         int config_pending;
162
163         void update();
164         void render();
165         void update_histograms(BluebananaMain *plugin);
166         int repeat_event(int64_t duration);
167
168         BluebananaMain *plugin;
169
170         BluebananaMark *mark;
171         BluebananaActive *active;
172         BluebananaA2Sel *use_mask;
173         BluebananaUnmask *capture_mask;
174         BluebananaIS *invert_selection;
175
176         BluebananaHActive *Hsel_active;
177         BluebananaSActive *Ssel_active;
178         BluebananaVActive *Vsel_active;
179         BluebananaFActive *Fsel_active;
180         BluebananaErode *Fsel_erode;
181
182         BluebananaHAActive *Hadj_active;
183         BluebananaSAActive *Sadj_active;
184         BluebananaVAActive *Vadj_active;
185         BluebananaRAActive *Radj_active;
186         BluebananaGAActive *Gadj_active;
187         BluebananaBAActive *Badj_active;
188         BluebananaOAActive *Oadj_active;
189
190         BluebananaHSSlider *Hsel_slider;
191         BluebananaHSReadout0 *Hsel_readout0;
192         BluebananaHSReadout1 *Hsel_readout1;
193         BluebananaHSReadout2 *Hsel_readout2;
194
195         BluebananaSSSlider *Ssel_slider;
196         BluebananaSSReadout0 *Ssel_readout0;
197         BluebananaSSReadout1 *Ssel_readout1;
198         BluebananaSSReadout2 *Ssel_readout2;
199
200         BluebananaVSSlider *Vsel_slider;
201         BluebananaVSReadout0 *Vsel_readout0;
202         BluebananaVSReadout1 *Vsel_readout1;
203         BluebananaVSReadout2 *Vsel_readout2;
204
205         BluebananaFSSlider *Fsel_slider;
206         BluebananaFSReadout0 *Fsel_readout0;
207         BluebananaFSReadout1 *Fsel_readout1;
208         BluebananaFSReadout2 *Fsel_readout2;
209         BluebananaFSReadout3 *Fsel_readout3;
210
211         BluebananaHASlider *Hadj_slider;
212         BluebananaHAReadout *Hadj_readout;
213
214         BluebananaSASlider *Sadj_slider;
215         BluebananaSAReadout0 *Sadj_readout0;
216         BluebananaSAReadout1 *Sadj_readout1;
217         BluebananaSAReadout2 *Sadj_readout2;
218
219         BluebananaVASlider *Vadj_slider;
220         BluebananaVAReadout0 *Vadj_readout0;
221         BluebananaVAReadout1 *Vadj_readout1;
222         BluebananaVAReadout2 *Vadj_readout2;
223
224         BluebananaRASlider *Radj_slider;
225         BluebananaRAReadout0 *Radj_readout0;
226         BluebananaRAReadout1 *Radj_readout1;
227         BluebananaRAReadout2 *Radj_readout2;
228
229         BluebananaGASlider *Gadj_slider;
230         BluebananaGAReadout0 *Gadj_readout0;
231         BluebananaGAReadout1 *Gadj_readout1;
232         BluebananaGAReadout2 *Gadj_readout2;
233
234         BluebananaBASlider *Badj_slider;
235         BluebananaBAReadout0 *Badj_readout0;
236         BluebananaBAReadout1 *Badj_readout1;
237         BluebananaBAReadout2 *Badj_readout2;
238
239         BluebananaOASlider *Oadj_slider;
240         BluebananaOAReadout *Oadj_readout;
241
242         //BluebananaPreserve *preserve_luma;
243
244         BC_Title *slider_labels[11];
245         BC_Title *erode_label;
246         int do_render;
247 };
248
249
250 #endif