OLD | NEW |
1 .. _view_focus_input_events: | 1 .. _view_focus_input_events: |
2 | 2 |
3 #################################### | 3 #################################### |
4 View Change, Focus, and Input Events | 4 View Change, Focus, and Input Events |
5 #################################### | 5 #################################### |
6 | 6 |
7 .. contents:: | 7 .. contents:: |
8 :local: | 8 :local: |
9 :backlinks: none | 9 :backlinks: none |
10 :depth: 2 | 10 :depth: 2 |
(...skipping 11 matching lines...) Expand all Loading... |
22 directories in the Native Client SDK. There is also the | 22 directories in the Native Client SDK. There is also the |
23 ppapi_simple library that can be used to to implement most of the | 23 ppapi_simple library that can be used to to implement most of the |
24 boiler plate. The ``pi_generator`` example in | 24 boiler plate. The ``pi_generator`` example in |
25 ``/examples/demo/pi_generator`` uses ppapi_simple to manage view | 25 ``/examples/demo/pi_generator`` uses ppapi_simple to manage view |
26 change events and 2D graphics. | 26 change events and 2D graphics. |
27 | 27 |
28 | 28 |
29 Overview | 29 Overview |
30 ======== | 30 ======== |
31 | 31 |
32 When a user interacts with the web page using a keyboard, mouse or | 32 When a user interacts with the web page using a keyboard, mouse or some other |
33 some other input device, the browser generates input events. | 33 input device, the browser generates input events. In a traditional web |
34 In a traditional web application, these input events are | 34 application, these input events are passed to and handled in JavaScript, |
35 passed to and handled in JavaScript, typically through event listeners | 35 typically through event listeners and event handlers. In a Native Client |
36 and event handlers. In a Native Client application, user interaction | 36 application, user interaction with an instance of a module (e.g., clicking |
37 with an instance of a module (e.g., clicking inside the rectangle | 37 inside the rectangle managed by a module) also generates input events, which |
38 managed by a module) also generates input events, which are passed to | 38 are passed to the module. The browser also passes view change and focus events |
39 the module. The browser also passes view change and focus events that | 39 that affect a module's instance to the module. Native Client modules can |
40 affect a module's instance to the module. Native Client modules can | |
41 override certain functions in the `pp::Instance | 40 override certain functions in the `pp::Instance |
42 <https://developers.google.com/native-client/peppercpp/classpp_1_1_instance>`_ | 41 </native-client/pepper_stable/cpp/classpp_1_1_instance>`_ class to handle input |
43 class to handle input and browser events. These functions are listed in | 42 and browser events. These functions are listed in the table below: |
44 the table below: | |
45 | 43 |
46 | 44 |
47 ====================== =============================== ==================== | 45 ====================== =============================== ==================== |
48 Function Event Use | 46 Function Event Use |
49 ====================== =============================== ==================== | 47 ====================== =============================== ==================== |
50 ``DidChangeView`` Called when the position, An implementation | 48 ``DidChangeView`` Called when the position, An implementation |
51 size, or clip rectangle of this function | 49 size, or clip rectangle of this function |
52 of the module's instance in might check the size | 50 of the module's instance in might check the size |
53 the browser has changed. of the module | 51 the browser has changed. of the module |
54 This event also occurs instance's rectangle | 52 This event also occurs instance's rectangle |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 ``RequestInputEvents()`` | 102 ``RequestInputEvents()`` |
105 for mouse events and | 103 for mouse events and |
106 ``RequestFilteringInputEvents`` | 104 ``RequestFilteringInputEvents`` |
107 for keyboard events | 105 for keyboard events |
108 prior to overriding this | 106 prior to overriding this |
109 function. | 107 function. |
110 ====================== =============================== ==================== | 108 ====================== =============================== ==================== |
111 | 109 |
112 | 110 |
113 These interfaces are found in the `pp::Instance class | 111 These interfaces are found in the `pp::Instance class |
114 <https://developers.google.com/native-client/dev/peppercpp/classpp_1_1_instance>
`_. | 112 </native-client/pepper_stable/cpp/classpp_1_1_instance>`_. The sections below |
115 The sections below provide examples of how to handle these events. | 113 provide examples of how to handle these events. |
116 | 114 |
117 | 115 |
118 Handling browser events | 116 Handling browser events |
119 ======================= | 117 ======================= |
120 | 118 |
121 DidChangeView() | 119 DidChangeView() |
122 --------------- | 120 --------------- |
123 | 121 |
124 In the ``mouse_lock`` example, ``DidChangeView()`` checks the previous size | 122 In the ``mouse_lock`` example, ``DidChangeView()`` checks the previous size |
125 of instance's rectangle versus the new size. It also compares | 123 of instance's rectangle versus the new size. It also compares |
(...skipping 23 matching lines...) Expand all Loading... |
149 // ... | 147 // ... |
150 | 148 |
151 // Remember if we are fullscreen or not | 149 // Remember if we are fullscreen or not |
152 was_fullscreen_ = view.IsFullscreen(); | 150 was_fullscreen_ = view.IsFullscreen(); |
153 // ... | 151 // ... |
154 } | 152 } |
155 | 153 |
156 | 154 |
157 For more information about graphics contexts and how to manipulate images, see: | 155 For more information about graphics contexts and how to manipulate images, see: |
158 | 156 |
159 * `pp::ImageData class <https://developers.google.com/native-client/dev/peppercp
p/classpp_1_1_image_data>`_ | 157 * `pp::ImageData class |
160 * `pp::Graphics2D class <https://developers.google.com/native-client/dev/pepperc
pp/classpp_1_1_graphics2_d>`_ | 158 </native-client/pepper_stable/cpp/classpp_1_1_image_data>`_ |
| 159 * `pp::Graphics2D class |
| 160 </native-client/pepper_stable/cpp/classpp_1_1_graphics2_d>`_ |
161 | 161 |
162 | 162 |
163 DidChangeFocus() | 163 DidChangeFocus() |
164 ---------------- | 164 ---------------- |
165 | 165 |
166 ``DidChangeFocus()`` is called when you click inside or outside of a | 166 ``DidChangeFocus()`` is called when you click inside or outside of a |
167 module's instance in the web page. When the instance goes out | 167 module's instance in the web page. When the instance goes out |
168 of focus (click outside of the instance), you might do something | 168 of focus (click outside of the instance), you might do something |
169 like stop an animation. When the instance regains focus, you can | 169 like stop an animation. When the instance regains focus, you can |
170 restart the animation. | 170 restart the animation. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 : pp::Instance(instance), event_thread_(NULL), callback_factory_(this) { | 203 : pp::Instance(instance), event_thread_(NULL), callback_factory_(this) { |
204 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL | | 204 RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_WHEEL | |
205 PP_INPUTEVENT_CLASS_TOUCH); | 205 PP_INPUTEVENT_CLASS_TOUCH); |
206 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); | 206 RequestFilteringInputEvents(PP_INPUTEVENT_CLASS_KEYBOARD); |
207 } | 207 } |
208 // ... | 208 // ... |
209 }; | 209 }; |
210 | 210 |
211 | 211 |
212 ``RequestInputEvents()`` and ``RequestFilteringInputEvents()`` accept a | 212 ``RequestInputEvents()`` and ``RequestFilteringInputEvents()`` accept a |
213 combination of flags that identify the class of events that the | 213 combination of flags that identify the class of events that the instance is |
214 instance is requesting to receive. Input event classes are defined in | 214 requesting to receive. Input event classes are defined in the |
215 the `PP_InputEvent_Class | 215 `PP_InputEvent_Class |
216 <https://developers.google.com/native-client/dev/pepperc/group___enums.html#gafe
68e3c1031daa4a6496845ff47649cd>`_ | 216 </native-client/pepper_stable/c/group___enums.html#gafe68e3c1031daa4a6496845ff47
649cd>`_ |
217 enumeration in `ppb_input_event.h | 217 enumeration in `ppb_input_event.h |
218 <https://developers.google.com/native-client/dev/pepperc/ppb__input__event_8h>`_
. | 218 </native-client/pepper_stable/c/ppb__input__event_8h>`_. |
219 | 219 |
220 | 220 |
221 Determining and branching on event types | 221 Determining and branching on event types |
222 ---------------------------------------- | 222 ---------------------------------------- |
223 | 223 |
224 In a typical implementation, the ``HandleInputEvent()`` function | 224 In a typical implementation, the ``HandleInputEvent()`` function determines the |
225 determines the type of each event using the ``GetType()`` function found | 225 type of each event using the ``GetType()`` function found in the ``InputEvent`` |
226 in the ``InputEvent`` class. The ``HandleInputEvent()`` function then uses a | 226 class. The ``HandleInputEvent()`` function then uses a switch statement to |
227 switch statement to branch on the type of input event. Input events | 227 branch on the type of input event. Input events are defined in the |
228 are defined in the `PP_InputEvent_Type | 228 `PP_InputEvent_Type |
229 <https://developers.google.com/native-client/dev/pepperc/group___enums.html#gaca
7296cfec99fcb6646b7144d1d6a0c5>`_ | 229 </native-client/pepper_stable/c/group___enums.html#gaca7296cfec99fcb6646b7144d1d
6a0c5>`_ |
230 enumeration in `ppb_input_event.h | 230 enumeration in `ppb_input_event.h |
231 <https://developers.google.com/native-client/dev/pepperc/ppb__input__event_8h>`_
. | 231 </native-client/pepper_stable/c/ppb__input__event_8h>`_. |
232 | 232 |
233 .. naclcode:: | 233 .. naclcode:: |
234 | 234 |
235 virtual bool HandleInputEvent(const pp::InputEvent& event) { | 235 virtual bool HandleInputEvent(const pp::InputEvent& event) { |
236 Event* event_ptr = NULL; | 236 Event* event_ptr = NULL; |
237 switch (event.GetType()) { | 237 switch (event.GetType()) { |
238 case PP_INPUTEVENT_TYPE_UNDEFINED: | 238 case PP_INPUTEVENT_TYPE_UNDEFINED: |
239 break; | 239 break; |
240 case PP_INPUTEVENT_TYPE_MOUSEDOWN: | 240 case PP_INPUTEVENT_TYPE_MOUSEDOWN: |
241 case PP_INPUTEVENT_TYPE_MOUSEUP: | 241 case PP_INPUTEVENT_TYPE_MOUSEUP: |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
302 return true; | 302 return true; |
303 } | 303 } |
304 | 304 |
305 | 305 |
306 Notice that the generic ``InputEvent`` received by ``HandleInputEvent()`` is | 306 Notice that the generic ``InputEvent`` received by ``HandleInputEvent()`` is |
307 converted into a specific type after the event type is | 307 converted into a specific type after the event type is |
308 determined. The event types handled in the example code are | 308 determined. The event types handled in the example code are |
309 ``MouseInputEvent``, ``WheelInputEvent``, and ``KeyboardInputEvent``. | 309 ``MouseInputEvent``, ``WheelInputEvent``, and ``KeyboardInputEvent``. |
310 There are also ``TouchInputEvents``. For the latest list of event types, | 310 There are also ``TouchInputEvents``. For the latest list of event types, |
311 see the `InputEvent documentation | 311 see the `InputEvent documentation |
312 <https://developers.google.com/native-client/dev/peppercpp/classpp_1_1_input_eve
nt>`_. | 312 </native-client/pepper_stable/c/classpp_1_1_input_event>`_. |
313 For reference information related to the these event classes, see the | 313 For reference information related to the these event classes, see the |
314 following documentation: | 314 following documentation: |
315 | 315 |
316 * `pp::MouseInputEvent class <https://developers.google.com/native-client/dev/pe
ppercpp/classpp_1_1_mouse_input_event>`_ | 316 * `pp::MouseInputEvent class |
317 * `pp::WheelInputEvent class <https://developers.google.com/native-client/dev/pe
ppercpp/classpp_1_1_wheel_input_event>`_ | 317 </native-client/pepper_stable/c/classpp_1_1_mouse_input_event>`_ |
318 * `pp::KeyboardInputEvent class <https://developers.google.com/native-client/dev
/peppercpp/classpp_1_1_keyboard_input_event>`_ | 318 * `pp::WheelInputEvent class |
| 319 </native-client/pepper_stable/c/classpp_1_1_wheel_input_event>`_ |
| 320 * `pp::KeyboardInputEvent class |
| 321 </native-client/pepper_stable/c/classpp_1_1_keyboard_input_event>`_ |
319 | 322 |
320 | 323 |
321 Threading and blocking | 324 Threading and blocking |
322 ---------------------- | 325 ---------------------- |
323 | 326 |
324 ``HandleInputEvent()`` in this example runs on the main module thread. | 327 ``HandleInputEvent()`` in this example runs on the main module thread. |
325 However, the bulk of the work happens on a separate worker thread (see | 328 However, the bulk of the work happens on a separate worker thread (see |
326 ``ProcessEventOnWorkerThread``). ``HandleInputEvent()`` puts events in | 329 ``ProcessEventOnWorkerThread``). ``HandleInputEvent()`` puts events in |
327 the ``event_queue_`` and the worker thread takes events from the | 330 the ``event_queue_`` and the worker thread takes events from the |
328 ``event_queue_``. This processing happens independently of the main | 331 ``event_queue_``. This processing happens independently of the main |
329 thread, so as not to slow down the browser. | 332 thread, so as not to slow down the browser. |
OLD | NEW |