// 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 CORE_INCLUDE_FXGE_FPF_H_
#define CORE_INCLUDE_FXGE_FPF_H_

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

class IFPF_FontMgr;

class IFPF_DeviceModule {
 public:
  virtual ~IFPF_DeviceModule() {}
  virtual void Destroy() = 0;
  virtual IFPF_FontMgr* GetFontMgr() = 0;
};

IFPF_DeviceModule* FPF_GetDeviceModule();

#define FPF_MATCHFONT_REPLACEANSI 1

typedef struct FPF_HFONT_ { void* pData; } * FPF_HFONT;

class IFPF_Font {
 public:
  virtual void Release() = 0;
  virtual IFPF_Font* Retain() = 0;
  virtual FPF_HFONT GetHandle() = 0;
  virtual CFX_ByteString GetFamilyName() = 0;
  virtual CFX_WideString GetPsName() = 0;
  virtual FX_DWORD GetFontStyle() const = 0;
  virtual uint8_t GetCharset() const = 0;

  virtual int32_t GetGlyphIndex(FX_WCHAR wUnicode) = 0;
  virtual int32_t GetGlyphWidth(int32_t iGlyphIndex) = 0;

  virtual int32_t GetAscent() const = 0;
  virtual int32_t GetDescent() const = 0;

  virtual FX_BOOL GetGlyphBBox(int32_t iGlyphIndex, FX_RECT& rtBBox) = 0;
  virtual FX_BOOL GetBBox(FX_RECT& rtBBox) = 0;

  virtual int32_t GetHeight() const = 0;
  virtual int32_t GetItalicAngle() const = 0;
  virtual FX_DWORD GetFontData(FX_DWORD dwTable,
                               uint8_t* pBuffer,
                               FX_DWORD dwSize) = 0;

 protected:
  virtual ~IFPF_Font() {}
};

class IFPF_FontMgr {
 public:
  virtual ~IFPF_FontMgr() {}
  virtual void LoadSystemFonts() = 0;
  virtual void LoadPrivateFont(IFX_FileRead* pFontFile) = 0;
  virtual void LoadPrivateFont(const CFX_ByteStringC& bsFileName) = 0;
  virtual void LoadPrivateFont(void* pBuffer, size_t szBuffer) = 0;

  virtual IFPF_Font* CreateFont(const CFX_ByteStringC& bsFamilyname,
                                uint8_t charset,
                                FX_DWORD dwStyle,
                                FX_DWORD dwMatch = 0) = 0;
};

#endif  // CORE_INCLUDE_FXGE_FPF_H_
