Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
Zitat von »TrommlBomml«
Dann ist der WPF-Ansatz nicht der richtige sondern der von BlueCobold
Zitat von »eXpl0it3r«
Ich persönlich finde SFGUI's Layouter recht praktisch, denn obwohl es empfohlen ist nur Layouters zu verwenden, so ist es jedoch auch kein Problem mal etwas zu fixieren. Wenn ich mich richtig erinnere, hat SFGUI vom Design her relative viel von GTK übernommen, kannst dir also auch mal GTK noch anschauen.
Zitat von »Thoran«
Klar kann ich die Positionierung von Anfang an einem Layoutmanager übertragen, der dann auf der Basis von Constraints oder sonstigen Konstrukten versucht das anzulegen, was der Entwickler evtl. gemeint hat. Ich bevorzuge, das Anlegen der GUI über einen GUI-Editor, es sei denn man betreibt einen data-driven approach, der auch die GUI-Elemente bestimmt.
Zitat von »Thoran«
Auflösungsunabhängigkeit erreiche ich normalerweise damit, dass ich grunsätzlich im Interval [0;1] meine GUI-Widgets anlege. Während der Ausführung wird das dann mit der tatsächlich verfügbaren Auflösung entlang der Achsen multipliziert.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Ich würde Dir zu beidem raten. Sonst hast Du keine Möglichkeit ein Element immer z.B. 30 Pixel vom rechten Rand zu positionieren. Das geht nämlich nur mit der Kombination aus 100% - 30 Pixel.Ich hatte mir die Möglichkeit überlegt, die Größe eines Elements entweder in Pixeln oder in Prozent festlegen zu können
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 |
widget.setPlacement(Placement::Relative); // Setzt Abstand zwischen rechter Widgetkante und rechter Parentkante auf 30px. widget.setRight(Unit::pixel(30)); // Setzt Abstand zwischen linker Widgetkante und rechter Parentkante auf 30px. // setRight wird hierdurch wieder außer Kraft gesetzt. widget.setLeft(Unit::percent(1.f) + Unit::pixel(30)); // Und so könnte man ein Widget im Parent zentrieren: widget.setLeft(Unit::percent(.5f)); widget.alignHorizontal(Align::Center); |
C-/C++-Quelltext |
|
1 2 |
// Als Argument wird das Objekt übergeben, auf das sich die Prozentwerte beziehen. float finalx = widget.left.translate(widget.parent); |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
widget.setPlacement(Placement::Relative); // Widget horizontal und vertikal im Parent zentrieren. widget.alignHorizontal(Align::Center); widget.alignVertical(Align::Center); // Widget rechts innen am Parent platzieren. widget.alignHorizontal(Align::Right); // Widget rechts außen am Parent platzieren. widget.alignHorizontal(Align::Right); widget.setMarginLeft(Measure::self(1.f)); // Widget unter dem Parent platzieren, mit 30px Abstand. Measure::pixel ist optional. widget.alignVertical(Align::Top); widget.setMarginTop(Measure::parent(1.f) + Measure::pixel(30)); // Alternative: widget.alignVertical(Align::Bottom); widget.setMarginTop(Measure::self(1.f) + 30); // Widget auf dem linken Rand des Parents zentrieren. widget.alignHorizontal(Align::Left); widget.setMarginRight(Measure::Self(.5f)); |
XML |
|
1 2 3 4 5 6 7 8 9 |
<parent> <!-- Widget wird auf rechtem Rand des Parents zentriert. 100% bezieht sich auf die Breite des Parents. @50% bezieht sich auf die Breite des Widgets. --> <widget placement="relative" align="left" margin-left="100% - @50%"/> <!-- Widget wird 10px über dem unteren Rand des Parents platziert. --> <widget placement="relative" valign="bottom" margin-bottom="10px"/> </parent> |
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Zitat von »BlueCobold«
Das halte ich für Unfug. Ich würde das schlicht align="right" nennen, denn das erwartet man als Ergebnis.
Zitat von »BlueCobold«
Eine mathematische Operation als Wert für ein XML-Attribut halte ich auch für ganz schlecht.
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Ich hätte es erwartet.Ich denke nicht, dass man das als Ergebnis erwarten würde.
Das wiederum hätte ich nicht erwartet.Aber das passiert hier nicht: Stattdessen wird das Widget so ausgerichtet, dass sein Mittelpunkt auf dem rechten Rand des Parents liegt.
Ich würde Dir zu beidem raten. Sonst hast Du keine Möglichkeit ein Element immer z.B. 30 Pixel vom rechten Rand zu positionieren. Das geht nämlich nur mit der Kombination aus 100% - 30 Pixel.
Administrator
Ich frage mich warum man das tun will, wenn man ein auflösungsunabhängiges GUI entwicklen will?
Werbeanzeige