From 8fc2b6ad06161728e203273a0b762bb9900a1ef8 Mon Sep 17 00:00:00 2001 From: Amelie Date: Wed, 26 Jul 2023 10:29:40 +0200 Subject: [PATCH] GPv3: Prevent crashes from the dopesheet functions Some animation operators are not yet implemented for Grease Pencil 3, and trigger asserts. This patch prevents the asserts to be triggered in case of grease pencil channels, so that Grease Pencil 3 can be tested until the operators are properly implemented. Pull Request: https://projects.blender.org/blender/blender/pulls/110486 --- .../editors/space_action/action_edit.cc | 20 +++++++++++++++++++ .../editors/space_action/action_select.cc | 6 ++++++ 2 files changed, 26 insertions(+) diff --git a/source/blender/editors/space_action/action_edit.cc b/source/blender/editors/space_action/action_edit.cc index 0f93ab0b79a..1ac112517ae 100644 --- a/source/blender/editors/space_action/action_edit.cc +++ b/source/blender/editors/space_action/action_edit.cc @@ -863,6 +863,10 @@ static void insert_action_keys(bAnimContext *ac, short mode) insert_gpencil_key(ac, ale, add_frame_mode, &gpd_old); break; + case ANIMTYPE_GREASE_PENCIL_LAYER: + /* GPv3: To be implemented. */ + break; + case ANIMTYPE_FCURVE: insert_fcurve_key(ac, ale, anim_eval_context, flag, &nla_cache); break; @@ -956,6 +960,9 @@ static bool duplicate_action_keys(bAnimContext *ac) ED_gpencil_layer_frames_duplicate((bGPDlayer *)ale->data); changed |= ED_gpencil_layer_frame_select_check((bGPDlayer *)ale->data); } + else if (ale->type == ANIMTYPE_GREASE_PENCIL_LAYER) { + /* GPv3: To be implemented. */ + } else if (ale->type == ANIMTYPE_MASKLAYER) { ED_masklayer_frames_duplicate((MaskLayer *)ale->data); } @@ -1034,6 +1041,9 @@ static bool delete_action_keys(bAnimContext *ac) if (ale->type == ANIMTYPE_GPLAYER) { changed = ED_gpencil_layer_frames_delete((bGPDlayer *)ale->data); } + else if (ale->type == ANIMTYPE_GREASE_PENCIL_LAYER) { + /* GPv3: To be implemented. */ + } else if (ale->type == ANIMTYPE_MASKLAYER) { changed = ED_masklayer_frames_delete((MaskLayer *)ale->data); } @@ -1618,6 +1628,10 @@ static void setkeytype_action_keys(bAnimContext *ac, short mode) ale->update |= ANIM_UPDATE_DEPS; break; + case ANIMTYPE_GREASE_PENCIL_LAYER: + /* GPv3: To be implemented. */ + break; + case ANIMTYPE_FCURVE: ANIM_fcurve_keyframes_loop( nullptr, static_cast(ale->key_data), nullptr, set_cb, nullptr); @@ -1853,6 +1867,9 @@ static void snap_action_keys(bAnimContext *ac, short mode) if (ale->type == ANIMTYPE_GPLAYER) { ED_gpencil_layer_snap_frames(static_cast(ale->data), ac->scene, mode); } + else if (ale->type == ANIMTYPE_GREASE_PENCIL_LAYER) { + /* GPv3: To be implemented. */ + } else if (ale->type == ANIMTYPE_MASKLAYER) { ED_masklayer_snap_frames(static_cast(ale->data), ac->scene, mode); } @@ -1987,6 +2004,9 @@ static void mirror_action_keys(bAnimContext *ac, short mode) if (ale->type == ANIMTYPE_GPLAYER) { ED_gpencil_layer_mirror_frames(static_cast(ale->data), ac->scene, mode); } + else if (ale->type == ANIMTYPE_GREASE_PENCIL_LAYER) { + /* GPv3: To be implemented. */ + } else if (ale->type == ANIMTYPE_MASKLAYER) { /* TODO */ } diff --git a/source/blender/editors/space_action/action_select.cc b/source/blender/editors/space_action/action_select.cc index d2dc58592cc..83189e50033 100644 --- a/source/blender/editors/space_action/action_select.cc +++ b/source/blender/editors/space_action/action_select.cc @@ -1003,6 +1003,9 @@ static void markers_selectkeys_between(bAnimContext *ac) /* select keys in-between */ for (ale = static_cast(anim_data.first); ale; ale = ale->next) { switch (ale->type) { + case ANIMTYPE_GREASE_PENCIL_LAYER: + /* GPv3: To be implemented. */ + break; case ANIMTYPE_GPLAYER: ED_gpencil_layer_frames_select_box( static_cast(ale->data), min, max, SELECT_ADD); @@ -1437,6 +1440,9 @@ static void actkeys_select_leftright(bAnimContext *ac, short leftright, short se /* select keys */ for (ale = static_cast(anim_data.first); ale; ale = ale->next) { switch (ale->type) { + case ANIMTYPE_GREASE_PENCIL_LAYER: + /* GPv3: To be implemented. */ + break; case ANIMTYPE_GPLAYER: ED_gpencil_layer_frames_select_box( static_cast(ale->data), ked.f1, ked.f2, select_mode);