Use drawOnState() for buttons precessing and cache buttons' position for event handler loop #9223
+1,049
−761
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR affects most of the dialogs in the engine including the main menu.
It replaces
le.isMouseLeftButtonPressedInArea( button.area() ) ? button.drawOnPress() : button.drawOnRelease();
withbutton.drawOnState( le.isMouseLeftButtonPressedInArea( buttonArea ) );
and dobuttonArea
cache not to call.area()
with all its calculations on every loop.It also modifies some dialogs that can be also called by the mouse right click to have its own event handler loop to reduce some checks (e.g. unit dialog, build dialog). And in some dialogs it skips the possibly unused buttons initialization making them
unique_ptr
, in example in Hero dialog: DISMISS and PATROL buttons.While testing this PR you should check rendering of the buttons (press/release) and their interaction with the mouse cursor (right press, left click).
This PR does not fix rendering issues that are present in the master build.