add preset mask shapes, add ctr/nrml btns, new igor icons, enables apply to mask...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / maskauto.C
index 7a00b01ef95c333be67f57db13b599160247ed76..e490f4c854334bf259f9a1bc4958ebabe2cef1e6 100644 (file)
@@ -96,10 +96,12 @@ int SubMask::operator==(SubMask& ptr)
        return equivalent(ptr);
 }
 
-void SubMask::copy_from(SubMask& ptr)
+void SubMask::copy_from(SubMask& ptr, int do_name)
 {
-       memset(name, 0, sizeof(name));
-       strncpy(name, ptr.name, sizeof(name-1));
+       if( do_name ) {
+               memset(name, 0, sizeof(name));
+               strncpy(name, ptr.name, sizeof(name-1));
+       }
        fader = ptr.fader;
        feather = ptr.feather;
        points.remove_all_objects();
@@ -140,7 +142,8 @@ void SubMask::copy(FileXML *file)
        if(points.total)
        {
                file->tag.set_title("MASK");
-               file->tag.set_property("NUMBER", keyframe->masks.number_of(this));
+               file->tag.set_property("NUMBER",
+                       !keyframe ? -1 : keyframe->masks.number_of(this));
                file->tag.set_property("NAME", name);
                file->tag.set_property("FADER", fader);
                file->tag.set_property("FEATHER", feather);
@@ -436,4 +439,17 @@ void MaskAuto::scale_submasks(int orig_scale, int new_scale)
        }
 }
 
+int MaskAuto::has_active_mask()
+{
+       int total_points = 0;
+       float min_fader = 100;
+       for( int i=0; i<masks.size(); ++i ) {
+               SubMask *mask = get_submask(i);
+               int submask_points = mask->points.size();
+               if( submask_points > 1 ) total_points += submask_points;
+               int fader = mask->fader;
+               if( fader < min_fader ) min_fader = fader;
+       }
+       return min_fader >= 0 && total_points < 2 ? 0 : 1;
+}