blob: 860b5bb5bbc44043d91bb62883cf4e0dadfa60c6 [file] [log] [blame]
#include "rive/text/text_style.hpp"
#include "rive/renderer.hpp"
#include "rive/shapes/paint/shape_paint.hpp"
#include "rive/backboard.hpp"
#include "rive/importers/backboard_importer.hpp"
#include "rive/text/text.hpp"
#include "rive/artboard.hpp"
#include "rive/factory.hpp"
using namespace rive;
// satisfy unique_ptr
TextStyle::TextStyle() {}
void TextStyle::buildDependencies()
{
Super::buildDependencies();
auto factory = getArtboard()->factory();
m_path = factory->makeEmptyRenderPath();
}
void TextStyle::resetPath()
{
m_path->reset();
m_hasContents = false;
}
bool TextStyle::addPath(const RawPath& rawPath)
{
bool hadContents = m_hasContents;
rawPath.addTo(m_path.get());
m_hasContents = true;
return !hadContents;
}
void TextStyle::draw(Renderer* renderer)
{
auto path = m_path.get();
for (auto shapePaint : m_ShapePaints)
{
if (!shapePaint->isVisible())
{
continue;
}
shapePaint->draw(renderer, path);
}
}
void TextStyle::assets(const std::vector<FileAsset*>& assets)
{
if ((size_t)fontAssetId() >= assets.size())
{
return;
}
auto asset = assets[fontAssetId()];
if (asset->is<FontAsset>())
{
m_fontAsset = asset->as<FontAsset>();
}
}
const rcp<Font> TextStyle::font() const
{
return m_fontAsset == nullptr ? nullptr : m_fontAsset->font();
}
StatusCode TextStyle::import(ImportStack& importStack)
{
auto result = registerReferencer(importStack);
if (result != StatusCode::Ok)
{
return result;
}
return Super::import(importStack);
}
void TextStyle::fontSizeChanged() { parent()->as<Text>()->markShapeDirty(); }
Core* TextStyle::clone() const
{
TextStyle* twin = TextStyleBase::clone()->as<TextStyle>();
twin->m_fontAsset = m_fontAsset;
return twin;
}