diff options
Diffstat (limited to 'source/blender/editors/animation/anim_channels_edit.c')
-rw-r--r-- | source/blender/editors/animation/anim_channels_edit.c | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index 3b6c7fad471..efdad53f89f 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -238,6 +238,10 @@ void ANIM_deselect_anim_channels (void *data, short datatype, short test, short if (ale->flag & FCURVE_SELECTED) sel= ACHANNEL_SETFLAG_CLEAR; break; + case ANIMTYPE_SHAPEKEY: + if (ale->flag & KEYBLOCK_SEL) + sel= ACHANNEL_SETFLAG_CLEAR; + break; case ANIMTYPE_NLATRACK: if (ale->flag & NLATRACK_SELECTED) sel= ACHANNEL_SETFLAG_CLEAR; @@ -307,6 +311,13 @@ void ANIM_deselect_anim_channels (void *data, short datatype, short test, short fcu->flag &= ~FCURVE_ACTIVE; } break; + case ANIMTYPE_SHAPEKEY: + { + KeyBlock *kb= (KeyBlock *)ale->data; + + ACHANNEL_SET_FLAG(kb, sel, KEYBLOCK_SEL); + } + break; case ANIMTYPE_NLATRACK: { NlaTrack *nlt= (NlaTrack *)ale->data; @@ -1520,6 +1531,24 @@ static int mouse_anim_channels (bAnimContext *ac, float x, int channel_index, sh notifierFlags |= ND_ANIMCHAN_SELECT; } break; + case ANIMTYPE_SHAPEKEY: + { + KeyBlock *kb= (KeyBlock *)ale->data; + + /* select/deselect */ + if (selectmode == SELECT_INVERT) { + /* inverse selection status of this ShapeKey only */ + kb->flag ^= KEYBLOCK_SEL; + } + else { + /* select ShapeKey by itself */ + ANIM_deselect_anim_channels(ac->data, ac->datatype, 0, ACHANNEL_SETFLAG_CLEAR); + kb->flag |= KEYBLOCK_SEL; + } + + notifierFlags |= ND_ANIMCHAN_SELECT; + } + break; case ANIMTYPE_GPDATABLOCK: { bGPdata *gpd= (bGPdata *)ale->data; @@ -1557,9 +1586,6 @@ static int mouse_anim_channels (bAnimContext *ac, float x, int channel_index, sh #endif // XXX future of this is unclear } break; - case ANIMTYPE_SHAPEKEY: - /* TODO: shapekey channels cannot be selected atm... */ - break; default: printf("Error: Invalid channel type in mouse_anim_channels() \n"); } |