From b11a3ead1e1e711453c6875f15d445ca75aceb08 Mon Sep 17 00:00:00 2001 From: Myk Taylor Date: Thu, 14 Sep 2023 01:31:19 -0700 Subject: [PATCH] make DFHack logo respond to clicks, not mouseover --- data/art/{dfhack.png => logo.png} | Bin data/art/logo_hovered.png | Bin 0 -> 997 bytes plugins/lua/hotkeys.lua | 82 ++++++++++++++---------------- 3 files changed, 39 insertions(+), 43 deletions(-) rename data/art/{dfhack.png => logo.png} (100%) create mode 100644 data/art/logo_hovered.png diff --git a/data/art/dfhack.png b/data/art/logo.png similarity index 100% rename from data/art/dfhack.png rename to data/art/logo.png diff --git a/data/art/logo_hovered.png b/data/art/logo_hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..133dc5aaf8c98921bcc0203ebd986d4915c726cd GIT binary patch literal 997 zcmVnc%n2qL3P&<7QL*(pc~60K|QZ+CX5 z;r-SBwq*l8=FOWo^ZxVkd(Y-drP9<$GT^te@}oi4gTZeG=04pzox7!}!DP^iPEJnb z^z!l&qtEASZEgJ@4@hz}8uNO+&2_22zyJ337RqaDYr4vy~Zk>hAI`tBScAgimZ zJPiZ_7~9&~q>eIup96fgoK8=bN~1dPHe{4v-m7)1n7!BRz#ibbDJ`dCz-2uqU5 zBr#0u>+4lQw7I#7Zv-4MGJ{8Cuqp!rA&?odB25~dPA9EG&RAU&u3;1=BnV4nhBLkl z0No@!I5^;2LF+&bQAbAyU5%(2Vq&ovuRc9J?eFiSw6KaVW>n{Xo|u>b`l2^$HX2OG zn4%AMc6JEP$o<8|1sI3JL2C2!^ER7}lzV%70eLkWjhY3gqb>#X!$c;Nq5kUb?$%yM zur9#|R|NodZf@@8=BA1RqtS>F8o+wK0M5_PF^-RqQ!8CxUo$|#0a*t_`a?rQ0|Ns( z&lW-g9G?o2;)68a-QAI0ATt=qv8p^|AVCb3>qyOk#bV(TF%^qN+6e;g)5Wr}vB3(2 z-U>je4({*oF+M&%YSG{2av@5rGc`3u)s@TT@x<_IAkWC_OzrD)xN@i{x{N2+d4wh^Ns$-9OL7E%=7wV?~0|2#6)Vmyserf;!01jnXNoGw=04e|g00;m800000 T0Mb*F00000NkvXXu0mjfn&!gY literal 0 HcmV?d00001 diff --git a/plugins/lua/hotkeys.lua b/plugins/lua/hotkeys.lua index be1a95570..f74b54416 100644 --- a/plugins/lua/hotkeys.lua +++ b/plugins/lua/hotkeys.lua @@ -5,7 +5,8 @@ local helpdb = require('helpdb') local overlay = require('plugins.overlay') local widgets = require('gui.widgets') -local textures = dfhack.textures.loadTileset('hack/data/art/dfhack.png', 8, 12) +local logo_textures = dfhack.textures.loadTileset('hack/data/art/logo.png', 8, 12) +local logo_hovered_textures = dfhack.textures.loadTileset('hack/data/art/logo_hovered.png', 8, 12) local function get_command(cmdline) local first_word = cmdline:trim():split(' +')[1] @@ -28,7 +29,6 @@ HotspotMenuWidget = defclass(HotspotMenuWidget, overlay.OverlayWidget) HotspotMenuWidget.ATTRS{ default_pos={x=5,y=1}, default_enabled=true, - hotspot=false, version=2, viewscreens={ 'adopt_region', @@ -48,54 +48,50 @@ HotspotMenuWidget.ATTRS{ 'update_region', 'world' }, - overlay_onupdate_max_freq_seconds=0, frame={w=4, h=3} } function HotspotMenuWidget:init() - self.mouseover = false -end - -function HotspotMenuWidget:overlay_onupdate() - local hasMouse = self:getMousePos() - if hasMouse and not self.mouseover then - self.mouseover = true - return true + local to_pen = dfhack.pen.parse + local function tp(idx, ch) + return to_pen{ + tile=function() return dfhack.textures.getTexposByHandle(logo_textures[idx]) end, + ch=ch, + fg=COLOR_GREY, + } + end + local function tph(idx, ch) + return to_pen{ + tile=function() return dfhack.textures.getTexposByHandle(logo_hovered_textures[idx]) end, + ch=ch, + fg=COLOR_WHITE, + } + end + local function get_tile_token(idx, ch) + return { + tile=tp(idx, ch), + htile=tph(idx, ch), + width=1, + } end - self.mouseover = hasMouse -end -function HotspotMenuWidget:overlay_trigger() - return MenuScreen{hotspot=self}:show() + self:addviews{ + widgets.Label{ + text={ + get_tile_token(1, '!'), get_tile_token(2, 'D'), get_tile_token(3, 'F'), get_tile_token(4, '!'), NEWLINE, + get_tile_token(5, '!'), get_tile_token(6, 'H'), get_tile_token(7, 'a'), get_tile_token(8, '!'), NEWLINE, + get_tile_token(9, '!'), get_tile_token(10, 'c'), get_tile_token(11, 'k'), get_tile_token(12, '!'), + }, + }, + } end -local dscreen = dfhack.screen - -function HotspotMenuWidget:onRenderBody(dc) - local x, y = dc.x, dc.y - local tp = function(offset) - return dfhack.textures.getTexposByHandle(textures[offset]) - end - - if tp(1) == nil then - dscreen.paintString(COLOR_WHITE, x, y + 0, '!DF!') - dscreen.paintString(COLOR_WHITE, x, y + 1, '!Ha!') - dscreen.paintString(COLOR_WHITE, x, y + 2, '!ck!') - else - dscreen.paintTile(COLOR_WHITE, x + 0, y + 0, '!', tp(1)) - dscreen.paintTile(COLOR_WHITE, x + 1, y + 0, 'D', tp(2)) - dscreen.paintTile(COLOR_WHITE, x + 2, y + 0, 'F', tp(3)) - dscreen.paintTile(COLOR_WHITE, x + 3, y + 0, '!', tp(4)) - - dscreen.paintTile(COLOR_WHITE, x + 0, y + 1, '!', tp(5)) - dscreen.paintTile(COLOR_WHITE, x + 1, y + 1, 'H', tp(6)) - dscreen.paintTile(COLOR_WHITE, x + 2, y + 1, 'a', tp(7)) - dscreen.paintTile(COLOR_WHITE, x + 3, y + 1, '!', tp(8)) - - dscreen.paintTile(COLOR_WHITE, x + 0, y + 2, '!', tp(9)) - dscreen.paintTile(COLOR_WHITE, x + 1, y + 2, 'c', tp(10)) - dscreen.paintTile(COLOR_WHITE, x + 2, y + 2, 'k', tp(11)) - dscreen.paintTile(COLOR_WHITE, x + 3, y + 2, '!', tp(12)) +function HotspotMenuWidget:onInput(keys) + if HotspotMenuWidget.super.onInput(self, keys) then + return true + elseif keys._MOUSE_L_DOWN and self:getMousePos() then + MenuScreen{hotspot=self}:show() + return true end end @@ -290,7 +286,7 @@ function Menu:onInput(keys) df.global.enabler.mouse_lbut = 0 return true end - if not self:getMouseFramePos() and not self.hotspot:getMousePos() then + if not self:getMouseFramePos() then self.parent_view:dismiss() return true end