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