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() {
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<Sdl2Application>;

23
src/Magnum/Platform/Sdl2Application.h

@ -33,6 +33,7 @@
#include <string>
#include <Corrade/Containers/ArrayView.h>
#include <Corrade/Containers/EnumSet.h>
#include <Corrade/Containers/Optional.h>
#include <Corrade/Containers/Pointer.h>
#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> _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> _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<Vector2i> _position;
Containers::Optional<Modifiers> _modifiers;
};
/**

Loading…
Cancel
Save