Merge pull request #2552 from myk002/myk_mouse

Get correct mouse button down behavior in Lua without overwriting enabler fields
develop
Myk 2023-01-04 19:39:43 -08:00 committed by GitHub
commit b62cfa3699
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 35 additions and 11 deletions

@ -78,6 +78,9 @@
# Display DFHack version on title screen # Display DFHack version on title screen
#enable title-version #enable title-version
# Allow DFHack tools to overlay functionality and information on the DF screen
enable overlay
# Dwarf Manipulator (simple in-game Dwarf Therapist replacement) # Dwarf Manipulator (simple in-game Dwarf Therapist replacement)
#enable manipulator #enable manipulator
@ -89,7 +92,6 @@
# Other interface improvement tools # Other interface improvement tools
#enable \ #enable \
# overlay \
# confirm \ # confirm \
# dwarfmonitor \ # dwarfmonitor \
# mousequery \ # mousequery \

@ -2392,13 +2392,13 @@ Supported callbacks and fields are:
``_STRING`` ``_STRING``
Maps to an integer in range 0-255. Duplicates a separate "STRING_A???" code for convenience. Maps to an integer in range 0-255. Duplicates a separate "STRING_A???" code for convenience.
``_MOUSE_L, _MOUSE_R`` ``_MOUSE_L, _MOUSE_R, _MOUSE_M``
If the left or right mouse button is being pressed. If the left, right, and/or middle mouse button is being pressed.
``_MOUSE_L_DOWN, _MOUSE_R_DOWN`` ``_MOUSE_L_DOWN, _MOUSE_R_DOWN, _MOUSE_M_DOWN``
If the left or right mouse button was just pressed. If the left, right, and/or middle mouse button was just pressed.
If this method is omitted, the screen is dismissed on receival of the ``LEAVESCREEN`` key. If this method is omitted, the screen is dismissed on reception of the ``LEAVESCREEN`` key.
* ``function screen:onGetSelectedUnit()`` * ``function screen:onGetSelectedUnit()``
* ``function screen:onGetSelectedItem()`` * ``function screen:onGetSelectedItem()``

@ -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,
} }