ui: the map's hovered-zone label is chrome, not map content

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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
This commit is contained in:
2026-11-02 10:00:20 -07:00
co-authored by Claude Opus 5
parent c6b19c7926
commit 70e4278c79
@@ -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