From 0d6c5869f49f7cdec4443c0754c6fdc45e27182b Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Sun, 30 Apr 2023 16:40:03 -0700 Subject: [PATCH 1/2] fix logo disappearing when hovered on title screen --- docs/changelog.txt | 1 + plugins/lua/overlay.lua | 25 +++++++++++++------------ plugins/overlay.cpp | 3 ++- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index e3ec3ca40..d0855dbc8 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -36,6 +36,7 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: ## New Plugins ## Fixes +- `hotkeys`: DFHack logo no longer disappears when hovered on the title screen ## Misc Improvements diff --git a/plugins/lua/overlay.lua b/plugins/lua/overlay.lua index b1960989f..84c2b4f96 100644 --- a/plugins/lua/overlay.lua +++ b/plugins/lua/overlay.lua @@ -447,7 +447,7 @@ function update_hotspot_widgets() end end -local function matches_focus_strings(db_entry, vs_name) +local function matches_focus_strings(db_entry, vs_name, vs) if not db_entry.focus_strings then return true end local matched = true local simple_vs_name = simplify_viewscreen_name(vs_name) @@ -465,9 +465,10 @@ end local function _update_viewscreen_widgets(vs_name, vs, now_ms) local vs_widgets = active_viewscreen_widgets[vs_name] if not vs_widgets then return end + local is_all = vs_name == 'all' now_ms = now_ms or dfhack.getTickCount() for name,db_entry in pairs(vs_widgets) do - if matches_focus_strings(db_entry, vs_name) and + if (is_all or matches_focus_strings(db_entry, vs_name, vs)) and do_update(name, db_entry, now_ms, vs) then return end @@ -483,12 +484,12 @@ function update_viewscreen_widgets(vs_name, vs) end end -local function _feed_viewscreen_widgets(vs_name, keys) +local function _feed_viewscreen_widgets(vs_name, vs, keys) local vs_widgets = active_viewscreen_widgets[vs_name] if not vs_widgets then return false end for _,db_entry in pairs(vs_widgets) do local w = db_entry.widget - if matches_focus_strings(db_entry, vs_name) and + if (not vs or matches_focus_strings(db_entry, vs_name, vs)) and detect_frame_change(w, function() return w:onInput(keys) end) then return true end @@ -496,9 +497,9 @@ local function _feed_viewscreen_widgets(vs_name, keys) return false end -function feed_viewscreen_widgets(vs_name, keys) - if not _feed_viewscreen_widgets(vs_name, keys) and - not _feed_viewscreen_widgets('all', keys) then +function feed_viewscreen_widgets(vs_name, vs, keys) + if not _feed_viewscreen_widgets(vs_name, vs, keys) and + not _feed_viewscreen_widgets('all', nil, keys) then return false end gui.markMouseClicksHandled(keys) @@ -508,13 +509,13 @@ function feed_viewscreen_widgets(vs_name, keys) return true end -local function _render_viewscreen_widgets(vs_name, dc) +local function _render_viewscreen_widgets(vs_name, vs, dc) local vs_widgets = active_viewscreen_widgets[vs_name] if not vs_widgets then return end dc = dc or gui.Painter.new() for _,db_entry in pairs(vs_widgets) do local w = db_entry.widget - if matches_focus_strings(db_entry, vs_name) then + if not vs or matches_focus_strings(db_entry, vs_name, vs) then detect_frame_change(w, function() w:render(dc) end) end end @@ -523,9 +524,9 @@ end local force_refresh -function render_viewscreen_widgets(vs_name) - local dc = _render_viewscreen_widgets(vs_name, nil) - _render_viewscreen_widgets('all', dc) +function render_viewscreen_widgets(vs_name, vs) + local dc = _render_viewscreen_widgets(vs_name, vs, nil) + _render_viewscreen_widgets('all', nil, dc) if force_refresh then force_refresh = nil df.global.gps.force_full_display_count = 1 diff --git a/plugins/overlay.cpp b/plugins/overlay.cpp index 8e27c8308..c02c960ba 100644 --- a/plugins/overlay.cpp +++ b/plugins/overlay.cpp @@ -72,9 +72,10 @@ struct viewscreen_overlay : T { bool input_is_handled = false; // don't send input to the overlays if there is a modal dialog up if (!world->status.popups.size()) - call_overlay_lua(NULL, "feed_viewscreen_widgets", 2, 1, + call_overlay_lua(NULL, "feed_viewscreen_widgets", 3, 1, [&](lua_State *L) { Lua::Push(L, T::_identity.getName()); + Lua::Push(L, this); Lua::PushInterfaceKeys(L, *input); }, [&](lua_State *L) { input_is_handled = lua_toboolean(L, -1); From c1a0d1ad8665acbbe87538518545b635050c1b54 Mon Sep 17 00:00:00 2001 From: Myk Date: Tue, 2 May 2023 09:55:35 -0700 Subject: [PATCH 2/2] Update changelog.txt --- docs/changelog.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/changelog.txt b/docs/changelog.txt index d0855dbc8..e3ec3ca40 100644 --- a/docs/changelog.txt +++ b/docs/changelog.txt @@ -36,7 +36,6 @@ changelog.txt uses a syntax similar to RST, with a few special sequences: ## New Plugins ## Fixes -- `hotkeys`: DFHack logo no longer disappears when hovered on the title screen ## Misc Improvements