blob: 6240c2765e728e3a01636a4acc6af2748333fb66 [file] [log] [blame]
// Copyright 2020 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.
#include "ui/gfx/delegated_ink_point.h"
#include <inttypes.h>
#include "base/strings/stringprintf.h"
#include "ui/gfx/delegated_ink_metadata.h"
namespace gfx {
bool DelegatedInkPoint::MatchesDelegatedInkMetadata(
const DelegatedInkMetadata* metadata) const {
// The maximum difference allowed when comparing a DelegatedInkPoint |point_|
// to the |point_| on a DelegatedInkMetadata. Some precision loss can occur
// when moving between coordinate spaces in the browser and renderer,
// particularly when the device scale factor is not a whole number. This can
// result in a DelegatedInkMetadata and DelegatedInkPoint having been created
// from the same point, but having a very small difference. When this occurs,
// we can safely ignore that they are slightly different and use the point for
// a delegated ink trail anyway, since it is a very small difference and will
// only be visible for a single frame.
constexpr float kEpsilon = 0.05f;
return metadata && timestamp_ == metadata->timestamp() &&
point_.IsWithinDistance(metadata->point(), kEpsilon);
}
std::string DelegatedInkPoint::ToString() const {
return base::StringPrintf("point: %s, timestamp: %" PRId64 ", pointer_id: %d",
point_.ToString().c_str(),
timestamp_.since_origin().InMicroseconds(),
pointer_id_);
}
} // namespace gfx