Narcasung cafc3ce28f Skin the Challenges frame's Rewards tab
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.
2026-08-22 16:43:00 +02:00

ElvUI_CoA (WIP)

ElvUI plugin that hides and skins the custom CoA (3.3.5) frames not covered by stock ElvUI.

Implemented

  • Character advancement, vanity, wardrobe frames: skin, scale
  • Challenges frame: skin
  • Class resource frames: hiding
  • Extra action button frame: skin, anchor, size
  • Instance swap frame: skin, anchor, font settings
  • Interface/Video/Audio options: skin the widgets ElvUI's own pass misses
  • Only highlight unitframes if dispellable by your CoA class.

Installation

Download the repo as .zip, extract in Interface\AddOns, remove -master from the folder name.

Requirements

S
Description
No description provided
Readme 410 KiB
Languages
Lua 100%