X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Fradialblur%2Fradialblur.C;h=5b80b0b85e233b99f102d10f699b951afcc2178e;hp=1847a200920da1f9c26c2e79abfff69b0f7974bb;hb=c857b2fb7965d27d86d5785fb9f1b8957a871a1a;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/plugins/radialblur/radialblur.C b/cinelerra-5.1/plugins/radialblur/radialblur.C index 1847a200..5b80b0b8 100644 --- a/cinelerra-5.1/plugins/radialblur/radialblur.C +++ b/cinelerra-5.1/plugins/radialblur/radialblur.C @@ -19,184 +19,54 @@ * */ -#include -#include -#include +#include "radialblur.h" -#include "affine.h" -#include "bcdisplayinfo.h" -#include "clip.h" -#include "bchash.h" -#include "filexml.h" -#include "keyframe.h" -#include "language.h" -#include "loadbalance.h" -#include "pluginvclient.h" -#include "vframe.h" -class RadialBlurMain; -class RadialBlurEngine; - - - - - -class RadialBlurConfig -{ -public: - RadialBlurConfig(); - - int equivalent(RadialBlurConfig &that); - void copy_from(RadialBlurConfig &that); - void interpolate(RadialBlurConfig &prev, - RadialBlurConfig &next, - long prev_frame, - long next_frame, - long current_frame); - - int x; - int y; - int steps; - int angle; - int r; - int g; - int b; - int a; -}; - - - -class RadialBlurSize : public BC_ISlider -{ -public: - RadialBlurSize(RadialBlurMain *plugin, - int x, - int y, - int *output, - int min, - int max); - int handle_event(); - RadialBlurMain *plugin; - int *output; -}; - -class RadialBlurToggle : public BC_CheckBox -{ -public: - RadialBlurToggle(RadialBlurMain *plugin, - int x, - int y, - int *output, - char *string); - int handle_event(); - RadialBlurMain *plugin; - int *output; -}; - -class RadialBlurWindow : public PluginClientWindow -{ -public: - RadialBlurWindow(RadialBlurMain *plugin); - ~RadialBlurWindow(); - - void create_objects(); - - - RadialBlurSize *x, *y, *steps, *angle; - RadialBlurToggle *r, *g, *b, *a; - RadialBlurMain *plugin; -}; - - - - - - -class RadialBlurMain : public PluginVClient -{ -public: - RadialBlurMain(PluginServer *server); - ~RadialBlurMain(); - - int process_buffer(VFrame *frame, - int64_t start_position, - double frame_rate); - int is_realtime(); - void save_data(KeyFrame *keyframe); - void read_data(KeyFrame *keyframe); - void update_gui(); - int handle_opengl(); - - PLUGIN_CLASS_MEMBERS(RadialBlurConfig) +REGISTER_PLUGIN(RadialBlurMain) - VFrame *input, *output, *temp; - RadialBlurEngine *engine; -// Rotate engine only used for OpenGL - AffineEngine *rotate; -}; -class RadialBlurPackage : public LoadPackage -{ -public: - RadialBlurPackage(); - int y1, y2; -}; -class RadialBlurUnit : public LoadClient -{ -public: - RadialBlurUnit(RadialBlurEngine *server, RadialBlurMain *plugin); - void process_package(LoadPackage *package); - RadialBlurEngine *server; - RadialBlurMain *plugin; -}; - -class RadialBlurEngine : public LoadServer +RadialBlurConfig::RadialBlurConfig() { -public: - RadialBlurEngine(RadialBlurMain *plugin, - int total_clients, - int total_packages); - void init_packages(); - LoadClient* new_client(); - LoadPackage* new_package(); - RadialBlurMain *plugin; -}; - - - - - - - - - - - - - - - - - - - -REGISTER_PLUGIN(RadialBlurMain) - + reset(RESET_DEFAULT_SETTINGS); +} -RadialBlurConfig::RadialBlurConfig() +void RadialBlurConfig::reset(int clear) { - x = 50; - y = 50; - steps = 10; - angle = 33; - r = 1; - g = 1; - b = 1; - a = 1; + switch(clear) { + case RESET_ALL : + x = 50; + y = 50; + angle = 0; + steps = 1; + r = 1; + g = 1; + b = 1; + a = 1; + break; + case RESET_XSLIDER : x = 50; + break; + case RESET_YSLIDER : y = 50; + break; + case RESET_ANGLE : angle = 0; + break; + case RESET_STEPS : steps = 1; + break; + case RESET_DEFAULT_SETTINGS : + default: + x = 50; + y = 50; + angle = 33; + steps = 10; + r = 1; + g = 1; + b = 1; + a = 1; + break; + } } int RadialBlurConfig::equivalent(RadialBlurConfig &that) @@ -256,10 +126,10 @@ void RadialBlurConfig::interpolate(RadialBlurConfig &prev, RadialBlurWindow::RadialBlurWindow(RadialBlurMain *plugin) : PluginClientWindow(plugin, - 230, - 340, - 230, - 340, + 280, + 370, + 280, + 370, 0) { this->plugin = plugin; @@ -272,22 +142,33 @@ RadialBlurWindow::~RadialBlurWindow() void RadialBlurWindow::create_objects() { int x = 10, y = 10; + int x1 = 0; int clrBtn_w = 50; + int defaultBtn_w = 100; add_subwindow(new BC_Title(x, y, _("X:"))); y += 20; add_subwindow(this->x = new RadialBlurSize(plugin, x, y, &plugin->config.x, 0, 100)); + x1 = x + this->x->get_w() + 10; + add_subwindow(xClr = new RadialBlurSliderClr(plugin, this, x1, y, clrBtn_w, RESET_XSLIDER)); + y += 30; add_subwindow(new BC_Title(x, y, _("Y:"))); y += 20; add_subwindow(this->y = new RadialBlurSize(plugin, x, y, &plugin->config.y, 0, 100)); + add_subwindow(yClr = new RadialBlurSliderClr(plugin, this, x1, y, clrBtn_w, RESET_YSLIDER)); + y += 30; add_subwindow(new BC_Title(x, y, _("Angle:"))); y += 20; add_subwindow(angle = new RadialBlurSize(plugin, x, y, &plugin->config.angle, 0, 360)); + add_subwindow(angleClr = new RadialBlurSliderClr(plugin, this, x1, y, clrBtn_w, RESET_ANGLE)); + y += 30; add_subwindow(new BC_Title(x, y, _("Steps:"))); y += 20; add_subwindow(steps = new RadialBlurSize(plugin, x, y, &plugin->config.steps, 1, 100)); + add_subwindow(stepsClr = new RadialBlurSliderClr(plugin, this, x1, y, clrBtn_w, RESET_STEPS)); + y += 30; add_subwindow(r = new RadialBlurToggle(plugin, x, y, &plugin->config.r, _("Red"))); y += 30; @@ -296,13 +177,41 @@ void RadialBlurWindow::create_objects() add_subwindow(b = new RadialBlurToggle(plugin, x, y, &plugin->config.b, _("Blue"))); y += 30; add_subwindow(a = new RadialBlurToggle(plugin, x, y, &plugin->config.a, _("Alpha"))); - y += 30; + y += 40; + add_subwindow(reset = new RadialBlurReset(plugin, this, x, y)); + add_subwindow(default_settings = new RadialBlurDefaultSettings(plugin, this, + (280 - 10 - defaultBtn_w), y, defaultBtn_w)); show_window(); flush(); } - +// for Reset button +void RadialBlurWindow::update_gui(int clear) +{ + switch(clear) { + case RESET_XSLIDER : this->x->update(plugin->config.x); + break; + case RESET_YSLIDER : this->y->update(plugin->config.y); + break; + case RESET_ANGLE : angle->update(plugin->config.angle); + break; + case RESET_STEPS : steps->update(plugin->config.steps); + break; + case RESET_ALL : + case RESET_DEFAULT_SETTINGS : + default: + this->x->update(plugin->config.x); + this->y->update(plugin->config.y); + angle->update(plugin->config.angle); + steps->update(plugin->config.steps); + r->update(plugin->config.r); + g->update(plugin->config.g); + b->update(plugin->config.b); + a->update(plugin->config.a); + break; + } +} @@ -360,6 +269,64 @@ int RadialBlurSize::handle_event() +RadialBlurReset::RadialBlurReset(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y) + : BC_GenericButton(x, y, _("Reset")) +{ + this->plugin = plugin; + this->gui = gui; +} +RadialBlurReset::~RadialBlurReset() +{ +} +int RadialBlurReset::handle_event() +{ + plugin->config.reset(RESET_ALL); + gui->update_gui(RESET_ALL); + plugin->send_configure_change(); + return 1; +} + + +RadialBlurDefaultSettings::RadialBlurDefaultSettings(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y, int w) + : BC_GenericButton(x, y, w, _("Default")) +{ + this->plugin = plugin; + this->gui = gui; +} +RadialBlurDefaultSettings::~RadialBlurDefaultSettings() +{ +} +int RadialBlurDefaultSettings::handle_event() +{ + plugin->config.reset(RESET_DEFAULT_SETTINGS); + gui->update_gui(RESET_DEFAULT_SETTINGS); + plugin->send_configure_change(); + return 1; +} + + +RadialBlurSliderClr::RadialBlurSliderClr(RadialBlurMain *plugin, RadialBlurWindow *gui, int x, int y, int w, int clear) + : BC_Button(x, y, w, plugin->get_theme()->get_image_set("reset_button")) +{ + this->plugin = plugin; + this->gui = gui; + this->clear = clear; +} +RadialBlurSliderClr::~RadialBlurSliderClr() +{ +} +int RadialBlurSliderClr::handle_event() +{ + // clear==1 ==> X slider + // clear==2 ==> Y slider + // clear==3 ==> Angle slider + // clear==4 ==> Steps slider + plugin->config.reset(clear); + gui->update_gui(clear); + plugin->send_configure_change(); + return 1; +} +