Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: ppapi/proxy/ppb_cursor_control_proxy.cc

Issue 9814015: Add new MouseCursor interface for setting the mouse cursor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ppapi/proxy/ppb_cursor_control_proxy.h"
6
7 #include "ppapi/c/dev/pp_cursor_type_dev.h"
8 #include "ppapi/c/dev/ppb_cursor_control_dev.h"
9 #include "ppapi/proxy/plugin_dispatcher.h"
10 #include "ppapi/proxy/plugin_resource_tracker.h"
11 #include "ppapi/proxy/ppapi_messages.h"
12 #include "ppapi/shared_impl/ppapi_globals.h"
13 #include "ppapi/thunk/enter.h"
14 #include "ppapi/thunk/thunk.h"
15
16 using ppapi::thunk::EnterFunctionNoLock;
17 using ppapi::thunk::PPB_CursorControl_FunctionAPI;
18
19 namespace ppapi {
20 namespace proxy {
21
22 PPB_CursorControl_Proxy::PPB_CursorControl_Proxy(Dispatcher* dispatcher)
23 : InterfaceProxy(dispatcher) {
24 }
25
26 PPB_CursorControl_Proxy::~PPB_CursorControl_Proxy() {
27 }
28
29 ppapi::thunk::PPB_CursorControl_FunctionAPI*
30 PPB_CursorControl_Proxy::AsPPB_CursorControl_FunctionAPI() {
31 return this;
32 }
33
34 PP_Bool PPB_CursorControl_Proxy::SetCursor(PP_Instance instance,
35 PP_CursorType_Dev type,
36 PP_Resource custom_image_id,
37 const PP_Point* hot_spot) {
38 // It's legal for the image ID to be null if the type is not custom.
39 HostResource cursor_image_resource;
40 if (type == PP_CURSORTYPE_CUSTOM) {
41 Resource* cursor_image =
42 PpapiGlobals::Get()->GetResourceTracker()->GetResource(custom_image_id);
43 if (!cursor_image || cursor_image->pp_instance() != instance)
44 return PP_FALSE;
45 cursor_image_resource = cursor_image->host_resource();
46 } else {
47 if (custom_image_id)
48 return PP_FALSE; // Image specified for a predefined type.
49 }
50
51 PP_Bool result = PP_FALSE;
52 PP_Point empty_point = { 0, 0 };
53 dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_SetCursor(
54 API_ID_PPB_CURSORCONTROL,
55 instance, static_cast<int32_t>(type), cursor_image_resource,
56 hot_spot ? *hot_spot : empty_point, &result));
57 return result;
58 }
59
60 PP_Bool PPB_CursorControl_Proxy::LockCursor(PP_Instance instance) {
61 PP_Bool result = PP_FALSE;
62 dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_LockCursor(
63 API_ID_PPB_CURSORCONTROL, instance, &result));
64 return result;
65 }
66
67 PP_Bool PPB_CursorControl_Proxy::UnlockCursor(PP_Instance instance) {
68 PP_Bool result = PP_FALSE;
69 dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_UnlockCursor(
70 API_ID_PPB_CURSORCONTROL, instance, &result));
71 return result;
72 }
73
74 PP_Bool PPB_CursorControl_Proxy::HasCursorLock(PP_Instance instance) {
75 PP_Bool result = PP_FALSE;
76 dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_HasCursorLock(
77 API_ID_PPB_CURSORCONTROL, instance, &result));
78 return result;
79 }
80
81 PP_Bool PPB_CursorControl_Proxy::CanLockCursor(PP_Instance instance) {
82 PP_Bool result = PP_FALSE;
83 dispatcher()->Send(new PpapiHostMsg_PPBCursorControl_CanLockCursor(
84 API_ID_PPB_CURSORCONTROL, instance, &result));
85 return result;
86 }
87
88 bool PPB_CursorControl_Proxy::OnMessageReceived(const IPC::Message& msg) {
89 bool handled = true;
90 IPC_BEGIN_MESSAGE_MAP(PPB_CursorControl_Proxy, msg)
91 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_SetCursor,
92 OnMsgSetCursor)
93 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_LockCursor,
94 OnMsgLockCursor)
95 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_UnlockCursor,
96 OnMsgUnlockCursor)
97 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_HasCursorLock,
98 OnMsgHasCursorLock)
99 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBCursorControl_CanLockCursor,
100 OnMsgCanLockCursor)
101 IPC_MESSAGE_UNHANDLED(handled = false)
102 IPC_END_MESSAGE_MAP()
103 // TODO(brettw): handle bad messages!
104 return handled;
105 }
106
107 void PPB_CursorControl_Proxy::OnMsgSetCursor(PP_Instance instance,
108 int32_t type,
109 const HostResource& custom_image,
110 const PP_Point& hot_spot,
111 PP_Bool* result) {
112 EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
113 if (enter.succeeded()) {
114 *result = enter.functions()->SetCursor(
115 instance, static_cast<PP_CursorType_Dev>(type),
116 custom_image.host_resource(), &hot_spot);
117 }
118 }
119
120 void PPB_CursorControl_Proxy::OnMsgLockCursor(PP_Instance instance,
121 PP_Bool* result) {
122 EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
123 if (enter.succeeded())
124 *result = enter.functions()->LockCursor(instance);
125 }
126
127 void PPB_CursorControl_Proxy::OnMsgUnlockCursor(PP_Instance instance,
128 PP_Bool* result) {
129 EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
130 if (enter.succeeded())
131 *result = enter.functions()->UnlockCursor(instance);
132 }
133
134 void PPB_CursorControl_Proxy::OnMsgHasCursorLock(PP_Instance instance,
135 PP_Bool* result) {
136 EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
137 if (enter.succeeded())
138 *result = enter.functions()->HasCursorLock(instance);
139 }
140
141 void PPB_CursorControl_Proxy::OnMsgCanLockCursor(PP_Instance instance,
142 PP_Bool* result) {
143 EnterFunctionNoLock<PPB_CursorControl_FunctionAPI> enter(instance, true);
144 if (enter.succeeded())
145 *result = enter.functions()->CanLockCursor(instance);
146 }
147
148 } // namespace proxy
149 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698