diff --git a/src/Magnum/Platform/Sdl2Application.cpp b/src/Magnum/Platform/Sdl2Application.cpp index 54e0a1067..b1aecfabf 100644 --- a/src/Magnum/Platform/Sdl2Application.cpp +++ b/src/Magnum/Platform/Sdl2Application.cpp @@ -1174,28 +1174,25 @@ std::string Sdl2Application::KeyEvent::keyName() const { } Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseEvent::modifiers() { - if(_modifiersLoaded) return _modifiers; - _modifiersLoaded = true; - return _modifiers = fixedModifiers(Uint16(SDL_GetModState())); + if(_modifiers) return *_modifiers; + return *(_modifiers = fixedModifiers(Uint16(SDL_GetModState()))); } Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseMoveEvent::modifiers() { - if(_modifiersLoaded) return _modifiers; - _modifiersLoaded = true; - return _modifiers = fixedModifiers(Uint16(SDL_GetModState())); + if(_modifiers) return *_modifiers; + return *(_modifiers = fixedModifiers(Uint16(SDL_GetModState()))); } Vector2i Sdl2Application::MouseScrollEvent::position() { - if(_positionLoaded) return _position; - _positionLoaded = true; - SDL_GetMouseState(&_position.x(), &_position.y()); - return _position; + if(_position) return *_position; + _position = Vector2i{}; + SDL_GetMouseState(&_position->x(), &_position->y()); + return *_position; } Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseScrollEvent::modifiers() { - if(_modifiersLoaded) return _modifiers; - _modifiersLoaded = true; - return _modifiers = fixedModifiers(Uint16(SDL_GetModState())); + if(_modifiers) return *_modifiers; + return *(_modifiers = fixedModifiers(Uint16(SDL_GetModState()))); } template class BasicScreen; diff --git a/src/Magnum/Platform/Sdl2Application.h b/src/Magnum/Platform/Sdl2Application.h index e7ec24914..b2426d513 100644 --- a/src/Magnum/Platform/Sdl2Application.h +++ b/src/Magnum/Platform/Sdl2Application.h @@ -33,6 +33,7 @@ #include #include #include +#include #include #include "Magnum/Magnum.h" @@ -2341,19 +2342,18 @@ class Sdl2Application::MouseEvent: public Sdl2Application::InputEvent { #ifndef CORRADE_TARGET_EMSCRIPTEN , Int clickCount #endif - ): InputEvent{event}, _button{button}, _position{position}, + ): InputEvent{event}, _button{button}, _position{position} #ifndef CORRADE_TARGET_EMSCRIPTEN - _clickCount{clickCount}, + , _clickCount{clickCount} #endif - _modifiersLoaded{false} {} + {} const Button _button; const Vector2i _position; #ifndef CORRADE_TARGET_EMSCRIPTEN const Int _clickCount; #endif - bool _modifiersLoaded; - Modifiers _modifiers; + Containers::Optional _modifiers; }; /** @@ -2410,12 +2410,11 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent { private: friend Sdl2Application; - explicit MouseMoveEvent(const SDL_Event& event, const Vector2i& position, const Vector2i& relativePosition, Buttons buttons): InputEvent{event}, _position{position}, _relativePosition{relativePosition}, _buttons{buttons}, _modifiersLoaded{false} {} + explicit MouseMoveEvent(const SDL_Event& event, const Vector2i& position, const Vector2i& relativePosition, Buttons buttons): InputEvent{event}, _position{position}, _relativePosition{relativePosition}, _buttons{buttons} {} const Vector2i _position, _relativePosition; const Buttons _buttons; - bool _modifiersLoaded; - Modifiers _modifiers; + Containers::Optional _modifiers; }; /** @@ -2445,13 +2444,11 @@ class Sdl2Application::MouseScrollEvent: public Sdl2Application::InputEvent { private: friend Sdl2Application; - explicit MouseScrollEvent(const SDL_Event& event, const Vector2& offset): InputEvent{event}, _offset{offset}, _positionLoaded{false}, _modifiersLoaded{false} {} + explicit MouseScrollEvent(const SDL_Event& event, const Vector2& offset): InputEvent{event}, _offset{offset} {} const Vector2 _offset; - bool _positionLoaded; - bool _modifiersLoaded; - Vector2i _position; - Modifiers _modifiers; + Containers::Optional _position; + Containers::Optional _modifiers; }; /**