v2026.08.25.2
·
3 commits
to main
since this release
Gloom's Build Barn
v2026.08.25.2 (2026-08-25)
Full Changelog Previous Releases
- Docked first open: label widths measured once, and no second chance
Reported: with GBB docked, the first Talents open draws the panel and the boss
icons but no text — switch labels, strip header, footer, the dock button's
caption. Close and reopen and it fills in.
⚠️ ONE HALF IS DIAGNOSED, THE OTHER IS NOT, and they are fixed differently.
DIAGNOSED — the switch labels. makeSwitch sized each label button from
GetStringWidth() ONCE at build. On a cold open the bundled TTF has not been laid
out yet and that returns 0, so the button collapsed to 2px and the label, which
is SetAllPoints to it, had nowhere to draw. Permanent, because the width was
never revisited.
The screenshots carry the proof and it is positional, not just missing text: in
the broken shot both toggle tracks sit ~45px further left than in the working
one — exactly a collapsed label width, since everything after s.left anchors off
it. Measuring moved into refresh(), which every Render calls, and a ZERO
MEASUREMENT IS DISCARDED rather than applied, so a cold frame keeps a placeholder
and looks approximately right until the real number arrives.
This predates the icon work — git blame puts it in the original publish commit.
NOT DIAGNOSED — the strip header, footer and dock caption. Same trigger, no
confirmed mechanism: they are written by Render()/ApplyDockLayout into a frame
that on a cold docked open is built, laid out, shown and rendered inside one
tick while Blizzard_PlayerSpells is still loading. Covered with one deferred
re-render on show, which is safe because Render() is idempotent — it recomputes
from state and writes what a warm open would.
That is a mitigation, not an explanation, and it is labelled as one in the code.
If it comes back the next report needs evidence, which was impossible to collect:
GBB.debug was a plain local reset to false every load, so by the time you can
type /gbb debug the first open has already happened. It now persists in
SavedVariables, and both the measurement and the deferred render log.