add stacked edl editing, add sketcher/vframe line anti-aliasing
[goodguy/cinelerra.git] / cinelerra-5.1 / plugins / sketcher / sketcher.h
index 443e8e9134abc8f25826566236a713233d7735a9..dcf7a6ba34772c08e92312ed311c23ce4e43e4f0 100644 (file)
@@ -34,9 +34,10 @@ class Sketcher;
 #define CV_COLOR WHITE
 
 enum { PT_ID, PT_TY, PT_X, PT_Y, PT_SZ };
-enum { CV_ID, CV_RAD, CV_PEN, CV_CLR, CV_SZ };
-enum { PTY_OFF, PTY_LINE, PTY_CURVE, PTY_FILL, PTY_SZ };
+enum { CV_ID, CV_RAD, CV_PEN, CV_CLR, CV_ALP, CV_SZ };
+enum { ARC_OFF, ARC_LINE, ARC_CURVE, ARC_FILL, ARC_SZ };
 enum { PEN_OFF, PEN_SQUARE, PEN_PLUS, PEN_SLANT, PEN_XLANT, PEN_SZ };
+typedef float coord;
 
 class SketcherVPen : public VFrame
 {
@@ -45,6 +46,7 @@ public:
        int n;
        uint8_t *msk;
 
+       int draw_mask(int x, int y);
        SketcherVPen(VFrame *vfrm, int n)
         : VFrame(vfrm->get_data(), -1, vfrm->get_y()-vfrm->get_data(),
            vfrm->get_u()-vfrm->get_data(), vfrm->get_v()-vfrm->get_data(),
@@ -56,43 +58,49 @@ public:
        }
        ~SketcherVPen() { delete [] msk; }
 
-       virtual int draw_pixel(int x, int y) = 0;
+       void draw_smooth(float x1, float y1, float x2, float y2, float x3, float y3) {
+               VFrame::draw_smooth(int(x1+.5f),int(y1+.5f),
+                       int(x2+.5f),int(y2+.5f), int(x3+.5f),int(y3+.5f));
+       }
+
+       virtual int draw_pixel(float x, float y, float a) = 0;
+       int draw_pixel(float x, float y, float frac, int axis);
 };
 
 class SketcherPenSquare : public SketcherVPen
 {
 public:
        SketcherPenSquare(VFrame *vfrm, int n) : SketcherVPen(vfrm, n) {}
-       int draw_pixel(int x, int y);
+       int draw_pixel(float x, float y, float a);
 };
 class SketcherPenPlus : public SketcherVPen
 {
 public:
        SketcherPenPlus(VFrame *vfrm, int n) : SketcherVPen(vfrm, n) {}
-       int draw_pixel(int x, int y);
+       int draw_pixel(float x, float y, float a);
 };
 class SketcherPenSlant : public SketcherVPen
 {
 public:
        SketcherPenSlant(VFrame *vfrm, int n) : SketcherVPen(vfrm, n) {}
-       int draw_pixel(int x, int y);
+       int draw_pixel(float x, float y, float a);
 };
 class SketcherPenXlant : public SketcherVPen
 {
 public:
        SketcherPenXlant(VFrame *vfrm, int n) : SketcherVPen(vfrm, n) {}
-       int draw_pixel(int x, int y);
+       int draw_pixel(float x, float y, float a);
 };
 
 
 class SketcherPoint
 {
 public:
-       int id, pty;
-       int x, y;
+       int id, arc;
+       coord x, y;
 
-       void init(int id, int pty, int x, int y);
-       SketcherPoint(int id, int pty, int x, int y);
+       void init(int id, int arc, coord x, coord y);
+       SketcherPoint(int id, int arc, coord x, coord y);
        SketcherPoint(int id=-1);
        SketcherPoint(SketcherPoint &pt);
        ~SketcherPoint();
@@ -100,7 +108,7 @@ public:
        void copy_from(SketcherPoint &that);
        void save_data(FileXML &output);
        void read_data(FileXML &input);
-       static const char *types[PTY_SZ];
+       static const char *types[ARC_SZ];
 };
 class SketcherPoints : public ArrayList<SketcherPoint *>
 {
@@ -114,13 +122,13 @@ public:
 class SketcherCurve
 {
 public:
-       int id, pen, radius, color;
+       int id, pen, width, color;
        static const char *pens[PEN_SZ];
 
        SketcherPoints points;
 
-       void init(int id, int pen, int radius, int color);
-       SketcherCurve(int id, int pen, int radius, int color);
+       void init(int id, int pen, int width, int color);
+       SketcherCurve(int id, int pen, int width, int color);
        SketcherCurve(int id=-1);
        ~SketcherCurve();
        SketcherCurve(SketcherCurve &cv);
@@ -128,10 +136,10 @@ public:
        void copy_from(SketcherCurve &that);
        void save_data(FileXML &output);
        void read_data(FileXML &input);
-       double nearest_point(int &pi, float x, float y);
+       double nearest_point(int &pi, coord x, coord y);
 
        SketcherVPen *new_vpen(VFrame *out);
-       void draw(VFrame *img);
+       void draw(VFrame *img, int flags);
 };
 class SketcherCurves : public ArrayList<SketcherCurve *>
 {
@@ -152,11 +160,12 @@ public:
        void copy_from(SketcherConfig &that);
        void interpolate(SketcherConfig &prev, SketcherConfig &next,
                long prev_frame, long next_frame, long current_frame);
-       double nearest_point(int &ci, int &pi, float x, float y);
+       double nearest_point(int &ci, int &pi, coord x, coord y);
        void limits();
        void dump();
 
        int drag;
+       int aliasing;
        int cv_selected, pt_selected;
 };
 
@@ -167,13 +176,14 @@ public:
        ~Sketcher();
        PLUGIN_CLASS_MEMBERS2(SketcherConfig)
        int is_realtime();
+       int is_synthesis();
        void update_gui();
        void save_data(KeyFrame *keyframe);
        void read_data(KeyFrame *keyframe);
-       int new_curve(int pen, int radius, int color);
+       int new_curve(int pen, int width, int color);
        int new_curve();
-       int new_point(SketcherCurve *cv, int pty, int x, int y, int idx=-1);
-       int new_point(int idx=-1);
+       int new_point(SketcherCurve *cv, int arc, coord x, coord y, int idx=-1);
+       int new_point(int idx, int arc);
        int process_realtime(VFrame *input, VFrame *output);
        static void draw_point(VFrame *vfrm, SketcherPoint *pt, int color, int d);
        void draw_point(VFrame *vfrm, SketcherPoint *pt, int color);