aseprite/src/doc/layer_list.cpp
David Capello fbc8d72f1f Add doc::are_layers_adjacent() function
It'll be useful to know if a range operation (e.g. restack layers) will
be applied to adjacent layers (i.e. a range of layers like in previous
Aseprite versions), or to a non-adjacent set of layers.
2016-08-11 15:15:53 -03:00

55 lines
1.0 KiB
C++

// Aseprite Document Library
// Copyright (c) 2016 David Capello
//
// This file is released under the terms of the MIT license.
// Read LICENSE.txt for more information.
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "doc/layer.h"
#include "doc/layer_list.h"
#include <algorithm>
namespace doc {
layer_t find_layer_index(const LayerList& layers, const Layer* layer)
{
auto it = std::find(layers.begin(), layers.end(), layer);
if (it != layers.end())
return it - layers.begin();
else
return 0;
}
bool are_layers_adjacent(const LayerList& layers)
{
layer_t count = 0;
Layer* prev = nullptr;
for (auto layer : layers) {
if (prev && prev != layer->getPrevious())
break;
prev = layer;
++count;
}
if (count == layers.size())
return true;
count = 0;
prev = nullptr;
for (auto layer : layers) {
if (prev && prev != layer->getNext())
break;
prev = layer;
++count;
}
if (count == layers.size())
return true;
return false;
}
} // namespace doc