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()
- Implemented @ref Platform::GlfwApplication::MouseMoveEvent::buttons() for
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()",
@ref Platform::Sdl2Application::GLConfiguration::setDepthBufferSize() "GLConfiguration::setDepthBufferSize()",
@ref Platform::Sdl2Application::GLConfiguration::setStencilBufferSize() "GLConfiguration::setStencilBufferSize()",

10
src/Magnum/Platform/GlfwApplication.cpp

@ -465,6 +465,16 @@ auto GlfwApplication::MouseMoveEvent::modifiers() -> 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 {
if(!_modifiers) _modifiers = currentGlfwModifiers(_window);
return *_modifiers;

8
src/Magnum/Platform/GlfwApplication.h

@ -1342,6 +1342,13 @@ class GlfwApplication::MouseScrollEvent: public GlfwApplication::InputEvent {
/** @brief Scroll offset */
Vector2 offset() const { return _offset; }
/**
* @brief Position
*
* Lazily populated on first request.
*/
Vector2i position();
/**
* @brief Modifiers
*
@ -1354,6 +1361,7 @@ class GlfwApplication::MouseScrollEvent: public GlfwApplication::InputEvent {
GLFWwindow* _window;
const Vector2 _offset;
Containers::Optional<Vector2i> _position;
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()));
}
Vector2i Sdl2Application::MouseScrollEvent::position() {
if(_positionLoaded) return _position;
_positionLoaded = true;
SDL_GetMouseState(&_position.x(), &_position.y());
return _position;
}
Sdl2Application::InputEvent::Modifiers Sdl2Application::MouseScrollEvent::modifiers() {
if(_modifiersLoaded) return _modifiers;
_modifiersLoaded = true;

11
src/Magnum/Platform/Sdl2Application.h

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

Loading…
Cancel
Save