feat(D.2b): importer renders Type-12-with-sprites + carries DefaultState
Task G1: two gaps blocked chat window static sprite elements from rendering. Change 1 — DatWidgetFactory: only skip Type-12 elements that have no own state media (pure style prototypes). A Type-12 element that carries sprites (e.g. a chat Send button whose derived Type-0 element inherited Type 12 from its base prototype) now renders as a UiDatElement. Change 2 — ElementInfo: add DefaultStateName field (string, default ""). Change 3 — LayoutImporter.ToInfo: read ElementDesc.DefaultState.ToString() into DefaultStateName; normalize Undef/Undefined/0 sentinels to "". Change 4 — ElementReader.Merge: inherit DefaultStateName (derived wins if non-empty, else base). Change 5 — UiDatElement ctor: initialize ActiveState to DefaultStateName when set; else "Normal" when a Normal-state sprite is present (retail's implicit default for buttons/tabs); else "" (DirectState). This makes the Send button, max/min button, and numbered tabs render their default sprite without requiring explicit state assignment at runtime. Vitals neutrality: all vitals chrome/grip elements carry DirectState-only sprites with no "Normal" named state and DefaultStateName="" (Undef in dat), so their ActiveState stays "" and their existing conformance tests are unaffected. Vitals text labels (Type 0→12 via Merge, no StateMedia) are still skipped by the refined Type-12 guard (StateMedia.Count==0). Tests: 4 new tests (2 in DatWidgetFactoryTests, 3 in UiDatElementTests). All 386 pass; 387 total (1 pre-existing skip). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c2170ab18f
commit
6e6339b026
6 changed files with 126 additions and 19 deletions
|
|
@ -208,19 +208,23 @@ public static class LayoutImporter
|
|||
/// </summary>
|
||||
private static ElementInfo ToInfo(ElementDesc d)
|
||||
{
|
||||
// Normalize DefaultState: UIStateId.ToString() gives "Undef"/"Undefined" or "0" when
|
||||
// no default is set; map those to "" so UiDatElement treats them as "no preference".
|
||||
var defState = d.DefaultState.ToString();
|
||||
var info = new ElementInfo
|
||||
{
|
||||
Id = d.ElementId,
|
||||
Type = d.Type,
|
||||
X = (float)d.X,
|
||||
Y = (float)d.Y,
|
||||
Width = (float)d.Width,
|
||||
Height = (float)d.Height,
|
||||
Left = d.LeftEdge,
|
||||
Top = d.TopEdge,
|
||||
Right = d.RightEdge,
|
||||
Bottom = d.BottomEdge,
|
||||
ReadOrder = d.ReadOrder,
|
||||
Id = d.ElementId,
|
||||
Type = d.Type,
|
||||
X = (float)d.X,
|
||||
Y = (float)d.Y,
|
||||
Width = (float)d.Width,
|
||||
Height = (float)d.Height,
|
||||
Left = d.LeftEdge,
|
||||
Top = d.TopEdge,
|
||||
Right = d.RightEdge,
|
||||
Bottom = d.BottomEdge,
|
||||
ReadOrder = d.ReadOrder,
|
||||
DefaultStateName = (defState is "Undef" or "Undefined" or "0") ? "" : defState,
|
||||
};
|
||||
|
||||
// DirectState (unnamed, key "").
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue