/*
 * Copyright 2011 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef SkTypeface_win_DEFINED
#define SkTypeface_win_DEFINED

#include "../private/SkLeanWindows.h"
#include "SkTypeface.h"
#include <dwrite.h>

#ifdef SK_BUILD_FOR_WIN

/**
 *  Like the other Typeface create methods, this returns a new reference to the
 *  corresponding typeface for the specified logfont. The caller is responsible
 *  for calling unref() when it is finished.
 */
SK_API SkTypeface* SkCreateTypefaceFromLOGFONT(const LOGFONT&);

/**
 *  Copy the LOGFONT associated with this typeface into the lf parameter. Note
 *  that the lfHeight will need to be set afterwards, since the typeface does
 *  not track this (the paint does).
 *  typeface may be NULL, in which case we return the logfont for the default font.
 */
SK_API void SkLOGFONTFromTypeface(const SkTypeface* typeface, LOGFONT* lf);

/**
  *  Set an optional callback to ensure that the data behind a LOGFONT is loaded.
  *  This will get called if Skia tries to access the data but hits a failure.
  *  Normally this is null, and is only required if the font data needs to be
  *  remotely (re)loaded.
  */
SK_API void SkTypeface_SetEnsureLOGFONTAccessibleProc(void (*)(const LOGFONT&));

// Experimental!
//
class SkFontMgr;
class SkRemotableFontMgr;
struct IDWriteFactory;
struct IDWriteFontCollection;
struct IDWriteFontFallback;

/**
 *  Like the other Typeface create methods, this returns a new reference to the
 *  corresponding typeface for the specified dwrite font. The caller is responsible
 *  for calling unref() when it is finished.
 */
SK_API SkTypeface* SkCreateTypefaceFromDWriteFont(IDWriteFactory* aFactory,
                                                  IDWriteFontFace* aFontFace,
                                                  SkFontStyle aStyle,
                                                  bool aForceGDI);

SK_API SkFontMgr* SkFontMgr_New_GDI();
SK_API SkFontMgr* SkFontMgr_New_DirectWrite(IDWriteFactory* factory = NULL,
                                            IDWriteFontCollection* collection = NULL);
SK_API SkFontMgr* SkFontMgr_New_DirectWrite(IDWriteFactory* factory,
                                            IDWriteFontCollection* collection,
                                            IDWriteFontFallback* fallback);

/**
 *  Creates an SkFontMgr which renders using DirectWrite and obtains its data
 *  from the SkRemotableFontMgr.
 *
 *  If DirectWrite could not be initialized, will return NULL.
 */
SK_API SkFontMgr* SkFontMgr_New_DirectWriteRenderer(SkRemotableFontMgr*);

/**
 *  Creates an SkRemotableFontMgr backed by DirectWrite using the default
 *  system font collection in the current locale.
 *
 *  If DirectWrite could not be initialized, will return NULL.
 */
SK_API SkRemotableFontMgr* SkRemotableFontMgr_New_DirectWrite();

#endif  // SK_BUILD_FOR_WIN
#endif  // SkTypeface_win_DEFINED
