add collect/paste effects, new videoscope graticules, boxblur update fix, theora...
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / boxblur / boxblur.C
index 6646bc16e32927762eee78788b4bd80579ad041c..006439af39a3b8e998b7dede327185fc4ac7ad23 100644 (file)
@@ -62,6 +62,7 @@ public:
        void interpolate(BoxBlurConfig &prev, BoxBlurConfig &next,
                int64_t prev_frame, int64_t next_frame, int64_t current_frame);
        void reset();
+       void preset();
 
        int horz_radius, vert_radius, power;
        float box_x, box_y;
@@ -186,6 +187,16 @@ public:
        BoxBlurWindow *gui;
 };
 
+class BoxBlurPreset : public BC_GenericButton
+{
+public:
+       BoxBlurPreset(BoxBlurWindow *gui, int x, int y);
+       int handle_event();
+       static int calculate_w(BoxBlurWindow *gui);
+
+       BoxBlurWindow *gui;
+};
+
 class BoxBlurWindow : public PluginClientWindow
 {
 public:
@@ -197,6 +208,7 @@ public:
 
        BoxBlurEffect *plugin;
        BoxBlurReset *reset;
+       BoxBlurPreset *preset;
        BoxBlurRadius *blur_horz;
        BoxBlurRadius *blur_vert;
        BoxBlurPower *blur_power;
@@ -228,6 +240,16 @@ public:
 
 
 void BoxBlurConfig::reset()
+{
+       horz_radius = 0;
+       vert_radius = 0;
+       power = 1;
+       drag = 0;
+       box_x = box_y = 0.0;
+       box_w = box_h = 0;
+}
+
+void BoxBlurConfig::preset()
 {
        horz_radius = 2;
        vert_radius = 2;
@@ -237,9 +259,10 @@ void BoxBlurConfig::reset()
        box_w = box_h = 0;
 }
 
+
 BoxBlurConfig::BoxBlurConfig()
 {
-       reset();
+       preset();
 }
 
 void BoxBlurConfig::copy_from(BoxBlurConfig &that)
@@ -291,6 +314,7 @@ int BoxBlurNumISlider::handle_event()
 {
        int iv = get_value();
        num->update(iv);
+       num->gui->update_drag();
        return 1;
 }
 
@@ -305,6 +329,7 @@ int BoxBlurNumIText::handle_event()
 {
        int iv = atoi(get_text());
        num->update(iv);
+       num->gui->update_drag();
        return 1;
 }
 
@@ -324,6 +349,7 @@ int BoxBlurNumClear::handle_event()
 {
        int v = num->imn;
        num->update(v);
+       num->gui->update_drag();
        return 1;
 }
 
@@ -379,7 +405,6 @@ void BoxBlurNum::update(int value)
        text->update((int64_t)value);
        slider->update(value);
        *ivalue = value;
-       gui->update_drag();
 }
 
 
@@ -396,7 +421,7 @@ BoxBlurPower::BoxBlurPower(BoxBlurWindow *gui, int x, int y, int w,
 }
 
 BoxBlurWindow::BoxBlurWindow(BoxBlurEffect *plugin)
- : PluginClientWindow(plugin, xS(360), yS(240), xS(360), yS(240), 0)
+ : PluginClientWindow(plugin, xS(360), yS(246), xS(360), yS(246), 0)
 {
        this->plugin = plugin;
        blur_horz = 0;
@@ -423,21 +448,17 @@ void BoxBlurWindow::create_objects()
        int t1 = x, t2 = t1+xS(24), t3 = t2+xS(100), t4 = t3+xS(24);
        int ww = get_w() - 2*x, bar_o = xS(30), bar_m = xS(15);
        int margin = plugin->get_theme()->widget_border;
-       BC_Title *title;
-       add_subwindow(title = new BC_Title(x, y, _("Box Blur"), MEDIUMFONT_3D));
-       int x1 = ww - BoxBlurReset::calculate_w(this) - margin;
-       add_subwindow(reset = new BoxBlurReset(this, x1, y));
-       y += bmax(title->get_h(), reset->get_h()) + 2*margin;
 
         BC_TitleBar *tbar;
-        add_subwindow(tbar = new BC_TitleBar(x, y, ww, bar_o, bar_m, _("Position")));
+        add_subwindow(tbar = new BC_TitleBar(x, y, ww, bar_o, bar_m, _("Position & Size")));
         y += tbar->get_h() + margin;
-       x1 = ww - BoxBlurDrag::calculate_w(this) - margin;
+       int x1 = ww - BoxBlurDrag::calculate_w(this) - margin;
        add_subwindow(drag = new BoxBlurDrag(this, plugin, x1, y));
        drag->create_objects();
        if( plugin->config.drag && drag->drag_activate() )
                eprintf("drag enabled, but compositor already grabbed\n");
 
+       BC_Title *title;
        add_subwindow(title = new BC_Title(t1, y, _("X:")));
        box_x = new BoxBlurX(this, t2, y);
        box_x->create_objects();
@@ -466,7 +487,15 @@ void BoxBlurWindow::create_objects()
        blur_power = new BoxBlurPower(this, x, y, ww, _("Power:"),
                        &plugin->config.power);
        blur_power->create_objects();
-       y += blur_power->get_h() + margin;
+       y += blur_power->get_h() + margin + yS(8);
+       BC_Bar *bar;
+       add_subwindow(bar = new BC_Bar(x, y, ww));
+       y += bar->get_h() + 2*margin;
+
+       add_subwindow(reset = new BoxBlurReset(this, x, y));
+       x1 = x + ww - BoxBlurPreset::calculate_w(this);
+       add_subwindow(preset = new BoxBlurPreset(this, x1, y));
+       y += bmax(title->get_h(), reset->get_h()) + 2*margin;
        show_window(1);
 }
 
@@ -731,3 +760,25 @@ int BoxBlurReset::handle_event()
        return 1;
 }
 
+BoxBlurPreset::BoxBlurPreset(BoxBlurWindow *gui, int x, int y)
+ : BC_GenericButton(x, y, _("Default"))
+{
+       this->gui = gui;
+}
+
+int BoxBlurPreset::calculate_w(BoxBlurWindow *gui)
+{
+       return BC_GenericButton::calculate_w(gui,_("Default"));
+}
+
+int BoxBlurPreset::handle_event()
+{
+       BoxBlurEffect *plugin = gui->plugin;
+       plugin->config.preset();
+       gui->drag->update(0);
+       gui->drag->drag_deactivate();
+       gui->update_gui();
+       gui->update_drag();
+       return 1;
+}
+