Fix #141384: Anim Channel Pinning: object data pin only for cameras

As mentioned in 98c7e75897, the idea of "pinning" was to have certain
animation always visible (regardless of object selection -- e.g.
animating camera movement even while animating something else).

dea7ef4dd9 added a special case that would also
include the object regardless of it being selected or not if its
**object data** is animated and pinned.

It only fully implemented that for Cameras though (that was the primary
request at that time), leaving ugly blank/empty space (pin icon missing)
for other object data types.

It is understandable that it only did it for Cameras a that time, but
there is no reason to **not** do it for other (viewport selectable)
object data types as well (animators might as well be interested in
pinning other types as well for timing reference) -- which is what this
PR does.

Adding this to 4.5 (since it fixes the blank space (even though it is
somewhat adding a feature as well...)

Pull Request: https://projects.blender.org/blender/blender/pulls/141396
This commit is contained in:
Philipp Oeser
2025-07-04 10:11:34 +02:00
committed by Philipp Oeser
parent 5787b74580
commit ab9f03555c

View File

@@ -755,7 +755,7 @@ static int acf_object_setting_flag(bAnimContext * /*ac*/,
*r_neg = true;
return ADT_CURVES_NOT_VISIBLE;
case ACHANNEL_SETTING_ALWAYS_VISIBLE:
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
@@ -781,9 +781,9 @@ static void *acf_object_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(ob->nlaflag, r_type); /* XXX */
case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE:
case ACHANNEL_SETTING_MUTE: /* mute (only in NLA) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (ob->adt) {
return GET_ACF_FLAG_PTR(ob->adt->flag, r_type);
}
@@ -887,7 +887,7 @@ static bool acf_group_setting_valid(bAnimContext *ac,
case ACHANNEL_SETTING_VISIBLE: /* Only available in Graph Editor */
return (ac->spacetype == SPACE_GRAPH);
case ACHANNEL_SETTING_ALWAYS_VISIBLE:
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ELEM(ac->spacetype, SPACE_ACTION, SPACE_GRAPH);
default: /* always supported */
@@ -929,7 +929,7 @@ static int acf_group_setting_flag(bAnimContext *ac, eAnimChannel_Settings settin
*r_neg = true;
return AGRP_NOTVISIBLE;
case ACHANNEL_SETTING_ALWAYS_VISIBLE:
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default:
@@ -1812,6 +1812,9 @@ static int acf_dslight_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -1831,9 +1834,10 @@ static void *acf_dslight_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(la->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (la->adt) {
return GET_ACF_FLAG_PTR(la->adt->flag, r_type);
}
@@ -2072,7 +2076,7 @@ static int acf_dscam_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE:
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
@@ -2094,10 +2098,10 @@ static void *acf_dscam_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(ca->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE:
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (ca->adt) {
return GET_ACF_FLAG_PTR(ca->adt->flag, r_type);
}
@@ -2167,6 +2171,9 @@ static int acf_dscur_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -2186,9 +2193,10 @@ static void *acf_dscur_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(cu->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (cu->adt) {
return GET_ACF_FLAG_PTR(cu->adt->flag, r_type);
}
@@ -2518,6 +2526,9 @@ static int acf_dsmball_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -2537,9 +2548,10 @@ static void *acf_dsmball_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(mb->flag2, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (mb->adt) {
return GET_ACF_FLAG_PTR(mb->adt->flag, r_type);
}
@@ -2601,6 +2613,9 @@ static int acf_dsarm_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -2620,9 +2635,10 @@ static void *acf_dsarm_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(arm->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (arm->adt) {
return GET_ACF_FLAG_PTR(arm->adt->flag, r_type);
}
@@ -2861,6 +2877,9 @@ static int acf_dsmesh_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -2880,9 +2899,10 @@ static void *acf_dsmesh_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(mesh->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (mesh->adt) {
return GET_ACF_FLAG_PTR(mesh->adt->flag, r_type);
}
@@ -2945,6 +2965,9 @@ static int acf_dslat_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -2964,9 +2987,10 @@ static void *acf_dslat_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(lt->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (lt->adt) {
return GET_ACF_FLAG_PTR(lt->adt->flag, r_type);
}
@@ -3112,6 +3136,9 @@ static int acf_dscurves_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -3131,9 +3158,10 @@ static void *acf_dscurves_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(curves->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (curves->adt) {
return GET_ACF_FLAG_PTR(curves->adt->flag, r_type);
}
@@ -3195,6 +3223,9 @@ static int acf_dspointcloud_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -3214,9 +3245,10 @@ static void *acf_dspointcloud_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(pointcloud->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (pointcloud->adt) {
return GET_ACF_FLAG_PTR(pointcloud->adt->flag, r_type);
}
@@ -3278,6 +3310,9 @@ static int acf_dsvolume_setting_flag(bAnimContext * /*ac*/,
case ACHANNEL_SETTING_SELECT: /* selected */
return ADT_UI_SELECTED;
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
return ADT_CURVES_ALWAYS_VISIBLE;
default: /* unsupported */
return 0;
}
@@ -3297,9 +3332,10 @@ static void *acf_dsvolume_setting_ptr(bAnimListElem *ale,
case ACHANNEL_SETTING_EXPAND: /* expanded */
return GET_ACF_FLAG_PTR(volume->flag, r_type);
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_SELECT: /* selected */
case ACHANNEL_SETTING_MUTE: /* muted (for NLA only) */
case ACHANNEL_SETTING_VISIBLE: /* visible (for Graph Editor only) */
case ACHANNEL_SETTING_ALWAYS_VISIBLE: /* pin */
if (volume->adt) {
return GET_ACF_FLAG_PTR(volume->adt->flag, r_type);
}