GPv3: Crash when drawing on new layers

Crash occurs during drawing on fresh added layer due to missing keyframe
on it. Use `insert_frame` to add frame on new layer.

This is similar to GPv2 (`BKE_gpencil_layer_frame_get` is used there to
add default keyframe on new layer)

Pull Request: https://projects.blender.org/blender/blender/pulls/109321
This commit is contained in:
Pratik Borhade
2023-06-27 08:19:37 +02:00
committed by Pratik Borhade
parent 1a0be7be9d
commit d66e12104b

View File

@@ -16,6 +16,8 @@
#include "RNA_access.h"
#include "RNA_define.h"
#include "DNA_scene_types.h"
#include "WM_api.h"
namespace blender::ed::greasepencil {
@@ -24,21 +26,27 @@ static int grease_pencil_layer_add_exec(bContext *C, wmOperator *op)
{
using namespace blender::bke::greasepencil;
Object *object = CTX_data_active_object(C);
Scene *scene = CTX_data_scene(C);
GreasePencil &grease_pencil = *static_cast<GreasePencil *>(object->data);
int new_layer_name_length;
char *new_layer_name = RNA_string_get_alloc(
op->ptr, "new_layer_name", nullptr, 0, &new_layer_name_length);
grease_pencil.add_empty_drawings(1);
GreasePencilFrame frame{grease_pencil.drawings().size() - 1, 0, BEZT_KEYTYPE_KEYFRAME};
if (grease_pencil.has_active_layer()) {
LayerGroup &active_group = grease_pencil.get_active_layer()->parent_group();
Layer &new_layer = grease_pencil.add_layer_after(
active_group, grease_pencil.get_active_layer_for_write(), new_layer_name);
grease_pencil.set_active_layer(&new_layer);
new_layer.insert_frame(scene->r.cfra, frame);
}
else {
Layer &new_layer = grease_pencil.add_layer(new_layer_name);
grease_pencil.set_active_layer(&new_layer);
new_layer.insert_frame(scene->r.cfra, frame);
}
MEM_SAFE_FREE(new_layer_name);