4 #include <unordered_map>
5 #include <unordered_set>
29 using std::unordered_map;
30 using std::unordered_set;
47 template<
typename T,
typename U>
50 auto t =
dynamic_cast<T
>(u);
52 Console::println(
"required_dynamic_cast: unable to perform required dynamic cast @\n\n" + RTTI::backtrace());
72 unordered_map<string, GUIScreenNode*>
screens;
223 auto screensIt =
screens.find(
id);
224 if (screensIt ==
screens.end()) {
227 return screensIt->second;
259 if (renderScreen->getId() == screenId)
return true;
348 void onChar(
int key,
int x,
int y)
override;
358 void onKeyDown (
int key,
int keyCode,
int x,
int y,
bool repeat,
int modifiers)
override;
367 void onKeyUp(
int key,
int keyCode,
int x,
int y)
override;
390 void onMouseButton(
int button,
int state,
int x,
int y)
override;
399 void onMouseWheel(
int button,
int direction,
int x,
int y)
override;
static T required_dynamic_cast(U u)
unordered_map< string, unordered_set< string > > mousePressedEventNodeIds
GUIColor unfocussedNodeBorderTopColor
bool hasRenderScreen(const string &screenId)
Returns if given screen is beeing rendered.
void onMouseMoved(int x, int y) override
On mouse moved.
static bool isDisableTabFocusControl()
GUIElementNode * getFocussedNode()
vector< GUIScreenNode * > renderScreens
string focussedNodeScreenId
static void setDisableTabFocusControl(bool disableTabFocusControl)
Set focus control by TAB key disabled.
unordered_map< string, unordered_set< string > > mouseOutCandidateEventNodeIds
int getScaledY(GUIScreenNode *screenNode, int y)
Get scaled y from unscaled y.
void onMouseDragged(int x, int y) override
On mouse dragged.
void focusPreviousNode()
Focus next node.
static STATIC_DLL_IMPEXT bool disableTabFocusControl
bool isHavingMouseInteraction(GUINode *node)
Reports if node has currently mouse interaction like dragging or pressing.
void removeRenderScreen(const string &screenId)
Remove render screen.
void handleEvents(bool clearEvents=true)
Handle screen events.
vector< GUIScreenNode * > focusableScreenNodes
void addRenderScreen(const string &screenId, int screenIdx=-1)
Add render screen.
vector< GUIElementNode * > focusableNodes
void onMouseButton(int button, int state, int x, int y) override
On mouse moved.
void handleMouseEvent(GUINode *node, GUIMouseEvent *event, const unordered_set< string > &mouseOutCandidateEventNodeIds, const unordered_set< string > &mouseOutClickCandidateEventNodeIds, unordered_set< string > &mousePressedEventNodeIds, bool floatingNodes)
Handle mouse event for given node.
unordered_map< string, bool > mouseIsDragging
void determineFocussedNodes()
Determine focussed nodes.
void onMouseWheel(int button, int direction, int x, int y) override
On mouse wheel.
GUIScreenNode * getScreen(const string &id)
Get screen.
GUI(Engine *engine, GUIRenderer *guiRenderer)
Public constructor.
void addMouseOutClickCandidateNode(GUINode *node)
Add node that is a possible mouse click out candidate as it received a mouse click.
unordered_map< string, GUIScreenNode * > screens
GUIRenderer * guiRenderer
void reshape(int width, int height)
Reshape.
string focussedNodeNodeId
void unfocusNode()
Unfocus current focussed node.
void addMouseOutCandidateNode(GUINode *node)
Add node that is a possible mouse out candidate as it received a mouse over.
void unsetMouseStates()
Render screens change.
void render()
Render GUIs.
void onKeyUp(int key, int keyCode, int x, int y) override
On key up.
vector< GUIMouseEvent > & getMouseEvents()
vector< GUIKeyboardEvent > keyboardEvents
static constexpr int64_t TOOLTIP_TIME
void setFoccussedNode(GUIElementNode *newFoccussedNode)
Set focussed node.
void onKeyDown(int key, int keyCode, int x, int y, bool repeat, int modifiers) override
On key down.
unordered_map< string, unordered_set< string > > mouseOutClickCandidateEventNodeIds
void focusNode()
Focus current focussed node.
void fakeKeyboardModifierEvent()
Fake a keyboard modifier event.
GUIColor unfocussedNodeBorderRightColor
vector< GUIKeyboardEvent > & getKeyboardEvents()
void removeScreen(const string &id)
Removes an screen.
void addScreen(const string &id, GUIScreenNode *screen)
Add screen.
void onChar(int key, int x, int y) override
On char.
void invalidateFocussedNode()
Invalidate focussed node.
void reshapeScreen(GUIScreenNode *screenNode)
Reshape screen.
unordered_map< string, unordered_set< string > > mouseDraggingEventNodeIds
void focusNextNode()
Focus next node.
GUIColor unfocussedNodeBorderLeftColor
int getScaledX(GUIScreenNode *screenNode, int x)
Get scaled x from unscaled x.
void reset()
Removes all screens and caches.
GUIMouseEvent lastMouseEvent
void handleKeyboardEvent(GUIKeyboardEvent *event)
Handle mouse event for given node.
void resetRenderScreens()
Reset render screens.
void startMouseDragging(GUINode *node)
Register mouse dragging.
GUIColor unfocussedNodeBorderBottomColor
vector< GUIMouseEvent > mouseEvents
GUIScreenNode * screenNode
int getGUIEffectOffsetX()
GUIScreenNode * getScreenNode()
int getGUIEffectOffsetY()
GUI screen node that represents a screen that can be rendered via GUI system.
void clearEvents()
Clear events.
vector< GUINode * > floatingNodes
Run time type information utility class.
std::exception Exception
Exception base class.
#define STATIC_DLL_IMPEXT
#define FORBID_CLASS_COPY(CLASS)