// 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
