// 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_FXGE_WIN32_DWRITE_INT_H_
#define CORE_FXGE_WIN32_DWRITE_INT_H_

#ifndef DECLSPEC_UUID
#if (_MSC_VER >= 1100) && defined(__cplusplus)
#define DECLSPEC_UUID(x) __declspec(uuid(x))
#else
#define DECLSPEC_UUID(x)
#endif
#endif
#ifndef DECLSPEC_NOVTABLE
#if (_MSC_VER >= 1100) && defined(__cplusplus)
#define DECLSPEC_NOVTABLE __declspec(novtable)
#else
#define DECLSPEC_NOVTABLE
#endif
#endif
#if (WINVER < 0x0500)
#ifndef _MAC
DECLARE_HANDLE(HMONITOR);
#endif
#endif
class CDWriteExt {
 public:
  CDWriteExt();
  ~CDWriteExt();

  void Load();
  void Unload();

  FX_BOOL IsAvailable() { return m_pDWriteFactory != NULL; }

  void* DwCreateFontFaceFromStream(uint8_t* pData,
                                   uint32_t size,
                                   int simulation_style);
  FX_BOOL DwCreateRenderingTarget(CFX_DIBitmap* pSrc, void** renderTarget);
  void DwDeleteRenderingTarget(void* renderTarget);
  FX_BOOL DwRendingString(void* renderTarget,
                          CFX_ClipRgn* pClipRgn,
                          FX_RECT& stringRect,
                          CFX_Matrix* pMatrix,
                          void* font,
                          FX_FLOAT font_size,
                          FX_ARGB text_color,
                          int glyph_count,
                          unsigned short* glyph_indices,
                          FX_FLOAT baselineOriginX,
                          FX_FLOAT baselineOriginY,
                          void* glyph_offsets,
                          FX_FLOAT* glyph_advances);
  void DwDeleteFont(void* pFont);

 protected:
  void* m_hModule;
  void* m_pDWriteFactory;
  void* m_pDwFontContext;
  void* m_pDwTextRenderer;
};

#endif  // CORE_FXGE_WIN32_DWRITE_INT_H_
