// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
// Original code is licensed as follows:
/*
 * Copyright 2007 ZXing authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "xfa/src/fxbarcode/BC_ResultPoint.h"
#include "xfa/src/fxbarcode/qrcode/BC_QRAlignmentPattern.h"

CBC_QRAlignmentPattern::CBC_QRAlignmentPattern(FX_FLOAT posX,
                                               FX_FLOAT posY,
                                               FX_FLOAT estimateModuleSize)
    : CBC_ResultPoint(posX, posY), m_moduleSize(estimateModuleSize) {}
CBC_QRAlignmentPattern::~CBC_QRAlignmentPattern() {}
FX_FLOAT CBC_QRAlignmentPattern::GetX() {
  return m_x;
}
FX_FLOAT CBC_QRAlignmentPattern::GetY() {
  return m_y;
}
FX_BOOL CBC_QRAlignmentPattern::AboutEquals(FX_FLOAT moduleSize,
                                            FX_FLOAT i,
                                            FX_FLOAT j) {
  if ((FXSYS_fabs(i - GetY()) <= moduleSize) &&
      (FXSYS_fabs(j - GetX()) <= moduleSize)) {
    FX_FLOAT moduleSizeDiff = FXSYS_fabs(moduleSize - m_moduleSize);
    return (moduleSizeDiff <= 1.0f) || (moduleSizeDiff / m_moduleSize <= 1.0f);
  }
  return FALSE;
}
CBC_QRAlignmentPattern* CBC_QRAlignmentPattern::Clone() {
  return new CBC_QRAlignmentPattern(m_x, m_y, m_moduleSize);
}
