blob: 4df9e94540fde54be51b2babdc2398935dd05610 [file] [log] [blame]
// 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_