Fix #134662: Video Sequencer: reset transforms ignores auto keyframing

Just call the appropriate autokeyframe functions when this operator
changes StripTransform properties.

Pull Request: https://projects.blender.org/blender/blender/pulls/134667
This commit is contained in:
Philipp Oeser
2025-02-19 14:28:14 +01:00
committed by Philipp Oeser
parent d5c662a305
commit 3dc9211b8f

View File

@@ -3238,20 +3238,47 @@ static int sequencer_strip_transform_clear_exec(bContext *C, wmOperator *op)
const Editing *ed = SEQ_editing_get(scene);
const int property = RNA_enum_get(op->ptr, "property");
const bool use_autokeyframe = blender::animrig::is_autokey_on(scene);
const bool only_when_keyed = blender::animrig::is_keying_flag(scene,
AUTOKEY_FLAG_INSERTAVAILABLE);
LISTBASE_FOREACH (Strip *, strip, ed->seqbasep) {
if (strip->flag & SELECT && strip->type != STRIP_TYPE_SOUND_RAM) {
StripTransform *transform = strip->data->transform;
PropertyRNA *prop;
PointerRNA ptr = RNA_pointer_create_discrete(&scene->id, &RNA_StripTransform, transform);
switch (property) {
case STRIP_TRANSFORM_POSITION:
transform->xofs = 0;
transform->yofs = 0;
if (use_autokeyframe) {
prop = RNA_struct_find_property(&ptr, "offset_x");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
prop = RNA_struct_find_property(&ptr, "offset_y");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
}
break;
case STRIP_TRANSFORM_SCALE:
transform->scale_x = 1.0f;
transform->scale_y = 1.0f;
if (use_autokeyframe) {
prop = RNA_struct_find_property(&ptr, "scale_x");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
prop = RNA_struct_find_property(&ptr, "scale_y");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
}
break;
case STRIP_TRANSFORM_ROTATION:
transform->rotation = 0.0f;
if (use_autokeyframe) {
prop = RNA_struct_find_property(&ptr, "rotation");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
}
break;
case STRIP_TRANSFORM_ALL:
transform->xofs = 0;
@@ -3259,6 +3286,23 @@ static int sequencer_strip_transform_clear_exec(bContext *C, wmOperator *op)
transform->scale_x = 1.0f;
transform->scale_y = 1.0f;
transform->rotation = 0.0f;
if (use_autokeyframe) {
prop = RNA_struct_find_property(&ptr, "offset_x");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
prop = RNA_struct_find_property(&ptr, "offset_y");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
prop = RNA_struct_find_property(&ptr, "scale_x");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
prop = RNA_struct_find_property(&ptr, "scale_y");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
prop = RNA_struct_find_property(&ptr, "rotation");
blender::animrig::autokeyframe_property(
C, scene, &ptr, prop, -1, scene->r.cfra, only_when_keyed);
}
break;
}
SEQ_relations_invalidate_cache_preprocessed(scene, strip);