// 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 _BC_BOUNDINGBOX_H_
#define _BC_BOUNDINGBOX_H_
class CBC_CommonBitMatrix;
class CBC_ResultPoint;
class CBC_BoundingBox {
 public:
  CBC_BoundingBox(CBC_CommonBitMatrix* image,
                  CBC_ResultPoint* topLeft,
                  CBC_ResultPoint* bottomLeft,
                  CBC_ResultPoint* topRight,
                  CBC_ResultPoint* bottomRight,
                  int32_t& e);
  CBC_BoundingBox(CBC_BoundingBox* boundingBox);
  virtual ~CBC_BoundingBox();
  static CBC_BoundingBox* merge(CBC_BoundingBox* leftBox,
                                CBC_BoundingBox* rightBox,
                                int32_t& e);
  CBC_BoundingBox* addMissingRows(int32_t missingStartRows,
                                  int32_t missingEndRows,
                                  FX_BOOL isLeft,
                                  int32_t& e);
  void setTopRight(CBC_ResultPoint topRight);
  void setBottomRight(CBC_ResultPoint bottomRight);
  int32_t getMinX();
  int32_t getMaxX();
  int32_t getMinY();
  int32_t getMaxY();
  CBC_ResultPoint* getTopLeft();
  CBC_ResultPoint* getTopRight();
  CBC_ResultPoint* getBottomLeft();
  CBC_ResultPoint* getBottomRight();

 private:
  CBC_CommonBitMatrix* m_image;
  CBC_ResultPoint* m_topLeft;
  CBC_ResultPoint* m_bottomLeft;
  CBC_ResultPoint* m_topRight;
  CBC_ResultPoint* m_bottomRight;
  int32_t m_minX;
  int32_t m_maxX;
  int32_t m_minY;
  int32_t m_maxY;
  void init(CBC_CommonBitMatrix* image,
            CBC_ResultPoint* topLeft,
            CBC_ResultPoint* bottomLeft,
            CBC_ResultPoint* topRight,
            CBC_ResultPoint* bottomRight);
  void calculateMinMaxValues();
};
#endif
