correct mouse down behavior without hosing enabler

before, we inhibited multiple mouse button down events by overwriting
the values in enabler. now we keep state internally and inhibit multiple
events on our own.

also add events and state tracking for middle mouse button
develop
Myk Taylor 2023-01-03 14:52:49 -08:00
parent 898e23d6a5
commit 9fd3ef7b4b
No known key found for this signature in database
GPG Key ID: 8A39CA0FA0C16E78
2 changed files with 27 additions and 5 deletions

@ -131,9 +131,13 @@ void DFHack::Lua::GetVector(lua_State *state, std::vector<std::string> &pvec)
} }
} }
static bool inhibit_l_down = false;
static bool inhibit_r_down = false;
static bool inhibit_m_down = false;
void DFHack::Lua::PushInterfaceKeys(lua_State *L, void DFHack::Lua::PushInterfaceKeys(lua_State *L,
const std::set<df::interface_key> &keys) { const std::set<df::interface_key> &keys) {
lua_createtable(L, 0, keys.size() + 5); lua_createtable(L, 0, keys.size() + 7);
for (auto &key : keys) for (auto &key : keys)
{ {
@ -154,23 +158,32 @@ void DFHack::Lua::PushInterfaceKeys(lua_State *L,
} }
if (df::global::enabler) { if (df::global::enabler) {
if (df::global::enabler->mouse_lbut_down) { if (!inhibit_l_down && df::global::enabler->mouse_lbut_down) {
lua_pushboolean(L, true); lua_pushboolean(L, true);
lua_setfield(L, -2, "_MOUSE_L_DOWN"); lua_setfield(L, -2, "_MOUSE_L_DOWN");
inhibit_l_down = true;
} }
if (df::global::enabler->mouse_rbut_down) { if (!inhibit_r_down && df::global::enabler->mouse_rbut_down) {
lua_pushboolean(L, true); lua_pushboolean(L, true);
lua_setfield(L, -2, "_MOUSE_R_DOWN"); lua_setfield(L, -2, "_MOUSE_R_DOWN");
inhibit_r_down = true;
}
if (!inhibit_m_down && df::global::enabler->mouse_mbut_down) {
lua_pushboolean(L, true);
lua_setfield(L, -2, "_MOUSE_M_DOWN");
inhibit_m_down = true;
} }
if (df::global::enabler->mouse_lbut) { if (df::global::enabler->mouse_lbut) {
lua_pushboolean(L, true); lua_pushboolean(L, true);
lua_setfield(L, -2, "_MOUSE_L"); lua_setfield(L, -2, "_MOUSE_L");
df::global::enabler->mouse_lbut_down = 0;
} }
if (df::global::enabler->mouse_rbut) { if (df::global::enabler->mouse_rbut) {
lua_pushboolean(L, true); lua_pushboolean(L, true);
lua_setfield(L, -2, "_MOUSE_R"); lua_setfield(L, -2, "_MOUSE_R");
df::global::enabler->mouse_rbut_down = 0; }
if (df::global::enabler->mouse_mbut) {
lua_pushboolean(L, true);
lua_setfield(L, -2, "_MOUSE_M");
} }
} }
} }
@ -2134,4 +2147,11 @@ void DFHack::Lua::Core::Reset(color_ostream &out, const char *where)
out.printerr("Common lua context stack top left at %d after %s.\n", top, where); out.printerr("Common lua context stack top left at %d after %s.\n", top, where);
lua_settop(State, 0); lua_settop(State, 0);
} }
if (!df::global::enabler->mouse_lbut)
inhibit_l_down = false;
if (!df::global::enabler->mouse_rbut)
inhibit_r_down = false;
if (!df::global::enabler->mouse_mbut)
inhibit_m_down = false;
} }

@ -14,8 +14,10 @@ CLEAR_PEN = to_pen{tile=909, ch=32, fg=0, bg=0}
local FAKE_INPUT_KEYS = { local FAKE_INPUT_KEYS = {
_MOUSE_L = true, _MOUSE_L = true,
_MOUSE_R = true, _MOUSE_R = true,
_MOUSE_M = true,
_MOUSE_L_DOWN = true, _MOUSE_L_DOWN = true,
_MOUSE_R_DOWN = true, _MOUSE_R_DOWN = true,
_MOUSE_M_DOWN = true,
_STRING = true, _STRING = true,
} }