mask tweaks, focus follows centroid, gradient/colorpicker rework, no hard edges in...
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / track.C
index ee16058bd1db7054d97c5a3f9eb9979288402c77..d5363317c5877b8e7badd91fe36537e5d62be09f 100644 (file)
@@ -33,6 +33,7 @@
 #include "keyframe.h"
 #include "labels.h"
 #include "localsession.h"
 #include "keyframe.h"
 #include "labels.h"
 #include "localsession.h"
+#include "maskauto.h"
 #include "module.h"
 #include "patch.h"
 #include "patchbay.h"
 #include "module.h"
 #include "patch.h"
 #include "patchbay.h"
@@ -67,6 +68,7 @@ Track::Track(EDL *edl, Tracks *tracks) : ListItem<Track>()
        track_h = edl->session->output_h;
        id = EDL::next_id();
        mixer_id = -1;
        track_h = edl->session->output_h;
        id = EDL::next_id();
        mixer_id = -1;
+       masks = (1<<SUBMASKS)-1;
 }
 
 Track::~Track()
 }
 
 Track::~Track()
@@ -80,10 +82,9 @@ void Track::create_objects()
 {
 }
 
 {
 }
 
-int Track::copy_settings(Track *track, int do_title)
+
+int Track::copy_settings(Track *track)
 {
 {
-       if( do_title )
-               strcpy(this->title, track->title);
        this->expand_view = track->expand_view;
        this->draw = track->draw;
        this->gang = track->gang;
        this->expand_view = track->expand_view;
        this->draw = track->draw;
        this->gang = track->gang;
@@ -93,6 +94,8 @@ int Track::copy_settings(Track *track, int do_title)
        this->play = track->play;
        this->track_w = track->track_w;
        this->track_h = track->track_h;
        this->play = track->play;
        this->track_w = track->track_w;
        this->track_h = track->track_h;
+       this->masks = track->masks;
+       strcpy(this->title, track->title);
        return 0;
 }
 
        return 0;
 }
 
@@ -334,6 +337,7 @@ int Track::load(FileXML *file, int track_offset, uint32_t load_flags)
        expand_view = file->tag.get_property("EXPAND", expand_view);
        track_w = file->tag.get_property("TRACK_W", track_w);
        track_h = file->tag.get_property("TRACK_H", track_h);
        expand_view = file->tag.get_property("EXPAND", expand_view);
        track_w = file->tag.get_property("TRACK_W", track_w);
        track_h = file->tag.get_property("TRACK_H", track_h);
+       masks = file->tag.get_property("MASKS", masks);
 
        load_header(file, load_flags);
 
 
        load_header(file, load_flags);
 
@@ -441,8 +445,7 @@ void Track::insert_track(Track *track,
 //printf("Track::insert_track %d %s %jd\n", __LINE__, title, min_length);
 
 // Decide whether to copy settings based on load_mode
 //printf("Track::insert_track %d %s %jd\n", __LINE__, title, min_length);
 
 // Decide whether to copy settings based on load_mode
-       if( replace_default )
-               copy_settings(track, 0);
+       if(replace_default) copy_settings(track);
 
        edits->insert_edits(track->edits,
                to_units(position, 0),
 
        edits->insert_edits(track->edits,
                to_units(position, 0),
@@ -853,8 +856,8 @@ void Track::synchronize_params(Track *track)
 
 int Track::dump(FILE *fp)
 {
 
 int Track::dump(FILE *fp)
 {
-       fprintf(fp,"   Data type %d, draw %d, gang %d, play %d, record %d, nudge %jd\n",
-               data_type, draw, gang, play, record, nudge);
+       fprintf(fp,"   Data type %d, draw %d, gang %d, play %d, record %d, nudge %jd, masks 0x%04x\n",
+               data_type, draw, gang, play, record, nudge, masks);
        fprintf(fp,"   Title %s\n", title);
        fprintf(fp,"   Edits:\n");
        for(Edit* current = edits->first; current; current = NEXT)
        fprintf(fp,"   Title %s\n", title);
        fprintf(fp,"   Edits:\n");
        for(Edit* current = edits->first; current; current = NEXT)
@@ -1057,6 +1060,7 @@ int Track::copy(int copy_flags, double start, double end,
        file->tag.set_property("EXPAND", expand_view);
        file->tag.set_property("TRACK_W", track_w);
        file->tag.set_property("TRACK_H", track_h);
        file->tag.set_property("EXPAND", expand_view);
        file->tag.set_property("TRACK_W", track_w);
        file->tag.set_property("TRACK_H", track_h);
+       file->tag.set_property("MASKS", masks);
        save_header(file);
        file->append_tag();
        file->append_newline();
        save_header(file);
        file->append_tag();
        file->append_newline();
@@ -1138,7 +1142,7 @@ int Track::blade(double position)
 {
        int64_t start = to_units(position, 0);
        Edit *edit = edits->split_edit(start);
 {
        int64_t start = to_units(position, 0);
        Edit *edit = edits->split_edit(start);
-       if( !edit ) return 1;
+       if( !edit || edit->silence() ) return 1;
        edit->hard_left = 1;
        if( edit->previous ) edit->previous->hard_right = 1;
        return 0;
        edit->hard_left = 1;
        if( edit->previous ) edit->previous->hard_right = 1;
        return 0;