+
+BoxBlurX::BoxBlurX(BoxBlurWindow *gui, int x, int y)
+ : BC_TumbleTextBox(gui, gui->plugin->config.box_x,
+ -32767.f, 32767.f, x, y, xS(64))
+{
+ this->gui = gui;
+ set_precision(1);
+}
+int BoxBlurX::handle_event()
+{
+ gui->plugin->config.box_x = atof(get_text());
+ gui->update_drag();
+ return 1;
+}
+
+BoxBlurY::BoxBlurY(BoxBlurWindow *gui, int x, int y)
+ : BC_TumbleTextBox(gui, gui->plugin->config.box_y,
+ -32767.f, 32767.f, x, y, xS(64))
+{
+ this->gui = gui;
+ set_precision(1);
+}
+int BoxBlurY::handle_event()
+{
+ gui->plugin->config.box_y = atof(get_text());
+ gui->update_drag();
+ return 1;
+}
+
+BoxBlurW::BoxBlurW(BoxBlurWindow *gui, int x, int y)
+ : BC_TumbleTextBox(gui, gui->plugin->config.box_w,
+ 0, 32767, x, y, xS(64))
+{
+ this->gui = gui;
+}
+int BoxBlurW::handle_event()
+{
+ gui->plugin->config.box_w = atol(get_text());
+ gui->update_drag();
+ return 1;
+}
+
+BoxBlurH::BoxBlurH(BoxBlurWindow *gui, int x, int y)
+ : BC_TumbleTextBox(gui, gui->plugin->config.box_h,
+ 0, 32767, x, y, xS(64))
+{
+ this->gui = gui;
+}
+int BoxBlurH::handle_event()
+{
+ gui->plugin->config.box_h = atol(get_text());
+ gui->update_drag();
+ return 1;
+}
+
+BoxBlurDrag::BoxBlurDrag(BoxBlurWindow *gui, BoxBlurEffect *plugin, int x, int y)
+ : DragCheckBox(plugin->server->mwindow, x, y, _("Drag"), &plugin->config.drag,
+ plugin->config.box_x, plugin->config.box_y,
+ plugin->config.box_w, plugin->config.box_h)
+{
+ this->plugin = plugin;
+ this->gui = gui;
+}
+
+Track *BoxBlurDrag::get_drag_track()
+{
+ PluginServer *server = plugin->server;
+ int plugin_id = server->plugin_id;
+ Plugin *plugin = server->edl->tracks->plugin_exists(plugin_id);
+ return !plugin ? 0 : plugin->track;
+}
+int64_t BoxBlurDrag::get_drag_position()
+{
+ return plugin->get_source_position();
+}
+
+void BoxBlurDrag::update_gui()
+{
+ plugin->config.drag = get_value();
+ plugin->config.box_x = drag_x;
+ plugin->config.box_y = drag_y;
+ plugin->config.box_w = drag_w+0.5;
+ plugin->config.box_h = drag_h+0.5;
+ gui->box_x->update((float)plugin->config.box_x);
+ gui->box_y->update((float)plugin->config.box_y);
+ gui->box_w->update((int64_t)plugin->config.box_w);
+ gui->box_h->update((int64_t)plugin->config.box_h);
+ plugin->send_configure_change();
+}
+
+int BoxBlurDrag::handle_event()
+{
+ int ret = DragCheckBox::handle_event();
+ plugin->send_configure_change();
+ return ret;
+}
+
+void BoxBlurWindow::update_drag()
+{
+ drag->drag_x = plugin->config.box_x;
+ drag->drag_y = plugin->config.box_y;
+ drag->drag_w = plugin->config.box_w;
+ drag->drag_h = plugin->config.box_h;
+ plugin->send_configure_change();
+}
+
+BoxBlurReset::BoxBlurReset(BoxBlurWindow *gui, int x, int y)
+ : BC_Button(x, y, gui->plugin->get_theme()->get_image_set("reset_button"))
+{
+ this->gui = gui;
+}
+
+int BoxBlurReset::calculate_w(BoxBlurWindow *gui)
+{
+ VFrame **imgs = gui->plugin->get_theme()->get_image_set("reset_button");
+ return imgs[0]->get_w();
+}
+
+int BoxBlurReset::handle_event()
+{
+ BoxBlurEffect *plugin = gui->plugin;
+ plugin->config.reset();
+ gui->update_gui();
+ gui->update_drag();
+ return 1;
+}
+