Skip to content

Commit 0168f78

Browse files
bodymovinbodymovin
andcommitted
chore: process listeners in specified order (#11487) 3253c0beae
* chore: process listeners in specified order * resolve sorting on export Co-authored-by: hernan <hernan@rive.app>
1 parent decf2d6 commit 0168f78

File tree

4 files changed

+64
-1
lines changed

4 files changed

+64
-1
lines changed

.rive_head

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
c83919a2477577deac9afdc2f22b83b9093e4b93
1+
3253c0beae3bdc2d68db7cf52eb4490e17276c58
857 KB
Binary file not shown.

tests/unit_tests/runtime/state_machine_test.cpp

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,4 +527,67 @@ TEST_CASE("Transition with list index can be compared to a number", "[silver]")
527527
artboard->draw(renderer.get());
528528

529529
CHECK(silver.matches("transition_index_condition"));
530+
}
531+
532+
TEST_CASE("Listeners are sorted in the right order", "[silver]")
533+
{
534+
SerializingFactory silver;
535+
auto file = ReadRiveFile("assets/sorted_listeners.riv", &silver);
536+
537+
auto artboard = file->artboardDefault();
538+
silver.frameSize(artboard->width(), artboard->height());
539+
540+
auto stateMachine = artboard->stateMachineAt(0);
541+
542+
auto vmi = file->createViewModelInstance(artboard.get());
543+
544+
stateMachine->bindViewModelInstance(vmi);
545+
stateMachine->advanceAndApply(0.0f);
546+
auto renderer = silver.makeRenderer();
547+
artboard->draw(renderer.get());
548+
549+
// Down (Move + Down happen on the same frame, but down happens after move)
550+
silver.addFrame();
551+
stateMachine->pointerDown(Vec2D(250.0f, 250.0f), 0);
552+
stateMachine->advanceAndApply(0.016f);
553+
artboard->draw(renderer.get());
554+
555+
// Click (Up + Click on same frame, but click happens after up)
556+
silver.addFrame();
557+
stateMachine->pointerUp(Vec2D(250.0f, 250.0f), 0);
558+
stateMachine->advanceAndApply(0.016f);
559+
artboard->draw(renderer.get());
560+
561+
// Exit
562+
silver.addFrame();
563+
stateMachine->pointerMove(Vec2D(0.0f, 0.0f), 0, 0);
564+
stateMachine->advanceAndApply(0.016f);
565+
artboard->draw(renderer.get());
566+
567+
// Drag gesture
568+
silver.addFrame();
569+
stateMachine->pointerDown(Vec2D(250.0f, 250.0f), 0);
570+
stateMachine->pointerMove(Vec2D(251.0f, 251.0f), 0);
571+
stateMachine->advanceAndApply(0.016f);
572+
artboard->draw(renderer.get());
573+
574+
// Up
575+
silver.addFrame();
576+
stateMachine->pointerUp(Vec2D(251.0f, 251.0f), 0);
577+
stateMachine->advanceAndApply(0.016f);
578+
artboard->draw(renderer.get());
579+
580+
// Exit
581+
silver.addFrame();
582+
stateMachine->pointerMove(Vec2D(0.0f, 0.0f), 0);
583+
stateMachine->advanceAndApply(0.016f);
584+
artboard->draw(renderer.get());
585+
586+
// (Move): Enter + Move, but move happens after enter
587+
silver.addFrame();
588+
stateMachine->pointerMove(Vec2D(251.0f, 251.0f), 0);
589+
stateMachine->advanceAndApply(0.016f);
590+
artboard->draw(renderer.get());
591+
592+
CHECK(silver.matches("sorted_listeners"));
530593
}
14.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)