| // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef PPAPI_CPP_MOUSE_LOCK_H_ | |
| #define PPAPI_CPP_MOUSE_LOCK_H_ | |
| #include "ppapi/c/pp_stdint.h" | |
| #include "ppapi/cpp/instance_handle.h" | |
| /// @file | |
| /// This file defines the API for locking the target of mouse events to a | |
| /// specific module instance. | |
| namespace pp { | |
| class CompletionCallback; | |
| class Instance; | |
| /// This class allows you to associate the <code>PPP_MouseLock</code> and | |
| /// <code>PPB_MouseLock</code> C-based interfaces with an object. It associates | |
| /// itself with the given instance, and registers as the global handler for | |
| /// handling the <code>PPP_MouseLock</code> interface that the browser calls. | |
| /// | |
| /// You would typically use this class by inheritance on your instance or by | |
| /// composition. | |
| /// | |
| /// <strong>Example (inheritance):</strong> | |
| /// @code | |
| /// class MyInstance : public pp::Instance, public pp::MouseLock { | |
| /// class MyInstance() : pp::MouseLock(this) { | |
| /// } | |
| /// ... | |
| /// }; | |
| /// @endcode | |
| /// | |
| /// <strong>Example (composition):</strong> | |
| /// @code | |
| /// class MyMouseLock : public pp::MouseLock { | |
| /// ... | |
| /// }; | |
| /// | |
| /// class MyInstance : public pp::Instance { | |
| /// MyInstance() : mouse_lock_(this) { | |
| /// } | |
| /// | |
| /// MyMouseLock mouse_lock_; | |
| /// }; | |
| /// @endcode | |
| class MouseLock { | |
| public: | |
| /// A constructor for creating a <code>MouseLock</code>. | |
| /// | |
| /// @param[in] instance The instance with which this resource will be | |
| /// associated. | |
| explicit MouseLock(Instance* instance); | |
| /// Destructor. | |
| virtual ~MouseLock(); | |
| /// PPP_MouseLock functions exposed as virtual functions for you to override. | |
| virtual void MouseLockLost() = 0; | |
| /// LockMouse() requests the mouse to be locked. | |
| /// | |
| /// While the mouse is locked, the cursor is implicitly hidden from the user. | |
| /// Any movement of the mouse will generate a | |
| /// <code>PP_INPUTEVENT_TYPE_MOUSEMOVE</code> event. The | |
| /// <code>GetPosition()</code> function in <code>InputEvent()</code> | |
| /// reports the last known mouse position just as mouse lock was | |
| /// entered. The <code>GetMovement()</code> function provides relative | |
| /// movement information indicating what the change in position of the mouse | |
| /// would be had it not been locked. | |
| /// | |
| /// The browser may revoke the mouse lock for reasons including (but not | |
| /// limited to) the user pressing the ESC key, the user activating another | |
| /// program using a reserved keystroke (e.g. ALT+TAB), or some other system | |
| /// event. | |
| /// | |
| /// @param[in] cc A <code>CompletionCallback</code> to be called upon | |
| /// completion. | |
| /// | |
| /// @return An int32_t containing an error code from <code>pp_errors.h</code>. | |
| int32_t LockMouse(const CompletionCallback& cc); | |
| /// UnlockMouse causes the mouse to be unlocked, allowing it to track user | |
| /// movement again. This is an asynchronous operation. The module instance | |
| /// will be notified using the <code>PPP_MouseLock</code> interface when it | |
| /// has lost the mouse lock. | |
| void UnlockMouse(); | |
| private: | |
| InstanceHandle associated_instance_; | |
| }; | |
| } // namespace pp | |
| #endif // PPAPI_CPP_MOUSE_LOCK_H_ |