diff options
-rw-r--r-- | source/blender/editors/animation/anim_channels_defines.c | 62 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_channels_edit.c | 6 | ||||
-rw-r--r-- | source/blender/editors/animation/anim_filter.c | 7 | ||||
-rw-r--r-- | source/blender/editors/include/ED_anim_api.h | 3 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_anim_types.h | 5 |
5 files changed, 67 insertions, 16 deletions
diff --git a/source/blender/editors/animation/anim_channels_defines.c b/source/blender/editors/animation/anim_channels_defines.c index d727ea0a957..be92b0394a6 100644 --- a/source/blender/editors/animation/anim_channels_defines.c +++ b/source/blender/editors/animation/anim_channels_defines.c @@ -529,7 +529,10 @@ static bool acf_scene_setting_valid(bAnimContext *ac, bAnimListElem *UNUSED(ale) case ACHANNEL_SETTING_SELECT: case ACHANNEL_SETTING_EXPAND: return true; - + + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return false; + default: return false; } @@ -555,7 +558,7 @@ static int acf_scene_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Setting case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ *neg = true; return ADT_CURVES_NOT_VISIBLE; - + default: /* unsupported */ return 0; } @@ -682,7 +685,10 @@ static bool acf_object_setting_valid(bAnimContext *ac, bAnimListElem *ale, eAnim case ACHANNEL_SETTING_SELECT: case ACHANNEL_SETTING_EXPAND: return true; - + + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return ((ac) && (ac->spacetype == SPACE_IPO) && (ob->adt)); + default: return false; } @@ -708,7 +714,10 @@ static int acf_object_setting_flag(bAnimContext *UNUSED(ac), eAnimChannel_Settin case ACHANNEL_SETTING_VISIBLE: /* visible (only in Graph Editor) */ *neg = true; return ADT_CURVES_NOT_VISIBLE; - + + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return ADT_CURVES_ALWAYS_VISIBLE; + default: /* unsupported */ return 0; } @@ -732,6 +741,7 @@ static void *acf_object_setting_ptr(bAnimListElem *ale, eAnimChannel_Settings se case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */ case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */ + case ACHANNEL_SETTING_ALWAYS_VISIBLE: if (ob->adt) return GET_ACF_FLAG_PTR(ob->adt->flag, type); return NULL; @@ -839,7 +849,10 @@ static bool acf_group_setting_valid(bAnimContext *ac, bAnimListElem *UNUSED(ale) /* conditionally supported */ case ACHANNEL_SETTING_VISIBLE: /* Only available in Graph Editor */ return (ac->spacetype == SPACE_IPO); - + + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return false; + default: /* always supported */ return true; } @@ -965,7 +978,10 @@ static bool acf_fcurve_setting_valid(bAnimContext *ac, bAnimListElem *ale, eAnim case ACHANNEL_SETTING_VISIBLE: /* Only available in Graph Editor */ return (ac->spacetype == SPACE_IPO); - + + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + return false; + /* always available */ default: return true; @@ -3749,7 +3765,9 @@ void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float * - in Grease Pencil mode, color swatches for layer color */ if (ac->sl) { - if ((ac->spacetype == SPACE_IPO) && acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { + if ((ac->spacetype == SPACE_IPO) && + (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE) || + acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE))) { /* for F-Curves, draw color-preview of curve behind checkbox */ if (ELEM(ale->type, ANIMTYPE_FCURVE, ANIMTYPE_NLACURVE)) { FCurve *fcu = (FCurve *)ale->data; @@ -3763,9 +3781,13 @@ void ANIM_channel_draw(bAnimContext *ac, bAnimListElem *ale, float yminc, float */ glRectf(offset, yminc, offset + ICON_WIDTH, ymaxc); } - /* icon is drawn as widget now... */ - offset += ICON_WIDTH; + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { + offset += ICON_WIDTH; + } + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE)) { + offset += ICON_WIDTH; + } } else if ((ac->spacetype == SPACE_NLA) && acf->has_setting(ac, ale, ACHANNEL_SETTING_SOLO)) { /* just skip - drawn as widget now */ @@ -4110,6 +4132,11 @@ static void draw_setting_widget(bAnimContext *ac, bAnimListElem *ale, const bAni tooltip = TIP_("Channels are visible in Graph Editor for editing"); break; + case ACHANNEL_SETTING_ALWAYS_VISIBLE: + icon = ICON_UNPINNED; + tooltip = TIP_("Channels are visible in Graph Editor for editing"); + break; + case ACHANNEL_SETTING_MOD_OFF: /* modifiers disabled */ icon = ICON_MODIFIER; usetoggle = false; @@ -4219,6 +4246,7 @@ static void draw_setting_widget(bAnimContext *ac, bAnimListElem *ale, const bAni case ACHANNEL_SETTING_MUTE: /* General - muting flags */ case ACHANNEL_SETTING_PINNED: /* NLA Actions - 'map/nomap' */ case ACHANNEL_SETTING_MOD_OFF: + case ACHANNEL_SETTING_ALWAYS_VISIBLE: UI_but_funcN_set(but, achannel_setting_flush_widget_cb, MEM_dupallocN(ale), SET_INT_IN_POINTER(setting)); break; @@ -4282,10 +4310,20 @@ void ANIM_channel_draw_widgets(const bContext *C, bAnimContext *ac, bAnimListEle * - in Grease Pencil mode, color swatches for layer color */ if (ac->sl) { - if ((ac->spacetype == SPACE_IPO) && acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { + if ((ac->spacetype == SPACE_IPO) && + (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE) || + acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE))) + { + /* pin toggle */ + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_ALWAYS_VISIBLE)) { + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_ALWAYS_VISIBLE); + offset += ICON_WIDTH; + } /* visibility toggle */ - draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_VISIBLE); - offset += ICON_WIDTH; + if (acf->has_setting(ac, ale, ACHANNEL_SETTING_VISIBLE)) { + draw_setting_widget(ac, ale, acf, block, offset, ymid, ACHANNEL_SETTING_VISIBLE); + offset += ICON_WIDTH; + } } else if ((ac->spacetype == SPACE_NLA) && acf->has_setting(ac, ale, ACHANNEL_SETTING_SOLO)) { /* 'solo' setting for NLA Tracks */ diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c index cb65a9aecad..4cbdf77b11a 100644 --- a/source/blender/editors/animation/anim_channels_edit.c +++ b/source/blender/editors/animation/anim_channels_edit.c @@ -435,7 +435,11 @@ void ANIM_flush_setting_anim_channels(bAnimContext *ac, ListBase *anim_data, bAn /* sanity check */ if (ELEM(NULL, anim_data, anim_data->first)) return; - + + if (setting == ACHANNEL_SETTING_ALWAYS_VISIBLE) { + return; + } + /* find the channel that got changed */ for (ale = anim_data->first; ale; ale = ale->next) { /* compare data, and type as main way of identifying the channel */ diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 5cd305f69f5..ca207a7e695 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -2825,7 +2825,12 @@ static bool animdata_filter_base_is_ok(bDopeSheet *ads, Scene *scene, Base *base if ((ob->adt) && (ob->adt->flag & ADT_CURVES_NOT_VISIBLE)) return false; } - + + /* Pinned curves are visible regardless of selection flags. */ + if ((ob->adt) && (ob->adt->flag & ADT_CURVES_ALWAYS_VISIBLE)) { + //return true; + } + /* check selection and object type filters */ if ((ads->filterflag & ADS_FILTER_ONLYSEL) && !((base->flag & SELECT) /*|| (base == sce->basact)*/)) { /* only selected should be shown */ diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index bfd89e90fce..b761139113d 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -417,7 +417,8 @@ typedef enum eAnimChannel_Settings { ACHANNEL_SETTING_VISIBLE = 4, /* only for Graph Editor */ ACHANNEL_SETTING_SOLO = 5, /* only for NLA Tracks */ ACHANNEL_SETTING_PINNED = 6, /* only for NLA Actions */ - ACHANNEL_SETTING_MOD_OFF = 7 + ACHANNEL_SETTING_MOD_OFF = 7, + ACHANNEL_SETTING_ALWAYS_VISIBLE = 8, /* channel is pinned and always visible */ } eAnimChannel_Settings; diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index 31fe8fe563e..e50a2637fff 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -939,7 +939,10 @@ typedef enum eAnimData_Flag { ADT_UI_ACTIVE = (1<<15), /* F-Curves from this AnimData block are not visible in the Graph Editor */ - ADT_CURVES_NOT_VISIBLE = (1<<16) + ADT_CURVES_NOT_VISIBLE = (1<<16), + + /* F-Curves from this AnimData block are always visible */ + ADT_CURVES_ALWAYS_VISIBLE = (1<<17), } eAnimData_Flag; /* Animation Data recalculation settings (to be set by depsgraph) */ |