Skip to content

Designers: live test-mode text updates + preview resizes to the edited layout#127

Merged
DanderBot merged 26 commits into
DanderBot:mainfrom
Krathe82:pr/designer-preview
Jun 6, 2026
Merged

Designers: live test-mode text updates + preview resizes to the edited layout#127
DanderBot merged 26 commits into
DanderBot:mainfrom
Krathe82:pr/designer-preview

Conversation

@Krathe82
Copy link
Copy Markdown
Contributor

@Krathe82 Krathe82 commented Jun 5, 2026

Two live-preview fixes for the Aura Designer / Text Designer while working with auto layouts.

Text Designer — test-mode frames update live

Text element edits refreshed real unit frames and the static mock, but not the test-mode frame pool (a separate set), so edits never showed on the test frames the designer is actually looking at. They now refresh too.

Designers — preview resizes to the layout being edited

When editing an auto layout, the Aura/Text Designer preview stayed stuck at a previous layout's frame dimensions. The designers' internal reuse-guards are now dimension-aware (and page caches invalidate on layout switch), so the preview rebuilds to the current layout's frame size — matching the live frames.

Stacks on the existing PR series; merge in order.

Krathe82 added 19 commits June 5, 2026 16:39
…tling

Route every border (frame, square/icon, bar, defensive icon, missing buff,
resource bar, pet, targeted spells) through a single DF.Border engine with
shared style / alpha / gradient controls and 10 animation effects (LibCustomGlow
embedded). Add DF.Expiring with per-entry throttle + stagger for the expiring
border ticker. Defensive-icon and missing-buff border fixes (frame level,
co-planar with the icon, out-of-range fade preserved across re-renders). Adds
the border & expiry system overview docs.
Default-value tweaks for new profiles: buff icon size 20, buff spacing 2, buff
stack-count offsets, Stack/Duration outline SHADOW;OUTLINE, buff & debuff
expiring border inset 0 (flush), plus minor text/aura/absorb/targeted default
tweaks. (Targets border-rework's new border-key schema.)
The old default was opaque black, which is easy to mistake for empty
space on a dark health bar. New default is a translucent grey
(#757575 @ ~80% alpha) so the reduced-max region reads clearly.

Includes a one-time, value-guarded migration: any profile still on the
exact old black {0,0,0,1} is flipped to the new colour on load; any
profile with a customised (non-black) colour is left untouched, and a
per-mode flag means a later deliberate black choice is not reverted.
Iterate the new default from #757575CB to #808080CD (50% mid-grey at
~80% alpha). Migration bumped to V2 and now also catches the brief
in-development #757575CB value (in-dev testers only) in addition to the
original opaque black, so it lands on the final colour; customised
colours are still left alone.
…targeted list

- Role icons: Show Tank/Healer/DPS toggles apply live (no /reload), decoupled
  from the Hide-in-Combat gate.
- Boss debuffs: widen Border Scale range to allow hiding the border, cap to +/-5,
  step by 1, add an explanatory tip.
- Aura Designer: tear down indicators when AD is disabled; re-apply on profile swap.
- Targeted list: don't show in test mode when the feature is disabled.
In replace mode ApplyHealthBar reset the underlying health-bar texture
to the full configured alpha on every aura re-apply, while the OOR path
(UpdateHealthBarAppearance / UpdateAuraDesignerAppearance) drove it to
the faded healthbarEffectiveBlend. In element-specific OOR mode the two
disagree on an out-of-range unit, and a phased unit — whose auras the
client re-syncs constantly, firing UNIT_AURA in a tight loop — makes the
re-apply re-assert full opacity many times a second, so the bar flashed.

Read the OOR-aware effective blend here too (fall back to the configured
alpha on first apply / in range). Regression from the a685d42 vertex->
frame alpha move, which made UpdateHealthBarAppearance OOR-aware but left
this companion write using the raw alpha.
With framePadding 0 the health bar fills the whole frame and the border
draws inward over its edge. In element-specific OOR mode the border fades
to its OOR alpha, revealing the AD replace overlay/recolour sitting under
it — so a green Renew indicator tinted the (class-coloured) border out of
range.

- Inset the AD tint/replace overlay by the frame border thickness so it
  never sits under the border (ApplyHealthBar, and re-applied in
  UpdateAuraDesignerAppearance so a range transition positions it
  immediately instead of waiting for the next aura tick).
- Run UpdateAuraDesignerAppearance before UpdateHealthBarAppearance in
  UpdateAllElementAppearances: the AD pass writes healthbarEffectiveBlend
  (the OOR-aware bar alpha) that the health pass reads, so the underlying
  bar fades in lockstep with the border on the first out-of-range frame
  (no one-tick green flash).
…es, mono fonts

- Upgrade status icons to modern Blizzard atlases (prefer atlas, fall back to the
  legacy texture); role icons prefer the LFG role atlases.
- Live header previews per icon section (icon swatch or status text), greyed when
  disabled; the role preview tracks the selected style.
- AFK icon timer: dedicated Timer Text controls, left-justified zero-padded MM:SS
  countdown that stays steady (no wobble); bundle Roboto Mono for an optional
  fully-static timer.
- Restructure every status-icon section into collapsible Settings / Appearance /
  Position boxes (matching Aura Designer); collapse-bar arrow points up.
- Rename Raid Target -> Target Marker; status-icon font/size/colour now apply to
  live frames instantly.
Follow-up work captured after the initial bundle was cut:

* (Icons) New BG objective carrier icon — lights up a friendly
  party/raid member carrying a battleground objective (flag or orb),
  detected via UnitPvpClassification so it needs no aura access and
  renders on DF frames regardless of Blizzard frame state. Defaults
  on, centred; full Settings/Appearance/Position controls + preview.
* (Icons) Target Marker section header preview now shows the four
  common markers (square/cross/triangle/circle), inset to match the
  other swatch sizes.
* (Defaults) Summon/AFK icon defaults — Show-as-Text off, centred,
  repositioned; AFK timer text size 16, offset Y 1 (party + raid).
* (GUI) Collapse-bar arrow points up and is more visible.
* (Test Mode) Replaced test-mode buff/debuff preview icons that
  pointed at art removed in Midnight, so they no longer render blank.
New optional status icon showing the classic crossed-swords glyph (Interface\CharacterFrame\UI-StateIcon, swords quadrant) on a party/raid member who is in combat. Detection via UnitAffectingCombat(unit), secret-guarded; event-driven on UNIT_FLAGS (no new ticker) plus the normal status-icon refresh. Full Settings/Appearance/Position GUI, Config defaults (party+raid, off by default), export keys, and test-mode rendering — mirrors the BG-carrier icon pattern. Off by default; default position CENTER.
…e "Icons" toggle

The two test-panel preview toggles were confusing; combine them into a single "Icons" checkbox keyed on testShowStatusIcons (now default on). Repoints the role/leader render gate and the quick-preset writes to that key; testShowIcons is retired. One-time migration flips existing profiles on so role/leader icons do not disappear in test mode. Test-mode display only — no gameplay impact.
Krathe82 added 7 commits June 6, 2026 12:42
TD edit callbacks refresh via Preview:RefreshLiveFrames, which only iterated
DF.unitFrameMap (live frames). Test-mode frames are a separate pool
(DF.testPartyFrames / testRaidFrames, dfIsTestFrame), so edits never showed on
the test frames the designer is looking at. Also refresh that pool when test
mode is active; UpdateTextDesigner self-sources mock data via DataSource.Test,
so a light TD-only refresh suffices (no full UpdateTestFrame). Covers the
throttled drag path too (it shares RefreshLiveFrames).

(cherry picked from commit 3c464bbb7ae66457103c94ffe6319eea3ef5ce96)
…s resize

The GUI page build cache is keyed on mode (party/raid) only, not on the active
auto-layout. Switching between raid auto-layouts kept cacheValid=true, so
RefreshCached (tab-switch path) took the cheap route and never rebuilt — tabs
re-showed the previous layout's geometry. Most visible on the Aura Designer and
Text Designer frame previews, which size their mock frame to the layout's
frameWidth/Height at build time and so stayed stuck at the first-edited layout's
size, making indicator/text placement misleading.

Add GUI:InvalidateAllPages() and call it from AutoProfiles EnterEditing/
ExitEditing so every tab rebuilds for the active layout's frame size on next view.

(cherry picked from commit c8d3a442058c9bc52b8c963aa5b6720ec7001f67)
Both designer pages reuse their cached build when the db REFERENCE is unchanged:
AD early-returns on prevDB==dbRef; TD has 'if state.built then return end' with
teardown gated only on state.activeDB~=db. An auto-layout switch keeps the same
raid db reference but changes frameWidth/Height, so both short-circuited and the
preview mock stayed stuck at the first-edited layout's size (so InvalidateAllPages
got BuildXPage called, but the internal reuse-guard skipped the rebuild).

Make both reuse-guards dimension-aware: record the frameWidth/Height each build
was made for (mainFrame.dfBuiltFrameW/H; state.builtFrameW/H) and force a full
rebuild when they differ, so the preview resizes to the active layout.

(cherry picked from commit 6026b858c2226e9ff9aec931a2cf40325b21b9cf)
…tity)

The page-reuse guard keyed only on db identity + frame dimensions. Two raid auto
layouts share the SAME raid db proxy and often the same frame size, so neither check
fired and the page was reused with stale bindings when switching between them. Add an
auto-layout identity (editingProfile / activeRuntimeProfile) to the guard so the page
rebuilds and re-syncs its controls/preview on a same-size layout switch.

(cherry picked from commit 051f1a7c4648e26a1e19ff3b6bddc4ac7aca9537)
…indings survive

EnterEditing/ExitEditing applied a whole-table override (textDesigner, auraDesigner)
with `realRaid[key] = value`, swapping the live table for a new object. The Text/Aura
Designer pages capture a direct reference to that table and bind cards, offset sliders
and the Preview to it (and its element objects); the swap orphaned those bindings, so
edits landed in the old table while the test/live frames read the new one — Text
Designer text "stopped updating" on test frames after a layout switch (icons/auras,
not bound this way, kept working). Replace the table CONTENTS in place (deep) instead,
preserving the table's identity and every captured reference. This also ensures edits
are captured on exit (the override diff reads the live table).

(cherry picked from commit 35de8eaac20c40f5097baf87e5451f3fc53b3037)
@Krathe82 Krathe82 force-pushed the pr/designer-preview branch 2 times, most recently from 019db19 to e787810 Compare June 6, 2026 11:58
Krathe82 pushed a commit to Krathe82/DandersFrames that referenced this pull request Jun 6, 2026
@DanderBot DanderBot merged commit e787810 into DanderBot:main Jun 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants