00001 #ifndef GRADIENT_H
00002 #define GRADIENT_H
00003
00004 class GradientMain;
00005 class GradientEngine;
00006 class GradientThread;
00007 class GradientWindow;
00008 class GradientServer;
00009
00010
00011 #define MAXRADIUS 10000
00012
00013 #include "colorpicker.h"
00014 #include "bchash.inc"
00015 #include "filexml.inc"
00016 #include "guicast.h"
00017 #include "loadbalance.h"
00018 #include "overlayframe.inc"
00019 #include "plugincolors.h"
00020 #include "pluginvclient.h"
00021 #include "thread.h"
00022 #include "vframe.inc"
00023
00024 class GradientConfig
00025 {
00026 public:
00027 GradientConfig();
00028
00029 int equivalent(GradientConfig &that);
00030 void copy_from(GradientConfig &that);
00031 void interpolate(GradientConfig &prev,
00032 GradientConfig &next,
00033 long prev_frame,
00034 long next_frame,
00035 long current_frame);
00036
00037 int get_in_color();
00038 int get_out_color();
00039
00040
00041 int shape;
00042
00043 int rate;
00044 enum
00045 {
00046 LINEAR,
00047 RADIAL,
00048 LOG,
00049 SQUARE
00050 };
00051
00052
00053 double center_x;
00054 double center_y;
00055 double angle;
00056 double in_radius;
00057 double out_radius;
00058 int in_r, in_g, in_b, in_a;
00059 int out_r, out_g, out_b, out_a;
00060 };
00061
00062
00063 class GradientShape : public BC_PopupMenu
00064 {
00065 public:
00066 GradientShape(GradientMain *plugin,
00067 GradientWindow *gui,
00068 int x,
00069 int y);
00070 void create_objects();
00071 static char* to_text(int shape);
00072 static int from_text(char *text);
00073 int handle_event();
00074 GradientMain *plugin;
00075 GradientWindow *gui;
00076 };
00077
00078
00079 class GradientRate : public BC_PopupMenu
00080 {
00081 public:
00082 GradientRate(GradientMain *plugin,
00083 int x,
00084 int y);
00085 void create_objects();
00086 static char* to_text(int shape);
00087 static int from_text(char *text);
00088 int handle_event();
00089 GradientMain *plugin;
00090 GradientWindow *gui;
00091 };
00092
00093 class GradientCenterX : public BC_FPot
00094 {
00095 public:
00096 GradientCenterX(GradientMain *plugin, int x, int y);
00097 int handle_event();
00098 GradientMain *plugin;
00099 };
00100
00101 class GradientCenterY : public BC_FPot
00102 {
00103 public:
00104 GradientCenterY(GradientMain *plugin, int x, int y);
00105 int handle_event();
00106 GradientMain *plugin;
00107 };
00108
00109 class GradientAngle : public BC_FPot
00110 {
00111 public:
00112 GradientAngle(GradientMain *plugin, int x, int y);
00113 int handle_event();
00114 GradientMain *plugin;
00115 };
00116
00117 class GradientInRadius : public BC_FSlider
00118 {
00119 public:
00120 GradientInRadius(GradientMain *plugin, int x, int y);
00121 int handle_event();
00122 GradientMain *plugin;
00123 };
00124
00125 class GradientOutRadius : public BC_FSlider
00126 {
00127 public:
00128 GradientOutRadius(GradientMain *plugin, int x, int y);
00129 int handle_event();
00130 GradientMain *plugin;
00131 };
00132
00133 class GradientInColorButton : public BC_GenericButton
00134 {
00135 public:
00136 GradientInColorButton(GradientMain *plugin, GradientWindow *window, int x, int y);
00137 int handle_event();
00138 GradientMain *plugin;
00139 GradientWindow *window;
00140 };
00141
00142
00143 class GradientOutColorButton : public BC_GenericButton
00144 {
00145 public:
00146 GradientOutColorButton(GradientMain *plugin, GradientWindow *window, int x, int y);
00147 int handle_event();
00148 GradientMain *plugin;
00149 GradientWindow *window;
00150 };
00151
00152
00153 class GradientInColorThread : public ColorThread
00154 {
00155 public:
00156 GradientInColorThread(GradientMain *plugin, GradientWindow *window);
00157 virtual int handle_new_color(int output, int alpha);
00158 GradientMain *plugin;
00159 GradientWindow *window;
00160 };
00161
00162
00163 class GradientOutColorThread : public ColorThread
00164 {
00165 public:
00166 GradientOutColorThread(GradientMain *plugin, GradientWindow *window);
00167 virtual int handle_new_color(int output, int alpha);
00168 GradientMain *plugin;
00169 GradientWindow *window;
00170 };
00171
00172
00173
00174 class GradientWindow : public BC_Window
00175 {
00176 public:
00177 GradientWindow(GradientMain *plugin, int x, int y);
00178 ~GradientWindow();
00179
00180 int create_objects();
00181 int close_event();
00182 void update_in_color();
00183 void update_out_color();
00184 void update_shape();
00185
00186 GradientMain *plugin;
00187 BC_Title *angle_title;
00188 GradientAngle *angle;
00189 GradientInRadius *in_radius;
00190 GradientOutRadius *out_radius;
00191 GradientInColorButton *in_color;
00192 GradientOutColorButton *out_color;
00193 GradientInColorThread *in_color_thread;
00194 GradientOutColorThread *out_color_thread;
00195 GradientShape *shape;
00196 BC_Title *shape_title;
00197 GradientCenterX *center_x;
00198 BC_Title *center_x_title;
00199 BC_Title *center_y_title;
00200 GradientCenterY *center_y;
00201 GradientRate *rate;
00202 int in_color_x, in_color_y;
00203 int out_color_x, out_color_y;
00204 int shape_x, shape_y;
00205 };
00206
00207
00208
00209 PLUGIN_THREAD_HEADER(GradientMain, GradientThread, GradientWindow)
00210
00211
00212 class GradientMain : public PluginVClient
00213 {
00214 public:
00215 GradientMain(PluginServer *server);
00216 ~GradientMain();
00217
00218 int process_buffer(VFrame *frame,
00219 int64_t start_position,
00220 double frame_rate);
00221 int is_realtime();
00222 int load_defaults();
00223 int save_defaults();
00224 void save_data(KeyFrame *keyframe);
00225 void read_data(KeyFrame *keyframe);
00226 void update_gui();
00227 int is_synthesis();
00228 int handle_opengl();
00229
00230 PLUGIN_CLASS_MEMBERS(GradientConfig, GradientThread)
00231
00232 int need_reconfigure;
00233
00234 OverlayFrame *overlayer;
00235 VFrame *gradient;
00236 VFrame *input, *output;
00237 GradientServer *engine;
00238 };
00239
00240 class GradientPackage : public LoadPackage
00241 {
00242 public:
00243 GradientPackage();
00244 int y1;
00245 int y2;
00246 };
00247
00248 class GradientUnit : public LoadClient
00249 {
00250 public:
00251 GradientUnit(GradientServer *server, GradientMain *plugin);
00252 void process_package(LoadPackage *package);
00253 GradientServer *server;
00254 GradientMain *plugin;
00255 YUV yuv;
00256 };
00257
00258 class GradientServer : public LoadServer
00259 {
00260 public:
00261 GradientServer(GradientMain *plugin, int total_clients, int total_packages);
00262 void init_packages();
00263 LoadClient* new_client();
00264 LoadPackage* new_package();
00265 GradientMain *plugin;
00266 };
00267
00268
00269
00270 #endif