| // 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 <stdint.h> | |
| #include <string> | |
| #include <vector> | |
| #include "base/compiler_specific.h" | |
| #include "base/macros.h" | |
| #include "ppapi/c/ppb_input_event.h" | |
| #include "ppapi/shared_impl/resource.h" | |
| #include "ppapi/thunk/ppb_input_event_api.h" | |
| namespace ppapi { | |
| struct TouchPointWithTilt { | |
| PP_TouchPoint touch; | |
| PP_FloatPoint tilt; | |
| }; | |
| // 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; | |
| // The key event's |code| attribute as defined in: | |
| // http://www.w3.org/TR/uievents/ | |
| std::string 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<TouchPointWithTilt> touches; | |
| std::vector<TouchPointWithTilt> changed_touches; | |
| std::vector<TouchPointWithTilt> 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. | |
| PPB_InputEvent_API* AsPPB_InputEvent_API() override; | |
| // PPB_InputEvent_API implementation. | |
| const InputEventData& GetInputEventData() const override; | |
| PP_InputEvent_Type GetType() override; | |
| PP_TimeTicks GetTimeStamp() override; | |
| uint32_t GetModifiers() override; | |
| PP_InputEvent_MouseButton GetMouseButton() override; | |
| PP_Point GetMousePosition() override; | |
| int32_t GetMouseClickCount() override; | |
| PP_Point GetMouseMovement() override; | |
| PP_FloatPoint GetWheelDelta() override; | |
| PP_FloatPoint GetWheelTicks() override; | |
| PP_Bool GetWheelScrollByPage() override; | |
| uint32_t GetKeyCode() override; | |
| PP_Var GetCharacterText() override; | |
| PP_Var GetCode() override; | |
| uint32_t GetIMESegmentNumber() override; | |
| uint32_t GetIMESegmentOffset(uint32_t index) override; | |
| int32_t GetIMETargetSegment() override; | |
| void GetIMESelection(uint32_t* start, uint32_t* end) override; | |
| void AddTouchPoint(PP_TouchListType list, | |
| const PP_TouchPoint& point) override; | |
| uint32_t GetTouchCount(PP_TouchListType list) override; | |
| PP_TouchPoint GetTouchByIndex(PP_TouchListType list, uint32_t index) override; | |
| PP_TouchPoint GetTouchById(PP_TouchListType list, uint32_t id) override; | |
| PP_FloatPoint GetTouchTiltByIndex(PP_TouchListType list, | |
| uint32_t index) override; | |
| PP_FloatPoint GetTouchTiltById(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, | |
| struct PP_Var code); | |
| 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: | |
| // Helper function to get the touch list by the type. | |
| std::vector<TouchPointWithTilt>* GetTouchListByType(PP_TouchListType type); | |
| // Helper function to get touchpoint by the list type and touchpoint id. | |
| TouchPointWithTilt* GetTouchByTypeAndId(PP_TouchListType type, uint32_t id); | |
| InputEventData data_; | |
| DISALLOW_IMPLICIT_CONSTRUCTORS(PPB_InputEvent_Shared); | |
| }; | |
| } // namespace ppapi | |
| #endif // PPAPI_SHARED_IMPL_PPB_INPUT_EVENT_SHARED_H_ |