X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fmaskauto.h;h=a1338f43313a8005eebe39f10044426016720e6c;hp=5162d8e97d6fef901b478daeabc96c5bffad65fa;hb=076da20a596fe698e1152ce2f3f2d75d2daddec8;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/maskauto.h b/cinelerra-5.1/cinelerra/maskauto.h index 5162d8e9..a1338f43 100644 --- a/cinelerra-5.1/cinelerra/maskauto.h +++ b/cinelerra-5.1/cinelerra/maskauto.h @@ -44,21 +44,62 @@ public: float control_x2, control_y2; }; +class MaskCoord { public: double x, y, z; }; + +class MaskEdge : public ArrayList +{ +public: + MaskCoord &append(double x, double y, double z=0) { + MaskCoord &c = ArrayList::append(); + c.x = x; c.y = y; c.z = z; + return c; + } + void load(MaskPoints &points, float ofs); +}; + +class MaskEdges : public ArrayList { +public: + MaskEdges() {} + ~MaskEdges() { remove_all_objects(); } +}; + +class MaskPoints : public ArrayList +{ +public: + void clear() { remove_all_objects(); } + MaskPoints() {} + ~MaskPoints() { clear(); } +}; + +class MaskPointSets : public ArrayList +{ +public: + void clear() { remove_all_objects(); } + MaskPointSets() {} + ~MaskPointSets() { clear(); } +}; + +#define FEATHER_MAX 100 +// GL reg limit 1024 incls shader param list +#define MAX_FEATHER 1000 + class SubMask { public: - SubMask(MaskAuto *keyframe); + SubMask(MaskAuto *keyframe, int no); ~SubMask(); -// Don't use == int operator==(SubMask& ptr); int equivalent(SubMask& ptr); - void copy_from(SubMask& ptr); + void copy_from(SubMask& ptr, int do_name=1); void load(FileXML *file); void copy(FileXML *file); - void dump(); + void dump(FILE *fp); - ArrayList points; + char name[BCSTRLEN]; + float fader; + float feather; + MaskPoints points; MaskAuto *keyframe; }; @@ -70,6 +111,7 @@ public: int operator==(Auto &that); int operator==(MaskAuto &that); + bool is_maskauto() { return true; } int identical(MaskAuto *src); void load(FileXML *file); void copy(int64_t start, int64_t end, FileXML *file, int default_auto); @@ -78,34 +120,40 @@ public: void copy_from(MaskAuto *src); // Copy data but not position void copy_data(MaskAuto *src); - void get_points(ArrayList *points, + void get_points(MaskPoints *points, int submask); - void set_points(ArrayList *points, + void set_points(MaskPoints *points, int submask); // Copy parameters to this which differ between ref & src void update_parameter(MaskAuto *ref, MaskAuto *src); - void dump(); + void dump(FILE *fp); // Retrieve submask with clamping SubMask* get_submask(int number); // Translates all submasks void translate_submasks(float translate_x, float translate_y); // scale all submasks void scale_submasks(int orig_scale, int new_scale); - + int has_active_mask(); ArrayList masks; -// These are constant for the entire track - int mode; - float feather; -// 0 - 100 - int value; int apply_before_plugins; int disable_opengl_masking; }; +// shader buffer unsized array vec only seems to work for dvec (05/2019) +class MaskSpot { public: double x, y; }; - +class MaskSpots : public ArrayList +{ +public: + MaskSpot &append() { return ArrayList::append(); } + MaskSpot &append(double x, double y) { + MaskSpot &s = append(); + s.x = x; s.y = y; + return s; + } +}; #endif