Expose selection size description to lua

This commit is contained in:
Pasi Kallinen
2026-01-25 15:18:45 +02:00
parent 4bf1fb5c68
commit f73d9ee704
3 changed files with 42 additions and 0 deletions

View File

@@ -1145,6 +1145,16 @@ Example:
local sel2 = selection.clone(sel); local sel2 = selection.clone(sel);
=== describe_size
Return a text describing the size of the selection.
Example:
local sel = selection.fillrect(1,1, 3,3);
local txt = sel:describe_size();
=== ellipse === ellipse
Example: Example:

View File

@@ -33,6 +33,7 @@ staticfn int l_selection_circle(lua_State *);
staticfn int l_selection_ellipse(lua_State *); staticfn int l_selection_ellipse(lua_State *);
staticfn int l_selection_gradient(lua_State *); staticfn int l_selection_gradient(lua_State *);
staticfn int l_selection_iterate(lua_State *); staticfn int l_selection_iterate(lua_State *);
staticfn int l_selection_size_description(lua_State *L);
staticfn int l_selection_gc(lua_State *); staticfn int l_selection_gc(lua_State *);
staticfn int l_selection_not(lua_State *); staticfn int l_selection_not(lua_State *);
staticfn int l_selection_and(lua_State *); staticfn int l_selection_and(lua_State *);
@@ -949,6 +950,18 @@ l_selection_iterate(lua_State *L)
return 0; return 0;
} }
/* local txt = sel:describe_size(); */
/* gives a textual description of the selection size */
staticfn int
l_selection_size_description(lua_State *L)
{
int argc = lua_gettop(L);
struct selectionvar *sel = l_selection_check(L, 1);
char buf[BUFSZ];
lua_pushstring(L, selection_size_description(sel, buf));
return 1;
}
static const struct luaL_Reg l_selection_methods[] = { static const struct luaL_Reg l_selection_methods[] = {
{ "new", l_selection_new }, { "new", l_selection_new },
@@ -974,6 +987,7 @@ static const struct luaL_Reg l_selection_methods[] = {
{ "iterate", l_selection_iterate }, { "iterate", l_selection_iterate },
{ "bounds", l_selection_getbounds }, { "bounds", l_selection_getbounds },
{ "room", l_selection_room }, { "room", l_selection_room },
{ "describe_size", l_selection_size_description },
{ NULL, NULL } { NULL, NULL }
}; };

View File

@@ -540,6 +540,23 @@ function test_sel_gradient()
local selc = selection.gradient({ x = 3, y = 5, x2 = 10, y2 = 12, maxdist = 10}); local selc = selection.gradient({ x = 3, y = 5, x2 = 10, y2 = 12, maxdist = 10});
end end
function test_sel_describe_size()
local sela = selection.fillrect(1,1, 3,3);
if (sela:describe_size() ~= "square 3 by 3") then
error("selection.describe_size returned \"" .. sela:describe_size() "\", not \"square 3 by 3\"");
end
local selb = selection.fillrect(1,1, 4,3);
if (selb:describe_size() ~= "rectangular 4 by 3") then
error("selection.describe_size returned \"" .. selb:describe_size() "\", not \"rectangular 4 by 3\"");
end
sela:set(1,1, 0);
if (sela:describe_size() ~= "irregularly shaped 3 by 3") then
error("selection.describe_size returned \"" .. sela:describe_size() "\", not \"irregularly shaped 3 by 3\"");
end
end
nh.debug_flags({mongen = false, hunger = false, overwrite_stairs = true }); nh.debug_flags({mongen = false, hunger = false, overwrite_stairs = true });
test_selection_params(); test_selection_params();
test_sel_negate(); test_sel_negate();
@@ -563,3 +580,4 @@ test_sel_map();
test_sel_numpoints(); test_sel_numpoints();
test_sel_room(); test_sel_room();
test_sel_gradient(); test_sel_gradient();
test_sel_describe_size();