Browse Source

Platform: use an Optional for lazy-loaded event properties in Sdl2App.

It was done like this in GlfwApp and elsewhere, this is probably a
remmant from earlier pre-Optional times.
pull/388/merge
Vladimír Vondruš 6 years ago
parent
commit
5cbd6bdf85
  1. 23
      src/Magnum/Platform/Sdl2Application.cpp
  2. 23
      src/Magnum/Platform/Sdl2Application.h

23
src/Magnum/Platform/Sdl2Application.cpp

@ -1174,28 +1174,25 @@ std::string Sdl2Application::KeyEvent::keyName() const {
} }
Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseEvent::modifiers() { Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseEvent::modifiers() {
if(_modifiersLoaded) return _modifiers; if(_modifiers) return *_modifiers;
_modifiersLoaded = true; return *(_modifiers = fixedModifiers(Uint16(SDL_GetModState())));
return _modifiers = fixedModifiers(Uint16(SDL_GetModState()));
} }
Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseMoveEvent::modifiers() { Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseMoveEvent::modifiers() {
if(_modifiersLoaded) return _modifiers; if(_modifiers) return *_modifiers;
_modifiersLoaded = true; return *(_modifiers = fixedModifiers(Uint16(SDL_GetModState())));
return _modifiers = fixedModifiers(Uint16(SDL_GetModState()));
} }
Vector2i Sdl2Application::MouseScrollEvent::position() { Vector2i Sdl2Application::MouseScrollEvent::position() {
if(_positionLoaded) return _position; if(_position) return *_position;
_positionLoaded = true; _position = Vector2i{};
SDL_GetMouseState(&_position.x(), &_position.y()); SDL_GetMouseState(&_position->x(), &_position->y());
return _position; return *_position;
} }
Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseScrollEvent::modifiers() { Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseScrollEvent::modifiers() {
if(_modifiersLoaded) return _modifiers; if(_modifiers) return *_modifiers;
_modifiersLoaded = true; return *(_modifiers = fixedModifiers(Uint16(SDL_GetModState())));
return _modifiers = fixedModifiers(Uint16(SDL_GetModState()));
} }
template class BasicScreen<Sdl2Application>; template class BasicScreen<Sdl2Application>;

23
src/Magnum/Platform/Sdl2Application.h

@ -33,6 +33,7 @@
#include <string> #include <string>
#include <Corrade/Containers/ArrayView.h> #include <Corrade/Containers/ArrayView.h>
#include <Corrade/Containers/EnumSet.h> #include <Corrade/Containers/EnumSet.h>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/Pointer.h> #include <Corrade/Containers/Pointer.h>
#include "Magnum/Magnum.h" #include "Magnum/Magnum.h"
@ -2341,19 +2342,18 @@ class Sdl2Application::MouseEvent: public Sdl2Application::InputEvent {
#ifndef CORRADE_TARGET_EMSCRIPTEN #ifndef CORRADE_TARGET_EMSCRIPTEN
, Int clickCount , Int clickCount
#endif #endif
): InputEvent{event}, _button{button}, _position{position}, ): InputEvent{event}, _button{button}, _position{position}
#ifndef CORRADE_TARGET_EMSCRIPTEN #ifndef CORRADE_TARGET_EMSCRIPTEN
_clickCount{clickCount}, , _clickCount{clickCount}
#endif #endif
_modifiersLoaded{false} {} {}
const Button _button; const Button _button;
const Vector2i _position; const Vector2i _position;
#ifndef CORRADE_TARGET_EMSCRIPTEN #ifndef CORRADE_TARGET_EMSCRIPTEN
const Int _clickCount; const Int _clickCount;
#endif #endif
bool _modifiersLoaded; Containers::Optional<Modifiers> _modifiers;
Modifiers _modifiers;
}; };
/** /**
@ -2410,12 +2410,11 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent {
private: private:
friend Sdl2Application; 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 Vector2i _position, _relativePosition;
const Buttons _buttons; const Buttons _buttons;
bool _modifiersLoaded; Containers::Optional<Modifiers> _modifiers;
Modifiers _modifiers;
}; };
/** /**
@ -2445,13 +2444,11 @@ class Sdl2Application::MouseScrollEvent: public Sdl2Application::InputEvent {
private: private:
friend Sdl2Application; 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; const Vector2 _offset;
bool _positionLoaded; Containers::Optional<Vector2i> _position;
bool _modifiersLoaded; Containers::Optional<Modifiers> _modifiers;
Vector2i _position;
Modifiers _modifiers;
}; };
/** /**

Loading…
Cancel
Save