diff options
author | Sybren A. Stüvel <sybren@blender.org> | 2020-03-16 18:16:35 +0300 |
---|---|---|
committer | Sybren A. Stüvel <sybren@blender.org> | 2020-03-16 18:23:12 +0300 |
commit | ba26adee0c5caa6d4f3ffbda9c7038e807e3f9d2 (patch) | |
tree | 735f0f44a9ee5dfd4f213e436e3b014b2cf879e6 /source/blender/editors/transform | |
parent | f0856b1fdad2e4a65cfdcffd01ee581ed07c2d93 (diff) |
Fix T61234 Mirroring Grease Pencil keyframes in the Dopesheet fails
`ANIM_animdata_update()` did not sort grease pencil frames. A
pre-existing comment stated this wouldn't be necessary as
`posttrans_gpd_clean()` already does this. However, this is only
applicable when the change is performed via the transform system. The
mirror operator doesn't call `posttrans_gpd_clean()`, invalidating the
assumption in the comment.
I moved the sorting code into `BKE_gpencil_layer_frames_sort()`, which
is now called from both `ANIM_animdata_update()` and
`posttrans_gpd_clean()`.
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r-- | source/blender/editors/transform/transform_convert.c | 21 |
1 files changed, 1 insertions, 20 deletions
diff --git a/source/blender/editors/transform/transform_convert.c b/source/blender/editors/transform/transform_convert.c index f93a3ec260b..4ccb97b7a00 100644 --- a/source/blender/editors/transform/transform_convert.c +++ b/source/blender/editors/transform/transform_convert.c @@ -830,25 +830,6 @@ bool FrameOnMouseSide(char side, float frame, float cframe) /* ********************* ACTION EDITOR ****************** */ -static int gpf_cmp_frame(void *thunk, const void *a, const void *b) -{ - const bGPDframe *frame_a = a; - const bGPDframe *frame_b = b; - - if (frame_a->framenum < frame_b->framenum) { - return -1; - } - if (frame_a->framenum > frame_b->framenum) { - return 1; - } - *((bool *)thunk) = true; - /* selected last */ - if ((frame_a->flag & GP_FRAME_SELECT) && ((frame_b->flag & GP_FRAME_SELECT) == 0)) { - return 1; - } - return 0; -} - static int masklay_shape_cmp_frame(void *thunk, const void *a, const void *b) { const MaskLayerShape *frame_a = a; @@ -881,7 +862,7 @@ static void posttrans_gpd_clean(bGPdata *gpd) bGPDframe *gpf, *gpfn; bool is_double = false; - BLI_listbase_sort_r(&gpl->frames, gpf_cmp_frame, &is_double); + BKE_gpencil_layer_frames_sort(gpl, &is_double); if (is_double) { for (gpf = gpl->frames.first; gpf; gpf = gpfn) { |