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

class IFPF_DeviceModule;
class IFPF_FontMgr;
class IFPF_Font;
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:
    ~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_
