merged hv7 mod
[goodguy/history.git] / cinelerra-5.1 / plugins / bluebanana / bluebananaslider.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 BLUEBANANASLIDER_H
22 #define BLUEBANANASLIDER_H
23
24 #include "bccolors.h"
25 #include "pluginvclient.h"
26 #include "bluebanana.h"
27 #include "bluebananawindow.h"
28
29 class BluebananaSlider : public BC_SubWindow {
30  public:
31   BluebananaSlider(BluebananaMain *plugin,
32                    BluebananaWindow *gui,
33                    int x,
34                    int y,
35                    int w,
36                    int h,
37                    float minval,
38                    float maxval);
39   ~BluebananaSlider();
40
41   virtual void update();
42   virtual void render() {BluebananaSlider::update();};
43   void reposition(int,int,int,int);
44   virtual void update_histogram(float *,float *, float *, float *,int pixels);
45
46   int active_bordercolor;
47   int inactive_bordercolor;
48   int dimtextcolor;
49   int troughcolor;
50   int slidercolor;
51   int needlecolor;
52   int sliderlit;
53   int needlelit;
54   int outline;
55
56  protected:
57   virtual void trough_color(float hdel, float vdel, float &r, float &g, float &b, float &a) {r=g=b=a=0;}
58   virtual int handle_event(){ return 1; }
59   virtual int button_press_event() { return 1; }
60   int button_release_event();
61   virtual int cursor_motion_event() { return 1; }
62
63   BluebananaMain *plugin;
64   BluebananaWindow *gui;
65
66   friend class BluebannanaSliderSingle;
67   friend class BluebannanaSliderBracket;
68   friend class BluebannanaSliderCircular;
69   friend class BluebannanaSliderGamma;
70   friend class BluebannanaSliderFill;
71
72   int fraction_to_pixel(float input);
73   float pixel_to_fraction(int pixel);
74   float pixel_to_value(int pixel);
75   int value_to_pixel(float gamma);
76   int minval;
77   int maxval;
78
79   void draw_midslider(int x, int lit);
80   void draw_leftslider(int x, int lit);
81   void draw_rightslider(int x, int lit);
82   void draw_overslider(int x, int lit);
83   void draw_topslider(int x, int lit);
84   void draw_bottomslider(int x, int lit);
85
86   int in_leftslider2(int px, int x);
87   int in_midslider2(int px, int x);
88   int in_rightslider2(int px, int x);
89   int in_overslider2(int px, int x, int y);
90   int in_topslider2(int px, int x, int y);
91   int in_bottomslider2(int px, int x, int y);
92
93   int in_leftslider(int px, int x, int y);
94   int in_rightslider(int px, int x, int y);
95   int in_midslider(int px, int x, int y);
96   int in_overslider(int px, int x, int y);
97   int in_topslider(int px, int x, int y);
98   int in_bottomslider(int px, int x, int y);
99
100   int drag;
101   int xoff;
102   int light;
103   int highlight;
104
105  protected:
106   VFrame *trough;
107   int troughcols;
108   int troughlines;
109   float *histval;
110   float *histred;
111   float *histgreen;
112   float *histblue;
113
114 };
115
116 class BluebananaSliderSingle : public BluebananaSlider {
117  public:
118   BluebananaSliderSingle(BluebananaMain *plugin,
119                          BluebananaWindow *gui,
120                          int x,
121                          int y,
122                          int w,
123                          int h,
124                          float minval,
125                          float maxval);
126   ~BluebananaSliderSingle() {}
127
128   virtual void update();
129   virtual void render() {BluebananaSliderSingle::update();};
130
131   friend class BluebananaHASlider;
132   friend class BluebananaOASlider;
133
134  protected:
135
136   float val;
137   float increment;
138
139   virtual void trough_color(float hdel, float vdel, float &r, float &g, float &b, float &a) {}
140   virtual int handle_event(){ return 1; }
141
142   virtual int button_press_event();
143   virtual int cursor_motion_event();
144
145   void set_val(float val);
146 };
147
148 class BluebananaSliderBracket : public BluebananaSlider {
149  public:
150   BluebananaSliderBracket(BluebananaMain *plugin,
151                           BluebananaWindow *gui,
152                           int x,
153                           int y,
154                           int w,
155                           int h,
156                           float minval,
157                           float maxval);
158   ~BluebananaSliderBracket() {}
159
160   virtual void update();
161   virtual void render() {BluebananaSliderBracket::update();};
162
163   friend class BluebananaSSSlider;
164   friend class BluebananaVSSlider;
165
166  protected:
167   float loval;
168   float midval;
169   float hival;
170   float overval;
171   float increment;
172
173   virtual void trough_color(float hdel, float vdel, float &r, float &g, float &b, float &a) {}
174   virtual int handle_event(){ return 1; }
175
176   int button_press_event();
177   int cursor_motion_event();
178
179   virtual void set_lo(float val);
180   virtual void set_mid(float val);
181   virtual void set_hi(float val);
182   virtual void set_delta(float val);
183   void set_over(float val);
184
185 };
186
187 class BluebananaSliderCircular : public BluebananaSliderBracket {
188  public:
189   BluebananaSliderCircular(BluebananaMain *plugin,
190                            BluebananaWindow *gui,
191                            int x,
192                            int y,
193                            int w,
194                            int h,
195                            float minval,
196                            float maxval);
197   ~BluebananaSliderCircular() {}
198
199   virtual void update();
200
201   friend class BluebananaHSSlider;
202
203   virtual void trough_color(float hdel, float vdel, float &r, float &g, float &b, float &a) {}
204   virtual int handle_event(){ return 1; }
205
206   void set_lo(float val);
207   void set_mid(float val);
208   void set_hi(float val);
209   void set_delta(float val);
210
211 };
212
213 class BluebananaSliderChannel : public BluebananaSlider {
214  public:
215   BluebananaSliderChannel(BluebananaMain *plugin,
216                        BluebananaWindow *gui,
217                        int x,
218                        int y,
219                        int w,
220                        int h);
221   ~BluebananaSliderChannel();
222
223   virtual void update();
224   virtual void render() {BluebananaSliderChannel::update();};
225   virtual void update_histogram(float *,float *, float *, float *,int pixels);
226
227   friend class BluebananaSASlider;
228   friend class BluebananaVASlider;
229   friend class BluebananaRASlider;
230   friend class BluebananaGASlider;
231   friend class BluebananaBASlider;
232   friend class BluebananaYASlider;
233
234   float increment;
235   float zero;
236
237  protected:
238
239   float loval;
240   float gamma;
241   float hival;
242
243   virtual void trough_color(float hval, float &r, float &g, float &b) {};
244   virtual int handle_event(){ return 1; }
245
246   int button_press_event();
247   int cursor_motion_event();
248
249   void set_lo(float lo);
250   void set_hi(float hi);
251   void set_mid(float mid);
252   void set_range(float range);
253   void set_gamma(float val);
254
255   float pixel_to_gamma(float pixel);
256   float gamma_to_pixel(float gamma);
257   float pixel_to_value(float pixel);
258   float value_to_pixel(float gamma);
259
260  private:
261   int t_x0;
262   int t_x1;
263   int t_x2;
264   int t_x3;
265   int t_w01;
266   int t_w12;
267   int t_w23;
268
269 };
270
271 class BluebananaSliderFill : public BluebananaSlider {
272  public:
273   BluebananaSliderFill(BluebananaMain *plugin,
274                        BluebananaWindow *gui,
275                        int x,
276                        int y,
277                        int w,
278                        int h,
279                        float minval,
280                        float maxval,
281                        float maxover);
282   ~BluebananaSliderFill() {}
283
284   virtual void update();
285   virtual void render() {BluebananaSliderFill::update();};
286
287   friend class BluebananaFSSlider;
288   float increment;
289  protected:
290
291   float loval;
292   float midval;
293   float hival;
294   float overval;
295
296   virtual void trough_color(float hdel, float vdel, float &r, float &g, float &b, float &a) {};
297   virtual int handle_event(){ return 1; }
298
299   int button_press_event();
300   int cursor_motion_event();
301
302   void set_fill(float lo, float mid, float hi);
303   void set_over(float val);
304   void set_delta(float val);
305
306   float pixel_to_over(int pixel);
307   int over_to_pixel(float over);
308
309   float maxover;
310
311
312 };
313
314 #endif