lovr/src/api/l_data_rasterizer.c

82 lines
2.6 KiB
C
Raw Normal View History

2018-01-22 16:40:47 +00:00
#include "api.h"
2018-01-23 02:49:45 +00:00
#include "data/rasterizer.h"
2022-03-22 07:13:21 +00:00
#include "util.h"
2021-03-16 00:54:27 +00:00
#include <lua.h>
#include <lauxlib.h>
2018-01-23 02:49:45 +00:00
2019-02-17 22:52:22 +00:00
static int l_lovrRasterizerGetHeight(lua_State* L) {
2018-01-23 02:49:45 +00:00
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
2021-02-08 17:58:39 +00:00
lua_pushinteger(L, lovrRasterizerGetHeight(rasterizer));
2018-01-23 02:49:45 +00:00
return 1;
}
2019-02-17 22:52:22 +00:00
static int l_lovrRasterizerGetAdvance(lua_State* L) {
2018-01-23 02:49:45 +00:00
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
2021-02-08 17:58:39 +00:00
lua_pushinteger(L, lovrRasterizerGetAdvance(rasterizer));
2018-01-23 02:49:45 +00:00
return 1;
}
2019-02-17 22:52:22 +00:00
static int l_lovrRasterizerGetAscent(lua_State* L) {
2018-01-23 02:49:45 +00:00
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
2021-02-08 17:58:39 +00:00
lua_pushinteger(L, lovrRasterizerGetAscent(rasterizer));
2018-01-23 02:49:45 +00:00
return 1;
}
2019-02-17 22:52:22 +00:00
static int l_lovrRasterizerGetDescent(lua_State* L) {
2018-01-23 02:49:45 +00:00
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
2021-02-08 17:58:39 +00:00
lua_pushinteger(L, lovrRasterizerGetDescent(rasterizer));
2018-01-23 02:49:45 +00:00
return 1;
}
2019-02-17 22:52:22 +00:00
static int l_lovrRasterizerGetLineHeight(lua_State* L) {
2018-01-23 02:49:45 +00:00
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
2021-02-08 17:58:39 +00:00
lua_pushinteger(L, lovrRasterizerGetHeight(rasterizer) * 1.25f);
2018-01-23 02:49:45 +00:00
return 1;
}
2019-02-17 22:52:22 +00:00
static int l_lovrRasterizerGetGlyphCount(lua_State* L) {
2018-01-23 02:49:45 +00:00
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
2021-02-08 17:58:39 +00:00
lua_pushinteger(L, lovrRasterizerGetGlyphCount(rasterizer));
2018-01-23 02:49:45 +00:00
return 1;
}
2019-02-17 22:52:22 +00:00
static int l_lovrRasterizerHasGlyphs(lua_State* L) {
2018-01-23 02:49:45 +00:00
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
bool hasGlyphs = true;
for (int i = 2; i <= lua_gettop(L); i++) {
if (lua_type(L, i) == LUA_TSTRING) {
hasGlyphs &= lovrRasterizerHasGlyphs(rasterizer, lua_tostring(L, i));
} else {
hasGlyphs &= lovrRasterizerHasGlyph(rasterizer, luax_checku32(L, i));
2018-01-23 02:49:45 +00:00
}
}
lua_pushboolean(L, hasGlyphs);
return 1;
}
2018-01-22 16:40:47 +00:00
2021-10-11 22:31:43 +00:00
static int l_lovrRasterizerGetWidth(lua_State* L) {
Rasterizer* rasterizer = luax_checktype(L, 1, Rasterizer);
size_t length;
const char* string = luaL_checklstring(L, 2, &length);
float wrap = luax_optfloat(L, 4, 0.f);
2021-12-20 15:12:39 +00:00
float width, lastLineWidth, height;
2021-10-11 22:31:43 +00:00
uint32_t lineCount, glyphCount;
2021-12-20 15:12:39 +00:00
lovrRasterizerMeasure(rasterizer, string, length, wrap, &width, &lastLineWidth, &height, &lineCount, &glyphCount);
2021-10-11 22:31:43 +00:00
lua_pushnumber(L, width);
lua_pushnumber(L, lineCount + 1);
2021-12-20 15:12:39 +00:00
lua_pushnumber(L, lastLineWidth);
2021-10-11 22:31:43 +00:00
return 2;
}
2018-01-22 16:40:47 +00:00
const luaL_Reg lovrRasterizer[] = {
2018-01-23 02:49:45 +00:00
{ "getHeight", l_lovrRasterizerGetHeight },
{ "getAdvance", l_lovrRasterizerGetAdvance },
{ "getAscent", l_lovrRasterizerGetAscent },
{ "getDescent", l_lovrRasterizerGetDescent },
{ "getLineHeight", l_lovrRasterizerGetLineHeight },
{ "getGlyphCount", l_lovrRasterizerGetGlyphCount },
{ "hasGlyphs", l_lovrRasterizerHasGlyphs },
2021-10-11 22:31:43 +00:00
{ "getWidth", l_lovrRasterizerGetWidth },
2018-01-22 16:40:47 +00:00
{ NULL, NULL }
};