UiButton als zusammengesetzte Komponente #12

Open
opened 2026-04-16 19:57:57 +00:00 by sebastian · 0 comments
Owner

Problem: UiButton ist ein monolithischer Blattknoten der Text und Hintergrund selbst in onCollectRenderData() rendert. Es ist unmöglich, einen Button mit Icon + Text, oder Text + Badge zu bauen ohne eine neue Klasse zu schreiben.
Lösung: UiButton wird zu einer UiBox mit Kindern:
UiBox (onClick-Handler, VisualStyle für hover/click)
├── UiImage (Icon, optional)
└── UiText (Label)
Die alte UiButton-Klasse wird durch eine Factory-Funktion ersetzt:
// Statt: auto btn = std::make_unique(texID, "Text", font, style);
// Neu:

auto btn = UiButton::create("Text", font);       // Text-only
auto btn = UiButton::create("icon", "Text", font); // Icon + Text

Intern erzeugt UiButton::create() eine UiBox mit den passenden Kindern.
Acceptance Criteria:

  • UiButton ist keine eigene Klasse mehr, nur Factory-Funktion
  • Button-Varianten (nur Text, Icon+Text, Icon+Text+Kosten) ohne neue Klassen möglich
  • onCollectRenderData() in UiButton.cpp entfernt (Layout macht das Flex-System)
Problem: UiButton ist ein monolithischer Blattknoten der Text und Hintergrund selbst in onCollectRenderData() rendert. Es ist unmöglich, einen Button mit Icon + Text, oder Text + Badge zu bauen ohne eine neue Klasse zu schreiben. Lösung: UiButton wird zu einer UiBox mit Kindern: UiBox (onClick-Handler, VisualStyle für hover/click) ├── UiImage (Icon, optional) └── UiText (Label) Die alte UiButton-Klasse wird durch eine Factory-Funktion ersetzt: // Statt: auto btn = std::make_unique<UiButton>(texID, "Text", font, style); // Neu: ``` auto btn = UiButton::create("Text", font); // Text-only auto btn = UiButton::create("icon", "Text", font); // Icon + Text ``` Intern erzeugt UiButton::create() eine UiBox mit den passenden Kindern. Acceptance Criteria: - UiButton ist keine eigene Klasse mehr, nur Factory-Funktion - Button-Varianten (nur Text, Icon+Text, Icon+Text+Kosten) ohne neue Klassen möglich - onCollectRenderData() in UiButton.cpp entfernt (Layout macht das Flex-System)
sebastian added the
refactoring
engine
ui
labels 2026-04-16 19:57:57 +00:00
sebastian added this to the Dicewars project 2026-04-16 21:00:52 +00:00
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sebastian/Dicewars-Siedler#12
No description provided.