engine: keyframe properties dialog migrates; keyframeviewundo deleted

- new primitives: keyframes_set_time_many (conflict-safe batch time
  move), keyframes_set_value_many (captured or explicit old values),
  keyframes_set_bezier_many (double precision), and
  keyframe_set_bezier_point (single handle with NaN-capture fallback)
- dialog and curveview drag finalization go through the facade; the
  tests exercise the same global undo stack via oakengine_project_undo
- keyframeview/keyframeviewundo.{h,cpp} removed with zero remaining
  references
This commit is contained in:
2026-07-20 15:41:36 +08:00
parent 8311128f4c
commit 37aa859cd0
10 changed files with 752 additions and 241 deletions
+10
View File
@@ -251,6 +251,16 @@ TEST(DialogKeyframeProperties, SingleKeyAcceptWritesAllFields)
ensure_app_singletons();
auto project = create_project();
// A 24 fps sequence gives the facade's keyframe timestamps a
// frame-aligned timebase (the dialog moves the key to 1/2 s = 12
// frames; without a sequence the facade's default timebase would not
// land on it exactly).
auto *seq = new olive::Sequence();
seq->setParent(project.get());
seq->set_video_params(olive::VideoParams(
1920, 1080, olive::Rational(1, 24), olive::PixelFormat::f32,
olive::VideoParams::k_internal_channel_count));
auto *node = new olive::MathNode();
node->setParent(project.get());
auto *key = new olive::NodeKeyframe(olive::Rational(0), 1.0,