// Copyright 2016 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 CORE_FPDFDOC_CPDF_ICONFIT_H_
#define CORE_FPDFDOC_CPDF_ICONFIT_H_

#include "core/fxcrt/fx_coordinates.h"
#include "core/fxcrt/retain_ptr.h"

class CPDF_Dictionary;

class CPDF_IconFit {
 public:
  enum class ScaleMethod { kAlways = 0, kBigger, kSmaller, kNever };

  explicit CPDF_IconFit(const CPDF_Dictionary* pDict);
  CPDF_IconFit(const CPDF_IconFit& that);
  ~CPDF_IconFit();

  ScaleMethod GetScaleMethod() const;
  bool IsProportionalScale() const;
  bool GetFittingBounds() const;
  CFX_PointF GetIconBottomLeftPosition() const;
  CFX_VectorF GetScale(const CFX_SizeF& image_size,
                       const CFX_FloatRect& rcPlate) const;
  CFX_VectorF GetImageOffset(const CFX_SizeF& image_size,
                             const CFX_VectorF& scale,
                             const CFX_FloatRect& rcPlate) const;

 private:
  CFX_PointF GetIconPosition() const;

  RetainPtr<const CPDF_Dictionary> const m_pDict;
};

#endif  // CORE_FPDFDOC_CPDF_ICONFIT_H_
