blob: ef9d2e33366e131f085ff742a4044fee1e396fe0 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/events/pointer_details.h"
#include <cmath>
#include <sstream>
namespace ui {
PointerDetails::PointerDetails() {}
PointerDetails::PointerDetails(EventPointerType pointer_type,
PointerId pointer_id)
: PointerDetails(pointer_type,
pointer_id,
/* radius_x */ 0.0f,
/* radius_y */ 0.0f,
/* force */ std::numeric_limits<float>::quiet_NaN()) {}
PointerDetails::PointerDetails(EventPointerType pointer_type,
PointerId pointer_id,
float radius_x,
float radius_y,
float force,
float twist,
float tilt_x,
float tilt_y,
float tangential_pressure)
: pointer_type(pointer_type),
// If we aren't provided with a radius on one axis, use the
// information from the other axis.
radius_x(radius_x > 0 ? radius_x : radius_y),
radius_y(radius_y > 0 ? radius_y : radius_x),
force(force),
tilt_x(tilt_x),
tilt_y(tilt_y),
tangential_pressure(tangential_pressure),
twist(twist),
id(pointer_id) {
if (pointer_id == kPointerIdUnknown) {
id = (pointer_type == EventPointerType::kMouse) ? kPointerIdMouse : 0;
}
}
PointerDetails::PointerDetails(const PointerDetails&) = default;
PointerDetails& PointerDetails::operator=(const PointerDetails&) = default;
bool PointerDetails::operator==(const PointerDetails& other) const {
return pointer_type == other.pointer_type && radius_x == other.radius_x &&
radius_y == other.radius_y &&
(force == other.force ||
(std::isnan(force) && std::isnan(other.force))) &&
tilt_x == other.tilt_x && tilt_y == other.tilt_y &&
tangential_pressure == other.tangential_pressure &&
twist == other.twist && id == other.id && offset == other.offset;
}
std::string PointerDetails::ToString() const {
std::ostringstream ss;
ss << "radius x/y: " << radius_x << "/" << radius_y << std::endl;
ss << "force/twist: " << force << "/" << twist << std::endl;
ss << "tilt x/y: " << tilt_x << "/" << tilt_y << std::endl;
return ss.str();
}
} // namespace ui