Files
benilla-octo/crates
gromandClaude Opus 5 ff2cbdde67 ui: the HIGHLIGHT draw layer is the highlight state, and starts off
A texture an addon made with `CreateTexture(nil, "HIGHLIGHT")` drew all the
time. Only the region `SetHighlightTexture` installs was hover-gated, through
`ButtonState::region_visible`; anything else an addon left in layer 4 was an
ordinary region that nothing ever hid.

In the reference that layer is the highlight *state*, not a place to keep
highlight art, and four things move it:

  OnEnter  0x76b6a0  test [frame+0xf8]; push 4; call 0x76a710  EnableDrawLayer
  OnLeave  0x76b6f0  test [frame+0xf8]; push 4; call 0x76a730  DisableDrawLayer
  Lock     0x76c2e0  writes [frame+0xf8], then enables; on an unlock disables
                     only when this frame is not the mouse focus ([root+0x7c])
  Disable  0x7791bb  disables it outright

`0x77983c` settles what the layer means: a Button picks its label's font
instance by reading that layer's own enabled flag at [frame+0x1a8], which is
[frame+0x198] + 4*4, and takes the highlight font object at +0x3b8 when it is
set. So the layer starts off, and every path that can highlight a frame moves
it -- taking whatever the addon put there along.

What this was costing: hand-built column headers and list rows, which are
everywhere. The <Below Average> guild market's Browse page puts
UI-Character-Tab-Highlight in that layer on each of its nine sort headers, so
every header wore a permanent blue glow bar, and its Statistics page showed all
six filter buttons lit at once instead of the two that were selected.

The nameplate glow lives in layer 4 too, and its hover feed drove only the
region's shown flag. Its own OnEnter override chains back into the base notify
(0x7cb8a5 -> 0x76b6a0), so it now moves the layer with it; addons still read
mouseover from glow:IsShown().

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SgstFWtn1RxEJ5kVrpgYwn
2026-11-07 13:29:12 -07:00
..