cafc3ce28f
The tab's twenty-nine children all exist on a cold reload, before it has ever been opened, so this goes through SkinContents with the rest of the window rather than needing a hook on the tab's own OnShow -- which a tab switch would have wanted, since switching tabs fires nothing. None of the Trials tab's naming carries over. Its search box is TrialsTabSearch and its filter a FilterDropDown, where these are StoreTabSearchBox and Filter, so every suffix was confirmed rather than copied and the divergence is written down for the four tabs still to do. The Filter is the one widget that had to be read twice. Structurally it is a plain Button -- no Middle texture, no Button child, no Text fontstring -- so the test the Interface Options sweep settled on says it is not a dropdown. By art it plainly is: the same nine Silver-Button slices and ChatFrameExpandArrow caret the Trials filter wears. Dropdown matches on the art rather than on the naming, so it takes it unchanged; the structural test is only ever a shortcut to that question and here it answers it wrongly. The grid is a fixed pool of twenty-one cards built up front, not one built per page, so a single pass covers every card the tab will ever show and nothing hangs off a page-change hook. The icon crop is the exception and is re-applied from a hook on the texture's SetTexture: the store refills the pool in place on every search, filter and page change, and SetTexture resets a texture's coords, so a one-shot crop survives exactly until the first page turn and then the native icon borders come back on every card at once. The slot plate underneath needs no such watch -- StripArtByFile noops its SetTexture, so a refill that re-arts it writes nothing. Cards take HandleButton's useCreateBackdrop path rather than its default SetTemplate one, which is what makes their padding possible: a template is drawn as regions of the button and can only ever match its rect, and the rect is tight -- 140x32 around a 32px icon, so the icon met the top and bottom edges and the name ran to the right one. A backdrop is a child frame that can be set outside it. Same reasoning as the window panel's, one level down. The hover colouring follows either way, since it resolves button.backdrop before the button itself. The two headings above the grid are Buttons by type but captions by function, so their atlas art comes off and nothing goes back: a backdrop would draw a box around a caption, and the HIGHLIGHT layer would light it up under a cursor with nothing behind it. They are walked off the layout rather than named, the set being one per reward vendor. Left alone deliberately: the Currency button, which carries the trophy icon and its counter as its only two regions and no frame art at all, and PageText, which is a region of the tab itself -- the same trap as the vanity store's counters. Nothing here blind-strips the tab. No scroll bar is wired either; the grid pages rather than scrolls and has no scroll frame to hang one off. Everything reuses an existing helper, so the shared layer is unchanged.