fix(D.2b): arrow swap, centered menu text, scrollbar-to-top, Send caption

- scroll arrows: native sprites are opposite (0x06004C6C up / 0x06004C69 down) per live
  visual — swap the assignment, drop the V-flip.
- menu labels centered vertically in each 17px row (was top-aligned, looked corrupt).
- scrollbar pulled up to the panel top so the top arrow meets the window border and the
  max/min button lines up with it (the 6px dat offset left a gap after the resize-bar reclaim).
- Send button: the dat sprite 0x06001915 is a blank gold frame (export-confirmed), so add a
  generic optional Label/LabelFont to UiDatElement and draw "Send" centered on it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@
This commit is contained in:
Erik 2026-06-16 11:56:07 +02:00
parent bb983ae850
commit 621a4ab468
4 changed files with 43 additions and 21 deletions

View file

@ -134,11 +134,12 @@ public sealed class UiChannelMenu : UiElement
bool selected = Items[i].Channel is { } c && c == Selected;
DrawSprite(ctx, resolve, selected ? ItemHighlightSprite : ItemNormalSprite, x, y, ColW, ItemH);
}
float textY = (ItemH - LineH()) * 0.5f; // center the label in its row
for (int i = 0; i < Items.Length; i++)
{
int col = i / Rows, row = i % Rows;
bool avail = Items[i].Channel is { } c && IsAvailable(c);
DrawLabel(ctx, Items[i].Label, 4f + col * ColW, top + row * ItemH,
DrawLabel(ctx, Items[i].Label, 4f + col * ColW, top + row * ItemH + textY,
avail ? TextColorAvailable : TextColorGhosted);
}
}