GPv3: Initial Layer Tree UI #109197

Merged
Falk David merged 26 commits from filedescriptor/blender:gpv3-layer-tree-ui into main 2023-06-22 10:51:51 +02:00
2 changed files with 21 additions and 9 deletions
Showing only changes of commit 14b214fecc - Show all commits

View File

@ -1180,6 +1180,12 @@ blender::Span<blender::bke::greasepencil::Layer *> GreasePencil::layers_for_writ
return this->root_group.wrap().layers_for_write();
}
blender::Span<const blender::bke::greasepencil::TreeNode *> GreasePencil::nodes() const
{
BLI_assert(this->runtime != nullptr);
return this->root_group.wrap().nodes();
}
const blender::bke::greasepencil::Layer *GreasePencil::get_active_layer() const
{
if (this->active_layer == nullptr) {
@ -1201,11 +1207,21 @@ void GreasePencil::set_active_layer(blender::bke::greasepencil::Layer *layer)
this->active_layer = reinterpret_cast<GreasePencilLayer *>(layer);
}
static blender::VectorSet<blender::StringRefNull> get_node_names(GreasePencil &grease_pencil)
{
using namespace blender;
VectorSet<StringRefNull> names;
for (const blender::bke::greasepencil::TreeNode *node : grease_pencil.nodes()) {
names.add(node->name);
}
return names;
}
static bool check_unique_layer_cb(void *arg, const char *name)
{
using namespace blender;
VectorSet<StringRefNull> &names = *reinterpret_cast<VectorSet<StringRefNull> *>(arg);
return names.contains(StringRefNull(name));
return names.contains(name);
}
static bool unique_layer_name(VectorSet<blender::StringRefNull> &names, char *name)
@ -1217,10 +1233,7 @@ blender::bke::greasepencil::Layer &GreasePencil::add_layer(
blender::bke::greasepencil::LayerGroup &group, const blender::StringRefNull name)
{
using namespace blender;
VectorSet<StringRefNull> names;
for (const blender::bke::greasepencil::Layer *layer : this->layers()) {
names.add(layer->name());
}
VectorSet<StringRefNull> names = get_node_names(*this);
std::string unique_name(name.c_str());
unique_layer_name(names, unique_name.data());
return group.add_layer(unique_name);
@ -1232,10 +1245,7 @@ blender::bke::greasepencil::Layer &GreasePencil::add_layer_after(
const blender::StringRefNull name)
{
using namespace blender;
VectorSet<StringRefNull> names;
for (const blender::bke::greasepencil::Layer *layer : this->layers()) {
names.add(layer->name());
}
VectorSet<StringRefNull> names = get_node_names(*this);
std::string unique_name(name.c_str());
unique_layer_name(names, unique_name.data());
return group.add_layer_after(unique_name, layer);

View File

@ -443,6 +443,8 @@ typedef struct GreasePencil {
blender::Span<const blender::bke::greasepencil::Layer *> layers() const;
blender::Span<blender::bke::greasepencil::Layer *> layers_for_write();
blender::Span<const blender::bke::greasepencil::TreeNode *> nodes() const;
bool has_active_layer() const;
const blender::bke::greasepencil::Layer *get_active_layer() const;
blender::bke::greasepencil::Layer *get_active_layer_for_write();