blob: 1571849ba833d36c7c1151cca74cc96fa98963c4 [file] [log] [blame]
#include "rive/file.hpp"
#include "rive/animation/linear_animation.hpp"
#include "rive/animation/linear_animation_instance.hpp"
#include "rive/animation/state_machine_instance.hpp"
#include "utils/serializing_factory.hpp"
#include "rive_file_reader.hpp"
#include <catch.hpp>
#include <cstdio>
#include <cstring>
using namespace rive;
TEST_CASE("juice silver", "[silver]")
{
SerializingFactory silver;
auto file = ReadRiveFile("assets/juice.riv", &silver);
auto artboard = file->artboardDefault();
silver.frameSize(artboard->width(), artboard->height());
REQUIRE(artboard != nullptr);
auto walkAnimation = artboard->animationNamed("walk");
REQUIRE(walkAnimation != nullptr);
auto renderer = silver.makeRenderer();
// Draw first frame.
walkAnimation->advanceAndApply(0.0f);
artboard->draw(renderer.get());
int frames = (int)(walkAnimation->durationSeconds() / 0.016f);
for (int i = 0; i < frames; i++)
{
silver.addFrame();
walkAnimation->advanceAndApply(0.016f);
artboard->draw(renderer.get());
}
CHECK(silver.matches("juice"));
}
TEST_CASE("n-slice silver", "[silver]")
{
SerializingFactory silver;
auto file = ReadRiveFile("assets/n_slice_triangle.riv", &silver);
auto artboard = file->artboardDefault();
silver.frameSize(artboard->width(), artboard->height());
artboard->advance(0.0f);
auto renderer = silver.makeRenderer();
artboard->draw(renderer.get());
CHECK(silver.matches("n_slice_triangle"));
}
TEST_CASE("lock icon listener silver", "[silver]")
{
SerializingFactory silver;
auto file = ReadRiveFile("assets/lock_icon_demo.riv", &silver);
auto artboard = file->artboardDefault();
silver.frameSize(artboard->width(), artboard->height());
auto stateMachine = artboard->stateMachineAt(0);
stateMachine->advanceAndApply(0.1f);
auto renderer = silver.makeRenderer();
artboard->draw(renderer.get());
silver.addFrame();
// Click in the middle of the state machine.
stateMachine->pointerDown(
rive::Vec2D(artboard->width() / 2.0f, artboard->height() / 2.0f));
// Advance and apply twice to take the transition and apply the next state.
stateMachine->advanceAndApply(0.1f);
stateMachine->advanceAndApply(1.0f);
artboard->draw(renderer.get());
silver.addFrame();
// Do it again to lock the icon.
stateMachine->pointerDown(
rive::Vec2D(artboard->width() / 2.0f, artboard->height() / 2.0f));
// Advance and apply twice to take the transition and apply the next state.
stateMachine->advanceAndApply(0.1f);
stateMachine->advanceAndApply(1.0f);
artboard->draw(renderer.get());
CHECK(silver.matches("lock_icon_demo"));
}
TEST_CASE("validate text run listener works", "[silver]")
{
SerializingFactory silver;
auto file = ReadRiveFile("assets/text_listener_simpler.riv", &silver);
auto artboard = file->artboardDefault();
silver.frameSize(artboard->width(), artboard->height());
auto stateMachine = artboard->stateMachineAt(0);
stateMachine->advanceAndApply(0.1f);
auto renderer = silver.makeRenderer();
artboard->draw(renderer.get());
silver.addFrame();
// Click in the middle of the state machine.
stateMachine->pointerDown(
rive::Vec2D(artboard->width() * 0.8, artboard->height() / 2.0f));
// Advance and apply twice to take the transition and apply the next state.
stateMachine->advanceAndApply(0.1f);
stateMachine->advanceAndApply(1.0f);
artboard->draw(renderer.get());
CHECK(silver.matches("text_listener_simpler"));
}