Home | History | Annotate | Download | only in shared_impl
      1 // Copyright (c) 2012 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 #ifndef PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
      6 #define PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/basictypes.h"
     12 #include "base/compiler_specific.h"
     13 #include "ppapi/c/ppb_input_event.h"
     14 #include "ppapi/shared_impl/resource.h"
     15 #include "ppapi/thunk/ppb_input_event_api.h"
     16 #include "ui/events/latency_info.h"
     17 
     18 namespace ppapi {
     19 
     20 // IF YOU ADD STUFF TO THIS CLASS
     21 // ==============================
     22 // Be sure to add it to the STRUCT_TRAITS at the top of ppapi_messages.h
     23 struct PPAPI_SHARED_EXPORT InputEventData {
     24   InputEventData();
     25   ~InputEventData();
     26 
     27   // Internal-only value. Set to true when this input event is filtered, that
     28   // is, should be delivered synchronously. This is used by the proxy.
     29   bool is_filtered;
     30 
     31   PP_InputEvent_Type event_type;
     32   PP_TimeTicks event_time_stamp;
     33   uint32_t event_modifiers;
     34 
     35   PP_InputEvent_MouseButton mouse_button;
     36   PP_Point mouse_position;
     37   int32_t mouse_click_count;
     38   PP_Point mouse_movement;
     39 
     40   PP_FloatPoint wheel_delta;
     41   PP_FloatPoint wheel_ticks;
     42   bool wheel_scroll_by_page;
     43 
     44   uint32_t key_code;
     45 
     46   // The key event's |code| attribute as defined in:
     47   // http://www.w3.org/TR/uievents/
     48   std::string code;
     49 
     50   std::string character_text;
     51 
     52   std::vector<uint32_t> composition_segment_offsets;
     53   int32_t composition_target_segment;
     54   uint32_t composition_selection_start;
     55   uint32_t composition_selection_end;
     56 
     57   std::vector<PP_TouchPoint> touches;
     58   std::vector<PP_TouchPoint> changed_touches;
     59   std::vector<PP_TouchPoint> target_touches;
     60 
     61   ui::LatencyInfo latency_info;
     62 };
     63 
     64 // This simple class implements the PPB_InputEvent_API in terms of the
     65 // shared InputEventData structure
     66 class PPAPI_SHARED_EXPORT PPB_InputEvent_Shared
     67     : public Resource,
     68       public thunk::PPB_InputEvent_API {
     69  public:
     70   PPB_InputEvent_Shared(ResourceObjectType type,
     71                         PP_Instance instance,
     72                         const InputEventData& data);
     73 
     74   // Resource overrides.
     75   virtual PPB_InputEvent_API* AsPPB_InputEvent_API() OVERRIDE;
     76 
     77   // PPB_InputEvent_API implementation.
     78   virtual const InputEventData& GetInputEventData() const OVERRIDE;
     79   virtual PP_InputEvent_Type GetType() OVERRIDE;
     80   virtual PP_TimeTicks GetTimeStamp() OVERRIDE;
     81   virtual uint32_t GetModifiers() OVERRIDE;
     82   virtual PP_InputEvent_MouseButton GetMouseButton() OVERRIDE;
     83   virtual PP_Point GetMousePosition() OVERRIDE;
     84   virtual int32_t GetMouseClickCount() OVERRIDE;
     85   virtual PP_Point GetMouseMovement() OVERRIDE;
     86   virtual PP_FloatPoint GetWheelDelta() OVERRIDE;
     87   virtual PP_FloatPoint GetWheelTicks() OVERRIDE;
     88   virtual PP_Bool GetWheelScrollByPage() OVERRIDE;
     89   virtual uint32_t GetKeyCode() OVERRIDE;
     90   virtual PP_Var GetCharacterText() OVERRIDE;
     91   virtual PP_Var GetCode() OVERRIDE;
     92   virtual uint32_t GetIMESegmentNumber() OVERRIDE;
     93   virtual uint32_t GetIMESegmentOffset(uint32_t index) OVERRIDE;
     94   virtual int32_t GetIMETargetSegment() OVERRIDE;
     95   virtual void GetIMESelection(uint32_t* start, uint32_t* end) OVERRIDE;
     96   virtual void AddTouchPoint(PP_TouchListType list,
     97                              const PP_TouchPoint& point) OVERRIDE;
     98   virtual uint32_t GetTouchCount(PP_TouchListType list) OVERRIDE;
     99   virtual PP_TouchPoint GetTouchByIndex(PP_TouchListType list,
    100                                         uint32_t index) OVERRIDE;
    101   virtual PP_TouchPoint GetTouchById(PP_TouchListType list,
    102                                      uint32_t id) OVERRIDE;
    103   virtual PP_Bool TraceInputLatency(PP_Bool has_damage) OVERRIDE;
    104 
    105   // Implementations for event creation.
    106   static PP_Resource CreateIMEInputEvent(ResourceObjectType type,
    107                                          PP_Instance instance,
    108                                          PP_InputEvent_Type event_type,
    109                                          PP_TimeTicks time_stamp,
    110                                          struct PP_Var text,
    111                                          uint32_t segment_number,
    112                                          const uint32_t* segment_offsets,
    113                                          int32_t target_segment,
    114                                          uint32_t selection_start,
    115                                          uint32_t selection_end);
    116   static PP_Resource CreateKeyboardInputEvent(ResourceObjectType type,
    117                                               PP_Instance instance,
    118                                               PP_InputEvent_Type event_type,
    119                                               PP_TimeTicks time_stamp,
    120                                               uint32_t modifiers,
    121                                               uint32_t key_code,
    122                                               struct PP_Var character_text,
    123                                               struct PP_Var code);
    124   static PP_Resource CreateMouseInputEvent(
    125       ResourceObjectType type,
    126       PP_Instance instance,
    127       PP_InputEvent_Type event_type,
    128       PP_TimeTicks time_stamp,
    129       uint32_t modifiers,
    130       PP_InputEvent_MouseButton mouse_button,
    131       const PP_Point* mouse_position,
    132       int32_t click_count,
    133       const PP_Point* mouse_movement);
    134   static PP_Resource CreateWheelInputEvent(ResourceObjectType type,
    135                                            PP_Instance instance,
    136                                            PP_TimeTicks time_stamp,
    137                                            uint32_t modifiers,
    138                                            const PP_FloatPoint* wheel_delta,
    139                                            const PP_FloatPoint* wheel_ticks,
    140                                            PP_Bool scroll_by_page);
    141   static PP_Resource CreateTouchInputEvent(ResourceObjectType type,
    142                                            PP_Instance instance,
    143                                            PP_InputEvent_Type event_type,
    144                                            PP_TimeTicks time_stamp,
    145                                            uint32_t modifiers);
    146 
    147  private:
    148   InputEventData data_;
    149 
    150   DISALLOW_IMPLICIT_CONSTRUCTORS(PPB_InputEvent_Shared);
    151 };
    152 
    153 }  // namespace ppapi
    154 
    155 #endif  // PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_
    156