Castle Game Engine: CastleUIControls: Class TUIContainer

# Class TUIContainer
Description | Hierarchy | Fields | Methods | Properties
## Unit CastleUIControls ## Declaration `type TUIContainer = class abstract(TComponent)` ## Description Abstract user interface container. Connects OpenGL context management code with Castle Game Engine controls (TUIControl, that is the basis for all our 2D and 3D rendering). When you use TCastleWindowCustom (a window) or TCastleControlCustom (Lazarus component), they provide you a non-abstact implementation of `TUIContainer`. Basically, this class manages a Controls list. We pass our inputs (mouse / key events) to these controls. Input goes to the top-most (that is, first on the Controls list) control under the current mouse position (we check control's PositionInside method for this). As long as the event is not handled, we look for next controls under the mouse position. We also call other methods on every control, like TUIControl.Update, TUIControl.Render. ## Hierarchy TComponent TUIContainer ## Overview ### Methods
| `procedure Notification(AComponent: TComponent; Operation: TOperation); override;`
| `procedure SetCursor(const Value: TMouseCursor); virtual; abstract;`
| `function GetMousePosition: TVector2Single; virtual; abstract;`
| `procedure SetMousePosition(const Value: TVector2Single); virtual; abstract;`
| `function GetTouches(const Index: Integer): TTouch; virtual; abstract;`
| `constructor Create(AOwner: TComponent); override;`
| `destructor Destroy; override;`
| `procedure EventOpen(const OpenWindowsCount: Cardinal); virtual;`
| `procedure EventClose(const OpenWindowsCount: Cardinal); virtual;`
| `function EventPress(const Event: TInputPressRelease): boolean; virtual;`
| `function EventRelease(const Event: TInputPressRelease): boolean; virtual;`
| `procedure EventUpdate; virtual;`
| `procedure EventMotion(const Event: TInputMotion); virtual;`
| `function AllowSuspendForInput: boolean;`
| `procedure EventBeforeRender; virtual;`
| `procedure EventRender; virtual; abstract;`
| `procedure EventResize; virtual;`
| `function Controls: TUIControlList;`
| `procedure Invalidate; virtual; abstract;`
| `function GLInitialized: boolean; virtual; abstract;`
| `function Width: Integer; virtual; abstract;`
| `function Height: Integer; virtual; abstract;`
| `function Rect: TRectangle; virtual; abstract;`
| `function Dpi: Integer; virtual; abstract;`
| `function MousePressed: TMouseButtons; virtual; abstract;`
| `function Focused: boolean; virtual; abstract;`
| `function Pressed: TKeysPressed; virtual; abstract;`
| `function Fps: TFramesPerSecond; virtual; abstract;`
| `function TouchesCount: Integer; virtual; abstract;`
| `procedure UpdateFocusAndMouseCursor;`
| `function IsMousePositionForMouseLook: boolean;`
| `procedure MakeMousePositionForMouseLook;`
### Properties
| `property OnOpen: TContainerEvent read FOnOpen write FOnOpen;`
| `property OnOpenObject: TContainerObjectEvent read FOnOpenObject write FOnOpenObject;`
| `property OnBeforeRender: TContainerEvent read FOnBeforeRender write FOnBeforeRender;`
| `property OnRender: TContainerEvent read FOnRender write FOnRender;`
| `property OnResize: TContainerEvent read FOnResize write FOnResize;`
| `property OnClose: TContainerEvent read FOnClose write FOnClose;`
| `property OnCloseObject: TContainerObjectEvent read FOnCloseObject write FOnCloseObject;`
| `property OnPress: TInputPressReleaseEvent read FOnPress write FOnPress;`
| `property OnRelease: TInputPressReleaseEvent read FOnRelease write FOnRelease;`
| `property OnMotion: TInputMotionEvent read FOnMotion write FOnMotion;`
| `property OnUpdate: TContainerEvent read FOnUpdate write FOnUpdate;`
| `property Cursor: TMouseCursor write SetCursor;`
| `property Focus: TUIControl read FFocus;`
| `property TooltipVisible: boolean read FTooltipVisible;`
| `property TooltipPosition: TVector2Single read FTooltipPosition;`
| `property MousePosition: TVector2Single read GetMousePosition write SetMousePosition;`
| `property Touches[Index:Integer]: TTouch read GetTouches;`
| `property ForceCaptureInput: TUIControl read FForceCaptureInput write FForceCaptureInput;`
| `property RenderStyle: TRenderStyle read FRenderStyle write FRenderStyle default rs2D;`
| `property TooltipDelay: TMilisecTime read FTooltipDelay write FTooltipDelay default DefaultTooltipDelay;`
| `property TooltipDistance: Cardinal read FTooltipDistance write FTooltipDistance default DefaultTooltipDistance;`
## Description ### Methods
| `procedure Notification(AComponent: TComponent; Operation: TOperation); override;`
| `procedure SetCursor(const Value: TMouseCursor); virtual; abstract;`
| `function GetMousePosition: TVector2Single; virtual; abstract;`
| `procedure SetMousePosition(const Value: TVector2Single); virtual; abstract;`
| `function GetTouches(const Index: Integer): TTouch; virtual; abstract;`
| `constructor Create(AOwner: TComponent); override;`
| `destructor Destroy; override;`
| `procedure EventOpen(const OpenWindowsCount: Cardinal); virtual;`
Propagate the event to all the Controls and to our own OnXxx callbacks. Usually these are called by a container provider, like TCastleWindow or TCastleControl. But it is also allowed to call them manually to fake given event.
| `procedure EventClose(const OpenWindowsCount: Cardinal); virtual;`
| `function EventPress(const Event: TInputPressRelease): boolean; virtual;`
| `function EventRelease(const Event: TInputPressRelease): boolean; virtual;`
| `procedure EventUpdate; virtual;`
| `procedure EventMotion(const Event: TInputMotion); virtual;`
| `function AllowSuspendForInput: boolean;`
| `procedure EventBeforeRender; virtual;`
| `procedure EventRender; virtual; abstract;`
| `procedure EventResize; virtual;`
| `function Controls: TUIControlList;`
Controls listening for events (user input, resize, and such) of this container. Usually you explicitly add / delete controls to this list. Also, freeing the control that is on this list automatically removes it from this list (using the TComponent.Notification mechanism). Controls on the list should be specified in front-to-back order. That is, controls at the beginning of this list are first to catch some events, and are rendered as the last ones (to cover controls beneath them).
| `procedure Invalidate; virtual; abstract;`
Redraw the contents of of this window, at the nearest good time. The redraw will not happen immediately, we will only "make a note" that we should do it soon. Redraw means that we call EventBeforeRender (OnBeforeRender), EventRender (OnRender), then we flush OpenGL commands, swap buffers etc. Calling this on a closed container (with GLInitialized = `False`) is allowed and ignored.
| `function GLInitialized: boolean; virtual; abstract;`
Is the OpenGL context initialized.
| `function Width: Integer; virtual; abstract;`
| `function Height: Integer; virtual; abstract;`
| `function Rect: TRectangle; virtual; abstract;`
| `function Dpi: Integer; virtual; abstract;`
| `function MousePressed: TMouseButtons; virtual; abstract;`
Mouse buttons currently pressed.
| `function Focused: boolean; virtual; abstract;`
Is the window focused now, which means that keys/mouse events are directed to this window.
| `function Pressed: TKeysPressed; virtual; abstract;`
Keys currently pressed.
| `function Fps: TFramesPerSecond; virtual; abstract;`
| `function TouchesCount: Integer; virtual; abstract;`
| `procedure UpdateFocusAndMouseCursor;`
Called by controls within this container when something could change the container focused control (or it's cursor) or Focused or MouseLook. In practice, called when TUIControl.Cursor or TUIControl.PositionInside results change. This recalculates the focused control and the final cursor of the container, looking at Container's Controls, testing PositionInside with current mouse position, and looking at Cursor property of the focused control. When you add / remove some control from the Controls list, or when you move mouse (focused changes) this will also be automatically called (since focused control or final container cursor may also change then).
| `function IsMousePositionForMouseLook: boolean;`
Internal for implementing mouse look in cameras.
| `procedure MakeMousePositionForMouseLook;`
Internal for implementing mouse look in cameras.
### Properties
| `property OnOpen: TContainerEvent read FOnOpen write FOnOpen;`
These should only be get/set by a container provider, like TCastleWindow or TCastleControl.
| `property OnOpenObject: TContainerObjectEvent read FOnOpenObject write FOnOpenObject;`
| `property OnBeforeRender: TContainerEvent read FOnBeforeRender write FOnBeforeRender;`
| `property OnRender: TContainerEvent read FOnRender write FOnRender;`
| `property OnResize: TContainerEvent read FOnResize write FOnResize;`
| `property OnClose: TContainerEvent read FOnClose write FOnClose;`
| `property OnCloseObject: TContainerObjectEvent read FOnCloseObject write FOnCloseObject;`
| `property OnPress: TInputPressReleaseEvent read FOnPress write FOnPress;`
| `property OnRelease: TInputPressReleaseEvent read FOnRelease write FOnRelease;`
| `property OnMotion: TInputMotionEvent read FOnMotion write FOnMotion;`
| `property OnUpdate: TContainerEvent read FOnUpdate write FOnUpdate;`
| `property Cursor: TMouseCursor write SetCursor;`
| `property Focus: TUIControl read FFocus;`
Returns the control that should receive input events first, or `Nil` if none. More precisely, this is the first on Controls list that is enabled and under the mouse cursor. `Nil` is returned when there's no enabled control under the mouse cursor.
| `property TooltipVisible: boolean read FTooltipVisible;`
When the tooltip should be shown (mouse hovers over a control with a tooltip) then the `TooltipVisible` is set to `True`, and TooltipPosition indicate left-bottom suggested position of the tooltip. The tooltip is only detected when TUIControl.TooltipExists. See TUIControl.TooltipExists and TUIControl.TooltipStyle and TUIControl.TooltipRender. For simple purposes just set TUIControlFont.Tooltip to something non-empty.
| `property TooltipPosition: TVector2Single read FTooltipPosition;`
| `property MousePosition: TVector2Single read GetMousePosition write SetMousePosition;`
| `property Touches[Index:Integer]: TTouch read GetTouches;`
| `property ForceCaptureInput: TUIControl read FForceCaptureInput write FForceCaptureInput;`
Force passing events to given control first, regardless if this control is under mouse cursor. This control also always has focus. An example when this is useful is when you use camera MouseLook, and the associated viewport does not fill the full window (TCastleAbstractViewport.FullSize is `False`, and actual sizes are smaller than window, and may not include window center). In this case you want to make sure that motion events get passed to this control, and that this control has focus (to keep mouse cursor hidden). This is used only if it is also present on our Controls list, as it doesn't make sense otherwise. We also cannot reliably track it's existence when it's outside our Controls list (and we don't want to eagerly `Nil` this property automatically).
| `property RenderStyle: TRenderStyle read FRenderStyle write FRenderStyle default rs2D;`
How OnRender callback fits within various Render methods of our Controls. rs2D means that OnRender is called at the end, after all our Controls (3D and 2D) are drawn. rs3D means that OnRender is called after all other Controls with rs3D draw style, but before any 2D controls. This is suitable if you want to draw something 3D, that may be later covered by 2D controls.
| `property TooltipDelay: TMilisecTime read FTooltipDelay write FTooltipDelay default DefaultTooltipDelay;`
| `property TooltipDistance: Cardinal read FTooltipDistance write FTooltipDistance default DefaultTooltipDistance;`
Generated by PasDoc 0.13.0 on 2015-06-15 04:43:12