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

#include "core/fpdfdoc/include/cpdf_iconfit.h"

#include "core/fpdfapi/fpdf_parser/include/cpdf_array.h"
#include "core/fpdfapi/fpdf_parser/include/cpdf_dictionary.h"
#include "core/fxcrt/include/fx_string.h"

CPDF_IconFit::ScaleMethod CPDF_IconFit::GetScaleMethod() {
  if (!m_pDict)
    return Always;

  CFX_ByteString csSW = m_pDict->GetStringBy("SW", "A");
  if (csSW == "B")
    return Bigger;
  if (csSW == "S")
    return Smaller;
  if (csSW == "N")
    return Never;
  return Always;
}

FX_BOOL CPDF_IconFit::IsProportionalScale() {
  return m_pDict ? m_pDict->GetStringBy("S", "P") != "A" : TRUE;
}

void CPDF_IconFit::GetIconPosition(FX_FLOAT& fLeft, FX_FLOAT& fBottom) {
  fLeft = fBottom = 0.5;
  if (!m_pDict)
    return;

  CPDF_Array* pA = m_pDict->GetArrayBy("A");
  if (pA) {
    uint32_t dwCount = pA->GetCount();
    if (dwCount > 0)
      fLeft = pA->GetNumberAt(0);
    if (dwCount > 1)
      fBottom = pA->GetNumberAt(1);
  }
}

bool CPDF_IconFit::GetFittingBounds() {
  return m_pDict ? m_pDict->GetBooleanBy("FB") : false;
}
