blob: 93fe204c0dd7794dd9d48689db8846b7e0d0d19d [file] [log] [blame]
#include <rive/file.hpp>
#include <rive/node.hpp>
#include <rive/shapes/clipping_shape.hpp>
#include <rive/shapes/rectangle.hpp>
#include <rive/shapes/shape.hpp>
#include "no_op_factory.hpp"
#include "no_op_renderer.hpp"
#include "rive_file_reader.hpp"
#include <catch.hpp>
#include <cstdio>
TEST_CASE("cloning an ellipse works", "[instancing]") {
auto file = ReadRiveFile("../../test/assets/circle_clips.riv");
auto node = file->artboard()->find<rive::Shape>("TopEllipse");
REQUIRE(node != nullptr);
auto clonedNode = node->clone()->as<rive::Shape>();
REQUIRE(node->x() == clonedNode->x());
REQUIRE(node->y() == clonedNode->y());
delete clonedNode;
}
TEST_CASE("instancing artboard clones clipped properties", "[instancing]") {
auto file = ReadRiveFile("../../test/assets/circle_clips.riv");
REQUIRE(!file->artboard()->isInstance());
auto artboard = file->artboardDefault();
REQUIRE(artboard->isInstance());
auto node = artboard->find("TopEllipse");
REQUIRE(node != nullptr);
REQUIRE(node->is<rive::Shape>());
auto shape = node->as<rive::Shape>();
REQUIRE(shape->clippingShapes().size() == 2);
REQUIRE(shape->clippingShapes()[0]->source()->name() == "ClipRect2");
REQUIRE(shape->clippingShapes()[1]->source()->name() == "BabyEllipse");
artboard->updateComponents();
rive::NoOpRenderer renderer;
artboard->draw(&renderer);
}
TEST_CASE("instancing artboard doesn't clone animations", "[instancing]") {
auto file = ReadRiveFile("../../test/assets/juice.riv");
auto artboard = file->artboardDefault();
REQUIRE(file->artboard()->animationCount() == artboard->animationCount());
REQUIRE(file->artboard()->firstAnimation() == artboard->firstAnimation());
rive::LinearAnimation::deleteCount = 0;
// Make sure no animations were deleted by deleting the instance.
REQUIRE(rive::LinearAnimation::deleteCount == 0);
int numberOfAnimations = file->artboard()->animationCount();
file.reset(nullptr);
// Now the animations should've been deleted.
REQUIRE(rive::LinearAnimation::deleteCount == numberOfAnimations);
}