fix mask vframe setup, add unshared vframe constructor
[goodguy/history.git] / cinelerra-5.1 / plugins / perspective / perspective.h
index a4643d886da2818f7642f9621fe38a98f3c81c63..074e20ba043e156ed2481b49102f5663d07007a5 100644 (file)
 #include "clip.h"
 #include "bchash.h"
 #include "filexml.h"
+#include "guicast.h"
 #include "keyframe.h"
 #include "loadbalance.h"
 #include "pluginvclient.h"
 #include "vframe.h"
 
-class PerspectiveMain;
-class PerspectiveWindow;
-
-
 
+class PerspectiveConfig;
+class PerspectiveCanvas;
+class PerspectiveCoord;
+class PerspectiveReset;
+class PerspectiveMode;
+class PerspectiveDirection;
+class PerspectiveAffine;
+class PerspectiveAffineItem;
+class PerspectiveZoomView;
+class PerspectiveWindow;
+class PerspectiveMain;
 
 class PerspectiveConfig
 {
@@ -45,14 +53,12 @@ public:
 
        int equivalent(PerspectiveConfig &that);
        void copy_from(PerspectiveConfig &that);
-       void interpolate(PerspectiveConfig &prev,
-               PerspectiveConfig &next,
-               int64_t prev_frame,
-               int64_t next_frame,
-               int64_t current_frame);
+       void interpolate(PerspectiveConfig &prev, PerspectiveConfig &next,
+               int64_t prev_frame, int64_t next_frame, int64_t current_frame);
 
        float x1, y1, x2, y2, x3, y3, x4, y4;
-       int mode;
+       float view_x, view_y, view_zoom;
+       int mode, smoothing;
        int window_w, window_h;
        int current_point;
        int forward;
@@ -63,82 +69,104 @@ public:
 class PerspectiveCanvas : public BC_SubWindow
 {
 public:
-       PerspectiveCanvas(PerspectiveMain *plugin,
-               int x,
-               int y,
-               int w,
-               int h);
+       PerspectiveCanvas(PerspectiveWindow *gui,
+               int x, int y, int w, int h);
        int button_press_event();
        int button_release_event();
        int cursor_motion_event();
-       int state;
 
-       enum
-       {
-               NONE,
-               DRAG,
-               DRAG_FULL,
-               ZOOM
-       };
+       int state;
+       enum { NONE, DRAG, DRAG_FULL, ZOOM, DRAG_VIEW };
 
-       int start_cursor_x, start_cursor_y;
+       int start_x, start_y;
        float start_x1, start_y1;
        float start_x2, start_y2;
        float start_x3, start_y3;
        float start_x4, start_y4;
-       PerspectiveMain *plugin;
+       PerspectiveWindow *gui;
 };
 
 class PerspectiveCoord : public BC_TumbleTextBox
 {
 public:
        PerspectiveCoord(PerspectiveWindow *gui,
-               PerspectiveMain *plugin,
-               int x,
-               int y,
-               float value,
-               int is_x);
+               int x, int y, float value, int is_x);
        int handle_event();
-       PerspectiveMain *plugin;
+       PerspectiveWindow *gui;
        int is_x;
 };
 
 class PerspectiveReset : public BC_GenericButton
 {
 public:
-       PerspectiveReset(PerspectiveMain *plugin,
-               int x,
-               int y);
+       PerspectiveReset(PerspectiveWindow *gui, int x, int y);
        int handle_event();
-       PerspectiveMain *plugin;
+       PerspectiveWindow *gui;
 };
 
 class PerspectiveMode : public BC_Radial
 {
 public:
-       PerspectiveMode(PerspectiveMain *plugin,
-               int x,
-               int y,
-               int value,
-               char *text);
+       PerspectiveMode(PerspectiveWindow *gui,
+               int x, int y, int value, char *text);
        int handle_event();
-       PerspectiveMain *plugin;
+       PerspectiveWindow *gui;
        int value;
 };
 
 class PerspectiveDirection : public BC_Radial
 {
 public:
-       PerspectiveDirection(PerspectiveMain *plugin,
-               int x,
-               int y,
-               int value,
-               char *text);
+       PerspectiveDirection(PerspectiveWindow *gui,
+               int x, int y, int value, char *text);
        int handle_event();
-       PerspectiveMain *plugin;
+       PerspectiveWindow *gui;
        int value;
 };
 
+class PerspectiveAffine : public BC_PopupMenu
+{
+       static const int n_modes = AffineEngine::AF_MODES;
+       const char *affine_modes[n_modes];
+       PerspectiveAffineItem *affine_items[n_modes];
+public:
+       PerspectiveAffine(PerspectiveWindow *gui, int x, int y);
+       ~PerspectiveAffine();
+
+       void create_objects();
+       void update(int mode, int send=1);
+       void affine_item(int id);
+
+       PerspectiveWindow *gui;
+       int mode;
+};
+
+class PerspectiveAffineItem : public BC_MenuItem
+{
+public:
+       PerspectiveAffineItem(const char *txt, int id)
+       : BC_MenuItem(txt) { this->id = id; }
+
+       int handle_event();
+       PerspectiveWindow *gui;
+       int id;
+};
+
+class PerspectiveZoomView : public BC_FSlider
+{
+public:
+       PerspectiveZoomView(PerspectiveWindow *gui,
+               int x, int y, int w);
+       ~PerspectiveZoomView();
+
+       int handle_event();
+       char *get_caption();
+       void update(float zoom);
+
+       PerspectiveWindow *gui;
+};
+
+
 class PerspectiveWindow : public PluginClientWindow
 {
 public:
@@ -149,29 +177,24 @@ public:
        int resize_event(int x, int y);
        void update_canvas();
        void update_mode();
+       void update_view_zoom();
+       void reset_view();
        void update_coord();
-       void calculate_canvas_coords(int &x1,
-               int &y1,
-               int &x2,
-               int &y2,
-               int &x3,
-               int &y3,
-               int &x4,
-               int &y4);
+       void calculate_canvas_coords(
+               int &x1, int &y1, int &x2, int &y2,
+               int &x3, int &y3, int &x4, int &y4);
 
        PerspectiveCanvas *canvas;
        PerspectiveCoord *x, *y;
        PerspectiveReset *reset;
+       PerspectiveZoomView *zoom_view;
        PerspectiveMode *mode_perspective, *mode_sheer, *mode_stretch;
+       PerspectiveAffine *affine;
        PerspectiveMain *plugin;
        PerspectiveDirection *forward, *reverse;
 };
 
 
-
-
-
-
 class PerspectiveMain : public PluginVClient
 {
 public:
@@ -199,13 +222,3 @@ public:
 };
 
 
-
-
-
-
-
-
-
-
-
-