1/*
2 * Copyright 2011 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#ifndef SkTypeface_win_DEFINED
9#define SkTypeface_win_DEFINED
10
11#include "../private/SkLeanWindows.h"
12#include "SkTypeface.h"
13
14#ifdef SK_BUILD_FOR_WIN
15
16/**
17 *  Like the other Typeface create methods, this returns a new reference to the
18 *  corresponding typeface for the specified logfont. The caller is responsible
19 *  for calling unref() when it is finished.
20 */
21SK_API SkTypeface* SkCreateTypefaceFromLOGFONT(const LOGFONT&);
22
23/**
24 *  Copy the LOGFONT associated with this typeface into the lf parameter. Note
25 *  that the lfHeight will need to be set afterwards, since the typeface does
26 *  not track this (the paint does).
27 *  typeface may be NULL, in which case we return the logfont for the default font.
28 */
29SK_API void SkLOGFONTFromTypeface(const SkTypeface* typeface, LOGFONT* lf);
30
31/**
32  *  Set an optional callback to ensure that the data behind a LOGFONT is loaded.
33  *  This will get called if Skia tries to access the data but hits a failure.
34  *  Normally this is null, and is only required if the font data needs to be
35  *  remotely (re)loaded.
36  */
37SK_API void SkTypeface_SetEnsureLOGFONTAccessibleProc(void (*)(const LOGFONT&));
38
39// Experimental!
40//
41class SkFontMgr;
42class SkRemotableFontMgr;
43struct IDWriteFactory;
44struct IDWriteFontCollection;
45struct IDWriteFontFallback;
46
47SK_API sk_sp<SkFontMgr> SkFontMgr_New_GDI();
48SK_API sk_sp<SkFontMgr> SkFontMgr_New_DirectWrite(IDWriteFactory* factory = NULL,
49                                                  IDWriteFontCollection* collection = NULL);
50SK_API sk_sp<SkFontMgr> SkFontMgr_New_DirectWrite(IDWriteFactory* factory,
51                                                  IDWriteFontCollection* collection,
52                                                  IDWriteFontFallback* fallback);
53
54/**
55 *  Creates an SkFontMgr which renders using DirectWrite and obtains its data
56 *  from the SkRemotableFontMgr.
57 *
58 *  If DirectWrite could not be initialized, will return NULL.
59 */
60SK_API sk_sp<SkFontMgr> SkFontMgr_New_DirectWriteRenderer(sk_sp<SkRemotableFontMgr>);
61
62/**
63 *  Creates an SkRemotableFontMgr backed by DirectWrite using the default
64 *  system font collection in the current locale.
65 *
66 *  If DirectWrite could not be initialized, will return NULL.
67 */
68SK_API sk_sp<SkRemotableFontMgr> SkRemotableFontMgr_New_DirectWrite();
69
70#endif  // SK_BUILD_FOR_WIN
71#endif  // SkTypeface_win_DEFINED
72