13
0

Introduce a dedicated "Clock Origin" Marker

This commit is contained in:
Robin Gareus 2017-11-22 22:08:40 +01:00
parent 84337d3018
commit e275154a40
3 changed files with 41 additions and 0 deletions

View File

@ -55,6 +55,7 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
IsSessionRange = 0x40,
IsSkip = 0x80,
IsSkipping = 0x100, /* skipping is active (or not) */
IsClockOrigin = 0x200,
};
Location (Session &);
@ -87,6 +88,7 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
void set_hidden (bool yn, void *src);
void set_cd (bool yn, void *src);
void set_is_range_marker (bool yn, void* src);
void set_is_clock_origin (bool yn, void* src);
void set_skip (bool yn);
void set_skipping (bool yn);
@ -98,6 +100,7 @@ class LIBARDOUR_API Location : public SessionHandleRef, public PBD::StatefulDest
bool is_session_range () const { return _flags & IsSessionRange; }
bool is_range_marker() const { return _flags & IsRangeMarker; }
bool is_skip() const { return _flags & IsSkip; }
bool is_clock_origin() const { return _flags & IsClockOrigin; }
bool is_skipping() const { return (_flags & IsSkip) && (_flags & IsSkipping); }
bool matches (Flags f) const { return _flags & f; }
@ -189,6 +192,7 @@ class LIBARDOUR_API Locations : public SessionHandleRef, public PBD::StatefulDes
Location* auto_loop_location () const;
Location* auto_punch_location () const;
Location* session_range_location() const;
Location* clock_origin_location() const;
int next_available_name(std::string& result,std::string base);
uint32_t num_range_markers() const;
@ -198,6 +202,8 @@ class LIBARDOUR_API Locations : public SessionHandleRef, public PBD::StatefulDes
Location* mark_at (samplepos_t, samplecnt_t slop = 0) const;
void set_clock_origin (Location*, void *src);
samplepos_t first_mark_before (samplepos_t, bool include_special_ranges = false);
samplepos_t first_mark_after (samplepos_t, bool include_special_ranges = false);

View File

@ -530,6 +530,7 @@ setup_enum_writer ()
REGISTER_CLASS_ENUM (Location, IsSessionRange);
REGISTER_CLASS_ENUM (Location, IsRangeMarker);
REGISTER_CLASS_ENUM (Location, IsSkip);
REGISTER_CLASS_ENUM (Location, IsClockOrigin);
REGISTER_BITS (_Location_Flags);
REGISTER_CLASS_ENUM (TempoSection, Ramp);

View File

@ -478,6 +478,15 @@ Location::set_is_range_marker (bool yn, void*)
}
}
void
Location::set_is_clock_origin (bool yn, void*)
{
if (set_flag_internal (yn, IsClockOrigin)) {
flags_changed (this);
FlagsChanged (); /* EMIT SIGNAL */
}
}
void
Location::set_skip (bool yn)
{
@ -800,6 +809,20 @@ Locations::set_current (Location *loc, bool want_lock)
return ret;
}
void
Locations::set_clock_origin (Location* loc, void *src)
{
LocationList::iterator i;
for (i = locations.begin(); i != locations.end(); ++i) {
if ((*i)->is_clock_origin ()) {
(*i)->set_is_clock_origin (false, src);
}
if (*i == loc) {
(*i)->set_is_clock_origin (true, src);
}
}
}
int
Locations::next_available_name(string& result,string base)
{
@ -1401,6 +1424,17 @@ Locations::auto_punch_location () const
return 0;
}
Location*
Locations::clock_origin_location () const
{
for (LocationList::const_iterator i = locations.begin(); i != locations.end(); ++i) {
if ((*i)->is_clock_origin()) {
return const_cast<Location*> (*i);
}
}
return session_range_location ();
}
uint32_t
Locations::num_range_markers () const
{