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

#ifndef XFA_FXBARCODE_COMMON_BC_COMMONPERSPECTIVETRANSFORM_H_
#define XFA_FXBARCODE_COMMON_BC_COMMONPERSPECTIVETRANSFORM_H_

#include "core/fxcrt/include/fx_basic.h"

class CBC_CommonPerspectiveTransform {
 public:
  CBC_CommonPerspectiveTransform(FX_FLOAT a11,
                                 FX_FLOAT a21,
                                 FX_FLOAT a31,
                                 FX_FLOAT a12,
                                 FX_FLOAT a22,
                                 FX_FLOAT a32,
                                 FX_FLOAT a13,
                                 FX_FLOAT a23,
                                 FX_FLOAT a33);
  virtual ~CBC_CommonPerspectiveTransform();

  static CBC_CommonPerspectiveTransform* QuadrilateralToQuadrilateral(
      FX_FLOAT x0,
      FX_FLOAT y0,
      FX_FLOAT x1,
      FX_FLOAT y1,
      FX_FLOAT x2,
      FX_FLOAT y2,
      FX_FLOAT x3,
      FX_FLOAT y3,
      FX_FLOAT x0p,
      FX_FLOAT y0p,
      FX_FLOAT x1p,
      FX_FLOAT y1p,
      FX_FLOAT x2p,
      FX_FLOAT y2p,
      FX_FLOAT x3p,
      FX_FLOAT y3p);
  static CBC_CommonPerspectiveTransform* SquareToQuadrilateral(FX_FLOAT x0,
                                                               FX_FLOAT y0,
                                                               FX_FLOAT x1,
                                                               FX_FLOAT y1,
                                                               FX_FLOAT x2,
                                                               FX_FLOAT y2,
                                                               FX_FLOAT x3,
                                                               FX_FLOAT y3);
  static CBC_CommonPerspectiveTransform* QuadrilateralToSquare(FX_FLOAT x0,
                                                               FX_FLOAT y0,
                                                               FX_FLOAT x1,
                                                               FX_FLOAT y1,
                                                               FX_FLOAT x2,
                                                               FX_FLOAT y2,
                                                               FX_FLOAT x3,
                                                               FX_FLOAT y3);
  CBC_CommonPerspectiveTransform* BuildAdjoint();
  CBC_CommonPerspectiveTransform* Times(CBC_CommonPerspectiveTransform& other);
  void TransformPoints(CFX_FloatArray* points);

 private:
  FX_FLOAT m_a11, m_a12, m_a13, m_a21, m_a22, m_a23, m_a31, m_a32, m_a33;
};

#endif  // XFA_FXBARCODE_COMMON_BC_COMMONPERSPECTIVETRANSFORM_H_
