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

#include "fx_fpf.h"
#if _FX_OS_ == _FX_ANDROID_
CFX_AndroidFontInfo::CFX_AndroidFontInfo()
    : m_pFontMgr(NULL)
{
}
bool CFX_AndroidFontInfo::Init(IFPF_FontMgr *pFontMgr)
{
    if (!pFontMgr) {
        return false;
    }
    pFontMgr->LoadSystemFonts();
    m_pFontMgr = pFontMgr;
    return true;
}
bool CFX_AndroidFontInfo::EnumFontList(CFX_FontMapper* pMapper)
{
    return false;
}
void* CFX_AndroidFontInfo::MapFont(int weight, bool bItalic, int charset, int pitch_family, const FX_CHAR* face, bool& bExact)
{
    if (!m_pFontMgr) {
        return NULL;
    }
    FX_DWORD dwStyle = 0;
    if (weight >= 700) {
        dwStyle |= FXFONT_BOLD;
    }
    if (bItalic) {
        dwStyle |= FXFONT_ITALIC;
    }
    if (pitch_family & FXFONT_FF_FIXEDPITCH) {
        dwStyle |= FXFONT_FIXED_PITCH;
    }
    if (pitch_family & FXFONT_FF_SCRIPT) {
        dwStyle |= FXFONT_SCRIPT;
    }
    if (pitch_family & FXFONT_FF_ROMAN) {
        dwStyle |= FXFONT_SERIF;
    }
    return m_pFontMgr->CreateFont(face, charset, dwStyle, FPF_MATCHFONT_REPLACEANSI);
}
void* CFX_AndroidFontInfo::GetFont(const FX_CHAR* face)
{
    return NULL;
}
FX_DWORD CFX_AndroidFontInfo::GetFontData(void* hFont, FX_DWORD table, uint8_t* buffer, FX_DWORD size)
{
    if (!hFont) {
        return 0;
    }
    return ((IFPF_Font*)hFont)->GetFontData(table, buffer, size);
}
bool CFX_AndroidFontInfo::GetFaceName(void* hFont, CFX_ByteString& name)
{
    if (!hFont) {
        return false;
    }
    name = ((IFPF_Font*)hFont)->GetFamilyName();
    return true;
}
bool CFX_AndroidFontInfo::GetFontCharset(void* hFont, int& charset)
{
    if (!hFont) {
        return false;
    }
    charset = ((IFPF_Font*)hFont)->GetCharset();
    return false;
}
void CFX_AndroidFontInfo::DeleteFont(void* hFont)
{
    if (!hFont) {
        return;
    }
    ((IFPF_Font*)hFont)->Release();
}
void* CFX_AndroidFontInfo::RetainFont(void* hFont)
{
    return NULL;
}
#endif
