//+-------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Abstract: // DirectX Typography Services public API definitions. // //---------------------------------------------------------------------------- #ifndef DWRITE_3_H_INCLUDED #define DWRITE_3_H_INCLUDED #if _MSC_VER > 1000 #pragma once #endif #include interface IDWriteFontFaceReference; interface IDWriteFont3; interface IDWriteFontFace3; interface IDWriteFontFaceReference; interface IDWriteFontSet; interface IDWriteFontSetBuilder; interface IDWriteFontCollection1; interface IDWriteFontFamily1; interface IDWriteStringList; interface IDWriteFontDownloadQueue; /// /// A font resource could not be accessed because it was remote. This can happen /// when calling CreateFontFace on a non-local font or trying to measure/draw /// glyphs that are not downloaded yet. /// #ifndef DWRITE_E_REMOTEFONT #define DWRITE_E_REMOTEFONT _HRESULT_TYPEDEF_(0x8898500DL) #endif /// /// The download was canceled, which happens if the application calls /// IDWriteFontDownloadQueue::CancelDownload before they finish. /// #ifndef DWRITE_E_DOWNLOADCANCELLED #define DWRITE_E_DOWNLOADCANCELLED _HRESULT_TYPEDEF_(0x8898500EL) #endif /// /// The download failed to complete because the remote resource is missing /// or the network is down. /// #ifndef DWRITE_E_DOWNLOADFAILED #define DWRITE_E_DOWNLOADFAILED _HRESULT_TYPEDEF_(0x8898500FL) #endif /// /// A download request was not added or a download failed because there /// are too many active downloads. /// #ifndef DWRITE_E_TOOMANYDOWNLOADS #define DWRITE_E_TOOMANYDOWNLOADS _HRESULT_TYPEDEF_(0x88985010L) #endif /// /// The font property enumeration identifies a string in a font. /// enum DWRITE_FONT_PROPERTY_ID { /// /// Unspecified font property identifier. /// DWRITE_FONT_PROPERTY_ID_NONE, /// /// Family name for the weight-width-slope model. /// DWRITE_FONT_PROPERTY_ID_FAMILY_NAME, /// /// Family name preferred by the designer. This enables font designers to group more than four fonts in a single family without losing compatibility with /// GDI. This name is typically only present if it differs from the GDI-compatible family name. /// DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME, /// /// Face name of the (e.g., Regular or Bold). /// DWRITE_FONT_PROPERTY_ID_FACE_NAME, /// /// The full name of the font, e.g. "Arial Bold", from name id 4 in the name table. /// DWRITE_FONT_PROPERTY_ID_FULL_NAME, /// /// GDI-compatible family name. Because GDI allows a maximum of four fonts per family, fonts in the same family may have different GDI-compatible family names /// (e.g., "Arial", "Arial Narrow", "Arial Black"). /// DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME, /// /// The postscript name of the font, e.g. "GillSans-Bold" from name id 6 in the name table. /// DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME, /// /// Script/language tag to identify the scripts or languages that the font was /// primarily designed to support. /// /// /// The design script/language tag is meant to be understood from the perspective of /// users. For example, a font is considered designed for English if it is considered /// useful for English users. Note that this is different from what a font might be /// capable of supporting. For example, the Meiryo font was primarily designed for /// Japanese users. While it is capable of displaying English well, it was not /// meant to be offered for the benefit of non-Japanese-speaking English users. /// /// As another example, a font designed for Chinese may be capable of displaying /// Japanese text, but would likely look incorrect to Japanese users. /// /// The valid values for this property are "ScriptLangTag" values. These are adapted /// from the IETF BCP 47 specification, "Tags for Identifying Languages" (see /// http://tools.ietf.org/html/bcp47). In a BCP 47 language tag, a language subtag /// element is mandatory and other subtags are optional. In a ScriptLangTag, a /// script subtag is mandatory and other subtags are option. The following /// augmented BNF syntax, adapted from BCP 47, is used: /// /// ScriptLangTag = [language "-"] /// script /// ["-" region] /// *("-" variant) /// *("-" extension) /// ["-" privateuse] /// /// The expansion of the elements and the intended semantics associated with each /// are as defined in BCP 47. Script subtags are taken from ISO 15924. At present, /// no extensions are defined, and any extension should be ignored. Private use /// subtags are defined by private agreement between the source and recipient and /// may be ignored. /// /// Subtags must be valid for use in BCP 47 and contained in the Language Subtag /// Registry maintained by IANA. (See /// http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry /// and section 3 of BCP 47 for details. /// /// Any ScriptLangTag value not conforming to these specifications is ignored. /// /// Examples: /// "Latn" denotes Latin script (and any language or writing system using Latin) /// "Cyrl" denotes Cyrillic script /// "sr-Cyrl" denotes Cyrillic script as used for writing the Serbian language; /// a font that has this property value may not be suitable for displaying /// text in Russian or other languages written using Cyrillic script /// "Jpan" denotes Japanese writing (Han + Hiragana + Katakana) /// /// When passing this property to GetPropertyValues, use the overload which does /// not take a language parameter, since this property has no specific language. /// DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG, /// /// Script/language tag to identify the scripts or languages that the font declares /// it is able to support. /// DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG, /// /// Semantic tag to describe the font (e.g. Fancy, Decorative, Handmade, Sans-serif, Swiss, Pixel, Futuristic). /// DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG, /// /// Weight of the font represented as a decimal string in the range 1-999. /// DWRITE_FONT_PROPERTY_ID_WEIGHT, /// /// Stretch of the font represented as a decimal string in the range 1-9. /// DWRITE_FONT_PROPERTY_ID_STRETCH, /// /// Stretch of the font represented as a decimal string in the range 0-2. /// DWRITE_FONT_PROPERTY_ID_STYLE, /// /// Total number of properties. /// /// /// DWRITE_FONT_PROPERTY_ID_TOTAL cannot be used as a property ID. /// DWRITE_FONT_PROPERTY_ID_TOTAL, }; /// /// Font property used for filtering font sets and /// building a font set with explicit properties. /// struct DWRITE_FONT_PROPERTY { /// /// Specifies the requested font property, such as DWRITE_FONT_PROPERTY_ID_FAMILY_NAME. /// DWRITE_FONT_PROPERTY_ID propertyId; /// /// Specifies the property value, such as "Segoe UI". /// _Field_z_ WCHAR const* propertyValue; /// /// Specifies the language / locale to use, such as "en-US". /// /// /// When passing property information to AddFontFaceReference, localeName indicates /// the language of the property value. BCP 47 language tags should be used. If a /// property value is inherently non-linguistic, this can be left empty. /// /// When used for font set filtering, leave this empty: a match will be found /// regardless of language associated with property values. /// _Field_z_ _Maybenull_ WCHAR const* localeName; }; /// /// Specifies the locality of a resource. /// enum DWRITE_LOCALITY { /// /// The resource is remote, and information is unknown yet, including the file size and date. /// Attempting to create a font or file stream will fail until locality becomes at least partial. /// DWRITE_LOCALITY_REMOTE, /// /// The resource is partially local, meaning you can query the size and date of the file /// stream, and you may be able to create a font face and retrieve the particular glyphs /// for metrics and drawing, but not all the glyphs will be present. /// DWRITE_LOCALITY_PARTIAL, /// /// The resource is completely local, and all font functions can be called /// without concern of missing data or errors related to network connectivity. /// DWRITE_LOCALITY_LOCAL, }; /// /// Represents a method of rendering glyphs. /// enum DWRITE_RENDERING_MODE1 { /// /// Specifies that the rendering mode is determined automatically based on the font and size. /// DWRITE_RENDERING_MODE1_DEFAULT = DWRITE_RENDERING_MODE_DEFAULT, /// /// Specifies that no antialiasing is performed. Each pixel is either set to the foreground /// color of the text or retains the color of the background. /// DWRITE_RENDERING_MODE1_ALIASED = DWRITE_RENDERING_MODE_ALIASED, /// /// Specifies that antialiasing is performed in the horizontal direction and the appearance /// of glyphs is layout-compatible with GDI using CLEARTYPE_QUALITY. Use DWRITE_MEASURING_MODE_GDI_CLASSIC /// to get glyph advances. The antialiasing may be either ClearType or grayscale depending on /// the text antialiasing mode. /// DWRITE_RENDERING_MODE1_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC, /// /// Specifies that antialiasing is performed in the horizontal direction and the appearance /// of glyphs is layout-compatible with GDI using CLEARTYPE_NATURAL_QUALITY. Glyph advances /// are close to the font design advances, but are still rounded to whole pixels. Use /// DWRITE_MEASURING_MODE_GDI_NATURAL to get glyph advances. The antialiasing may be either /// ClearType or grayscale depending on the text antialiasing mode. /// DWRITE_RENDERING_MODE1_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL, /// /// Specifies that antialiasing is performed in the horizontal direction. This rendering /// mode allows glyphs to be positioned with subpixel precision and is therefore suitable /// for natural (i.e., resolution-independent) layout. The antialiasing may be either /// ClearType or grayscale depending on the text antialiasing mode. /// DWRITE_RENDERING_MODE1_NATURAL = DWRITE_RENDERING_MODE_NATURAL, /// /// Similar to natural mode except that antialiasing is performed in both the horizontal /// and vertical directions. This is typically used at larger sizes to make curves and /// diagonal lines look smoother. The antialiasing may be either ClearType or grayscale /// depending on the text antialiasing mode. /// DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, /// /// Specifies that rendering should bypass the rasterizer and use the outlines directly. /// This is typically used at very large sizes. /// DWRITE_RENDERING_MODE1_OUTLINE = DWRITE_RENDERING_MODE_OUTLINE, /// /// Similar to natural symmetric mode except that when possible, text should be rasterized /// in a downsampled form. /// DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED, }; /// /// The interface that represents text rendering settings for glyph rasterization and filtering. /// interface DWRITE_DECLARE_INTERFACE("b7924baa-391b-412a-8c5c-e44cc2d867dc") IDWriteRenderingParams3 : public IDWriteRenderingParams2 { /// /// Gets the rendering mode. /// STDMETHOD_(DWRITE_RENDERING_MODE1, GetRenderingMode1)() PURE; }; /// /// The root factory interface for all DWrite objects. /// interface DWRITE_DECLARE_INTERFACE("9a1b41c3-d3bb-466a-87fc-fe67556a3b65") IDWriteFactory3 : public IDWriteFactory2 { /// /// Creates a glyph run analysis object, which encapsulates information /// used to render a glyph run. /// /// Structure specifying the properties of the glyph run. /// Optional transform applied to the glyphs and their positions. This transform is applied after the /// scaling specified by the emSize. /// Specifies the rendering mode, which must be one of the raster rendering modes (i.e., not default /// and not outline). /// Specifies the method to measure glyphs. /// How to grid-fit glyph outlines. This must be non-default. /// Horizontal position of the baseline origin, in DIPs. /// Vertical position of the baseline origin, in DIPs. /// Receives a pointer to the newly created object. /// /// Standard HRESULT error code. /// STDMETHOD(CreateGlyphRunAnalysis)( _In_ DWRITE_GLYPH_RUN const* glyphRun, _In_opt_ DWRITE_MATRIX const* transform, DWRITE_RENDERING_MODE1 renderingMode, DWRITE_MEASURING_MODE measuringMode, DWRITE_GRID_FIT_MODE gridFitMode, DWRITE_TEXT_ANTIALIAS_MODE antialiasMode, FLOAT baselineOriginX, FLOAT baselineOriginY, _COM_Outptr_ IDWriteGlyphRunAnalysis** glyphRunAnalysis ) PURE; using IDWriteFactory::CreateGlyphRunAnalysis; using IDWriteFactory2::CreateGlyphRunAnalysis; /// /// Creates a rendering parameters object with the specified properties. /// /// The gamma value used for gamma correction, which must be greater than zero and cannot exceed 256. /// The amount of contrast enhancement, zero or greater. /// The amount of contrast enhancement to use for grayscale antialiasing, zero or greater. /// The degree of ClearType level, from 0.0f (no ClearType) to 1.0f (full ClearType). /// The geometry of a device pixel. /// Method of rendering glyphs. In most cases, this should be DWRITE_RENDERING_MODE_DEFAULT to automatically use an appropriate mode. /// How to grid fit glyph outlines. In most cases, this should be DWRITE_GRID_FIT_DEFAULT to automatically choose an appropriate mode. /// Holds the newly created rendering parameters object, or NULL in case of failure. /// /// Standard HRESULT error code. /// STDMETHOD(CreateCustomRenderingParams)( FLOAT gamma, FLOAT enhancedContrast, FLOAT grayscaleEnhancedContrast, FLOAT clearTypeLevel, DWRITE_PIXEL_GEOMETRY pixelGeometry, DWRITE_RENDERING_MODE1 renderingMode, DWRITE_GRID_FIT_MODE gridFitMode, _COM_Outptr_ IDWriteRenderingParams3** renderingParams ) PURE; using IDWriteFactory::CreateCustomRenderingParams; using IDWriteFactory1::CreateCustomRenderingParams; using IDWriteFactory2::CreateCustomRenderingParams; /// /// Creates a reference to a font given a full path. /// /// Absolute file path. Subsequent operations on the constructed object may fail /// if the user provided filePath doesn't correspond to a valid file on the disk. /// Last modified time of the input file path. If the parameter is omitted, /// the function will access the font file to obtain its last write time, so the clients are encouraged to specify this value /// to avoid extra disk access. Subsequent operations on the constructed object may fail /// if the user provided lastWriteTime doesn't match the file on the disk. /// The zero based index of a font face in cases when the font files contain a collection of font faces. /// If the font files contain a single face, this value should be zero. /// Font face simulation flags for algorithmic emboldening and italicization. /// Contains newly created font face reference object, or nullptr in case of failure. /// /// Standard HRESULT error code. /// STDMETHOD(CreateFontFaceReference)( _In_z_ WCHAR const* filePath, _In_opt_ FILETIME const* lastWriteTime, UINT32 faceIndex, DWRITE_FONT_SIMULATIONS fontSimulations, _COM_Outptr_ IDWriteFontFaceReference** fontFaceReference ) PURE; /// /// Creates a reference to a font given a file. /// /// User provided font file representing the font face. /// The zero based index of a font face in cases when the font files contain a collection of font faces. /// If the font files contain a single face, this value should be zero. /// Font face simulation flags for algorithmic emboldening and italicization. /// Contains newly created font face reference object, or nullptr in case of failure. /// /// Standard HRESULT error code. /// STDMETHOD(CreateFontFaceReference)( _In_ IDWriteFontFile* fontFile, UINT32 faceIndex, DWRITE_FONT_SIMULATIONS fontSimulations, _COM_Outptr_ IDWriteFontFaceReference** fontFaceReference ) PURE; /// /// Retrieves the list of system fonts. /// /// Holds the newly created font set object, or NULL in case of failure. /// /// Standard HRESULT error code. /// STDMETHOD(GetSystemFontSet)( _COM_Outptr_ IDWriteFontSet** fontSet ) PURE; /// /// Creates an empty font set builder to add font face references /// and create a custom font set. /// /// Holds the newly created font set builder object, or NULL in case of failure. /// /// Standard HRESULT error code. /// STDMETHOD(CreateFontSetBuilder)( _COM_Outptr_ IDWriteFontSetBuilder** fontSetBuilder ) PURE; /// /// Create a weight/width/slope tree from a set of fonts. /// /// A set of fonts to use to build the collection. /// Holds the newly created font collection object, or NULL in case of failure. /// /// Standard HRESULT error code. /// STDMETHOD(CreateFontCollectionFromFontSet)( IDWriteFontSet* fontSet, _COM_Outptr_ IDWriteFontCollection1** fontCollection ) PURE; /// /// Retrieves a weight/width/slope tree of system fonts. /// /// Include cloud fonts or only locally installed ones. /// Holds the newly created font collection object, or NULL in /// case of failure. /// If this parameter is nonzero, the function performs an immediate check for changes /// to the set of system fonts. If this parameter is FALSE, the function will still detect changes if the font /// cache service is running, but there may be some latency. For example, an application might specify TRUE if /// it has itself just installed a font and wants to be sure the font collection contains that font. /// /// Standard HRESULT error code. /// STDMETHOD(GetSystemFontCollection)( BOOL includeDownloadableFonts, _COM_Outptr_ IDWriteFontCollection1** fontCollection, BOOL checkForUpdates = FALSE ) PURE; using IDWriteFactory2::GetSystemFontCollection; /// /// Gets the font download queue associated with this factory object. /// /// Receives a pointer to the font download queue interface. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontDownloadQueue)( _COM_Outptr_ IDWriteFontDownloadQueue** fontDownloadQueue ) PURE; }; interface DWRITE_DECLARE_INTERFACE("53585141-D9F8-4095-8321-D73CF6BD116B") IDWriteFontSet : public IUnknown { /// /// Get the number of total fonts in the set. /// /// /// Standard HRESULT error code. /// STDMETHOD_(UINT32, GetFontCount)() PURE; /// /// Get a reference to the font at this index, which may be local or remote. /// /// Zero-based index of the font. /// Receives a pointer the font face reference object, or nullptr on failure. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontFaceReference)( UINT32 listIndex, _COM_Outptr_ IDWriteFontFaceReference** fontFaceReference ) PURE; /// /// Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations. /// /// Font face reference object that specifies the physical font. /// Receives the zero-based index of the matching font if the font was found, or UINT_MAX otherwise. /// Receives TRUE if the font exists or FALSE otherwise. /// /// Standard HRESULT error code. /// STDMETHOD(FindFontFaceReference)( IDWriteFontFaceReference* fontFaceReference, _Out_ UINT32* listIndex, _Out_ BOOL* exists ) PURE; /// /// Gets the index of the matching font face reference in the font set, with the same file, face index, and simulations. /// /// Font face object that specifies the physical font. /// Receives the zero-based index of the matching font if the font was found, or UINT_MAX otherwise. /// Receives TRUE if the font exists or FALSE otherwise. /// /// Standard HRESULT error code. /// STDMETHOD(FindFontFace)( IDWriteFontFace* fontFace, _Out_ UINT32* listIndex, _Out_ BOOL* exists ) PURE; /// /// Returns the property values of a specific font item index. /// /// Zero-based index of the font. /// Font property of interest. /// Receives the value TRUE if the font contains the specified property identifier or FALSE if not. /// Receives a pointer to the newly created localized strings object, or nullptr on failure or non-existent property. /// /// Standard HRESULT error code. /// STDMETHOD(GetPropertyValues)( UINT32 listIndex, DWRITE_FONT_PROPERTY_ID propertyId, _Out_ BOOL* exists, _COM_Outptr_result_maybenull_ IDWriteLocalizedStrings** values ) PURE; /// /// Returns all unique property values in the set, which can be used /// for purposes such as displaying a family list or tag cloud. Values are /// returned in priority order according to the language list, such that if /// a font contains more than one localized name, the preferred one will be /// returned. /// /// Font property of interest. /// List of semicolon delimited language names in preferred /// order. When a particular string like font family has more than one localized name, /// the first match is returned. /// Receives a pointer to the newly created strings list. /// /// Standard HRESULT error code. /// /// /// For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. /// The returned list of distinct family names would include either the Japanese name (if "ja-jp" was specified as /// a preferred locale) or the English name (in all other cases). /// STDMETHOD(GetPropertyValues)( DWRITE_FONT_PROPERTY_ID propertyID, _In_z_ WCHAR const* preferredLocaleNames, _COM_Outptr_ IDWriteStringList** values ) PURE; /// /// Returns all unique property values in the set, which can be used /// for purposes such as displaying a family list or tag cloud. All values /// are returned regardless of language, including all localized names. /// /// Font property of interest. /// Receives a pointer to the newly created strings list. /// /// Standard HRESULT error code. /// /// /// For example, suppose the font set includes the Meiryo family, which has both Japanese and English family names. /// The returned list of distinct family names would include both the Japanese and English names. /// STDMETHOD(GetPropertyValues)( DWRITE_FONT_PROPERTY_ID propertyID, _COM_Outptr_ IDWriteStringList** values ) PURE; /// /// Returns how many times a given property value occurs in the set. /// /// Font property of interest. /// How many times that property occurs. /// /// Standard HRESULT error code. /// /// /// For example, the family name "Segoe UI" may return a count of 12, /// whereas Harrington only has 1. /// STDMETHOD(GetPropertyOccurrenceCount)( _In_ DWRITE_FONT_PROPERTY const* property, _Out_ UINT32* propertyOccurrenceCount ) PURE; /// /// Returns a subset of fonts filtered by the given properties. /// /// List of properties to filter using. /// How many properties to filter. /// Subset of fonts that match the properties, /// or nullptr on failure. /// /// Standard HRESULT error code. /// /// /// If no fonts matched the filter, the subset will be empty (GetFontCount /// returns 0), but the function does not return an error. The subset will /// always be equal to or less than the original set. /// STDMETHOD(GetMatchingFonts)( _In_reads_(propertyCount) DWRITE_FONT_PROPERTY const* properties, UINT32 propertyCount, _COM_Outptr_ IDWriteFontSet** filteredSet ) PURE; /// /// Returns a list of fonts within the given WWS family prioritized by /// WWS distance. /// /// Neutral or localized family name of font. /// Weight of font. /// Stretch of font. /// Slope of font. /// Subset of fonts that match the properties, /// or nullptr on failure. /// /// Standard HRESULT error code. /// /// /// The returned list can include simulated bold and oblique variants, /// which would be useful for font fallback selection. /// STDMETHOD(GetMatchingFonts)( _In_z_ WCHAR const* familyName, DWRITE_FONT_WEIGHT fontWeight, DWRITE_FONT_STRETCH fontStretch, DWRITE_FONT_STYLE fontStyle, _COM_Outptr_ IDWriteFontSet** filteredSet ) PURE; }; interface DWRITE_DECLARE_INTERFACE("2F642AFE-9C68-4F40-B8BE-457401AFCB3D") IDWriteFontSetBuilder : public IUnknown { /// /// Adds a reference to a font to the set being built. The necessary /// metadata will automatically be extracted from the font upon calling /// CreateFontSet. /// /// Font face reference object to add to the set. /// /// Standard HRESULT error code. /// STDMETHOD(AddFontFaceReference)( _In_ IDWriteFontFaceReference* fontFaceReference ) PURE; /// /// Adds a reference to a font to the set being built. The caller /// supplies enough information to search on, avoiding the need to open /// the potentially non-local font. Any properties not supplied by the /// caller will be missing, and those properties will not be available as /// filters in GetMatchingFonts. GetPropertyValues for missing properties /// will return an empty string list. The properties passed should generally /// be consistent with the actual font contents, but they need not be. You /// could, for example, alias a font using a different name or unique /// identifier, or you could set custom tags not present in the actual /// font. /// /// Reference to the font. /// List of properties to associate with the reference. /// How many properties are defined. /// /// Standard HRESULT error code. /// STDMETHOD(AddFontFaceReference)( _In_ IDWriteFontFaceReference* fontFaceReference, _In_reads_(propertyCount) DWRITE_FONT_PROPERTY const* properties, UINT32 propertyCount ) PURE; /// /// Appends an existing font set to the one being built, allowing /// one to aggregate two sets or to essentially extend an existing one. /// /// Font set to append font face references from. /// /// Standard HRESULT error code. /// STDMETHOD(AddFontSet)( _In_ IDWriteFontSet* fontSet ) PURE; /// /// Creates a font set from all the font face references added so /// far via AddFontFaceReference. /// /// Contains newly created font set object, /// or nullptr in case of failure. /// /// Standard HRESULT error code. /// /// /// Creating a font set takes less time if the references were added /// with metadata rather than needing to extract the metadata from the /// font file. /// STDMETHOD(CreateFontSet)( _COM_Outptr_ IDWriteFontSet** fontSet ) PURE; }; interface DWRITE_DECLARE_INTERFACE("53585141-D9F8-4095-8321-D73CF6BD116C") IDWriteFontCollection1 : public IDWriteFontCollection { /// /// Get the underlying font set used by this collection. /// /// Contains font set used by the collection. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontSet)( _COM_Outptr_ IDWriteFontSet** fontSet ) PURE; /// /// Creates a font family object given a zero-based font family index. /// /// Zero-based index of the font family. /// Receives a pointer the newly created font family object. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontFamily)( UINT32 index, _COM_Outptr_ IDWriteFontFamily1** fontFamily ) PURE; using IDWriteFontCollection::GetFontFamily; }; /// /// The IDWriteFontFamily interface represents a set of fonts that share the same design but are differentiated /// by weight, stretch, and style. /// interface DWRITE_DECLARE_INTERFACE("DA20D8EF-812A-4C43-9802-62EC4ABD7ADF") IDWriteFontFamily1 : public IDWriteFontFamily { /// /// Gets the current locality of a font given its zero-based index. /// /// Zero-based index of the font in the font list. /// /// The locality enumeration. For fully local files, the result will always /// be DWRITE_LOCALITY_LOCAL. For downloadable files, the result depends on how /// much of the file has been downloaded, and GetFont() fails if the locality /// is REMOTE and potentially fails if PARTIAL. The application can explicitly /// ask for the font to be enqueued for download via EnqueueFontDownloadRequest /// followed by BeginDownload(). /// /// /// The locality enumeration. /// STDMETHOD_(DWRITE_LOCALITY, GetFontLocality)(UINT32 listIndex) PURE; /// /// Gets a font given its zero-based index. /// /// Zero-based index of the font in the font list. /// Receives a pointer to the newly created font object. /// /// Standard HRESULT error code. /// STDMETHOD(GetFont)( UINT32 listIndex, _COM_Outptr_ IDWriteFont3** font ) PURE; using IDWriteFontFamily::GetFont; /// /// Gets a font face reference given its zero-based index. /// /// Zero-based index of the font in the font list. /// Receives a pointer to the newly created font face reference object. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontFaceReference)( UINT32 listIndex, _COM_Outptr_ IDWriteFontFaceReference** fontFaceReference ) PURE; }; /// /// The IDWriteFontList interface represents a list of fonts. /// interface DWRITE_DECLARE_INTERFACE("DA20D8EF-812A-4C43-9802-62EC4ABD7ADE") IDWriteFontList1 : public IDWriteFontList { /// /// Gets the current locality of a font given its zero-based index. /// /// Zero-based index of the font in the font list. /// /// The locality enumeration. For fully local files, the result will always /// be DWRITE_LOCALITY_LOCAL. For downloadable files, the result depends on how /// much of the file has been downloaded, and GetFont() fails if the locality /// is REMOTE and potentially fails if PARTIAL. The application can explicitly /// ask for the font to be enqueued for download via EnqueueFontDownloadRequest /// followed by BeginDownload(). /// /// /// The locality enumeration. /// STDMETHOD_(DWRITE_LOCALITY, GetFontLocality)(UINT32 listIndex) PURE; /// /// Gets a font given its zero-based index. /// /// Zero-based index of the font in the font list. /// Receives a pointer to the newly created font object. /// /// Standard HRESULT error code. The function returns DWRITE_E_REMOTEFONT if it could not construct a remote font. /// STDMETHOD(GetFont)( UINT32 listIndex, _COM_Outptr_ IDWriteFont3** font ) PURE; using IDWriteFontList::GetFont; /// /// Gets a font face reference given its zero-based index. /// /// Zero-based index of the font in the font list. /// Receives a pointer to the newly created font face reference object. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontFaceReference)( UINT32 listIndex, _COM_Outptr_ IDWriteFontFaceReference** fontFaceReference ) PURE; }; /// /// A uniquely identifying reference to a font, from which you can create a font /// face to query font metrics and use for rendering. A font face reference /// consists of a font file, font face index, and font face simulation. The file /// data may or may not be physically present on the local machine yet. /// interface DWRITE_DECLARE_INTERFACE("5E7FA7CA-DDE3-424C-89F0-9FCD6FED58CD") IDWriteFontFaceReference : public IUnknown { /// /// Creates a font face from the reference for use with layout, /// shaping, or rendering. /// /// Newly created font face object, or nullptr in the case of failure. /// /// Standard HRESULT error code. /// /// /// This function can fail with DWRITE_E_REMOTEFONT if the font is not local. /// STDMETHOD(CreateFontFace)( _COM_Outptr_ IDWriteFontFace3** fontFace ) PURE; /// /// Creates a font face with alternate font simulations, for example, to /// explicitly simulate a bold font face out of a regular variant. /// /// Font face simulation flags for algorithmic emboldening and italicization. /// Newly created font face object, or nullptr in the case of failure. /// /// Standard HRESULT error code. /// /// /// This function can fail with DWRITE_E_REMOTEFONT if the font is not local. /// STDMETHOD(CreateFontFaceWithSimulations)( DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags, _COM_Outptr_ IDWriteFontFace3** fontFace ) PURE; /// /// Compares two instances of a font face references for equality. /// STDMETHOD_(BOOL, Equals)(IDWriteFontFaceReference* fontFaceReference) PURE; /// /// Obtains the zero-based index of the font face in its font file or files. If the font files contain a single face, /// the return value is zero. /// STDMETHOD_(UINT32, GetFontFaceIndex)() PURE; /// /// Obtains the algorithmic style simulation flags of a font face. /// STDMETHOD_(DWRITE_FONT_SIMULATIONS, GetSimulations)() PURE; /// /// Obtains the font file representing a font face. /// STDMETHOD(GetFontFile)( _COM_Outptr_ IDWriteFontFile** fontFile ) PURE; /// /// Get the local size of the font face in bytes. /// /// /// The value returned by GetLocalFileSize will always be less than or /// equal to the value returned by GetFullSize. If the locality is remote, /// the GetLocalFileSize value is zero. If the locality is local, this /// value will equal the value returned by GetFileSize. If the locality is /// partial, this value will equal the size of the portions of the font /// data that have been downloaded, which will be greater than zero and /// less than or equal to the GetFileSize value. /// STDMETHOD_(UINT64, GetLocalFileSize)() PURE; /// /// Get the total size of the font face in bytes. /// /// /// If the locality is remote, this value is unknown and will be zero. /// If the locality is partial or local, the value is the full size of /// the font face. /// STDMETHOD_(UINT64, GetFileSize)() PURE; /// /// Get the last modified date. /// /// /// The time may be zero if the font file loader does not expose file time. /// STDMETHOD(GetFileTime)(_Out_ FILETIME* lastWriteTime) PURE; /// /// Get the locality of this font face reference. You can always successfully /// create a font face from a fully local font. Attempting to create a font /// face on a remote or partially local font may fail with DWRITE_E_REMOTEFONT. /// This function may change between calls depending on background downloads /// and whether cached data expires. /// STDMETHOD_(DWRITE_LOCALITY, GetLocality)() PURE; /// /// Adds a request to the font download queue (IDWriteFontDownloadQueue). /// /// /// Standard HRESULT error code. /// STDMETHOD(EnqueueFontDownloadRequest)() PURE; /// /// Adds a request to the font download queue (IDWriteFontDownloadQueue). /// /// Array of characters to download. /// The number of elements in the character array. /// /// Standard HRESULT error code. /// /// /// Downloading a character involves downloading every glyph it depends on /// directly or indirectly, via font tables (cmap, GSUB, COLR, glyf). /// STDMETHOD(EnqueueCharacterDownloadRequest)( _In_reads_(characterCount) WCHAR const* characters, UINT32 characterCount ) PURE; /// /// Adds a request to the font download queue (IDWriteFontDownloadQueue). /// /// Array of glyph indices to download. /// The number of elements in the glyph index array. /// /// Standard HRESULT error code. /// /// /// Downloading a glyph involves downloading any other glyphs it depends on /// from the font tables (GSUB, COLR, glyf). /// STDMETHOD(EnqueueGlyphDownloadRequest)( _In_reads_(glyphCount) UINT16 const* glyphIndices, UINT32 glyphCount ) PURE; /// /// Adds a request to the font download queue (IDWriteFontDownloadQueue). /// /// Offset of the fragment from the beginning of the font file. /// Size of the fragment in bytes. /// /// Standard HRESULT error code. /// STDMETHOD(EnqueueFileFragmentDownloadRequest)( UINT64 fileOffset, UINT64 fragmentSize ) PURE; }; /// /// The IDWriteFont interface represents a font in a font collection. /// interface DWRITE_DECLARE_INTERFACE("29748ED6-8C9C-4A6A-BE0B-D912E8538944") IDWriteFont3 : public IDWriteFont2 { /// /// Creates a font face object for the font. /// /// Receives a pointer to the newly created font face object. /// /// Standard HRESULT error code. The function returns DWRITE_E_REMOTEFONT if it could not construct a remote font. /// STDMETHOD(CreateFontFace)( _COM_Outptr_ IDWriteFontFace3** fontFace ) PURE; using IDWriteFont::CreateFontFace; /// /// Compares two instances of a font references for equality. /// STDMETHOD_(BOOL, Equals)(IDWriteFont* font) PURE; /// /// Return a font face reference identifying this font. /// /// A uniquely identifying reference to a font face. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontFaceReference)( _COM_Outptr_ IDWriteFontFaceReference** fontFaceReference ) PURE; /// /// Determines whether the font supports the specified character. /// /// Unicode (UCS-4) character value. /// /// Returns TRUE if the font has the specified character, FALSE if not. /// STDMETHOD_(BOOL, HasCharacter)( UINT32 unicodeValue ) PURE; using IDWriteFont::HasCharacter; /// /// Gets the current locality of the font. /// /// /// The locality enumeration. For fully local files, the result will always /// be DWRITE_LOCALITY_LOCAL. A downloadable file may be any of the states, /// and this function may change between calls. /// /// /// The locality enumeration. /// STDMETHOD_(DWRITE_LOCALITY, GetLocality)() PURE; }; /// /// The interface that represents an absolute reference to a font face. /// It contains font face type, appropriate file references and face identification data. /// Various font data such as metrics, names and glyph outlines is obtained from IDWriteFontFace. /// interface DWRITE_DECLARE_INTERFACE("D37D7598-09BE-4222-A236-2081341CC1F2") IDWriteFontFace3 : public IDWriteFontFace2 { /// /// Return a font face reference identifying this font. /// /// A uniquely identifying reference to a font face. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontFaceReference)( _COM_Outptr_ IDWriteFontFaceReference** fontFaceReference ) PURE; /// /// Gets the PANOSE values from the font, used for font selection and /// matching. /// /// PANOSE structure to fill in. /// /// The function does not simulate these, such as substituting a weight or /// proportion inferred on other values. If the font does not specify them, /// they are all set to 'any' (0). /// STDMETHOD_(void, GetPanose)( _Out_ DWRITE_PANOSE* panose ) PURE; /// /// Gets the weight of the specified font. /// STDMETHOD_(DWRITE_FONT_WEIGHT, GetWeight)() PURE; /// /// Gets the stretch (aka. width) of the specified font. /// STDMETHOD_(DWRITE_FONT_STRETCH, GetStretch)() PURE; /// /// Gets the style (aka. slope) of the specified font. /// STDMETHOD_(DWRITE_FONT_STYLE, GetStyle)() PURE; /// /// Creates an localized strings object that contains the family names for the font family, indexed by locale name. /// /// Receives a pointer to the newly created localized strings object. /// /// Standard HRESULT error code. /// STDMETHOD(GetFamilyNames)( _COM_Outptr_ IDWriteLocalizedStrings** names ) PURE; /// /// Gets a localized strings collection containing the face names for the font (e.g., Regular or Bold), indexed by locale name. /// /// Receives a pointer to the newly created localized strings object. /// /// Standard HRESULT error code. /// STDMETHOD(GetFaceNames)( _COM_Outptr_ IDWriteLocalizedStrings** names ) PURE; /// /// Gets a localized strings collection containing the specified informational strings, indexed by locale name. /// /// Identifies the string to get. /// Receives a pointer to the newly created localized strings object. /// Receives the value TRUE if the font contains the specified string ID or FALSE if not. /// /// Standard HRESULT error code. If the font does not contain the specified string, the return value is S_OK but /// informationalStrings receives a NULL pointer and exists receives the value FALSE. /// STDMETHOD(GetInformationalStrings)( DWRITE_INFORMATIONAL_STRING_ID informationalStringID, _COM_Outptr_result_maybenull_ IDWriteLocalizedStrings** informationalStrings, _Out_ BOOL* exists ) PURE; /// /// Determines whether the font supports the specified character. /// /// Unicode (UCS-4) character value. /// /// Returns TRUE if the font has the specified character, FALSE if not. /// STDMETHOD_(BOOL, HasCharacter)( UINT32 unicodeValue ) PURE; /// /// Determines the recommended text rendering and grid-fit mode to be used based on the /// font, size, world transform, and measuring mode. /// /// Logical font size in DIPs. /// Number of pixels per logical inch in the horizontal direction. /// Number of pixels per logical inch in the vertical direction. /// Specifies the world transform. /// Specifies the quality of the graphics system's outline rendering, /// affects the size threshold above which outline rendering is used. /// Specifies the method used to measure during text layout. For proper /// glyph spacing, the function returns a rendering mode that is compatible with the specified /// measuring mode. /// Rendering parameters object. This parameter is necessary in case the rendering parameters /// object overrides the rendering mode. /// Receives the recommended rendering mode. /// Receives the recommended grid-fit mode. /// /// This method should be used to determine the actual rendering mode in cases where the rendering /// mode of the rendering params object is DWRITE_RENDERING_MODE_DEFAULT, and the actual grid-fit /// mode when the rendering params object is DWRITE_GRID_FIT_MODE_DEFAULT. /// /// /// Standard HRESULT error code. /// STDMETHOD(GetRecommendedRenderingMode)( FLOAT fontEmSize, FLOAT dpiX, FLOAT dpiY, _In_opt_ DWRITE_MATRIX const* transform, BOOL isSideways, DWRITE_OUTLINE_THRESHOLD outlineThreshold, DWRITE_MEASURING_MODE measuringMode, _In_opt_ IDWriteRenderingParams* renderingParams, _Out_ DWRITE_RENDERING_MODE1* renderingMode, _Out_ DWRITE_GRID_FIT_MODE* gridFitMode ) PURE; /// /// Determines whether the character is locally downloaded from the font. /// /// Unicode (UCS-4) character value. /// /// Returns TRUE if the font has the specified character locally available, /// FALSE if not or if the font does not support that character. /// STDMETHOD_(BOOL, IsCharacterLocal)( UINT32 unicodeValue ) PURE; /// /// Determines whether the glyph is locally downloaded from the font. /// /// Glyph identifier. /// /// Returns TRUE if the font has the specified glyph locally available. /// STDMETHOD_(BOOL, IsGlyphLocal)( UINT16 glyphId ) PURE; /// /// Determines whether the specified characters are local. /// /// Array of characters. /// The number of elements in the character array. /// Specifies whether to enqueue a download request /// if any of the specified characters are not local. /// Receives TRUE if all of the specified characters are local, /// FALSE if any of the specified characters are remote. /// /// Standard HRESULT error code. /// STDMETHOD(AreCharactersLocal)( _In_reads_(characterCount) WCHAR const* characters, UINT32 characterCount, BOOL enqueueIfNotLocal, _Out_ BOOL* isLocal ) PURE; /// /// Determines whether the specified glyphs are local. /// /// Array of glyph indices. /// The number of elements in the glyph index array. /// Specifies whether to enqueue a download request /// if any of the specified glyphs are not local. /// Receives TRUE if all of the specified glyphs are local, /// FALSE if any of the specified glyphs are remote. /// /// Standard HRESULT error code. /// STDMETHOD(AreGlyphsLocal)( _In_reads_(glyphCount) UINT16 const* glyphIndices, UINT32 glyphCount, BOOL enqueueIfNotLocal, _Out_ BOOL* isLocal ) PURE; }; /// /// Represents a collection of strings indexed by number. /// An IDWriteStringList is otherwise identical to IDWriteLocalizedStrings except /// for the semantics, where localized strings are indexed on language (each /// language has one string property) whereas a string list may contain multiple /// strings of the same language, such as a string list of family names from a /// font set. You can QueryInterface from an IDWriteLocalizedStrings to an /// IDWriteStringList. /// interface DWRITE_DECLARE_INTERFACE("CFEE3140-1157-47CA-8B85-31BFCF3F2D0E") IDWriteStringList : public IUnknown { /// /// Gets the number of strings. /// STDMETHOD_(UINT32, GetCount)() PURE; /// /// Gets the length in characters (not including the null terminator) of the locale name with the specified index. /// /// Zero-based index of the locale name. /// Receives the length in characters, not including the null terminator. /// /// Standard HRESULT error code. /// STDMETHOD(GetLocaleNameLength)( UINT32 listIndex, _Out_ UINT32* length ) PURE; /// /// Copies the locale name with the specified index to the specified array. /// /// Zero-based index of the locale name. /// Character array that receives the locale name. /// Size of the array in characters. The size must include space for the terminating /// null character. /// /// Standard HRESULT error code. /// STDMETHOD(GetLocaleName)( UINT32 listIndex, _Out_writes_z_(size) WCHAR* localeName, UINT32 size ) PURE; /// /// Gets the length in characters (not including the null terminator) of the string with the specified index. /// /// Zero-based index of the string. /// Receives the length in characters, not including the null terminator. /// /// Standard HRESULT error code. /// STDMETHOD(GetStringLength)( UINT32 listIndex, _Out_ UINT32* length ) PURE; /// /// Copies the string with the specified index to the specified array. /// /// Zero-based index of the string. /// Character array that receives the string. /// Size of the array in characters. The size must include space for the terminating /// null character. /// /// Standard HRESULT error code. /// STDMETHOD(GetString)( UINT32 listIndex, _Out_writes_z_(stringBufferSize) WCHAR* stringBuffer, UINT32 stringBufferSize ) PURE; }; /// /// Application-defined callback interface that receives notifications from the font /// download queue (IDWriteFontDownloadQueue interface). Callbacks will occur on the /// downloading thread, and objects must be prepared to handle calls on their methods /// from other threads at any time. /// interface DWRITE_DECLARE_INTERFACE("B06FE5B9-43EC-4393-881B-DBE4DC72FDA7") IDWriteFontDownloadListener : public IUnknown { /// /// The DownloadCompleted method is called back on an arbitrary thread when a /// download operation ends. /// /// Pointer to the download queue interface on which /// the BeginDownload method was called. /// Optional context object that was passed to BeginDownload. /// AddRef is called on the context object by BeginDownload and Release is called /// after the DownloadCompleted method returns. /// Result of the download operation. STDMETHOD_(void, DownloadCompleted)( _In_ IDWriteFontDownloadQueue* downloadQueue, _In_opt_ IUnknown* context, HRESULT downloadResult ) PURE; }; /// /// Interface that enqueues download requests for remote fonts, characters, glyphs, and font fragments. /// Provides methods to asynchronously execute a download, cancel pending downloads, and be notified of /// download completion. Callbacks to listeners will occur on the downloading thread, and objects must /// be must be able to handle calls on their methods from other threads at any time. /// interface DWRITE_DECLARE_INTERFACE("B71E6052-5AEA-4FA3-832E-F60D431F7E91") IDWriteFontDownloadQueue : public IUnknown { /// /// Registers a client-defined listener object that receives download notifications. /// All registered listener's DownloadCompleted will be called after BeginDownload /// completes. /// /// Listener object to add. /// Receives a token value, which the caller must subsequently /// pass to RemoveListener. /// /// Standard HRESULT error code. /// /// /// An IDWriteFontDownloadListener can also be passed to BeginDownload via the /// context parameter, rather than globally registered to the queue. /// STDMETHOD(AddListener)( IDWriteFontDownloadListener* listener, _Out_ UINT32* token ) PURE; /// /// Unregisters a notification handler that was previously registered using /// AddListener. /// /// Token value previously returned by AddListener. /// /// Returns S_OK if successful or E_INVALIDARG if the specified token does not /// correspond to a registered listener. /// STDMETHOD(RemoveListener)( UINT32 token ) PURE; /// /// Determines whether the download queue is empty. Note that the queue does not /// include requests that are already being downloaded. In other words, BeginDownload /// clears the queue. /// /// /// TRUE if the queue is empty, FALSE if there are requests pending for BeginDownload. /// STDMETHOD_(BOOL, IsEmpty)() PURE; /// /// Begins an asynchronous download operation. The download operation executes /// in the background until it completes or is cancelled by a CancelDownload call. /// /// Optional context object that is passed back to the /// download notification handler's DownloadCompleted method. If the context object /// implements IDWriteFontDownloadListener, its DownloadCompleted will be called /// when done. /// /// Returns S_OK if a download was successfully begun, S_FALSE if the queue was /// empty, or a standard HRESULT error code. /// /// /// BeginDownload removes all download requests from the queue, transferring them /// to a background download operation. If any previous downloads are still ongoing /// when BeginDownload is called again, the new download does not complete until /// the previous downloads have finished. If the queue is empty and no active /// downloads are pending, the DownloadCompleted callback is called immediately with /// DWRITE_DOWNLOAD_RESULT_NONE. /// STDMETHOD(BeginDownload)( _In_opt_ IUnknown* context = nullptr ) PURE; /// /// Removes all download requests from the queue and cancels any active download /// operations. This calls DownloadCompleted with DWRITE_E_DOWNLOADCANCELLED. /// Applications should call this when shutting down if they started any /// downloads that have not finished yet with a call to DownloadCompleted. /// /// /// Standard HRESULT error code. /// STDMETHOD(CancelDownload)() PURE; /// /// Get the current generation number of the download queue, which is incremented /// every time after a download completes, whether failed or successful. This cookie /// comparison value may be used to compared against cached data to know when it is /// stale. /// /// /// The number of download queue generations. /// STDMETHOD_(UINT64, GetGenerationCount)() PURE; }; /// /// The GDI interop interface provides interoperability with GDI. /// interface DWRITE_DECLARE_INTERFACE("4556BE70-3ABD-4F70-90BE-421780A6F515") IDWriteGdiInterop1 : public IDWriteGdiInterop { /// /// Creates a font object that matches the properties specified by the LOGFONT structure. /// /// Structure containing a GDI-compatible font description. /// The font collection to search. If NULL, the local system font collection is used. /// Receives a newly created font object if successful, or NULL in case of error. /// /// Standard HRESULT error code. /// /// /// The only fields that matter include: lfFaceName, lfCharSet, lfWeight, lfItalic. /// Font size and rendering mode are a rendering time property, not a font property, /// and text decorations like underline are drawn separately from the text. If no /// font matches the given weight, slope, and character set, the best match within /// the given GDI family name will be returned. DWRITE_E_NOFONT is returned if there /// is no matching font name using either the GDI family name (e.g. Arial) or the /// full font name (e.g. Arial Bold Italic). /// STDMETHOD(CreateFontFromLOGFONT)( _In_ LOGFONTW const* logFont, _In_opt_ IDWriteFontCollection* fontCollection, _COM_Outptr_ IDWriteFont** font ) PURE; /// /// Reads the font signature from the given font. /// /// Font to read font signature from. /// Font signature from the OS/2 table, ulUnicodeRange and ulCodePageRange. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontSignature)( _In_ IDWriteFont* font, _Out_ FONTSIGNATURE* fontSignature ) PURE; /// /// Reads the font signature from the given font. /// /// Font to read font signature from. /// Font signature from the OS/2 table, ulUnicodeRange and ulCodePageRange. /// /// Standard HRESULT error code. /// STDMETHOD(GetFontSignature)( _In_ IDWriteFontFace* fontFace, _Out_ FONTSIGNATURE* fontSignature ) PURE; /// /// Get a list of matching fonts based on the LOGFONT values. Only fonts /// of that family name will be returned. /// /// /// Standard HRESULT error code. /// STDMETHOD(GetMatchingFontsByLOGFONT)( _In_ LOGFONT const* logFont, _In_ IDWriteFontSet* fontSet, _COM_Outptr_ IDWriteFontSet** filteredSet ) PURE; }; /// /// Information about a formatted line of text. /// struct DWRITE_LINE_METRICS1 : DWRITE_LINE_METRICS { /// /// White space before the content of the line. This is included in the line height and baseline distances. /// If the line is formatted horizontally either with a uniform line spacing or with proportional /// line spacing, this value represents the extra space above the content. /// FLOAT leadingBefore; /// /// White space after the content of the line. This is included in the height of the line. /// If the line is formatted horizontally either with a uniform line spacing or with proportional /// line spacing, this value represents the extra space below the content. /// FLOAT leadingAfter; }; /// /// Specify whether DWRITE_FONT_METRICS::lineGap value should be part of the line metrics. /// enum DWRITE_FONT_LINE_GAP_USAGE { /// /// The usage of the font line gap depends on the method used for text layout. /// DWRITE_FONT_LINE_GAP_USAGE_DEFAULT, /// /// The font line gap is excluded from line spacing /// DWRITE_FONT_LINE_GAP_USAGE_DISABLED, /// /// The font line gap is included in line spacing /// DWRITE_FONT_LINE_GAP_USAGE_ENABLED }; /// /// The DWRITE_LINE_SPACING structure specifies the parameters used to specify how to manage space between lines. /// struct DWRITE_LINE_SPACING { /// /// Method used to determine line spacing. /// DWRITE_LINE_SPACING_METHOD method; /// /// Spacing between lines. /// The interpretation of this parameter depends upon the line spacing method, as follows: /// - default line spacing: ignored /// - uniform line spacing: explicit distance in DIPs between lines /// - proportional line spacing: a scaling factor to be applied to the computed line height; /// for each line, the height of the line is computed as for default line spacing, and the scaling factor is applied to that value. /// FLOAT height; /// /// Distance from top of line to baseline. /// The interpretation of this parameter depends upon the line spacing method, as follows: /// - default line spacing: ignored /// - uniform line spacing: explicit distance in DIPs from the top of the line to the baseline /// - proportional line spacing: a scaling factor applied to the computed baseline; for each line, /// the baseline distance is computed as for default line spacing, and the scaling factor is applied to that value. /// FLOAT baseline; /// /// Proportion of the entire leading distributed before the line. The allowed value is between 0 and 1.0. The remaining /// leading is distributed after the line. It is ignored for the default and uniform line spacing methods. /// The leading that is available to distribute before or after the line depends on the values of the height and /// baseline parameters. /// FLOAT leadingBefore; /// /// Specify whether DWRITE_FONT_METRICS::lineGap value should be part of the line metrics. /// DWRITE_FONT_LINE_GAP_USAGE fontLineGapUsage; }; interface DWRITE_DECLARE_INTERFACE("F67E0EDD-9E3D-4ECC-8C32-4183253DFE70") IDWriteTextFormat2 : public IDWriteTextFormat1 { /// /// Set line spacing. /// /// How to manage space between lines. /// /// Standard HRESULT error code. /// STDMETHOD(SetLineSpacing)(_In_ DWRITE_LINE_SPACING const* lineSpacingOptions) PURE; /// /// Get line spacing. /// /// How to manage space between lines. /// /// Standard HRESULT error code. /// STDMETHOD(GetLineSpacing)(_Out_ DWRITE_LINE_SPACING* lineSpacingOptions) PURE; }; interface DWRITE_DECLARE_INTERFACE("07DDCD52-020E-4DE8-AC33-6C953D83F92D") IDWriteTextLayout3 : public IDWriteTextLayout2 { /// /// Invalidates the layout, forcing layout to remeasure before calling the /// metrics or drawing functions. This is useful if the locality of a font /// changes, and layout should be redrawn, or if the size of a client /// implemented IDWriteInlineObject changes. /// /// /// Standard HRESULT error code. /// STDMETHOD(InvalidateLayout)() PURE; /// /// Set line spacing. /// /// How to manage space between lines. /// /// Standard HRESULT error code. /// STDMETHOD(SetLineSpacing)(_In_ DWRITE_LINE_SPACING const* lineSpacingOptions) PURE; /// /// Get line spacing. /// /// How to manage space between lines. /// /// Standard HRESULT error code. /// STDMETHOD(GetLineSpacing)(_Out_ DWRITE_LINE_SPACING* lineSpacingOptions) PURE; /// /// GetLineMetrics returns properties of each line. /// /// The array to fill with line information. /// The maximum size of the lineMetrics array. /// The actual size of the lineMetrics /// array that is needed. /// /// Standard HRESULT error code. /// /// /// If maxLineCount is not large enough E_NOT_SUFFICIENT_BUFFER, /// which is equivalent to HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER), /// is returned and *actualLineCount is set to the number of lines /// needed. /// STDMETHOD(GetLineMetrics)( _Out_writes_to_opt_(maxLineCount, *actualLineCount) DWRITE_LINE_METRICS1* lineMetrics, UINT32 maxLineCount, _Out_ UINT32* actualLineCount ) PURE; }; #endif /* DWRITE_3_H_INCLUDED */