blob: 63defc560d27f4e2f8d69b1651a14a5f36129b73 [file] [edit]
#ifndef _RIVE_SCRIPTED_TEXT_HPP_
#define _RIVE_SCRIPTED_TEXT_HPP_
#if defined(WITH_RIVE_SCRIPTING) && defined(WITH_RIVE_TEXT)
#include "rive/lua/rive_lua_libs.hpp"
#include "rive/text/raw_text.hpp"
namespace rive
{
// Shared by the Text userdata and the lines and glyphs it hands out, so those
// outlive a collected Text and can tell when the layout changed under them.
class ScriptedTextLayout : public RefCnt<ScriptedTextLayout>
{
public:
ScriptedTextLayout(Factory* factory) : text(factory) {}
RawText text;
};
class ScriptedText
{
public:
rcp<ScriptedTextLayout> layout;
static constexpr uint8_t luaTag = LUA_T_COUNT + 71;
static constexpr const char* luaName = "Text";
static constexpr bool hasMetatable = true;
};
class ScriptedTextLine
{
public:
rcp<ScriptedTextLayout> layout;
uint32_t revision;
uint32_t index;
static constexpr uint8_t luaTag = LUA_T_COUNT + 31;
static constexpr const char* luaName = "TextLine";
static constexpr bool hasMetatable = true;
};
// The generic for state over a line: `for _, glyph in line do` advances it
// one glyph per step instead of re-walking the line.
class ScriptedGlyphCursor
{
public:
rcp<ScriptedTextLayout> layout;
uint32_t revision;
uint32_t line;
GlyphItr itr;
GlyphItr end;
float x;
static constexpr uint8_t luaTag = LUA_T_COUNT + 72;
static constexpr const char* luaName = "GlyphCursor";
static constexpr bool hasMetatable = false;
};
class ScriptedGlyph
{
public:
rcp<ScriptedTextLayout> layout;
uint32_t revision;
const GlyphRun* run;
uint32_t glyphIndex;
// Pen position on the baseline, the shaper's offset included.
Vec2D position;
static constexpr uint8_t luaTag = LUA_T_COUNT + 37;
static constexpr const char* luaName = "Glyph";
static constexpr bool hasMetatable = true;
};
} // namespace rive
#endif
#endif