package org.openautonomousconnection.luascript.tables; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import org.luaj.vm2.lib.OneArgFunction; import org.luaj.vm2.lib.TwoArgFunction; import org.luaj.vm2.lib.VarArgFunction; import org.luaj.vm2.Varargs; import org.openautonomousconnection.luascript.events.JavaToLua; import org.openautonomousconnection.luascript.hosts.GeometryHost; import org.openautonomousconnection.luascript.hosts.HostServices; import org.openautonomousconnection.luascript.utils.ScriptTable; import java.util.Map; /** * Lua table: geometry * *

Functions:

* */ public final class GeometryTable extends ScriptTable { public GeometryTable() { super("geometry"); } @Override protected void define(HostServices services) { GeometryHost host = services.geometry().orElseThrow(() -> new IllegalStateException("GeometryHost not provided")); table().set("rect", new OneArgFunction() { @Override public LuaValue call(LuaValue id) { Map m = host.getBoundingClientRect(id.checkjstring()); return JavaToLua.coerce(m); } }); table().set("viewport", new org.luaj.vm2.lib.ZeroArgFunction() { @Override public LuaValue call() { return JavaToLua.coerce(host.getViewport()); } }); table().set("scrollTo", new VarArgFunction() { @Override public Varargs invoke(Varargs args) { host.scrollTo(args.arg(1).checkdouble(), args.arg(2).checkdouble()); return LuaValue.NIL; } }); table().set("scrollIntoView", new VarArgFunction() { @Override public Varargs invoke(Varargs args) { String id = args.arg(1).checkjstring(); String align = args.narg() >= 2 && !args.arg(2).isnil() ? args.arg(2).tojstring() : null; host.scrollIntoView(id, align); return LuaValue.NIL; } }); } }