blob: 70eb10937ce2beb4bd40ea9fe62d2fb6f252f77b [file] [log] [blame]
#include "rive/importers/backboard_importer.hpp"
#include "rive/nested_artboard.hpp"
#include "rive/assets/file_asset_referencer.hpp"
#include "rive/assets/file_asset.hpp"
#include <unordered_set>
using namespace rive;
BackboardImporter::BackboardImporter(Backboard* backboard) :
m_Backboard(backboard), m_NextArtboardId(0)
{}
void BackboardImporter::addNestedArtboard(NestedArtboard* artboard)
{
m_NestedArtboards.push_back(artboard);
}
void BackboardImporter::addFileAsset(FileAsset* asset)
{
m_FileAssets.push_back(asset);
{
// EDITOR BUG 4204
// --------------
// Ensure assetIds are unique. Due to an editor bug:
// https://github.com/rive-app/rive/issues/4204
std::unordered_set<uint32_t> ids;
uint32_t nextId = 1;
for (auto asset : m_FileAssets)
{
if (ids.count(asset->assetId()))
{
asset->assetId(nextId);
}
else
{
ids.insert(asset->assetId());
if (asset->assetId() >= nextId)
{
nextId = asset->assetId() + 1;
}
}
}
// --------------
}
}
void BackboardImporter::addFileAssetReferencer(FileAssetReferencer* referencer)
{
m_FileAssetReferencers.push_back(referencer);
}
void BackboardImporter::addArtboard(Artboard* artboard)
{
m_ArtboardLookup[m_NextArtboardId++] = artboard;
}
void BackboardImporter::addMissingArtboard() { m_NextArtboardId++; }
StatusCode BackboardImporter::resolve()
{
for (auto nestedArtboard : m_NestedArtboards)
{
auto itr = m_ArtboardLookup.find(nestedArtboard->artboardId());
if (itr != m_ArtboardLookup.end())
{
auto artboard = itr->second;
if (artboard != nullptr)
{
nestedArtboard->nest(artboard);
}
}
}
for (auto referencer : m_FileAssetReferencers)
{
referencer->assets(m_FileAssets);
}
return StatusCode::Ok;
}