Lua: selection get and rndcoord changes

This commit is contained in:
Pasi Kallinen
2022-03-22 10:45:20 +02:00
parent 27898340b9
commit 6eadff01b8
3 changed files with 25 additions and 11 deletions

View File

@@ -957,6 +957,7 @@ Get the selection value at (x,y).
Example: Example:
local value = selection.get(sel, x, y); local value = selection.get(sel, x, y);
local value = selection.get(sel, { x = 10, y = 14 });
=== gradient === gradient

View File

@@ -180,11 +180,19 @@ static int
l_selection_getpoint(lua_State *L) l_selection_getpoint(lua_State *L)
{ {
struct selectionvar *sel = l_selection_check(L, 1); struct selectionvar *sel = l_selection_check(L, 1);
xchar x = (xchar) luaL_checkinteger(L, 2); xchar x, y;
xchar y = (xchar) luaL_checkinteger(L, 3); int ix, iy;
int val; int val;
long crd; long crd;
lua_remove(L, 1); /* sel */
if (!nhl_get_xy_params(L, &ix, &iy)) {
nhl_error(L, "l_selection_getpoint: Incorrect params");
return 0;
}
x = (xchar) ix;
y = (xchar) iy;
if (x == -1 && y == -1) if (x == -1 && y == -1)
crd = SP_COORD_PACK_RANDOM(0); crd = SP_COORD_PACK_RANDOM(0);
else else
@@ -327,15 +335,17 @@ l_selection_rndcoord(lua_State *L)
{ {
struct selectionvar *sel = l_selection_check(L, 1); struct selectionvar *sel = l_selection_check(L, 1);
int removeit = (int) luaL_optinteger(L, 2, 0); int removeit = (int) luaL_optinteger(L, 2, 0);
xchar x, y; xchar x = -1, y = -1;
selection_rndcoord(sel, &x, &y, removeit); selection_rndcoord(sel, &x, &y, removeit);
update_croom(); if (!(x == -1 && y == -1)) {
if (g.coder && g.coder->croom) { update_croom();
x -= g.coder->croom->lx; if (g.coder && g.coder->croom) {
y -= g.coder->croom->ly; x -= g.coder->croom->lx;
} else { y -= g.coder->croom->ly;
x -= g.xstart; } else {
y -= g.ystart; x -= g.xstart;
y -= g.ystart;
}
} }
lua_settop(L, 0); lua_settop(L, 0);
lua_newtable(L); lua_newtable(L);

View File

@@ -66,8 +66,9 @@ function test_selection_params()
error("sel:rndcoord returned unset coordinate (" .. pt.x .. "," .. pt.y .. ")"); error("sel:rndcoord returned unset coordinate (" .. pt.x .. "," .. pt.y .. ")");
end end
-- no coordinates in selection, returns -1,-1
pt = sel:rndcoord(1); pt = sel:rndcoord(1);
if pt.x ~= -2 or pt.y ~= -1 then if pt.x ~= -1 or pt.y ~= -1 then
error("sel:rndcoord returned (" .. pt.x .. "," .. pt.y .. ") coordinate"); error("sel:rndcoord returned (" .. pt.x .. "," .. pt.y .. ") coordinate");
end end
@@ -89,6 +90,8 @@ function test_selection_params()
-- variable as param -- variable as param
selection.get(sel, 1, 2); selection.get(sel, 1, 2);
selection.get(sel, {1, 2});
selection.get(sel, { x = 1, y = 2 });
selection.set(sel, 1, 2); selection.set(sel, 1, 2);
selection.negate(sel); selection.negate(sel);
selection.percentage(sel, 50); selection.percentage(sel, 50);