Cut redundant work on hover, combat and layout paths
Modifier key presses while hovering a plugin no longer rebuild its
tooltip (OnLeave + OnEnter) unless it matters: manual tooltips, or
switching from the Alt simple tip back to the plugin's tip
Plugin:applySettings() renders and lays out the text once instead of
up to 5 times (matters at login, profile change and font-metric fix)
globalSettingsChanged() no longer measures the text twice
Bar width sums use the plugin widths cached by updateLayout() instead
of querying frame rects; center frame width only set when changed
Bar/plugin toggleMouse() skip EnableMouse calls when state is
unchanged (runs for every bar and plugin on combat start/end)
closeStaticDialog() skips StaticPopup_Hide() when the dialog is not
shown (runs on every combat start via lock())
Co-Authored-By: Claude Opus 5.5 [email protected]
Fix cross-flavor bugs found in review
Don't replace BackdropTemplate's OnSizeChanged handler (hook it instead):
setting/clearing it broke backdrop texture coords when bars were resized
Gradient: use the backdrop's Center texture, GetTexture() returns a file
id on current clients so the path lookup never matched
Register pet battle events wherever they exist (MoP Classic), not just
on mainline
Unlock again after a pet battle (it locked until the next combat ended)
Drop leftover bars when switching to a profile with fewer bars; they were
still used as drop targets and listed in the plugins' bar selection
getDropPlace(): don't error when every bar is hidden
Reset icon tex coords/vertex color when iconCoords/iconR are cleared or the
border clip is set back to 0
Guard GetAddOnInfo() for unknown tocname, fall back to the default font
path when a bar has none
Don't strip colors from / lay out by secret values (12.0)
Options: open the settings panel on classic flavors too (category ids are
strings there, only numeric ids were opened); remove duplicate table
Co-Authored-By: Claude Opus 5.5 [email protected]
Refactor hot paths and deduplicate core logic
Performance:
Plugin:setText() builds its output from cached format strings and a
reused argument table instead of a 90-line branch tree
Plugin:updateLayout() only re-anchors the icon/text when alignment or
offset actually changes (it runs on every LDB text update)
Coalesce plugin options rebuilds triggered by data object creation into
one per frame (was one full rebuild + sort per plugin during login)
forceHideFrames() iterates UIParent children in a loop instead of
recursing over varargs
Fixes:
Gradient backgrounds use Texture:SetGradient() when SetGradientAlpha()
is not available (removed in 10.0)
Maintainability:
Shared Bar:applyCombatState() for combat enter/leave and enableAndShow()