Texture and FontString stop answering each other's methods

- the one shared region table splits into the client's own maps: a Texture no longer answers SetText, a FontString no longer answers SetTexture, and feature-detecting addons see the true surface
- CreateTitleRegion lands whole — object and drag — so an options window that is its own drag handle actually moves
- font-object names resolve whatever their case, and the CursorUpdate/CursorOnUpdate pair arrives for the container-item templates
- GetStringHeight is pruned (1.12 has no such method) and SetPortraitToTexture moves to the global it really is

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Sam
2026-08-14 19:03:34 +07:00
co-authored by Claude Fable 5
parent 56d515a374
commit 84f93c47de
32 changed files with 1109 additions and 80 deletions
+10 -1
View File
@@ -199,7 +199,7 @@ impl UiScript {
} else {
bs.normal_font.as_ref()
};
state_font = name.and_then(|n| model.font_objects.get(n));
state_font = name.and_then(|n| model.font_object(n));
button_font = bs.font.as_ref();
// The per-state color override (Button:Set*TextColor) — hover falls
// back to the normal color, mirroring the font fallback above.
@@ -212,6 +212,15 @@ impl UiScript {
};
}
}
// A TITLE REGION NEVER DRAWS. It is a hit rectangle, not a visual: wow-re
// carves it as a plain Region with no textures at all
// (`widget-api-batch-benilla.md` Q6). Falling through here would emit the
// texture quad the `else` branch below builds — invisible on screen, but the
// render report counts quads, so every addon that makes one would read as
// "drew something" (1246's lesson about what an instrument is told).
if region.map(|r| r.kind) == Some(crate::widget::RegionKind::Title) {
continue;
}
let mut data = model.region_data.get(&rh).cloned().unwrap_or_default();
// Region-level Hide (the VisibleRegion bit): no quad at all.
if data.hidden {