// 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 "core/fxcrt/include/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 uint32_t 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 uint32_t GetFontData(uint32_t dwTable,
                               uint8_t* pBuffer,
                               uint32_t 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,
                                uint32_t dwStyle,
                                uint32_t dwMatch = 0) = 0;
};

#endif  // CORE_INCLUDE_FXGE_FPF_H_
