add alpha to bluebananna, add unicode Ctl/Shft/U textbox input, bluray presets
[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 class BluebananaAAActive;
51
52 class BluebananaHSSlider;
53 class BluebananaSSSlider;
54 class BluebananaVSSlider;
55 class BluebananaFSSlider;
56 class BluebananaHASlider;
57 class BluebananaSASlider;
58 class BluebananaVASlider;
59 class BluebananaRASlider;
60 class BluebananaGASlider;
61 class BluebananaBASlider;
62 class BluebananaOASlider;
63 class BluebananaAASlider;
64
65 class BluebananaHSReadout0;
66 class BluebananaHSReadout1;
67 class BluebananaHSReadout2;
68 class BluebananaSSReadout0;
69 class BluebananaSSReadout1;
70 class BluebananaSSReadout2;
71 class BluebananaVSReadout0;
72 class BluebananaVSReadout1;
73 class BluebananaVSReadout2;
74 class BluebananaFSReadout0;
75 class BluebananaFSReadout1;
76 class BluebananaFSReadout2;
77 class BluebananaFSReadout3;
78 class BluebananaHAReadout;
79 class BluebananaSAReadout0;
80 class BluebananaSAReadout1;
81 class BluebananaSAReadout2;
82 class BluebananaVAReadout0;
83 class BluebananaVAReadout1;
84 class BluebananaVAReadout2;
85 class BluebananaRAReadout0;
86 class BluebananaRAReadout1;
87 class BluebananaRAReadout2;
88 class BluebananaGAReadout0;
89 class BluebananaGAReadout1;
90 class BluebananaGAReadout2;
91 class BluebananaBAReadout0;
92 class BluebananaBAReadout1;
93 class BluebananaBAReadout2;
94 class BluebananaOAReadout;
95 class BluebananaAAReadout;
96
97 class BluebananaPreserve;
98
99 class BB_Tumble : public BC_TextBox {
100  public:
101   BB_Tumble(BluebananaMain *plugin,
102             BluebananaWindow *gui,
103             float min,
104             float mid,
105             float max,
106             int precision,
107             float inc,
108             int text_w);
109   virtual ~BB_Tumble() {}
110
111   int handle_event();
112   virtual int value_event() { return 1; }
113   int update(float value){ return BC_TextBox::update(value); }
114   float get_value();
115   void reposition_window(int x, int y){
116     this->x = x;
117     this->y = y;
118     BC_TextBox::reposition_window(x,y,text_w,1);
119   }
120
121  protected:
122   int x, y, text_w;
123   float min,mid,max;
124   int precision;
125   float increment;
126   BluebananaMain *plugin;
127   BluebananaWindow *gui;
128
129  private:
130   int activate();
131   int deactivate();
132   int button_press_event();
133   int keypress_event();
134   int active;
135   int suppress_events;
136   float prev;
137 };
138
139 class BluebananaWindow : public PluginClientWindow {
140 public:
141         BluebananaWindow(BluebananaMain *plugin);
142         ~BluebananaWindow();
143
144         int windowx;
145         int windowy;
146         int slider_x;
147         int slider_w;
148         int slider_top_x_tumblers;
149         int slider_top_w_tumblers;
150         int slider_bottom_x_tumblers;
151         int slider_bottom_w_tumblers;
152
153         void create_objects();
154         int close_event();
155         void enter_config_change();
156         void commit_config_change();
157         void leave_config_change();
158         int flush_config_change();
159
160         int config_refcount;
161         int config_change;
162         int config_produce;
163         int config_consume;
164         int config_pending;
165
166         void update();
167         void render();
168         void update_histograms(BluebananaMain *plugin);
169         int repeat_event(int64_t duration);
170
171         BluebananaMain *plugin;
172
173         BluebananaMark *mark;
174         BluebananaActive *active;
175         BluebananaA2Sel *use_mask;
176         BluebananaUnmask *capture_mask;
177         BluebananaIS *invert_selection;
178
179         BluebananaHActive *Hsel_active;
180         BluebananaSActive *Ssel_active;
181         BluebananaVActive *Vsel_active;
182         BluebananaFActive *Fsel_active;
183         BluebananaErode *Fsel_erode;
184
185         BluebananaHAActive *Hadj_active;
186         BluebananaSAActive *Sadj_active;
187         BluebananaVAActive *Vadj_active;
188         BluebananaRAActive *Radj_active;
189         BluebananaGAActive *Gadj_active;
190         BluebananaBAActive *Badj_active;
191         BluebananaOAActive *Oadj_active;
192         BluebananaAAActive *Aadj_active;
193
194         BluebananaHSSlider *Hsel_slider;
195         BluebananaHSReadout0 *Hsel_readout0;
196         BluebananaHSReadout1 *Hsel_readout1;
197         BluebananaHSReadout2 *Hsel_readout2;
198
199         BluebananaSSSlider *Ssel_slider;
200         BluebananaSSReadout0 *Ssel_readout0;
201         BluebananaSSReadout1 *Ssel_readout1;
202         BluebananaSSReadout2 *Ssel_readout2;
203
204         BluebananaVSSlider *Vsel_slider;
205         BluebananaVSReadout0 *Vsel_readout0;
206         BluebananaVSReadout1 *Vsel_readout1;
207         BluebananaVSReadout2 *Vsel_readout2;
208
209         BluebananaFSSlider *Fsel_slider;
210         BluebananaFSReadout0 *Fsel_readout0;
211         BluebananaFSReadout1 *Fsel_readout1;
212         BluebananaFSReadout2 *Fsel_readout2;
213         BluebananaFSReadout3 *Fsel_readout3;
214
215         BluebananaHASlider *Hadj_slider;
216         BluebananaHAReadout *Hadj_readout;
217
218         BluebananaSASlider *Sadj_slider;
219         BluebananaSAReadout0 *Sadj_readout0;
220         BluebananaSAReadout1 *Sadj_readout1;
221         BluebananaSAReadout2 *Sadj_readout2;
222
223         BluebananaVASlider *Vadj_slider;
224         BluebananaVAReadout0 *Vadj_readout0;
225         BluebananaVAReadout1 *Vadj_readout1;
226         BluebananaVAReadout2 *Vadj_readout2;
227
228         BluebananaRASlider *Radj_slider;
229         BluebananaRAReadout0 *Radj_readout0;
230         BluebananaRAReadout1 *Radj_readout1;
231         BluebananaRAReadout2 *Radj_readout2;
232
233         BluebananaGASlider *Gadj_slider;
234         BluebananaGAReadout0 *Gadj_readout0;
235         BluebananaGAReadout1 *Gadj_readout1;
236         BluebananaGAReadout2 *Gadj_readout2;
237
238         BluebananaBASlider *Badj_slider;
239         BluebananaBAReadout0 *Badj_readout0;
240         BluebananaBAReadout1 *Badj_readout1;
241         BluebananaBAReadout2 *Badj_readout2;
242
243         BluebananaOASlider *Oadj_slider;
244         BluebananaOAReadout *Oadj_readout;
245         BluebananaAASlider *Aadj_slider;
246         BluebananaAAReadout *Aadj_readout;
247
248         //BluebananaPreserve *preserve_luma;
249
250         BC_Title *slider_labels[12];
251         BC_Title *erode_label;
252         int do_render;
253 };
254
255
256 #endif