Hallo Khabrovites! Ich möchte Ihnen von meinem UI-System erzählen, das ich für meine Game Engine geschrieben habe und auf dem ich einen Editor dafür erstelle. So was:

Zum x-ten Mal begann ich mit dem Schreiben des Motors und entschied fest, dass ich diesmal alles gut und richtig machen würde. Eines dieser "guten und richtigen" ist ein WYSIWYG- Editor a la Unity3D. Übrigens hatte ich vorher bereits Erfahrung in der Entwicklung solcher Editoren auf Qt. Und zu diesem Zeitpunkt habe ich bereits verstanden, dass die Aufgabe nicht einfach ist, wenn ich einen wirklich guten Editor erstellen möchte. Und dies erfordert ein sehr gutes und flexibles UI-System, in dem ich mich sehr gut auskenne und alle möglichen Feinheiten kenne. In einem solchen Editor gibt es tatsächlich viele benutzerdefinierte Widgets, Steuerelemente usw. Daher sollte es keinen Kompromiss zwischen der Qualität des Editors und den Funktionen der Benutzeroberfläche des Systems geben.
UI. .. 2D , (- , , , ..), UI .
" , ?" - .
, , , - . - . . , .
UI :
UI-
.
UI- : . . - .

UI - , ..
(): , , , . (draw call), , , . API , - .
- , - . , . : , , .

9-slice . , 9 :

, , , , . , .

- , ? ( ) . , - . - .

, , :







- . , , . .
, - .

:
:
,
FreeType
, .. . - , . - , , , - . - , -. , , .
, , . . :
. , . : , , , . . , . , , . , "...", .
, .
- . , , .
IRectDrawable
, IRectDrawable. , ( 23), , , . IRectDrawable IDrawable ( ) Transform ( 23, Basis).
, Graphic API , , . , UI . , , , . , . , . , , .
. : , . . . , .
, - . -, . . , .
- , .
IDrawable , .
, - . - .
( , touch-screen), , , . . .
. -, , . , . - - . , , .
CursorAreaEventsListener. , . , , . , EventsSystem, CursorAreaEventListenersLayer.
? ? ? . , . , , . - , , , , , .
. , . , , .. . , . , "" , , .
. , , .
, . , , . , . , , . . .. IRectDrawable.

, , "" . , , , . - , . , .
, , , , .
. ( , IRectDrawable), IDrawable::OnDrawn(). .
. - Actor, , , , , , Actor'. . - Actor'.
Actor' . , . , , , , Actor'.

UI . , UI - Actor'. Widget.
Widget
"" . Actor , , , , Widget' .
Widgt' WidgetLayout, ActorTransform. , , Actor'.
. . . . , "" , . Unity GUI.

WidgetLayer
Actor', Widget' WidgetLayer. - Widget, IRectDrawable WidgetLayout' WidgetLayerLayout.
, . , .. .
Widget', Widget'. , , . , , .
- Widget', Widget'.
WidgetState
- . , . , .. .
Widget' - WidgetState'. -. - , . . . , . . , . .
. - Actor', Widget', Layout', WidgetLayer' .. , - . , children/0/transform/anchor.
, . ,
-
-
-
-
, , ..
Widget', .
Widget'
, Widget' Widget, . . - Widget, . - .
, , . Widget', Widget', "" Widget'. , Widget' .
Layout-Widget'
Widget', Widget'. , HorizontalLayout . VerticalLayout, . GridLayout, .

Layout' ( , ), , . .

Layout' :
Widget'. , .
, . Layout', , . ", "
. - , ,
, WidgetLayout
Widget'
UI , . , Widget . Widget , KeyboardEventsListener, CursorAreaEventsListener.
:
Checkbox
,
/ progress-bar
/ scroll bar
- , . .
PopupWidget. . . . , . , , : , .

, .
: anti-aliased
. , OpenGL D3D, , "". .
anti-aliasing'. : , , . , , , .
, . , 8 . . ""

, , , . , , . , . , , . , , 60 .
, . ++ .
Unity3D, . Unity3D " ", , , "", . . , Canvas', , Unity3D.
, , . . , Actor', . - Widget. . .

Widget'
, - Widget', . , . , , . - .
. , API , . , . .
, - Widget , , . - , , .
, Widget' CheckClipping, . : , . , Widget'. - -, . .
Widget' . , , . , .
, . , , .
. , . "" . Widget - , , . Widget' , , . , "" , , . , , , .
, , . , .. .
, ? ? , . , .
:
Widget' . Widget'
Actor'
UI , . .
6 -. . ImGUI, , "" , .