Fix #127087: GPv3: Initialize/copy attributes when adding/duplicating layers

- set default values for attributes on new GP layer
- copy attributes when duplicating GP layer

Pull Request: https://projects.blender.org/blender/blender/pulls/128344
This commit is contained in:
Thomas Lachmann
2024-10-15 15:08:09 +02:00
committed by Falk David
parent 5be60642ad
commit 5f84f934a8

View File

@@ -3243,7 +3243,7 @@ blender::bke::greasepencil::Layer &GreasePencil::add_layer(const blender::String
using namespace blender;
std::string unique_name = check_name_is_unique ? unique_layer_name(*this, name) : name.c_str();
const int numLayers = layers().size();
CustomData_realloc(&layers_data, numLayers, numLayers + 1);
CustomData_realloc(&layers_data, numLayers, numLayers + 1, CD_SET_DEFAULT);
bke::greasepencil::Layer *new_layer = MEM_new<bke::greasepencil::Layer>(__func__, unique_name);
/* Hide masks by default. */
new_layer->base.flag |= GP_LAYER_TREE_NODE_HIDE_MASKS;
@@ -3288,8 +3288,15 @@ blender::bke::greasepencil::Layer &GreasePencil::duplicate_layer(
{
using namespace blender;
std::string unique_name = unique_layer_name(*this, duplicate_layer.name());
std::optional<int> duplicate_layer_idx = get_layer_index(duplicate_layer);
const int numLayers = layers().size();
CustomData_realloc(&layers_data, numLayers, numLayers + 1);
if (duplicate_layer_idx.has_value()) {
for (const int layer_index : IndexRange(layers_data.totlayer)) {
CustomData_copy_data_layer(
&layers_data, &layers_data, layer_index, layer_index, *duplicate_layer_idx, numLayers, 1);
}
}
bke::greasepencil::Layer *new_layer = MEM_new<bke::greasepencil::Layer>(__func__,
duplicate_layer);
root_group().add_node(new_layer->as_node());