X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fplugins%2Flinearblur%2Flinearblur.C;h=2c4f508fd68426844c0f10bcb743bdd3764db8ab;hb=3235da2d4204a79b9e12b8f48f888fefb569e691;hp=e389b082f50618325d96fde4af47986a6b4360c0;hpb=e375434717622cc3198a6bf9f7b7fb9fde555c21;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/plugins/linearblur/linearblur.C b/cinelerra-5.1/plugins/linearblur/linearblur.C index e389b082..2c4f508f 100644 --- a/cinelerra-5.1/plugins/linearblur/linearblur.C +++ b/cinelerra-5.1/plugins/linearblur/linearblur.C @@ -33,6 +33,7 @@ #include "language.h" #include "loadbalance.h" #include "pluginvclient.h" +#include "theme.h" #include "vframe.h" @@ -47,18 +48,38 @@ REGISTER_PLUGIN(LinearBlurMain) LinearBlurConfig::LinearBlurConfig() { - reset(); -} - -void LinearBlurConfig::reset() -{ - radius = 10; - angle = 0; - steps = 10; - r = 1; - g = 1; - b = 1; - a = 1; + reset(RESET_DEFAULT_SETTINGS); +} + +void LinearBlurConfig::reset(int clear) +{ + switch(clear) { + case RESET_ALL : + radius = 0; + angle = 0; + steps = 1; + r = 1; + g = 1; + b = 1; + a = 1; + break; + case RESET_RADIUS : radius = 0; + break; + case RESET_ANGLE : angle = 0; + break; + case RESET_STEPS : steps = 1; + break; + case RESET_DEFAULT_SETTINGS : + default: + radius = 10; + angle = 0; + steps = 10; + r = 1; + g = 1; + b = 1; + a = 1; + break; + } } int LinearBlurConfig::equivalent(LinearBlurConfig &that) @@ -114,10 +135,10 @@ void LinearBlurConfig::interpolate(LinearBlurConfig &prev, LinearBlurWindow::LinearBlurWindow(LinearBlurMain *plugin) : PluginClientWindow(plugin, - 230, - 320, - 230, - 320, + xS(420), + yS(200), + xS(420), + yS(200), 0) { this->plugin = plugin; @@ -129,29 +150,69 @@ LinearBlurWindow::~LinearBlurWindow() void LinearBlurWindow::create_objects() { - int x = 10, y = 10; + int xs10 = xS(10), xs100 = xS(100), xs200 = xS(200); + int ys10 = yS(10), ys30 = yS(30), ys40 = yS(40); + int x = xs10, y = ys10; + int x2 = xS(80), x3 = xS(180); + int clr_x = get_w()-x - xS(22); // note: clrBtn_w = 22 + int defaultBtn_w = xs100; + BC_Bar *bar; + + y += ys10; add_subwindow(new BC_Title(x, y, _("Length:"))); - y += 20; - add_subwindow(radius = new LinearBlurSize(plugin, x, y, &plugin->config.radius, 0, 100)); - y += 30; + radius_text = new LinearBlurIText(this, plugin, + 0, &plugin->config.radius, (x + x2), y, RADIUS_MIN, RADIUS_MAX); + radius_text->create_objects(); + radius_slider = new LinearBlurISlider(plugin, + radius_text, &plugin->config.radius, x3, y, RADIUS_MIN, RADIUS_MAX, xs200); + add_subwindow(radius_slider); + radius_text->slider = radius_slider; + clr_x = x3 + radius_slider->get_w() + x; + add_subwindow(radius_Clr = new LinearBlurClr(plugin, this, clr_x, y, RESET_RADIUS)); + y += ys30; + add_subwindow(new BC_Title(x, y, _("Angle:"))); - y += 20; - add_subwindow(angle = new LinearBlurSize(plugin, x, y, &plugin->config.angle, -180, 180)); - y += 30; + angle_text = new LinearBlurIText(this, plugin, + 0, &plugin->config.angle, (x + x2), y, -ANGLE_MAX, ANGLE_MAX); + angle_text->create_objects(); + angle_slider = new LinearBlurISlider(plugin, + angle_text, &plugin->config.angle, x3, y, -ANGLE_MAX, ANGLE_MAX, xs200); + add_subwindow(angle_slider); + angle_text->slider = angle_slider; + add_subwindow(angle_Clr = new LinearBlurClr(plugin, this, clr_x, y, RESET_ANGLE)); + y += ys30; + add_subwindow(new BC_Title(x, y, _("Steps:"))); - y += 20; - add_subwindow(steps = new LinearBlurSize(plugin, x, y, &plugin->config.steps, 1, 200)); - y += 30; - add_subwindow(r = new LinearBlurToggle(plugin, x, y, &plugin->config.r, _("Red"))); - y += 30; - add_subwindow(g = new LinearBlurToggle(plugin, x, y, &plugin->config.g, _("Green"))); - y += 30; - add_subwindow(b = new LinearBlurToggle(plugin, x, y, &plugin->config.b, _("Blue"))); - y += 30; - add_subwindow(a = new LinearBlurToggle(plugin, x, y, &plugin->config.a, _("Alpha"))); - y += 40; + steps_text = new LinearBlurIText(this, plugin, + 0, &plugin->config.steps, (x + x2), y, STEPS_MIN, STEPS_MAX); + steps_text->create_objects(); + steps_slider = new LinearBlurISlider(plugin, + steps_text, &plugin->config.steps, x3, y, STEPS_MIN, STEPS_MAX, xs200); + add_subwindow(steps_slider); + steps_text->slider = steps_slider; + add_subwindow(steps_Clr = new LinearBlurClr(plugin, this, clr_x, y, RESET_STEPS)); + y += ys40; + + add_subwindow(bar = new BC_Bar(x, y, get_w()-2*x)); + y += ys10; + int x1 = x; + int toggle_w = (get_w()-2*x) / 4; + add_subwindow(r = new LinearBlurToggle(plugin, x1, y, &plugin->config.r, _("Red"))); + x1 += toggle_w; + add_subwindow(g = new LinearBlurToggle(plugin, x1, y, &plugin->config.g, _("Green"))); + x1 += toggle_w; + add_subwindow(b = new LinearBlurToggle(plugin, x1, y, &plugin->config.b, _("Blue"))); + x1 += toggle_w; + add_subwindow(a = new LinearBlurToggle(plugin, x1, y, &plugin->config.a, _("Alpha"))); + y += ys30; + +// Reset section + add_subwindow(bar = new BC_Bar(x, y, get_w()-2*x)); + y += ys10; add_subwindow(reset = new LinearBlurReset(plugin, this, x, y)); + add_subwindow(default_settings = new LinearBlurDefaultSettings(plugin, this, + (get_w() - xs10 - defaultBtn_w), y, defaultBtn_w)); show_window(); flush(); @@ -159,15 +220,36 @@ void LinearBlurWindow::create_objects() // for Reset button -void LinearBlurWindow::update() -{ - radius->update(plugin->config.radius); - 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); +void LinearBlurWindow::update_gui(int clear) +{ + switch(clear) { + case RESET_RADIUS : + radius_text->update((int64_t)plugin->config.radius); + radius_slider->update(plugin->config.radius); + break; + case RESET_ANGLE : + angle_text->update((int64_t)plugin->config.angle); + angle_slider->update(plugin->config.angle); + break; + case RESET_STEPS : + steps_text->update((int64_t)plugin->config.steps); + steps_slider->update(plugin->config.steps); + break; + case RESET_ALL : + case RESET_DEFAULT_SETTINGS : + default: + radius_text->update((int64_t)plugin->config.radius); + radius_slider->update(plugin->config.radius); + angle_text->update((int64_t)plugin->config.angle); + angle_slider->update(plugin->config.angle); + steps_text->update((int64_t)plugin->config.steps); + steps_slider->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; + } } @@ -200,7 +282,56 @@ int LinearBlurToggle::handle_event() +LinearBlurIText::LinearBlurIText(LinearBlurWindow *gui, LinearBlurMain *plugin, + LinearBlurISlider *slider, int *output, int x, int y, int min, int max) + : BC_TumbleTextBox(gui, *output, + min, max, x, y, xS(60), 0) +{ + this->gui = gui; + this->plugin = plugin; + this->output = output; + this->slider = slider; + this->min = min; + this->max = max; + set_increment(1); +} +LinearBlurIText::~LinearBlurIText() +{ +} + +int LinearBlurIText::handle_event() +{ + *output = atoi(get_text()); + if(*output > max) *output = max; + if(*output < min) *output = min; + slider->update(*output); + plugin->send_configure_change(); + return 1; +} + + +LinearBlurISlider::LinearBlurISlider(LinearBlurMain *plugin, + LinearBlurIText *text, int *output, int x, int y, int min, int max, int w) + : BC_ISlider(x, y, 0, w, w, min, max, *output) +{ + this->plugin = plugin; + this->output = output; + this->text = text; + enable_show_value(0); // Hide caption +} + +LinearBlurISlider::~LinearBlurISlider() +{ +} + +int LinearBlurISlider::handle_event() +{ + *output = get_value(); + text->update((int64_t)*output); + plugin->send_configure_change(); + return 1; +} LinearBlurSize::LinearBlurSize(LinearBlurMain *plugin, @@ -209,7 +340,7 @@ LinearBlurSize::LinearBlurSize(LinearBlurMain *plugin, int *output, int min, int max) - : BC_ISlider(x, y, 0, 200, 200, min, max, *output) + : BC_ISlider(x, y, 0, xS(200), yS(200), min, max, *output) { this->plugin = plugin; this->output = output; @@ -233,8 +364,48 @@ LinearBlurReset::~LinearBlurReset() } int LinearBlurReset::handle_event() { - plugin->config.reset(); - gui->update(); + plugin->config.reset(RESET_ALL); + gui->update_gui(RESET_ALL); + plugin->send_configure_change(); + return 1; +} + + +LinearBlurDefaultSettings::LinearBlurDefaultSettings(LinearBlurMain *plugin, LinearBlurWindow *gui, int x, int y, int w) + : BC_GenericButton(x, y, w, _("Default")) +{ + this->plugin = plugin; + this->gui = gui; +} +LinearBlurDefaultSettings::~LinearBlurDefaultSettings() +{ +} +int LinearBlurDefaultSettings::handle_event() +{ + plugin->config.reset(RESET_DEFAULT_SETTINGS); + gui->update_gui(RESET_DEFAULT_SETTINGS); + plugin->send_configure_change(); + return 1; +} + + +LinearBlurClr::LinearBlurClr(LinearBlurMain *plugin, LinearBlurWindow *gui, int x, int y, int clear) + : BC_Button(x, y, plugin->get_theme()->get_image_set("reset_button")) +{ + this->plugin = plugin; + this->gui = gui; + this->clear = clear; +} +LinearBlurClr::~LinearBlurClr() +{ +} +int LinearBlurClr::handle_event() +{ + // clear==1 ==> Radius slider + // clear==2 ==> Angle slider + // clear==3 ==> Steps slider + plugin->config.reset(clear); + gui->update_gui(clear); plugin->send_configure_change(); return 1; } @@ -422,9 +593,13 @@ void LinearBlurMain::update_gui() { load_configuration(); ((LinearBlurWindow*)thread->window)->lock_window(); - ((LinearBlurWindow*)thread->window)->radius->update(config.radius); - ((LinearBlurWindow*)thread->window)->angle->update(config.angle); - ((LinearBlurWindow*)thread->window)->steps->update(config.steps); + ((LinearBlurWindow*)thread->window)->radius_text->update((int64_t)config.radius); + ((LinearBlurWindow*)thread->window)->radius_slider->update(config.radius); + ((LinearBlurWindow*)thread->window)->angle_text->update((int64_t)config.angle); + ((LinearBlurWindow*)thread->window)->angle_slider->update(config.angle); + ((LinearBlurWindow*)thread->window)->steps_text->update((int64_t)config.steps); + ((LinearBlurWindow*)thread->window)->steps_slider->update(config.steps); + ((LinearBlurWindow*)thread->window)->r->update(config.r); ((LinearBlurWindow*)thread->window)->g->update(config.g); ((LinearBlurWindow*)thread->window)->b->update(config.b);