From 70e4278c79b7c5170d05c74ba293161424adcbd1 Mon Sep 17 00:00:00 2001 From: grom Date: Mon, 2 Nov 2026 10:00:20 -0700 Subject: [PATCH] ui: the map's hovered-zone label is chrome, not map content MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The canvas reparents 1.12's `WorldMapButton` into the zooming child so that every 1.12 addon's icons pan and scale with the map. `WorldMapFrameAreaFrame` hangs off that button in the client's own XML — it covers the art, so that is where the label that names what the cursor is over was hung — and it went along with it. Its label is a 102 px THICKOUTLINE FontString. Inside the canvas it scales with the zoom, so at zoom 2.5 every letter is a 261 px glyph, and one zone name's worth of those is most of the 2048² glyph sheet. Measured in grom's 2026-11-02 session: one `ui_text: a 261.10907 logical-px request … past the 256 ceiling`, then 20 `glyph sheet full … resetting at the frame boundary`, one per hover, each of them a frame in which every string on screen is missing — the map "flashing the interface". Frame cost with the map open went 11 ms → 16-20 ms over the same window. So it goes back on the window, anchored to the container's top, which is where the art's top edge is now; at rest that is the pixel it was already at. Measured through the harness: the biggest text under `WorldMapFrame` was 102 px at zoom 1 and 1632 px at zoom 16, and is now 102 px at every zoom. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn --- crates/benilla-app/assets/ui/MapCanvas.lua | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/crates/benilla-app/assets/ui/MapCanvas.lua b/crates/benilla-app/assets/ui/MapCanvas.lua index 16a701db..84fb06ec 100644 --- a/crates/benilla-app/assets/ui/MapCanvas.lua +++ b/crates/benilla-app/assets/ui/MapCanvas.lua @@ -1562,6 +1562,24 @@ local function BuildCanvas() detail:SetAllPoints(canvas) button:SetParent(canvas) + -- Everything the button carries is map content except one frame: `WorldMapFrameAreaFrame`, + -- the hovered-zone name. 1.12's XML hangs it off the mouse surface (TOP, 400x128) because + -- that is what covers the art, but it is chrome — it names what the cursor is over and sits + -- at the top of the window, at the size 1.12 drew it. Its label is a **102 px THICKOUTLINE** + -- FontString, so inside the canvas it scales with the zoom: at zoom 2.5 that is a 261 px + -- glyph per letter, and a zone name's worth of those fills the whole glyph sheet. Measured in + -- grom's 2026-11-02 run — `ui_text: a 261.10907 logical-px request ... past the 256 ceiling` + -- and then 20 `glyph sheet full ... resetting at the frame boundary`, one per hover, each + -- costing every string on screen a frame. So it goes back on the window, anchored to the + -- container's top, which is where the art's top edge is now; at rest that is the pixel it was + -- already at. + local area = WorldMapFrameAreaFrame + if area then + area:SetParent(map) + area:ClearAllPoints() + area:SetPoint("TOP", sc, "TOP", 0, -10) + end + -- The base-art layer a canvas addon hides while it draws its own. It is a proxy rather than the -- detail frame itself, and that distinction is the point: `Hide()` on the frame would take the -- POI buttons and every addon's icons down with it, because they are its children and its