|  | // 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_ |