blob: e7176a13d71c31a74b2fe39cd3c8eed4680a2115 [file] [log] [blame]
#include "rive/math/transform_components.hpp"
#include "rive/shapes/rectangle.hpp"
#include "rive/text/text.hpp"
#include "utils/no_op_factory.hpp"
#include "rive_file_reader.hpp"
#include "rive_testing.hpp"
#include <catch.hpp>
#include <cstdio>
TEST_CASE("LayoutComponent FlexDirection row", "[layout]")
{
auto file = ReadRiveFile("../../test/assets/layout/layout_horizontal.riv");
auto artboard = file->artboard();
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent1") != nullptr);
auto target1 = artboard->find<rive::LayoutComponent>("LayoutComponent1");
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent2") != nullptr);
auto target2 = artboard->find<rive::LayoutComponent>("LayoutComponent2");
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent3") != nullptr);
auto target3 = artboard->find<rive::LayoutComponent>("LayoutComponent3");
artboard->advance(0.0f);
auto target1Components = target1->worldTransform().decompose();
auto target2Components = target2->worldTransform().decompose();
auto target3Components = target3->worldTransform().decompose();
REQUIRE(target1Components.x() == 0);
REQUIRE(target2Components.x() == 100);
REQUIRE(target3Components.x() == 200);
REQUIRE(target1Components.y() == 0);
REQUIRE(target2Components.y() == 0);
REQUIRE(target3Components.y() == 0);
}
TEST_CASE("LayoutComponent FlexDirection column", "[layout]")
{
auto file = ReadRiveFile("../../test/assets/layout/layout_vertical.riv");
auto artboard = file->artboard();
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent1") != nullptr);
auto target1 = artboard->find<rive::LayoutComponent>("LayoutComponent1");
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent2") != nullptr);
auto target2 = artboard->find<rive::LayoutComponent>("LayoutComponent2");
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent3") != nullptr);
auto target3 = artboard->find<rive::LayoutComponent>("LayoutComponent3");
artboard->advance(0.0f);
auto target1Components = target1->worldTransform().decompose();
auto target2Components = target2->worldTransform().decompose();
auto target3Components = target3->worldTransform().decompose();
REQUIRE(target1Components.x() == 0);
REQUIRE(target2Components.x() == 0);
REQUIRE(target3Components.x() == 0);
REQUIRE(target1Components.y() == 0);
REQUIRE(target2Components.y() == 100);
REQUIRE(target3Components.y() == 200);
}
TEST_CASE("LayoutComponent FlexDirection row with gap", "[layout]")
{
auto file = ReadRiveFile("../../test/assets/layout/layout_horizontal_gaps.riv");
auto artboard = file->artboard();
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent1") != nullptr);
auto target1 = artboard->find<rive::LayoutComponent>("LayoutComponent1");
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent2") != nullptr);
auto target2 = artboard->find<rive::LayoutComponent>("LayoutComponent2");
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent3") != nullptr);
auto target3 = artboard->find<rive::LayoutComponent>("LayoutComponent3");
artboard->advance(0.0f);
auto target1Components = target1->worldTransform().decompose();
auto target2Components = target2->worldTransform().decompose();
auto target3Components = target3->worldTransform().decompose();
REQUIRE(target1Components.x() == 0);
REQUIRE(target2Components.x() == 110);
REQUIRE(target3Components.x() == 220);
REQUIRE(target1Components.y() == 0);
REQUIRE(target2Components.y() == 0);
REQUIRE(target3Components.y() == 0);
}
TEST_CASE("LayoutComponent FlexDirection row with wrap", "[layout]")
{
auto file = ReadRiveFile("../../test/assets/layout/layout_horizontal_wrap.riv");
auto artboard = file->artboard();
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent6") != nullptr);
auto target = artboard->find<rive::LayoutComponent>("LayoutComponent6");
artboard->advance(0.0f);
auto targetComponents = target->worldTransform().decompose();
REQUIRE(targetComponents.x() == 0);
REQUIRE(targetComponents.y() == 100);
}
TEST_CASE("LayoutComponent Center using alignItems and justifyContent", "[layout]")
{
auto file = ReadRiveFile("../../test/assets/layout/layout_center.riv");
auto artboard = file->artboard();
REQUIRE(artboard->find<rive::LayoutComponent>("LayoutComponent1") != nullptr);
auto target = artboard->find<rive::LayoutComponent>("LayoutComponent1");
artboard->advance(0.0f);
auto targetComponents = target->worldTransform().decompose();
REQUIRE(targetComponents.x() == 200);
REQUIRE(targetComponents.y() == 200);
}
TEST_CASE("LayoutComponent with intrinsic size gets measured correctly", "[layout]")
{
auto file = ReadRiveFile("../../test/assets/layout/measure_tests.riv");
auto artboard = file->artboard("hi");
REQUIRE(artboard->find<rive::LayoutComponent>("TextLayout") != nullptr);
REQUIRE(artboard->find<rive::Text>("HiText") != nullptr);
artboard->advance(0.0f);
auto text = artboard->find<rive::Text>("HiText");
auto bounds = text->localBounds();
REQUIRE(bounds.left() == 0);
REQUIRE(bounds.top() == 0);
REQUIRE(bounds.width() == 62.48047f);
REQUIRE(bounds.height() == 72.62695f);
}