mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
Remove region raise() and lower(). Try to do region layering better.
git-svn-id: svn://localhost/ardour2/trunk@1881 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
de9187f0ed
commit
452daa6371
9 changed files with 42 additions and 185 deletions
|
|
@ -870,9 +870,7 @@ class Editor : public PublicEditor
|
||||||
void set_region_lock (bool);
|
void set_region_lock (bool);
|
||||||
void set_region_position_lock (bool);
|
void set_region_position_lock (bool);
|
||||||
void set_region_opaque (bool);
|
void set_region_opaque (bool);
|
||||||
void raise_region ();
|
|
||||||
void raise_region_to_top ();
|
void raise_region_to_top ();
|
||||||
void lower_region ();
|
|
||||||
void lower_region_to_bottom ();
|
void lower_region_to_bottom ();
|
||||||
void split_region ();
|
void split_region ();
|
||||||
void split_region_at (nframes_t);
|
void split_region_at (nframes_t);
|
||||||
|
|
|
||||||
|
|
@ -1006,25 +1006,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||||
case 2:
|
case 2:
|
||||||
switch (mouse_mode) {
|
switch (mouse_mode) {
|
||||||
|
|
||||||
case MouseObject:
|
|
||||||
switch (item_type) {
|
|
||||||
case RegionItem:
|
|
||||||
if (Keyboard::modifier_state_equals (event->button.state, Keyboard::Shift)) {
|
|
||||||
raise_region ();
|
|
||||||
} else if (Keyboard::modifier_state_equals (event->button.state, Keyboard::ModifierMask (Keyboard::Shift|Keyboard::Alt))) {
|
|
||||||
lower_region ();
|
|
||||||
} else {
|
|
||||||
// Button2 click is unused
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case MouseRange:
|
case MouseRange:
|
||||||
|
|
||||||
// x_style_paste (where, 1.0);
|
// x_style_paste (where, 1.0);
|
||||||
|
|
|
||||||
|
|
@ -1708,24 +1708,12 @@ Editor::loop_location (Location& location)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Editor::raise_region ()
|
|
||||||
{
|
|
||||||
selection->foreach_region (&Region::raise);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::raise_region_to_top ()
|
Editor::raise_region_to_top ()
|
||||||
{
|
{
|
||||||
selection->foreach_region (&Region::raise_to_top);
|
selection->foreach_region (&Region::raise_to_top);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Editor::lower_region ()
|
|
||||||
{
|
|
||||||
selection->foreach_region (&Region::lower);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::lower_region_to_bottom ()
|
Editor::lower_region_to_bottom ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -271,24 +271,12 @@ RegionView::region_opacity ()
|
||||||
set_frame_color ();
|
set_frame_color ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
RegionView::raise ()
|
|
||||||
{
|
|
||||||
_region->raise ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
RegionView::raise_to_top ()
|
RegionView::raise_to_top ()
|
||||||
{
|
{
|
||||||
_region->raise_to_top ();
|
_region->raise_to_top ();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
RegionView::lower ()
|
|
||||||
{
|
|
||||||
_region->lower ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
RegionView::lower_to_bottom ()
|
RegionView::lower_to_bottom ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -65,9 +65,7 @@ class RegionView : public TimeAxisViewItem
|
||||||
|
|
||||||
void move (double xdelta, double ydelta);
|
void move (double xdelta, double ydelta);
|
||||||
|
|
||||||
void raise ();
|
|
||||||
void raise_to_top ();
|
void raise_to_top ();
|
||||||
void lower ();
|
|
||||||
void lower_to_bottom ();
|
void lower_to_bottom ();
|
||||||
|
|
||||||
bool set_position(nframes_t pos, void* src, double* delta = 0);
|
bool set_position(nframes_t pos, void* src, double* delta = 0);
|
||||||
|
|
|
||||||
|
|
@ -125,8 +125,6 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f
|
||||||
void freeze ();
|
void freeze ();
|
||||||
void thaw ();
|
void thaw ();
|
||||||
|
|
||||||
void raise_region (boost::shared_ptr<Region>);
|
|
||||||
void lower_region (boost::shared_ptr<Region>);
|
|
||||||
void raise_region_to_top (boost::shared_ptr<Region>);
|
void raise_region_to_top (boost::shared_ptr<Region>);
|
||||||
void lower_region_to_bottom (boost::shared_ptr<Region>);
|
void lower_region_to_bottom (boost::shared_ptr<Region>);
|
||||||
|
|
||||||
|
|
@ -265,8 +263,6 @@ class Playlist : public PBD::StatefulDestructible, public boost::enable_shared_f
|
||||||
boost::shared_ptr<Playlist> cut (nframes_t start, nframes_t cnt, bool result_is_hidden);
|
boost::shared_ptr<Playlist> cut (nframes_t start, nframes_t cnt, bool result_is_hidden);
|
||||||
boost::shared_ptr<Playlist> copy (nframes_t start, nframes_t cnt, bool result_is_hidden);
|
boost::shared_ptr<Playlist> copy (nframes_t start, nframes_t cnt, bool result_is_hidden);
|
||||||
|
|
||||||
|
|
||||||
int move_region_to_layer (layer_t, boost::shared_ptr<Region> r, int dir);
|
|
||||||
void relayer ();
|
void relayer ();
|
||||||
|
|
||||||
void unset_freeze_parent (Playlist*);
|
void unset_freeze_parent (Playlist*);
|
||||||
|
|
|
||||||
|
|
@ -155,8 +155,6 @@ class Region : public PBD::StatefulDestructible, public boost::enable_shared_fro
|
||||||
void trim_to (nframes_t position, nframes_t length, void *src);
|
void trim_to (nframes_t position, nframes_t length, void *src);
|
||||||
|
|
||||||
void set_layer (layer_t l); /* ONLY Playlist can call this */
|
void set_layer (layer_t l); /* ONLY Playlist can call this */
|
||||||
void raise ();
|
|
||||||
void lower ();
|
|
||||||
void raise_to_top ();
|
void raise_to_top ();
|
||||||
void lower_to_bottom ();
|
void lower_to_bottom ();
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1585,33 +1585,61 @@ Playlist::set_edit_mode (EditMode mode)
|
||||||
void
|
void
|
||||||
Playlist::relayer ()
|
Playlist::relayer ()
|
||||||
{
|
{
|
||||||
RegionList::iterator i;
|
|
||||||
uint32_t layer = 0;
|
|
||||||
|
|
||||||
/* don't send multiple Modified notifications
|
/* don't send multiple Modified notifications
|
||||||
when multiple regions are relayered.
|
when multiple regions are relayered.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
freeze ();
|
freeze ();
|
||||||
|
|
||||||
if (Config->get_layer_model() == MoveAddHigher ||
|
/* build up a new list of regions on each layer */
|
||||||
Config->get_layer_model() == AddHigher) {
|
|
||||||
|
|
||||||
|
std::vector<RegionList> layers;
|
||||||
|
|
||||||
|
/* we want to go through regions from desired lowest to desired highest layer,
|
||||||
|
which depends on the layer model
|
||||||
|
*/
|
||||||
|
RegionList copy = regions;
|
||||||
|
if (Config->get_layer_model() == MoveAddHigher || Config->get_layer_model() == AddHigher) {
|
||||||
RegionSortByLastLayerOp cmp;
|
RegionSortByLastLayerOp cmp;
|
||||||
RegionList copy = regions;
|
|
||||||
|
|
||||||
copy.sort (cmp);
|
copy.sort (cmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (RegionList::iterator i = copy.begin(); i != copy.end(); ++i) {
|
||||||
|
|
||||||
for (i = copy.begin(); i != copy.end(); ++i) {
|
/* find the lowest layer that this region can go on */
|
||||||
(*i)->set_layer (layer++);
|
size_t j = layers.size();
|
||||||
|
while (j > 0) {
|
||||||
|
/* try layer j - 1; it can go on if it overlaps no other region
|
||||||
|
that is already on that layer
|
||||||
|
*/
|
||||||
|
RegionList::iterator k = layers[j - 1].begin();
|
||||||
|
while (k != layers[j - 1].end()) {
|
||||||
|
if ((*k)->overlap_equivalent (*i)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
k++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (k != layers[j - 1].end()) {
|
||||||
|
/* no overlap, so we can use this layer */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
j--;
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
if (j == layers.size()) {
|
||||||
|
/* we need a new layer for this region */
|
||||||
/* Session::LaterHigher model */
|
layers.push_back (RegionList ());
|
||||||
|
}
|
||||||
|
|
||||||
for (i = regions.begin(); i != regions.end(); ++i) {
|
layers[j].push_back (*i);
|
||||||
(*i)->set_layer (layer++);
|
}
|
||||||
|
|
||||||
|
/* set up the layer numbers in the regions */
|
||||||
|
for (size_t j = 0; j < layers.size(); ++j) {
|
||||||
|
for (RegionList::iterator i = layers[j].begin(); i != layers[j].end(); ++i) {
|
||||||
|
(*i)->set_layer (j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1630,33 +1658,6 @@ Playlist::relayer ()
|
||||||
|
|
||||||
/* XXX these layer functions are all deprecated */
|
/* XXX these layer functions are all deprecated */
|
||||||
|
|
||||||
void
|
|
||||||
Playlist::raise_region (boost::shared_ptr<Region> region)
|
|
||||||
{
|
|
||||||
uint32_t rsz = regions.size();
|
|
||||||
layer_t target = region->layer() + 1U;
|
|
||||||
|
|
||||||
if (target >= rsz) {
|
|
||||||
/* its already at the effective top */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
move_region_to_layer (target, region, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Playlist::lower_region (boost::shared_ptr<Region> region)
|
|
||||||
{
|
|
||||||
if (region->layer() == 0) {
|
|
||||||
/* its already at the bottom */
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
layer_t target = region->layer() - 1U;
|
|
||||||
|
|
||||||
move_region_to_layer (target, region, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Playlist::raise_region_to_top (boost::shared_ptr<Region> region)
|
Playlist::raise_region_to_top (boost::shared_ptr<Region> region)
|
||||||
{
|
{
|
||||||
|
|
@ -1679,79 +1680,6 @@ Playlist::lower_region_to_bottom (boost::shared_ptr<Region> region)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
Playlist::move_region_to_layer (layer_t target_layer, boost::shared_ptr<Region> region, int dir)
|
|
||||||
{
|
|
||||||
RegionList::iterator i;
|
|
||||||
typedef pair<boost::shared_ptr<Region>,layer_t> LayerInfo;
|
|
||||||
list<LayerInfo> layerinfo;
|
|
||||||
layer_t dest;
|
|
||||||
|
|
||||||
{
|
|
||||||
RegionLock rlock (const_cast<Playlist *> (this));
|
|
||||||
|
|
||||||
for (i = regions.begin(); i != regions.end(); ++i) {
|
|
||||||
|
|
||||||
if (region == *i) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dir > 0) {
|
|
||||||
|
|
||||||
/* region is moving up, move all regions on intermediate layers
|
|
||||||
down 1
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((*i)->layer() > region->layer() && (*i)->layer() <= target_layer) {
|
|
||||||
dest = (*i)->layer() - 1;
|
|
||||||
} else {
|
|
||||||
/* not affected */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
|
|
||||||
/* region is moving down, move all regions on intermediate layers
|
|
||||||
up 1
|
|
||||||
*/
|
|
||||||
|
|
||||||
if ((*i)->layer() < region->layer() && (*i)->layer() >= target_layer) {
|
|
||||||
dest = (*i)->layer() + 1;
|
|
||||||
} else {
|
|
||||||
/* not affected */
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LayerInfo newpair;
|
|
||||||
|
|
||||||
newpair.first = *i;
|
|
||||||
newpair.second = dest;
|
|
||||||
|
|
||||||
layerinfo.push_back (newpair);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* now reset the layers without holding the region lock */
|
|
||||||
|
|
||||||
for (list<LayerInfo>::iterator x = layerinfo.begin(); x != layerinfo.end(); ++x) {
|
|
||||||
x->first->set_layer (x->second);
|
|
||||||
}
|
|
||||||
|
|
||||||
region->set_layer (target_layer);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* now check all dependents */
|
|
||||||
|
|
||||||
for (list<LayerInfo>::iterator x = layerinfo.begin(); x != layerinfo.end(); ++x) {
|
|
||||||
check_dependents (x->first, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
check_dependents (region, false);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Playlist::nudge_after (nframes_t start, nframes_t distance, bool forwards)
|
Playlist::nudge_after (nframes_t start, nframes_t distance, bool forwards)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -852,24 +852,6 @@ Region::sync_position() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Region::raise ()
|
|
||||||
{
|
|
||||||
boost::shared_ptr<Playlist> pl (playlist());
|
|
||||||
if (pl) {
|
|
||||||
pl->raise_region (shared_from_this ());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Region::lower ()
|
|
||||||
{
|
|
||||||
boost::shared_ptr<Playlist> pl (playlist());
|
|
||||||
if (pl) {
|
|
||||||
pl->lower_region (shared_from_this ());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Region::raise_to_top ()
|
Region::raise_to_top ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue