fix trace locks hang, drag handle rework-again, 12 reset btns on plugins, booby on
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / rumbler / rumbler.C
index 20d0dc57a88680d6dc1960e885dd5de14474d5eb..bb687a097ecda9b36da2ce7bc09dc7a8c300323a 100644 (file)
  *
  */
 
-#include "bcdisplayinfo.h"
-#include "affine.h"
-#include "clip.h"
-#include "bchash.h"
-#include "filexml.h"
-#include "guicast.h"
-#include "keyframe.h"
-#include "language.h"
-#include "pluginvclient.h"
-#include "vframe.h"
-
-#include <math.h>
-#include <string.h>
-#include <stdint.h>
-
-
-class Rumbler;
-class RumblerConfig;
-class RumblerRate;
-class RumblerSeq;
-class RumblerWindow;
-
-
-class RumblerConfig
-{
-public:
-       RumblerConfig();
-       float time_rumble, time_rate;
-       float space_rumble, space_rate;
-       int sequence;
-       void copy_from(RumblerConfig &that);
-       int equivalent(RumblerConfig &that);
-       void interpolate(RumblerConfig &prev, RumblerConfig &next,
-               int64_t prev_frame, int64_t next_frame, int64_t current_frame);
-};
-
-class RumblerRate : public BC_TextBox
-{
-public:
-       RumblerRate(Rumbler *plugin, RumblerWindow *gui,
-               float &value, int x, int y);
-       int handle_event();
-       Rumbler *plugin;
-       RumblerWindow *gui;
-       float *value;
-};
-
-class RumblerSeq : public BC_TextBox
-{
-public:
-       RumblerSeq(Rumbler *plugin, RumblerWindow *gui,
-               int &value, int x, int y);
-       int handle_event();
-       Rumbler *plugin;
-       RumblerWindow *gui;
-       int *value;
-};
-
-
-class RumblerWindow : public PluginClientWindow
-{
-public:
-       RumblerWindow(Rumbler *plugin);
-       ~RumblerWindow();
-       void create_objects();
-
-       Rumbler *plugin;
-       RumblerRate *time_rumble, *time_rate;
-       RumblerRate *space_rumble, *space_rate;
-       RumblerSeq *seq;
-};
-
-class Rumbler : public PluginVClient
-{
-public:
-       Rumbler(PluginServer *server);
-       ~Rumbler();
+#include "rumbler.h"
 
-       PLUGIN_CLASS_MEMBERS(RumblerConfig)
 
-       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();
-       static double rumble(int64_t seq, double cur, double per, double amp);
-
-       VFrame *input, *output, *temp;
-       float x1,y1, x2,y2, x3,y3, x4,y4;
-       AffineEngine *engine;
-};
 
 
 RumblerConfig::RumblerConfig()
+{
+       reset();
+}
+
+void RumblerConfig::reset()
 {
        time_rumble = 10;
        time_rate = 1.;
@@ -153,7 +69,7 @@ void RumblerConfig::interpolate(RumblerConfig &prev, RumblerConfig &next,
 }
 
 RumblerWindow::RumblerWindow(Rumbler *plugin)
- : PluginClientWindow(plugin, 300, 120, 300, 120, 0)
+ : PluginClientWindow(plugin, 300, 150, 300, 150, 0)
 {
        this->plugin = plugin;
 }
@@ -181,11 +97,23 @@ void RumblerWindow::create_objects()
        y += title->get_h() + 10;
        add_subwindow(title = new BC_Title(x, y, _("seq:")));
        add_subwindow(seq = new RumblerSeq(plugin, this, plugin->config.sequence, x1, y));
+       y += 35;
+       add_subwindow(reset = new RumblerReset(plugin, this, x, y));
 
        show_window();
        flush();
 }
 
+// for Reset button
+void RumblerWindow::update()
+{
+       time_rumble->update(plugin->config.time_rumble);
+       time_rate->update(plugin->config.time_rate);
+       space_rumble->update(plugin->config.space_rumble);
+       space_rate->update(plugin->config.space_rate);
+       seq->update((int64_t)(plugin->config.sequence));
+}
+
 
 RumblerRate::RumblerRate(Rumbler *plugin, RumblerWindow *gui,
        float &value, int x, int y)
@@ -220,6 +148,24 @@ int RumblerSeq::handle_event()
 }
 
 
+RumblerReset::RumblerReset(Rumbler *plugin, RumblerWindow *gui, int x, int y)
+ : BC_GenericButton(x, y, _("Reset"))
+{
+       this->plugin = plugin;
+       this->gui = gui;
+}
+RumblerReset::~RumblerReset()
+{
+}
+int RumblerReset::handle_event()
+{
+       plugin->config.reset();
+       gui->update();
+       plugin->send_configure_change();
+       return 1;
+}
+
+
 REGISTER_PLUGIN(Rumbler)
 
 Rumbler::Rumbler(PluginServer *server)