add VFrameJpeg for shapewipe shapes, switch to jpeg for shapes, cam/prjr x,y,z range...
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / shapewipe / shapewipe.h
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 #ifndef SHAPEWIPE_H
23 #define SHAPEWIPE_H
24
25 class ShapeWipeConfig;
26 class ShapeWipeMain;
27 class ShapeWipeWindow;
28 class ShapeWipeW2B;
29 class ShapeWipeB2W;
30 class ShapeWipeTumble;
31 class ShapeWipeFeather;
32 class ShapeWipeFSlider;
33 class ShapeWipeReset;
34 class ShapeWipeShape;
35 class ShapeWipePreserveAspectRatio;
36 class ShapePackage;
37 class ShapeUnit;
38 class ShapeEngine;
39
40 #include "overlayframe.inc"
41 #include "pluginvclient.h"
42 #include "vframe.inc"
43
44 class ShapeWipeW2B : public BC_Radial
45 {
46 public:
47         ShapeWipeW2B(ShapeWipeMain *plugin,
48                 ShapeWipeWindow *window,
49                 int x,
50                 int y);
51         int handle_event();
52         ShapeWipeMain *plugin;
53         ShapeWipeWindow *window;
54 };
55
56 class ShapeWipeB2W : public BC_Radial
57 {
58 public:
59         ShapeWipeB2W(ShapeWipeMain *plugin,
60                 ShapeWipeWindow *window,
61                 int x,
62                 int y);
63         int handle_event();
64         ShapeWipeMain *plugin;
65         ShapeWipeWindow *window;
66 };
67
68
69 class ShapeWipeTumble : public BC_Tumbler
70 {
71 public:
72         ShapeWipeTumble(ShapeWipeMain *client,
73                 ShapeWipeWindow *window,
74                 int x,
75                 int y);
76
77         int handle_up_event();
78         int handle_down_event();
79
80         ShapeWipeMain *client;
81         ShapeWipeWindow *window;
82 };
83
84 class ShapeWipeFeather : public BC_TumbleTextBox
85 {
86 public:
87         ShapeWipeFeather(ShapeWipeMain *client,
88                 ShapeWipeWindow *window, int x, int y);
89         int handle_event();
90
91         ShapeWipeMain *client;
92         ShapeWipeWindow *window;
93 };
94
95 class ShapeWipeFSlider : public BC_FSlider
96 {
97 public:
98         ShapeWipeFSlider(ShapeWipeMain *client,
99                 ShapeWipeWindow *window, int x, int y, int w);
100         int handle_event();
101
102         ShapeWipeMain *client;
103         ShapeWipeWindow *window;
104 };
105
106 class ShapeWipeReset : public BC_Button
107 {
108 public:
109         ShapeWipeReset(ShapeWipeMain *client,
110                 ShapeWipeWindow *window, int x, int y);
111         int handle_event();
112
113         ShapeWipeMain *client;
114         ShapeWipeWindow *window;
115 };
116
117 class ShapeWipeShape : public BC_PopupTextBox
118 {
119 public:
120         ShapeWipeShape(ShapeWipeMain *client, ShapeWipeWindow *window,
121                 int x, int y, int text_w, int list_h);
122         int handle_event();
123         ShapeWipeMain *client;
124         ShapeWipeWindow *window;
125 };
126
127 class ShapeWipePreserveAspectRatio : public BC_CheckBox
128 {
129 public:
130         ShapeWipePreserveAspectRatio(ShapeWipeMain *plugin,
131                 ShapeWipeWindow *window,
132                 int x,
133                 int y);
134         int handle_event();
135         ShapeWipeMain *plugin;
136         ShapeWipeWindow *window;
137 };
138
139
140 class ShapeWipeWindow : public PluginClientWindow
141 {
142 public:
143         ShapeWipeWindow(ShapeWipeMain *plugin);
144         ~ShapeWipeWindow();
145         void create_objects();
146         void next_shape();
147         void prev_shape();
148
149         ShapeWipeMain *plugin;
150         ShapeWipeW2B *left;
151         ShapeWipeB2W *right;
152         ShapeWipeTumble *shape_tumbler;
153         ShapeWipeShape *shape_text;
154         ShapeWipeFeather *shape_feather;
155         ShapeWipeFSlider *shape_fslider;
156         ShapeWipeReset *shape_reset;
157         ArrayList<BC_ListBoxItem*> shapes;
158 };
159
160 class ShapeWipeConfig
161 {
162 public:
163         ShapeWipeConfig();
164         ~ShapeWipeConfig();
165         void read_xml(KeyFrame *keyframe);
166         void save_xml(KeyFrame *keyframe);
167
168         int direction;
169         float feather;
170         int preserve_aspect;
171         char shape_name[BCTEXTLEN];
172 };
173
174 class ShapeWipeMain : public PluginVClient
175 {
176 public:
177         ShapeWipeMain(PluginServer *server);
178         ~ShapeWipeMain();
179
180         PLUGIN_CLASS_MEMBERS(ShapeWipeConfig)
181         int process_realtime(VFrame *input, VFrame *output);
182         int uses_gui();
183         int is_transition();
184         void read_data(KeyFrame *keyframe);
185         void save_data(KeyFrame *keyframe);
186
187         int read_pattern_image(char *shape_name,
188                 int new_frame_width, int new_frame_height);
189         void reset_pattern_image();
190         void init_shapes();
191
192         VFrame *input, *output;
193         ShapeEngine *engine;
194         ArrayList<char*> shape_paths;
195         ArrayList<char*> shape_titles;
196
197         int shapes_initialized;
198         int threshold;
199         char current_filename[BCTEXTLEN];
200         char current_name[BCTEXTLEN];
201         unsigned char **pattern_image;
202         int frame_width;
203         int frame_height;
204         int preserve_aspect;
205         int last_preserve_aspect;
206 };
207
208
209 class ShapePackage : public LoadPackage
210 {
211 public:
212         ShapePackage();
213         int y1, y2;
214 };
215
216 class ShapeUnit : public LoadClient
217 {
218 public:
219         ShapeUnit(ShapeEngine *server);
220         ~ShapeUnit();
221         void process_package(LoadPackage *package);
222         ShapeEngine *server;
223         unsigned char threshold;
224 };
225
226 class ShapeEngine : public LoadServer
227 {
228 public:
229         ShapeEngine(ShapeWipeMain *plugin,
230                 int total_clients, int total_packages);
231         ~ShapeEngine();
232
233         void init_packages();
234         LoadClient *new_client();
235         LoadPackage *new_package();
236         ShapeWipeMain *plugin;
237 };
238
239 #endif