Browse Source

Merge branch 'master' into compatibility

Vladimír Vondruš 14 years ago
parent
commit
4aae66020c
  1. 19
      src/Platform/NaClApplication.cpp
  2. 33
      src/Platform/NaClApplication.h

19
src/Platform/NaClApplication.cpp

@ -23,7 +23,7 @@
namespace Magnum { namespace Platform { namespace Magnum { namespace Platform {
NaClApplication::NaClApplication(PP_Instance instance, const Math::Vector2<GLsizei>& size): Instance(instance), Graphics3DClient(this), viewportSize(size) { NaClApplication::NaClApplication(PP_Instance instance, const Math::Vector2<GLsizei>& size): Instance(instance), Graphics3DClient(this), MouseLock(this), viewportSize(size) {
int32_t attributes[] = { int32_t attributes[] = {
PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8, PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8,
PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 24, PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 24,
@ -92,8 +92,10 @@ void NaClApplication::DidChangeView(const pp::View& view) {
/* Fullscreen switch in progress */ /* Fullscreen switch in progress */
if(flags & Flag::FullscreenSwitchInProgress) { if(flags & Flag::FullscreenSwitchInProgress) {
/* Done, remove the progress flag */ /* Done, remove the progress flag */
if(isFullscreen() == bool(flags & Flag::WillBeFullscreen)) if(isFullscreen() == bool(flags & Flag::WillBeFullscreen)) {
flags &= ~Flag::FullscreenSwitchInProgress; flags &= ~Flag::FullscreenSwitchInProgress;
flags |= Flag::Redraw;
}
/* Don't process anything during the switch */ /* Don't process anything during the switch */
else return; else return;
@ -185,4 +187,17 @@ void NaClApplication::swapCallback(void* applicationInstance, std::int32_t) {
} }
} }
void NaClApplication::setMouseLocked(bool enabled) {
/* Already done, nothing to do */
if(enabled == isMouseLocked()) return;
if(enabled) LockMouse(pp::CompletionCallback(&mouseLockCallback, this));
else UnlockMouse();
}
void NaClApplication::mouseLockCallback(void* applicationInstance, int32_t) {
NaClApplication* instance = static_cast<NaClApplication*>(applicationInstance);
instance->flags |= Flag::MouseLocked;
}
}} }}

33
src/Platform/NaClApplication.h

@ -24,6 +24,7 @@
#include <ppapi/cpp/input_event.h> #include <ppapi/cpp/input_event.h>
#include <ppapi/cpp/instance.h> #include <ppapi/cpp/instance.h>
#include <ppapi/cpp/module.h> #include <ppapi/cpp/module.h>
#include <ppapi/cpp/mouse_lock.h>
#include <ppapi/cpp/graphics_3d_client.h> #include <ppapi/cpp/graphics_3d_client.h>
#include <ppapi/gles2/gl2ext_ppapi.h> #include <ppapi/gles2/gl2ext_ppapi.h>
@ -37,11 +38,7 @@ namespace pp {
class Fullscreen; class Fullscreen;
} }
namespace Magnum { namespace Magnum { namespace Platform {
class Context;
namespace Platform {
/** @nosubgrouping /** @nosubgrouping
@brief NaCl application @brief NaCl application
@ -61,7 +58,7 @@ class MyApplication: public Magnum::Platform::Sdl2Application {
MAGNUM_NACLAPPLICATION_MAIN(MyApplication) MAGNUM_NACLAPPLICATION_MAIN(MyApplication)
@endcode @endcode
*/ */
class NaClApplication: public pp::Instance, public pp::Graphics3DClient { class NaClApplication: public pp::Instance, public pp::Graphics3DClient, public pp::MouseLock {
public: public:
class InputEvent; class InputEvent;
class KeyEvent; class KeyEvent;
@ -134,6 +131,22 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient {
/** @{ @name Mouse handling */ /** @{ @name Mouse handling */
public:
/** @brief Whether mouse is locked */
inline bool isMouseLocked() const {
return flags & Flag::MouseLocked;
}
/**
* @brief Enable or disable mouse locking
*
* When mouse is locked, the cursor is hidden and only
* MouseMoveEvent::relativePosition() is changing, absolute position
* stays the same.
*/
void setMouseLocked(bool enabled);
protected:
/** /**
* @brief Mouse press event * @brief Mouse press event
* *
@ -169,7 +182,8 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient {
SwapInProgress = 1 << 1, SwapInProgress = 1 << 1,
Redraw = 1 << 2, Redraw = 1 << 2,
FullscreenSwitchInProgress = 1 << 3, FullscreenSwitchInProgress = 1 << 3,
WillBeFullscreen = 1 << 4 WillBeFullscreen = 1 << 4,
MouseLocked = 1 << 5
}; };
typedef Corrade::Containers::EnumSet<Flag, std::uint8_t> Flags; typedef Corrade::Containers::EnumSet<Flag, std::uint8_t> Flags;
@ -177,11 +191,16 @@ class NaClApplication: public pp::Instance, public pp::Graphics3DClient {
CORRADE_ASSERT(false, "NaClApplication: context unexpectedly lost", ); CORRADE_ASSERT(false, "NaClApplication: context unexpectedly lost", );
} }
inline void MouseLockLost() override {
flags &= ~Flag::MouseLocked;
}
void DidChangeView(const pp::View& view) override; void DidChangeView(const pp::View& view) override;
bool HandleInputEvent(const pp::InputEvent& event) override; bool HandleInputEvent(const pp::InputEvent& event) override;
static void swapCallback(void* applicationInstance, std::int32_t); static void swapCallback(void* applicationInstance, std::int32_t);
static void mouseLockCallback(void* applicationInstance, std::int32_t);
pp::Graphics3D* graphics; pp::Graphics3D* graphics;
pp::Fullscreen* fullscreen; pp::Fullscreen* fullscreen;

Loading…
Cancel
Save