1294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// Use of this source code is governed by a BSD-style license that can be
3294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek// found in the LICENSE file.
4294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek
5294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#ifndef PPAPI_CPP_TOUCH_POINT_H_
6294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#define PPAPI_CPP_TOUCH_POINT_H_
7294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek
8294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#include "ppapi/c/ppb_input_event.h"
9294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#include "ppapi/cpp/input_event.h"
10294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek#include "ppapi/cpp/point.h"
11294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek
12294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremeneknamespace pp {
13294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek
14294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek/// Wrapper class for PP_TouchPoint.
15294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenekclass TouchPoint {
16e38dd95dddb8f1b38469c8d0e28aa1c660489324Jordy Rose public:
17256ef642f8feef22fd53be7efa868e8e34752eedTed Kremenek  TouchPoint() : touch_point_(PP_MakeTouchPoint()) {}
18294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek
19294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek  TouchPoint(const PP_TouchPoint& point) : touch_point_(point) {}
20294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek
21294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek  /// @return The identifier for this TouchPoint. This corresponds to the order
22294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek  /// in which the points were pressed. For example, the first point to be
233070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// pressed has an id of 0, the second has an id of 1, and so on. An id can be
243070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// reused when a touch point is released.  For example, if two fingers are
253070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// down, with id 0 and 1, and finger 0 releases, the next finger to be
263070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// pressed can be assigned to id 0.
273070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  uint32_t id() const { return touch_point_.id; }
283070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek
293070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// @return The x-y coordinates of this TouchPoint, in DOM coordinate space.
303070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  FloatPoint position() const {
313070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek    return pp::FloatPoint(touch_point_.position);
323070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  }
333070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek
343070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// @return The elliptical radii, in screen pixels, in the x and y direction
353070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// of this TouchPoint.
363070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  FloatPoint radii() const { return pp::FloatPoint(touch_point_.radius); }
373070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek
383070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// @return The angle of rotation of the elliptical model of this TouchPoint
393070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// from the y-axis.
403070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  float rotation_angle() const { return touch_point_.rotation_angle; }
413070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek
423070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// @return The pressure applied to this TouchPoint.  This is typically a
433070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// value between 0 and 1, with 0 indicating no pressure and 1 indicating
443070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// some maximum pressure, but scaling differs depending on the hardware and
453070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  /// the value is not guaranteed to stay within that range.
463070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek  float pressure() const { return touch_point_.pressure; }
473070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek
483070e13dca5bbefa32acb80ce4a7b217a6220983Ted Kremenek private:
49294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek  PP_TouchPoint touch_point_;
50294fd0a62b95f512637910bf85c7efa6c2354b50Ted Kremenek};
51256ef642f8feef22fd53be7efa868e8e34752eedTed Kremenek
52256ef642f8feef22fd53be7efa868e8e34752eedTed Kremenek}  // namespace pp
53256ef642f8feef22fd53be7efa868e8e34752eedTed Kremenek
54256ef642f8feef22fd53be7efa868e8e34752eedTed Kremenek#endif  /* PPAPI_CPP_TOUCH_POINT_H_ */
55256ef642f8feef22fd53be7efa868e8e34752eedTed Kremenek