blob: b1ca2a5ddc9d488fc62f2d0b53c4aa97d7d6be65 [file] [log] [blame]
#ifndef _RIVE_FILE_HPP_
#define _RIVE_FILE_HPP_
#include "rive/artboard.hpp"
#include "rive/backboard.hpp"
#include "rive/core/binary_reader.hpp"
#include "rive/runtime_header.hpp"
#include "rive/file_asset_resolver.hpp"
#include <vector>
///
/// Default namespace for Rive Cpp runtime code.
///
namespace rive {
///
/// Tracks the success/failure result when importing a Rive file.
///
enum class ImportResult {
/// Indicates that a file's been successfully imported.
success,
/// Indicates that the Rive file is not supported by this runtime.
unsupportedVersion,
/// Indicates that the there is a formatting problem in the file itself.
malformed
};
///
/// A Rive file.
///
class File {
public:
/// Major version number supported by the runtime.
static const int majorVersion = 7;
/// Minor version number supported by the runtime.
static const int minorVersion = 0;
private:
/// The file's backboard. All Rive files have a single backboard
/// where the artboards live.
Backboard* m_Backboard = nullptr;
/// List of artboards in the file. Each artboard encapsulates a set of
/// Rive components and animations.
std::vector<Artboard*> m_Artboards;
/// The helper used to resolve assets when they're not provided in-band
/// with the file.
FileAssetResolver* m_AssetResolver;
File(FileAssetResolver* assetResolver);
public:
~File();
///
/// Imports a Rive file from a binary buffer.
/// @param reader a pointer to a binary reader attached to the file.
/// @param importedFile a handle to a file that will contain the
/// imported data.
/// @param assetResolver is an optional helper to resolve assets which
/// cannot be found in-band.
/// @returns whether the import was successful or an error occurred.
static ImportResult import(BinaryReader& reader,
File** importedFile,
FileAssetResolver* assetResolver = nullptr);
/// @returns the file's backboard. All files have exactly one backboard.
Backboard* backboard() const;
/// @returns the default artboard. This is typically the first artboard
/// found in the file's artboard list.
Artboard* artboard() const;
/// @returns the named artboard. If no artboard is found with that name,
/// the null pointer is returned.
Artboard* artboard(std::string name) const;
/// @returns the artboard at the specified index, or the nullptr if the
/// index is out of range.
Artboard* artboard(size_t index) const;
/// @returns the number of artboards in the file.
size_t artboardCount() const { return m_Artboards.size(); }
private:
ImportResult read(BinaryReader& reader, const RuntimeHeader& header);
};
} // namespace rive
#endif