Browse Source

Platform: make it possible to get scroll position in Glfw and Sdl2App.

pull/273/merge
Vladimír Vondruš 8 years ago
parent
commit
47ade4ef53
  1. 2
      doc/changelog.dox
  2. 10
      src/Magnum/Platform/GlfwApplication.cpp
  3. 8
      src/Magnum/Platform/GlfwApplication.h
  4. 7
      src/Magnum/Platform/Sdl2Application.cpp
  5. 11
      src/Magnum/Platform/Sdl2Application.h

2
doc/changelog.dox

@ -98,6 +98,8 @@ See also:
@ref Platform::Sdl2Application::setContainerCssClass() @ref Platform::Sdl2Application::setContainerCssClass()
- Implemented @ref Platform::GlfwApplication::MouseMoveEvent::buttons() for - Implemented @ref Platform::GlfwApplication::MouseMoveEvent::buttons() for
feature parity with @ref Platform::Sdl2Application feature parity with @ref Platform::Sdl2Application
- Added @ref Platform::Sdl2Application::MouseScrollEvent::position() and
@ref Platform::GlfwApplication::MouseScrollEvent::position()
- Added @ref Platform::Sdl2Application::GLConfiguration::setColorBufferSize() "GLConfiguration::setColorBufferSize()", - Added @ref Platform::Sdl2Application::GLConfiguration::setColorBufferSize() "GLConfiguration::setColorBufferSize()",
@ref Platform::Sdl2Application::GLConfiguration::setDepthBufferSize() "GLConfiguration::setDepthBufferSize()", @ref Platform::Sdl2Application::GLConfiguration::setDepthBufferSize() "GLConfiguration::setDepthBufferSize()",
@ref Platform::Sdl2Application::GLConfiguration::setStencilBufferSize() "GLConfiguration::setStencilBufferSize()", @ref Platform::Sdl2Application::GLConfiguration::setStencilBufferSize() "GLConfiguration::setStencilBufferSize()",

10
src/Magnum/Platform/GlfwApplication.cpp

@ -465,6 +465,16 @@ auto GlfwApplication::MouseMoveEvent::modifiers() -> Modifiers {
return *_modifiers; return *_modifiers;
} }
Vector2i GlfwApplication::MouseScrollEvent::position() {
if(!_position) {
Vector2d position;
glfwGetCursorPos(_window, &position.x(), &position.y());
_position = Vector2i{position};
}
return *_position;
}
auto GlfwApplication::MouseScrollEvent::modifiers() -> Modifiers { auto GlfwApplication::MouseScrollEvent::modifiers() -> Modifiers {
if(!_modifiers) _modifiers = currentGlfwModifiers(_window); if(!_modifiers) _modifiers = currentGlfwModifiers(_window);
return *_modifiers; return *_modifiers;

8
src/Magnum/Platform/GlfwApplication.h

@ -1342,6 +1342,13 @@ class GlfwApplication::MouseScrollEvent: public GlfwApplication::InputEvent {
/** @brief Scroll offset */ /** @brief Scroll offset */
Vector2 offset() const { return _offset; } Vector2 offset() const { return _offset; }
/**
* @brief Position
*
* Lazily populated on first request.
*/
Vector2i position();
/** /**
* @brief Modifiers * @brief Modifiers
* *
@ -1354,6 +1361,7 @@ class GlfwApplication::MouseScrollEvent: public GlfwApplication::InputEvent {
GLFWwindow* _window; GLFWwindow* _window;
const Vector2 _offset; const Vector2 _offset;
Containers::Optional<Vector2i> _position;
Containers::Optional<Modifiers> _modifiers; Containers::Optional<Modifiers> _modifiers;
}; };

7
src/Magnum/Platform/Sdl2Application.cpp

@ -879,6 +879,13 @@ Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseMoveEvent::modifier
return _modifiers = fixedModifiers(Uint16(SDL_GetModState())); return _modifiers = fixedModifiers(Uint16(SDL_GetModState()));
} }
Vector2i Sdl2Application::MouseScrollEvent::position() {
if(_positionLoaded) return _position;
_positionLoaded = true;
SDL_GetMouseState(&_position.x(), &_position.y());
return _position;
}
Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseScrollEvent::modifiers() { Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseScrollEvent::modifiers() {
if(_modifiersLoaded) return _modifiers; if(_modifiersLoaded) return _modifiers;
_modifiersLoaded = true; _modifiersLoaded = true;

11
src/Magnum/Platform/Sdl2Application.h

@ -2035,6 +2035,13 @@ class Sdl2Application::MouseScrollEvent: public Sdl2Application::InputEvent {
/** @brief Scroll offset */ /** @brief Scroll offset */
Vector2 offset() const { return _offset; } Vector2 offset() const { return _offset; }
/**
* @brief Position
*
* Lazily populated on first request.
*/
Vector2i position();
/** /**
* @brief Modifiers * @brief Modifiers
* *
@ -2043,10 +2050,12 @@ class Sdl2Application::MouseScrollEvent: public Sdl2Application::InputEvent {
Modifiers modifiers(); Modifiers modifiers();
private: private:
explicit MouseScrollEvent(const Vector2& offset): _offset{offset}, _modifiersLoaded{false} {} explicit MouseScrollEvent(const Vector2& offset): _offset{offset}, _positionLoaded{false}, _modifiersLoaded{false} {}
const Vector2 _offset; const Vector2 _offset;
bool _positionLoaded;
bool _modifiersLoaded; bool _modifiersLoaded;
Vector2i _position;
Modifiers _modifiers; Modifiers _modifiers;
}; };

Loading…
Cancel
Save