2 * Copyright (c) 2007-2010 SlimDX Group
\r
4 * Permission is hereby granted, free of charge, to any person obtaining a copy
\r
5 * of this software and associated documentation files (the "Software"), to deal
\r
6 * in the Software without restriction, including without limitation the rights
\r
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
8 * copies of the Software, and to permit persons to whom the Software is
\r
9 * furnished to do so, subject to the following conditions:
\r
11 * The above copyright notice and this permission notice shall be included in
\r
12 * all copies or substantial portions of the Software.
\r
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
\r
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
\r
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
\r
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
\r
26 extern const IID IID_IDWriteFontCollectionLoader;
\r
30 namespace DirectWrite
\r
32 using namespace System;
\r
34 ref class FontFileEnumerator;
\r
37 /// The font collection loader interface is used to construct a collection of fonts given a particular type of key.
\r
38 /// The font collection loader interface is recommended to be implemented by a singleton object.
\r
39 /// IMPORTANT: font collection loader implementations must not register themselves with a DirectWrite factory
\r
40 /// inside their constructors and must not unregister themselves in their destructors, because
\r
41 /// registration and unregistraton operations increment and decrement the object reference count respectively.
\r
42 /// Instead, registration and unregistration of font file loaders with DirectWrite factory should be performed
\r
43 /// outside of the font file loader implementation as a separate step.
\r
45 public interface struct IFontCollectionLoader
\r
48 /// Creates a font file enumerator object that encapsulates a collection of font files.
\r
49 /// The font system calls back to this interface to create a font collection.
\r
51 /// <param name="factory">Factory associated with the loader.</param>
\r
52 /// <param name="collectionKey">Font collection key that uniquely identifies the collection of font files within
\r
53 /// the scope of the font collection loader being used.</param>
\r
54 /// <param name="collectionKeySize">Size of the font collection key in bytes.</param>
\r
56 /// Pointer to the newly created font file enumerator.
\r
58 FontFileEnumerator ^CreateEnumeratorFromKey(Factory ^factory, IntPtr collectionKey, int collectionKeySize);
\r
61 class IFontCollectionLoaderShim : public IDWriteFontCollectionLoader
\r
64 static IFontCollectionLoaderShim *CreateInstance(IFontCollectionLoader ^wrappedInterface);
\r
66 STDMETHOD(QueryInterface)(REFIID riid, void **ppvObject);
\r
67 STDMETHOD_(ULONG, AddRef)();
\r
68 STDMETHOD_(ULONG, Release)();
\r
70 STDMETHOD(CreateEnumeratorFromKey)(IDWriteFactory *factory, void const *collectionKey, UINT32 collectionKeySize, IDWriteFontFileEnumerator **fontFileEnumerator);
\r
73 IFontCollectionLoaderShim(IFontCollectionLoader ^wrappedInterface);
\r
76 gcroot<IFontCollectionLoader ^> m_WrappedInterface;
\r