Scaleform Clik Managers Focushandler
FocusHandler
The FocusHandler.as file is part of the scaleform.clik.managers package and is responsible for managing focus within the Scaleform CLIK (Common Lightweight Interface Kit) UI components.
It handles the focus transitions between UI components, specifically when working with different input devices like game controllers or the keyboard.
Below is detailed documentation for the FocusHandler class.
Class Overview
FocusHandler
- Manages focus for UI components.
- Handles input events for focus control.
- Interacts with the
FocusManagerfor Scaleform-specific functionality.
Properties
| Property | Type | Description |
|---|---|---|
instance |
FocusHandler |
The singleton instance of the FocusHandler. |
initialized |
Boolean |
Indicates whether the FocusHandler has been initialized. |
_stage |
Stage |
The reference to the Stage where the UI components exist. |
currentFocusLookup |
Dictionary |
A lookup table to keep track of the current focus per controller index. |
actualFocusLookup |
Dictionary |
A lookup table to keep track of the actual focus per controller index. |
preventStageFocusChanges |
Boolean |
A flag to prevent focus changes on the stage, used during certain events. |
mouseDown |
Boolean |
Indicates whether the mouse button is currently pressed down. |
Methods
Public Methods
FocusHandler()
Constructor for the FocusHandler class. Initializes lookup dictionaries.
getInstance(): FocusHandler
Retrieve the singleton instance of the FocusHandler.
init(stage:Stage, root:UIComponent): void
Initializes the FocusHandler with a reference to the Stage and root UIComponent.
set stage(stage:Stage): void
Sets the stage for the FocusHandler and adds necessary event listeners for focus management.
getFocus(controllerIndex:uint): InteractiveObject
Retrieves the current focused object for the specified controller index.
setFocus(newFocus:InteractiveObject, controllerIndex:uint = 0, mouseChange:Boolean = false): void
Sets the focus to the specified InteractiveObject for a given controller index and optionally indicates if the change was triggered by a mouse event.
Protected Methods
getCurrentFocusDisplayObject(controllerIndex:uint): InteractiveObject
Retrieves the current focus display object for the given controller index.
setCurrentFocusDisplayObject(controllerIndex:uint, newFocus:InteractiveObject): void
Sets the current focus display object for the specified controller index.
getActualFocusDisplayObject(controllerIndex:uint): InteractiveObject
Retrieves the actual focus display object for the given controller index.
setSystemFocus(newFocus:InteractiveObject, controllerIndex:uint = 0): void
Sets the system focus to the specified InteractiveObject for a given controller index.
getSystemFocus(controllerIndex:uint = 0): InteractiveObject
Gets the system focus for a given controller index.
clearFocusPrevention(event:Event): void
Clears the flag that prevents focus changes on the stage.
input(details:InputDetails): void
Processes an input event and dispatches it further if needed.
trackMouseDown(event:MouseEvent): void
Tracks the mouse button state (down or up).
handleInput(event:InputEvent): void
Handles input events and determines if focus needs to be changed based on user navigation.
handleMouseFocusChange(event:FocusEvent): void
Handles focus change events triggered by mouse interactions.
handleFocusChange(focusedObject:InteractiveObject, relatedObject:InteractiveObject, event:FocusEvent): void
Handles focus change events and updates the actual focus accordingly.
updateActualFocus(event:FocusEvent): void
Updates the actual focus based on focus in/out events.
handleTextFieldInput(navigationCode:String, controllerIndex:uint): Boolean
Handles special input cases for TextField objects and returns a boolean indicating whether the input was handled or not.
Usage Example
To initialize the FocusHandler within your UIComponent:
var stageRef:Stage = this.stage;
var rootComponent:UIComponent = this; // Your main UIComponent
FocusHandler.init(stageRef, rootComponent);
To set the focus to a specific UI component:
var myButton:InteractiveObject = myButtonInstance; // Your button instance
FocusHandler.instance.setFocus(myButton);
Notes
- The
FocusHandleris typically used within the context of a larger user interface built with Scaleform CLIK components. - The
FocusHandlerutilizes event listeners extensively to track focus changes and input events, ensuring seamless focus management across various UI components. - This class has a strong dependency on other Scaleform components such as
FocusManager,InputDelegate, andUIComponent. - The
FocusHandlerkeeps track of focus using two types of lookup tables: one for the current focus and another for the actual focus, implementing a weak reference pattern to avoid memory leaks. - The actual focus may differ from the current focus to handle cases where the Stage focus is different from the component focus, especially with
TextFieldcomponents.
Conclusion
Through careful management of focus and input events, the FocusHandler class provides robust support for user interaction within the Scaleform CLIK framework, accommodating both traditional inputs like keyboard and mouse, as well as game controller inputs.