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
@ -870,9 +870,7 @@ class Editor : public PublicEditor
|
||||
void set_region_lock (bool);
|
||||
void set_region_position_lock (bool);
|
||||
void set_region_opaque (bool);
|
||||
void raise_region ();
|
||||
void raise_region_to_top ();
|
||||
void lower_region ();
|
||||
void lower_region_to_bottom ();
|
||||
void split_region ();
|
||||
void split_region_at (nframes_t);
|
||||
|
@ -1006,25 +1006,6 @@ Editor::button_release_handler (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||
case 2:
|
||||
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:
|
||||
|
||||
// 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
|
||||
Editor::raise_region_to_top ()
|
||||
{
|
||||
selection->foreach_region (&Region::raise_to_top);
|
||||
}
|
||||
|
||||
void
|
||||
Editor::lower_region ()
|
||||
{
|
||||
selection->foreach_region (&Region::lower);
|
||||
}
|
||||
|
||||
void
|
||||
Editor::lower_region_to_bottom ()
|
||||
{
|
||||
|
@ -271,24 +271,12 @@ RegionView::region_opacity ()
|
||||
set_frame_color ();
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::raise ()
|
||||
{
|
||||
_region->raise ();
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::raise_to_top ()
|
||||
{
|
||||
_region->raise_to_top ();
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::lower ()
|
||||
{
|
||||
_region->lower ();
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::lower_to_bottom ()
|
||||
{
|
||||
|
@ -65,9 +65,7 @@ class RegionView : public TimeAxisViewItem
|
||||
|
||||
void move (double xdelta, double ydelta);
|
||||
|
||||
void raise ();
|
||||
void raise_to_top ();
|
||||
void lower ();
|
||||
void lower_to_bottom ();
|
||||
|
||||
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 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 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> 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 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 set_layer (layer_t l); /* ONLY Playlist can call this */
|
||||
void raise ();
|
||||
void lower ();
|
||||
void raise_to_top ();
|
||||
void lower_to_bottom ();
|
||||
|
||||
|
@ -1585,33 +1585,61 @@ Playlist::set_edit_mode (EditMode mode)
|
||||
void
|
||||
Playlist::relayer ()
|
||||
{
|
||||
RegionList::iterator i;
|
||||
uint32_t layer = 0;
|
||||
|
||||
/* don't send multiple Modified notifications
|
||||
when multiple regions are relayered.
|
||||
*/
|
||||
|
||||
freeze ();
|
||||
|
||||
if (Config->get_layer_model() == MoveAddHigher ||
|
||||
Config->get_layer_model() == AddHigher) {
|
||||
/* build up a new list of regions on each layer */
|
||||
|
||||
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;
|
||||
RegionList copy = regions;
|
||||
|
||||
copy.sort (cmp);
|
||||
}
|
||||
|
||||
for (RegionList::iterator i = copy.begin(); i != copy.end(); ++i) {
|
||||
|
||||
for (i = copy.begin(); i != copy.end(); ++i) {
|
||||
(*i)->set_layer (layer++);
|
||||
/* find the lowest layer that this region can go on */
|
||||
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 {
|
||||
|
||||
/* Session::LaterHigher model */
|
||||
if (j == layers.size()) {
|
||||
/* we need a new layer for this region */
|
||||
layers.push_back (RegionList ());
|
||||
}
|
||||
|
||||
for (i = regions.begin(); i != regions.end(); ++i) {
|
||||
(*i)->set_layer (layer++);
|
||||
layers[j].push_back (*i);
|
||||
}
|
||||
|
||||
/* 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 */
|
||||
|
||||
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
|
||||
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
|
||||
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
|
||||
Region::raise_to_top ()
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user