blob: 46b33037b4ebb8e0dcbbe5db5474767a057d3181 [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;
}