summaryrefslogtreecommitdiffstats
path: root/ppapi/shared_impl/ppb_input_event_shared.h
blob: f6bdea6b2c8bf9a4476daa065a6abccdeb4b0ba5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
// 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_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
#define PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_

#include <string>
#include <vector>

#include "base/basictypes.h"
#include "base/compiler_specific.h"
#include "ppapi/c/ppb_input_event.h"
#include "ppapi/shared_impl/resource.h"
#include "ppapi/thunk/ppb_input_event_api.h"

namespace ppapi {

// IF YOU ADD STUFF TO THIS CLASS
// ==============================
// Be sure to add it to the STRUCT_TRAITS at the top of ppapi_messages.h
struct PPAPI_SHARED_EXPORT InputEventData {
  InputEventData();
  ~InputEventData();

  // Internal-only value. Set to true when this input event is filtered, that
  // is, should be delivered synchronously. This is used by the proxy.
  bool is_filtered;

  PP_InputEvent_Type event_type;
  PP_TimeTicks event_time_stamp;
  uint32_t event_modifiers;

  PP_InputEvent_MouseButton mouse_button;
  PP_Point mouse_position;
  int32_t mouse_click_count;
  PP_Point mouse_movement;

  PP_FloatPoint wheel_delta;
  PP_FloatPoint wheel_ticks;
  bool wheel_scroll_by_page;

  uint32_t key_code;
  uint32_t usb_key_code;

  std::string character_text;

  std::vector<uint32_t> composition_segment_offsets;
  int32_t composition_target_segment;
  uint32_t composition_selection_start;
  uint32_t composition_selection_end;

  std::vector<PP_TouchPoint> touches;
  std::vector<PP_TouchPoint> changed_touches;
  std::vector<PP_TouchPoint> target_touches;
};

// This simple class implements the PPB_InputEvent_API in terms of the
// shared InputEventData structure
class PPAPI_SHARED_EXPORT PPB_InputEvent_Shared
    : public Resource,
      public thunk::PPB_InputEvent_API {
 public:
  PPB_InputEvent_Shared(ResourceObjectType type,
                        PP_Instance instance,
                        const InputEventData& data);

  // Resource overrides.
  virtual PPB_InputEvent_API* AsPPB_InputEvent_API() OVERRIDE;

  // PPB_InputEvent_API implementation.
  virtual const InputEventData& GetInputEventData() const OVERRIDE;
  virtual PP_InputEvent_Type GetType() OVERRIDE;
  virtual PP_TimeTicks GetTimeStamp() OVERRIDE;
  virtual uint32_t GetModifiers() OVERRIDE;
  virtual PP_InputEvent_MouseButton GetMouseButton() OVERRIDE;
  virtual PP_Point GetMousePosition() OVERRIDE;
  virtual int32_t GetMouseClickCount() OVERRIDE;
  virtual PP_Point GetMouseMovement() OVERRIDE;
  virtual PP_FloatPoint GetWheelDelta() OVERRIDE;
  virtual PP_FloatPoint GetWheelTicks() OVERRIDE;
  virtual PP_Bool GetWheelScrollByPage() OVERRIDE;
  virtual uint32_t GetKeyCode() OVERRIDE;
  virtual PP_Var GetCharacterText() OVERRIDE;
  virtual PP_Bool SetUsbKeyCode(uint32_t usb_key_code) OVERRIDE;
  virtual uint32_t GetUsbKeyCode() OVERRIDE;
  virtual uint32_t GetIMESegmentNumber() OVERRIDE;
  virtual uint32_t GetIMESegmentOffset(uint32_t index) OVERRIDE;
  virtual int32_t GetIMETargetSegment() OVERRIDE;
  virtual void GetIMESelection(uint32_t* start, uint32_t* end) OVERRIDE;
  virtual void AddTouchPoint(PP_TouchListType list,
                             const PP_TouchPoint& point) OVERRIDE;
  virtual uint32_t GetTouchCount(PP_TouchListType list) OVERRIDE;
  virtual PP_TouchPoint GetTouchByIndex(PP_TouchListType list,
                                        uint32_t index) OVERRIDE;
  virtual PP_TouchPoint GetTouchById(PP_TouchListType list,
                                     uint32_t id) OVERRIDE;

  // Implementations for event creation.
  static PP_Resource CreateIMEInputEvent(ResourceObjectType type,
                                         PP_Instance instance,
                                         PP_InputEvent_Type event_type,
                                         PP_TimeTicks time_stamp,
                                         struct PP_Var text,
                                         uint32_t segment_number,
                                         const uint32_t* segment_offsets,
                                         int32_t target_segment,
                                         uint32_t selection_start,
                                         uint32_t selection_end);
  static PP_Resource CreateKeyboardInputEvent(ResourceObjectType type,
                                              PP_Instance instance,
                                              PP_InputEvent_Type event_type,
                                              PP_TimeTicks time_stamp,
                                              uint32_t modifiers,
                                              uint32_t key_code,
                                              struct PP_Var character_text);
  static PP_Resource CreateMouseInputEvent(
      ResourceObjectType type,
      PP_Instance instance,
      PP_InputEvent_Type event_type,
      PP_TimeTicks time_stamp,
      uint32_t modifiers,
      PP_InputEvent_MouseButton mouse_button,
      const PP_Point* mouse_position,
      int32_t click_count,
      const PP_Point* mouse_movement);
  static PP_Resource CreateWheelInputEvent(ResourceObjectType type,
                                           PP_Instance instance,
                                           PP_TimeTicks time_stamp,
                                           uint32_t modifiers,
                                           const PP_FloatPoint* wheel_delta,
                                           const PP_FloatPoint* wheel_ticks,
                                           PP_Bool scroll_by_page);
  static PP_Resource CreateTouchInputEvent(ResourceObjectType type,
                                           PP_Instance instance,
                                           PP_InputEvent_Type event_type,
                                           PP_TimeTicks time_stamp,
                                           uint32_t modifiers);

 private:
  InputEventData data_;

  DISALLOW_IMPLICIT_CONSTRUCTORS(PPB_InputEvent_Shared);
};

}  // namespace ppapi

#endif  // PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_