| // Copyright © 2015, Connor Hilarides |
| // Licensed under the MIT License <LICENSE.md> |
| //! DirectX Typography Services public API definitions. |
| ENUM!{enum DWRITE_FONT_FILE_TYPE { |
| DWRITE_FONT_FILE_TYPE_UNKNOWN, |
| DWRITE_FONT_FILE_TYPE_CFF, |
| DWRITE_FONT_FILE_TYPE_TRUETYPE, |
| DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION, |
| DWRITE_FONT_FILE_TYPE_TYPE1_PFM, |
| DWRITE_FONT_FILE_TYPE_TYPE1_PFB, |
| DWRITE_FONT_FILE_TYPE_VECTOR, |
| DWRITE_FONT_FILE_TYPE_BITMAP, |
| }} |
| ENUM!{enum DWRITE_FONT_FACE_TYPE { |
| DWRITE_FONT_FACE_TYPE_CFF, |
| DWRITE_FONT_FACE_TYPE_TRUETYPE, |
| DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION, |
| DWRITE_FONT_FACE_TYPE_TYPE1, |
| DWRITE_FONT_FACE_TYPE_VECTOR, |
| DWRITE_FONT_FACE_TYPE_BITMAP, |
| DWRITE_FONT_FACE_TYPE_UNKNOWN, |
| DWRITE_FONT_FACE_TYPE_RAW_CFF, |
| }} |
| FLAGS!{enum DWRITE_FONT_SIMULATIONS { |
| DWRITE_FONT_SIMULATIONS_NONE = 0x0000, |
| DWRITE_FONT_SIMULATIONS_BOLD = 0x0001, |
| DWRITE_FONT_SIMULATIONS_OBLIQUE = 0x0002, |
| }} |
| ENUM!{enum DWRITE_FONT_WEIGHT { |
| DWRITE_FONT_WEIGHT_THIN = 100, |
| DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200, |
| DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200, |
| DWRITE_FONT_WEIGHT_LIGHT = 300, |
| DWRITE_FONT_WEIGHT_SEMI_LIGHT = 350, |
| DWRITE_FONT_WEIGHT_NORMAL = 400, |
| DWRITE_FONT_WEIGHT_REGULAR = 400, |
| DWRITE_FONT_WEIGHT_MEDIUM = 500, |
| DWRITE_FONT_WEIGHT_DEMI_BOLD = 600, |
| DWRITE_FONT_WEIGHT_SEMI_BOLD = 600, |
| DWRITE_FONT_WEIGHT_BOLD = 700, |
| DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800, |
| DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800, |
| DWRITE_FONT_WEIGHT_BLACK = 900, |
| DWRITE_FONT_WEIGHT_HEAVY = 900, |
| DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950, |
| DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950, |
| }} |
| ENUM!{enum DWRITE_FONT_STRETCH { |
| DWRITE_FONT_STRETCH_UNDEFINED = 0, |
| DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1, |
| DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2, |
| DWRITE_FONT_STRETCH_CONDENSED = 3, |
| DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4, |
| DWRITE_FONT_STRETCH_NORMAL = 5, |
| DWRITE_FONT_STRETCH_MEDIUM = 5, |
| DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6, |
| DWRITE_FONT_STRETCH_EXPANDED = 7, |
| DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8, |
| DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9, |
| }} |
| ENUM!{enum DWRITE_FONT_STYLE { |
| DWRITE_FONT_STYLE_NORMAL, |
| DWRITE_FONT_STYLE_OBLIQUE, |
| DWRITE_FONT_STYLE_ITALIC, |
| }} |
| ENUM!{enum DWRITE_INFORMATIONAL_STRING_ID { |
| DWRITE_INFORMATIONAL_STRING_NONE, |
| DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE, |
| DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS, |
| DWRITE_INFORMATIONAL_STRING_TRADEMARK, |
| DWRITE_INFORMATIONAL_STRING_MANUFACTURER, |
| DWRITE_INFORMATIONAL_STRING_DESIGNER, |
| DWRITE_INFORMATIONAL_STRING_DESIGNER_URL, |
| DWRITE_INFORMATIONAL_STRING_DESCRIPTION, |
| DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL, |
| DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION, |
| DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL, |
| DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES, |
| DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES, |
| DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES, |
| DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES, |
| DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT, |
| DWRITE_INFORMATIONAL_STRING_FULL_NAME, |
| DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME, |
| DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME, |
| DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME, |
| DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG, |
| DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG, |
| }} |
| STRUCT!{struct DWRITE_FONT_METRICS { |
| designUnitsPerEm: ::UINT16, |
| ascent: ::UINT16, |
| descent: ::UINT16, |
| lineGap: ::INT16, |
| capHeight: ::UINT16, |
| xHeight: ::UINT16, |
| underlinePosition: ::INT16, |
| underlineThickness: ::UINT16, |
| strikethroughPosition: ::INT16, |
| strikethroughThickness: ::UINT16, |
| }} |
| STRUCT!{struct DWRITE_GLYPH_METRICS { |
| leftSideBearing: ::INT32, |
| advanceWidth: ::UINT32, |
| rightSideBearing: ::INT32, |
| topSideBearing: ::INT32, |
| advanceHeight: ::UINT32, |
| bottomSideBearing: ::INT32, |
| verticalOriginY: ::INT32, |
| }} |
| STRUCT!{struct DWRITE_GLYPH_OFFSET { |
| advanceOffset: ::FLOAT, |
| ascenderOffset: ::FLOAT, |
| }} |
| ENUM!{enum DWRITE_FACTORY_TYPE { |
| DWRITE_FACTORY_TYPE_SHARED, |
| DWRITE_FACTORY_TYPE_ISOLATED, |
| }} |
| #[inline] |
| pub fn DWRITE_MAKE_OPENTYPE_TAG(a: u8, b: u8, c: u8, d: u8) -> u32 { |
| ((d as u32) << 24) | ((c as u32) << 16) | ((b as u32) << 8) | (a as u32) |
| } |
| RIDL!{interface IDWriteFontFileLoader(IDWriteFontFileLoaderVtbl): IUnknown(IUnknownVtbl) { |
| fn CreateStreamFromKey( |
| &mut self, fontFileReferenceKey: *const ::c_void, fontFileReferenceKeySize: ::UINT32, |
| fontFileStream: *mut *mut IDWriteFontFileStream |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteLocalFontFileLoader(IDWriteLocalFontFileLoaderVtbl): |
| IDWriteFontFileLoader(IDWriteFontFileLoaderVtbl) { |
| fn GetFilePathLengthFromKey( |
| &mut self, fontFileReferenceKey: *const ::c_void, fontFileReferenceKeySize: ::UINT32, |
| filePathLength: *mut ::UINT32 |
| ) -> ::HRESULT, |
| fn GetFilePathFromKey( |
| &mut self, fontFileReferenceKey: *const ::c_void, fontFileReferenceKeySize: ::UINT32, |
| filePath: *mut ::WCHAR, |
| filePathSize: ::UINT32 |
| ) -> ::HRESULT, |
| fn GetLastWriteTimeFromKey( |
| &mut self, fontFileReferenceKey: *const ::c_void, fontFileReferenceKeySize: ::UINT32, |
| lastWriteTime: *mut ::FILETIME |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFontFileStream(IDWriteFontFileStreamVtbl): IUnknown(IUnknownVtbl) { |
| fn ReadFileFragment( |
| &mut self, fragmentStart: *mut *const ::c_void, fileOffset: ::UINT64, |
| fragmentSize: ::UINT64, fragmentContext: *mut *mut ::c_void |
| ) -> ::HRESULT, |
| fn ReleaseFileFragment(&mut self, fragmentContext: *mut ::c_void) -> (), |
| fn GetFileSize(&mut self, fileSize: *mut ::UINT64) -> ::HRESULT, |
| fn GetLastWriteTime(&mut self, lastWriteTime: *mut ::UINT64) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFontFile(IDWriteFontFileVtbl): IUnknown(IUnknownVtbl) { |
| fn GetReferenceKey( |
| &mut self, fontFileReferenceKey: *mut *const ::c_void, |
| fontFileReferenceKeySize: *mut ::UINT32 |
| ) -> ::HRESULT, |
| fn GetLoader(&mut self, fontFileLoader: *mut *mut IDWriteFontFileLoader) -> ::HRESULT, |
| fn Analyze( |
| &mut self, isSupportedFontType: *mut ::BOOL, fontFileType: *mut DWRITE_FONT_FILE_TYPE, |
| fontFaceType: *mut DWRITE_FONT_FACE_TYPE, numberOfFaces: *mut ::UINT32 |
| ) -> ::HRESULT |
| }} |
| ENUM!{enum DWRITE_PIXEL_GEOMETRY { |
| DWRITE_PIXEL_GEOMETRY_FLAT, |
| DWRITE_PIXEL_GEOMETRY_RGB, |
| DWRITE_PIXEL_GEOMETRY_BGR, |
| }} |
| ENUM!{enum DWRITE_RENDERING_MODE { |
| DWRITE_RENDERING_MODE_DEFAULT, |
| DWRITE_RENDERING_MODE_ALIASED, |
| DWRITE_RENDERING_MODE_GDI_CLASSIC, |
| DWRITE_RENDERING_MODE_GDI_NATURAL, |
| DWRITE_RENDERING_MODE_NATURAL, |
| DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, |
| DWRITE_RENDERING_MODE_OUTLINE, |
| DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC.0, |
| DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL.0, |
| DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE_NATURAL.0, |
| DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC.0, |
| }} |
| STRUCT!{struct DWRITE_MATRIX { |
| m11: ::FLOAT, |
| m12: ::FLOAT, |
| m21: ::FLOAT, |
| m22: ::FLOAT, |
| dx: ::FLOAT, |
| dy: ::FLOAT, |
| }} |
| RIDL!{interface IDWriteRenderingParams(IDWriteRenderingParamsVtbl): IUnknown(IUnknownVtbl) { |
| fn GetGamma(&mut self) -> ::FLOAT, |
| fn GetEnhancedContrast(&mut self) -> ::FLOAT, |
| fn GetClearTypeLevel(&mut self) -> ::FLOAT, |
| fn GetPixelGeometry(&mut self) -> DWRITE_PIXEL_GEOMETRY, |
| fn GetRenderingMode(&mut self) -> DWRITE_RENDERING_MODE |
| }} |
| pub type IDWriteGeometrySink = ::ID2D1SimplifiedGeometrySink; |
| RIDL!{interface IDWriteFontFace(IDWriteFontFaceVtbl): IUnknown(IUnknownVtbl) { |
| fn GetType(&mut self) -> DWRITE_FONT_FACE_TYPE, |
| fn GetFiles( |
| &mut self, numberOfFiles: *mut ::UINT32, fontFiles: *mut *mut IDWriteFontFile |
| ) -> ::HRESULT, |
| fn GetIndex(&mut self) -> ::UINT32, |
| fn GetSimulations(&mut self) -> DWRITE_FONT_SIMULATIONS, |
| fn IsSymbolFont(&mut self) -> ::BOOL, |
| fn GetMetrics(&mut self, fontFaceMetrics: *mut DWRITE_FONT_METRICS) -> (), |
| fn GetGlyphCount(&mut self) -> ::UINT16, |
| fn GetDesignGlyphMetrics( |
| &mut self, glyphIndices: *const ::UINT16, glyphCount: ::UINT32, |
| glyphMetrics: *mut DWRITE_GLYPH_METRICS, isSideways: ::BOOL |
| ) -> ::HRESULT, |
| fn GetGlyphIndices( |
| &mut self, codePoints: *const ::UINT32, codePointCount: ::UINT32, |
| glyphIndices: *mut ::UINT16 |
| ) -> ::HRESULT, |
| fn TryGetFontTable( |
| &mut self, openTypeTableTag: ::UINT32, tableData: *mut *const ::c_void, |
| tableSize: *mut ::UINT32, tableContext: *mut *mut ::c_void, exists: *mut ::BOOL |
| ) -> ::HRESULT, |
| fn ReleaseFontTable( |
| &mut self, tableContext: *mut ::c_void |
| ) -> ::HRESULT, |
| fn GetGlyphRunOutline( |
| &mut self, emSize: ::FLOAT, glyphIndices: *const ::UINT16, glyphAdvances: *const ::FLOAT, |
| glyphOffsets: *const DWRITE_GLYPH_OFFSET, glyphCount: ::UINT32, isSideways: ::BOOL, |
| isRightToLeft: ::BOOL, geometrySink: *mut IDWriteGeometrySink |
| ) -> ::HRESULT, |
| fn GetRecommendedRenderingMode( |
| &mut self, emSize: ::FLOAT, pixelsPerDip: ::FLOAT, measuringMode: ::DWRITE_MEASURING_MODE, |
| renderingParams: *mut IDWriteRenderingParams, renderingMode: *mut DWRITE_RENDERING_MODE |
| ) -> ::HRESULT, |
| fn GetGdiCompatibleMetrics( |
| &mut self, emSize: ::FLOAT, pixelsPerDip: ::FLOAT, transform: *const DWRITE_MATRIX, |
| fontFaceMetrics: *mut DWRITE_FONT_METRICS |
| ) -> ::HRESULT, |
| fn GetGdiCompatibleGlyphMetrics( |
| &mut self, enSize: ::FLOAT, pixelsPerDip: ::FLOAT, transform: *const DWRITE_MATRIX, |
| useGdiNatrual: ::BOOL, glyphIndices: *const ::UINT16, glyphCount: ::UINT32, |
| glyphMetrics: *mut DWRITE_GLYPH_METRICS, isSideways: ::BOOL |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFontCollectionLoader(IDWriteFontCollectionLoaderVtbl): |
| IUnknown(IUnknownVtbl) { |
| fn CreateEnumeratorFromKey( |
| &mut self, factory: *mut IDWriteFactory, collectionKey: *const ::c_void, |
| collectionKeySize: ::UINT32, fontFileEnumerator: *mut *mut IDWriteFontFileEnumerator |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFontFileEnumerator(IDWriteFontFileEnumeratorVtbl): IUnknown(IUnknownVtbl) { |
| fn MoveNext(&mut self, hasCurrentFile: *mut ::BOOL) -> ::HRESULT, |
| fn GetCurrentFontFile(&mut self, fontFile: *mut *mut IDWriteFontFile) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteLocalizedStrings(IDWriteLocalizedStringsVtbl): IUnknown(IUnknownVtbl) { |
| fn GetCount(&mut self) -> ::UINT32, |
| fn FindLocaleName( |
| &mut self, localeName: *const ::WCHAR, index: *mut ::UINT32, exists: *mut ::BOOL |
| ) -> ::HRESULT, |
| fn GetLocaleNameLength(&mut self, index: ::UINT32, length: *mut ::UINT32) -> ::HRESULT, |
| fn GetLocaleName( |
| &mut self, index: ::UINT32, localeName: *mut ::WCHAR, size: ::UINT32 |
| ) -> ::HRESULT, |
| fn GetStringLength(&mut self, index: ::UINT32, length: *mut ::UINT32) -> ::HRESULT, |
| fn GetString( |
| &mut self, index: ::UINT32, stringBuffer: *mut ::WCHAR, size: ::UINT32 |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFontCollection(IDWriteFontCollectionVtbl): IUnknown(IUnknownVtbl) { |
| fn GetFontFamilyCount(&mut self) -> ::UINT32, |
| fn GetFontFamily( |
| &mut self, index: ::UINT32, fontFamily: *mut *mut IDWriteFontFamily |
| ) -> ::HRESULT, |
| fn FindFamilyName( |
| &mut self, familyName: *const ::WCHAR, index: *mut ::UINT32, exists: *mut ::BOOL |
| ) -> ::HRESULT, |
| fn GetFontFromFontFace( |
| &mut self, fontFace: *mut IDWriteFontFace, font: *mut *mut IDWriteFont |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFontList(IDWriteFontListVtbl): IUnknown(IUnknownVtbl) { |
| fn GetFontCollection(&mut self, fontCollection: *mut *mut IDWriteFontCollection) -> ::HRESULT, |
| fn GetFontCount(&mut self) -> ::UINT32, |
| fn GetFont(&mut self, index: ::UINT32, font: *mut *mut IDWriteFont) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFontFamily(IDWriteFontFamilyVtbl): IDWriteFontList(IDWriteFontListVtbl) { |
| fn GetFamilyNames(&mut self, names: *mut *mut IDWriteLocalizedStrings) -> ::HRESULT, |
| fn GetFirstMatchingFont( |
| &mut self, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, |
| style: DWRITE_FONT_STYLE, matchingFont: *mut *mut IDWriteFont |
| ) -> ::HRESULT, |
| fn GetMatchingFonts( |
| &mut self, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, |
| style: DWRITE_FONT_STYLE, matchingFonts: *mut *mut IDWriteFontList |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFont(IDWriteFontVtbl): IUnknown(IUnknownVtbl) { |
| fn GetFontFamily(&mut self, fontFamily: *mut *mut IDWriteFontFamily) -> ::HRESULT, |
| fn GetWeight(&mut self) -> DWRITE_FONT_WEIGHT, |
| fn GetStretch(&mut self) -> DWRITE_FONT_STRETCH, |
| fn GetStyle(&mut self) -> DWRITE_FONT_STYLE, |
| fn IsSymbolFont(&mut self) -> ::BOOL, |
| fn GetFaceNames(&mut self, names: *mut *mut IDWriteLocalizedStrings) -> ::HRESULT, |
| fn GetInformationalStrings( |
| &mut self, informationalStringId: DWRITE_INFORMATIONAL_STRING_ID, |
| informationalStrings: *mut *mut IDWriteLocalizedStrings, exists: *mut ::BOOL |
| ) -> ::HRESULT, |
| fn GetSimulations(&mut self) -> DWRITE_FONT_SIMULATIONS, |
| fn GetMetrics(&mut self, fontMetrics: *mut DWRITE_FONT_METRICS) -> (), |
| fn HasCharacter(&mut self, unicodeValue: ::UINT32, exists: *mut ::BOOL) -> ::HRESULT, |
| fn CreateFontFace(&mut self, fontFace: *mut *mut IDWriteFontFace) -> ::HRESULT |
| }} |
| ENUM!{enum DWRITE_READING_DIRECTION { |
| DWRITE_READING_DIRECTION_LEFT_TO_RIGHT = 0, |
| DWRITE_READING_DIRECTION_RIGHT_TO_LEFT = 1, |
| DWRITE_READING_DIRECTION_TOP_TO_BOTTOM = 2, |
| DWRITE_READING_DIRECTION_BOTTOM_TO_TOP = 3, |
| }} |
| ENUM!{enum DWRITE_FLOW_DIRECTION { |
| DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM = 0, |
| DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP = 1, |
| DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT = 2, |
| DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT = 3, |
| }} |
| ENUM!{enum DWRITE_TEXT_ALIGNMENT { |
| DWRITE_TEXT_ALIGNMENT_LEADING, |
| DWRITE_TEXT_ALIGNMENT_TRAILING, |
| DWRITE_TEXT_ALIGNMENT_CENTER, |
| DWRITE_TEXT_ALIGNMENT_JUSTIFIED, |
| }} |
| ENUM!{enum DWRITE_PARAGRAPH_ALIGNMENT { |
| DWRITE_PARAGRAPH_ALIGNMENT_NEAR, |
| DWRITE_PARAGRAPH_ALIGNMENT_FAR, |
| DWRITE_PARAGRAPH_ALIGNMENT_CENTER, |
| }} |
| ENUM!{enum DWRITE_WORD_WRAPPING { |
| DWRITE_WORD_WRAPPING_WRAP = 0, |
| DWRITE_WORD_WRAPPING_NO_WRAP = 1, |
| DWRITE_WORD_WRAPPING_EMERGENCY_BREAK = 2, |
| DWRITE_WORD_WRAPPING_WHOLE_WORD = 3, |
| DWRITE_WORD_WRAPPING_CHARACTER = 4, |
| }} |
| ENUM!{enum DWRITE_LINE_SPACING_METHOD { |
| DWRITE_LINE_SPACING_METHOD_DEFAULT, |
| DWRITE_LINE_SPACING_METHOD_UNIFORM, |
| DWRITE_LINE_SPACING_METHOD_PROPORTIONAL, |
| }} |
| ENUM!{enum DWRITE_TRIMMING_GRANULARITY { |
| DWRITE_TRIMMING_GRANULARITY_NONE, |
| DWRITE_TRIMMING_GRANULARITY_CHARACTER, |
| DWRITE_TRIMMING_GRANULARITY_WORD, |
| }} |
| ENUM!{enum DWRITE_FONT_FEATURE_TAG { |
| DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = 0x63726661, // 'afrc' |
| DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = 0x63703263, // 'c2pc' |
| DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = 0x63733263, // 'c2sc' |
| DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = 0x746c6163, // 'calt' |
| DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = 0x65736163, // 'case' |
| DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, // 'ccmp' |
| DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = 0x67696c63, // 'clig' |
| DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = 0x70737063, // 'cpsp' |
| DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = 0x68777363, // 'cswh' |
| DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = 0x73727563, // 'curs' |
| DWRITE_FONT_FEATURE_TAG_DEFAULT = 0x746c6664, // 'dflt' |
| DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = 0x67696c64, // 'dlig' |
| DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = 0x74707865, // 'expt' |
| DWRITE_FONT_FEATURE_TAG_FRACTIONS = 0x63617266, // 'frac' |
| DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = 0x64697766, // 'fwid' |
| DWRITE_FONT_FEATURE_TAG_HALF_FORMS = 0x666c6168, // 'half' |
| DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = 0x6e6c6168, // 'haln' |
| DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = 0x746c6168, // 'halt' |
| DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = 0x74736968, // 'hist' |
| DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = 0x616e6b68, // 'hkna' |
| DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = 0x67696c68, // 'hlig' |
| DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = 0x64697768, // 'hwid' |
| DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = 0x6f6a6f68, // 'hojo' |
| DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = 0x3430706a, // 'jp04' |
| DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = 0x3837706a, // 'jp78' |
| DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = 0x3338706a, // 'jp83' |
| DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = 0x3039706a, // 'jp90' |
| DWRITE_FONT_FEATURE_TAG_KERNING = 0x6e72656b, // 'kern' |
| DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = 0x6167696c, // 'liga' |
| DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = 0x6d756e6c, // 'lnum' |
| DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = 0x6c636f6c, // 'locl' |
| DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = 0x6b72616d, // 'mark' |
| DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = 0x6b72676d, // 'mgrk' |
| DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = 0x6b6d6b6d, // 'mkmk' |
| DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = 0x746c616e, // 'nalt' |
| DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = 0x6b636c6e, // 'nlck' |
| DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = 0x6d756e6f, // 'onum' |
| DWRITE_FONT_FEATURE_TAG_ORDINALS = 0x6e64726f, // 'ordn' |
| DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = 0x746c6170, // 'palt' |
| DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = 0x70616370, // 'pcap' |
| DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = 0x6d756e70, // 'pnum' |
| DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = 0x64697770, // 'pwid' |
| DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = 0x64697771, // 'qwid' |
| DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = 0x67696c72, // 'rlig' |
| DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = 0x79627572, // 'ruby' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = 0x746c6173, // 'salt' |
| DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = 0x666e6973, // 'sinf' |
| DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = 0x70636d73, // 'smcp' |
| DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = 0x6c706d73, // 'smpl' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = 0x31307373, // 'ss01' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = 0x32307373, // 'ss02' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = 0x33307373, // 'ss03' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = 0x34307373, // 'ss04' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = 0x35307373, // 'ss05' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = 0x36307373, // 'ss06' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = 0x37307373, // 'ss07' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = 0x38307373, // 'ss08' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = 0x39307373, // 'ss09' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = 0x30317373, // 'ss10' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = 0x31317373, // 'ss11' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = 0x32317373, // 'ss12' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = 0x33317373, // 'ss13' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = 0x34317373, // 'ss14' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = 0x35317373, // 'ss15' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = 0x36317373, // 'ss16' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = 0x37317373, // 'ss17' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = 0x38317373, // 'ss18' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = 0x39317373, // 'ss19' |
| DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = 0x30327373, // 'ss20' |
| DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = 0x73627573, // 'subs' |
| DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = 0x73707573, // 'sups' |
| DWRITE_FONT_FEATURE_TAG_SWASH = 0x68737773, // 'swsh' |
| DWRITE_FONT_FEATURE_TAG_TITLING = 0x6c746974, // 'titl' |
| DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = 0x6d616e74, // 'tnam' |
| DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = 0x6d756e74, // 'tnum' |
| DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = 0x64617274, // 'trad' |
| DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = 0x64697774, // 'twid' |
| DWRITE_FONT_FEATURE_TAG_UNICASE = 0x63696e75, // 'unic' |
| DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING = 0x74726576, // 'vert' |
| DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION = 0x32747276, // 'vrt2' |
| DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = 0x6f72657a, // 'zero' |
| }} |
| STRUCT!{struct DWRITE_TEXT_RANGE { |
| startPosition: ::UINT32, |
| length: ::UINT32, |
| }} |
| STRUCT!{struct DWRITE_FONT_FEATURE { |
| nameTag: DWRITE_FONT_FEATURE_TAG, |
| parameter: ::UINT32, |
| }} |
| STRUCT!{struct DWRITE_TYPOGRAPHIC_FEATURES { |
| features: *mut DWRITE_FONT_FEATURE, |
| featureCount: ::UINT32, |
| }} |
| STRUCT!{struct DWRITE_TRIMMING { |
| granularity: DWRITE_TRIMMING_GRANULARITY, |
| delimiter: ::UINT32, |
| delimiterCount: ::UINT32, |
| }} |
| RIDL!{interface IDWriteTextFormat(IDWriteTextFormatVtbl): IUnknown(IUnknownVtbl) { |
| fn SetTextAlignment(&mut self, textAlignment: DWRITE_TEXT_ALIGNMENT) -> ::HRESULT, |
| fn SetParagraphAlignment( |
| &mut self, paragraphAlignment: DWRITE_PARAGRAPH_ALIGNMENT |
| ) -> ::HRESULT, |
| fn SetWordWrapping(&mut self, wordWrapping: DWRITE_WORD_WRAPPING) -> ::HRESULT, |
| fn SetReadingDirection(&mut self, readingDirection: DWRITE_READING_DIRECTION) -> ::HRESULT, |
| fn SetFlowDirection(&mut self, flowDirection: DWRITE_FLOW_DIRECTION) -> ::HRESULT, |
| fn SetIncrementalTabStop(&mut self, incrementalTabStop: ::FLOAT) -> ::HRESULT, |
| fn SetTrimming( |
| &mut self, trimmingOptions: *const DWRITE_TRIMMING, trimmingSign: *mut IDWriteInlineObject |
| ) -> ::HRESULT, |
| fn SetLineSpacing( |
| &mut self, lineSpacingMethod: DWRITE_LINE_SPACING_METHOD, lineSpacing: ::FLOAT, |
| baseLine: ::FLOAT |
| ) -> ::HRESULT, |
| fn GetTextAlignment(&mut self) -> DWRITE_TEXT_ALIGNMENT, |
| fn GetParagraphAlignment(&mut self) -> DWRITE_PARAGRAPH_ALIGNMENT, |
| fn GetWordWrapping(&mut self) -> DWRITE_WORD_WRAPPING, |
| fn GetReadingDirection(&mut self) -> DWRITE_READING_DIRECTION, |
| fn GetFlowDirection(&mut self) -> DWRITE_FLOW_DIRECTION, |
| fn GetIncrementalTabStop(&mut self) -> ::FLOAT, |
| fn GetTrimming( |
| &mut self, trimmingOptions: *mut DWRITE_TRIMMING, |
| trimmingSign: *mut *mut IDWriteInlineObject |
| ) -> ::HRESULT, |
| fn GetLineSpacing( |
| &mut self, lineSpacingMethod: *mut DWRITE_LINE_SPACING_METHOD, lineSpacing: *mut ::FLOAT, |
| baseline: *mut ::FLOAT |
| ) -> ::HRESULT, |
| fn GetFontCollection(&mut self, fontCollection: *mut *mut IDWriteFontCollection) -> ::HRESULT, |
| fn GetFontFamilyNameLength(&mut self) -> ::UINT32, |
| fn GetFontFamilyName(&mut self, fontFamilyName: *mut ::WCHAR, nameSize: ::UINT32) -> ::HRESULT, |
| fn GetFontWeight(&mut self) -> DWRITE_FONT_WEIGHT, |
| fn GetFontStyle(&mut self) -> DWRITE_FONT_STYLE, |
| fn GetFontStretch(&mut self) -> DWRITE_FONT_STRETCH, |
| fn GetFontSize(&mut self) -> ::FLOAT, |
| fn GetLocaleNameLength(&mut self) -> ::UINT32, |
| fn GetLocaleName(&mut self, localeName: *mut ::WCHAR, nameSize: ::UINT32) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteTypography(IDWriteTypographyVtbl): IUnknown(IUnknownVtbl) { |
| fn AddFontFeature(&mut self, fontFeature: DWRITE_FONT_FEATURE) -> ::HRESULT, |
| fn GetFontFeatureCount(&mut self) -> ::UINT32, |
| fn GetFontFeature( |
| &mut self, fontFeatureIndex: ::UINT32, fontFeature: *mut DWRITE_FONT_FEATURE |
| ) -> ::HRESULT |
| }} |
| FLAGS!{enum DWRITE_SCRIPT_SHAPES { |
| DWRITE_SCRIPT_SHAPES_DEFAULT = 0, |
| DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1, |
| }} |
| STRUCT!{struct DWRITE_SCRIPT_ANALYSIS { |
| script: ::UINT16, |
| shapes: DWRITE_SCRIPT_SHAPES, |
| }} |
| ENUM!{enum DWRITE_BREAK_CONDITION { |
| DWRITE_BREAK_CONDITION_NEUTRAL, |
| DWRITE_BREAK_CONDITION_CAN_BREAK, |
| DWRITE_BREAK_CONDITION_MAY_NOT_BREAK, |
| DWRITE_BREAK_CONDITION_MUST_BREAK, |
| }} |
| STRUCT!{struct DWRITE_LINE_BREAKPOINT { |
| bit_fields: ::UINT8, |
| }} |
| BITFIELD!{DWRITE_LINE_BREAKPOINT bit_fields: ::UINT8 [ |
| breakConditionBefore set_breakConditionBefore[0..2], |
| breakConditionAfter set_breakConditionAfter[2..4], |
| isWhitespace set_isWhitespace[4..5], |
| isSoftHyphen set_isSoftHyphen[5..6], |
| padding set_padding[6..8], |
| ]} |
| ENUM!{enum DWRITE_NUMBER_SUBSTITUTION_METHOD { |
| DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE, |
| DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL, |
| DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE, |
| DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL, |
| DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL, |
| }} |
| RIDL!{interface IDWriteNumberSubstitution(IDWriteNumberSubstitutionVtbl): IUnknown(IUnknownVtbl) { |
| }} |
| STRUCT!{struct DWRITE_SHAPING_TEXT_PROPERTIES { |
| bit_fields: ::UINT16, |
| }} |
| BITFIELD!{DWRITE_SHAPING_TEXT_PROPERTIES bit_fields: ::UINT16 [ |
| isShapedAlone set_isShapedAlone[0..1], |
| reserved set_reserved[1..16], |
| ]} |
| STRUCT!{struct DWRITE_SHAPING_GLYPH_PROPERTIES { |
| bit_fields: ::UINT16, |
| }} |
| BITFIELD!{DWRITE_SHAPING_GLYPH_PROPERTIES bit_fields: ::UINT16 [ |
| justification set_justification[0..4], |
| isClusterStart set_isClusterStart[4..5], |
| isDiacritic set_isDiacritic[5..6], |
| isZeroWidthSpace set_isZeroWidthSpace[6..7], |
| reserved set_reserved[7..16], |
| ]} |
| RIDL!{interface IDWriteTextAnalysisSource(IDWriteTextAnalysisSourceVtbl): IUnknown(IUnknownVtbl) { |
| fn GetTextAtPosition( |
| &mut self, textPosition: ::UINT32, textString: *mut *const ::WCHAR, |
| textLength: *mut ::UINT32 |
| ) -> ::HRESULT, |
| fn GetTextBeforePosition( |
| &mut self, textPosition: ::UINT32, textString: *mut *const ::WCHAR, |
| textLength: *mut ::UINT32 |
| ) -> ::HRESULT, |
| fn GetParagraphReadingDirection(&mut self) -> DWRITE_READING_DIRECTION, |
| fn GetLocaleName( |
| &mut self, textPosition: ::UINT32, textLength: *mut ::UINT32, |
| localeName: *mut *const ::WCHAR |
| ) -> ::HRESULT, |
| fn GetNumberSubstitution( |
| &mut self, textPosition: ::UINT32, textLength: *mut ::UINT32, |
| numberSubstitution: *mut *mut IDWriteNumberSubstitution |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteTextAnalysisSink(IDWriteTextAnalysisSinkVtbl): IUnknown(IUnknownVtbl) { |
| fn SetScriptAnalysis( |
| &mut self, textPosition: ::UINT32, textLength: ::UINT32, |
| scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS |
| ) -> ::HRESULT, |
| fn SetLineBreakpoints( |
| &mut self, textPosition: ::UINT32, textLength: ::UINT32, |
| lineBreakpoints: *const DWRITE_LINE_BREAKPOINT |
| ) -> ::HRESULT, |
| fn SetBidiLevel( |
| &mut self, textPosition: ::UINT32, textLength: ::UINT32, explicitLevel: ::UINT8, |
| resolvedLevel: ::UINT8 |
| ) -> ::HRESULT, |
| fn SetNumberSubstitution( |
| &mut self, textPosition: ::UINT32, textLength: ::UINT32, |
| numberSubstitution: *mut IDWriteNumberSubstitution |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteTextAnalyzer(IDWriteTextAnalyzerVtbl): IUnknown(IUnknownVtbl) { |
| fn AnalyzeScript( |
| &mut self, analysisSource: *mut IDWriteTextAnalysisSource, textPosition: ::UINT32, |
| textLength: ::UINT32, analysisSink: *mut IDWriteTextAnalysisSink |
| ) -> ::HRESULT, |
| fn AnalyzeBidi( |
| &mut self, analysisSource: *mut IDWriteTextAnalysisSource, textPosition: ::UINT32, |
| textLength: ::UINT32, analysisSink: *mut IDWriteTextAnalysisSink |
| ) -> ::HRESULT, |
| fn AnalyzeNumberSubstitution( |
| &mut self, analysisSource: *mut IDWriteTextAnalysisSource, textPosition: ::UINT32, |
| textLength: ::UINT32, analysisSink: *mut IDWriteTextAnalysisSink |
| ) -> ::HRESULT, |
| fn AnalyzeLineBreakpoints( |
| &mut self, analysisSource: *mut IDWriteTextAnalysisSource, textPosition: ::UINT32, |
| textLength: ::UINT32, analysisSink: *mut IDWriteTextAnalysisSink |
| ) -> ::HRESULT, |
| fn GetGlyphs( |
| &mut self, textString: *const ::WCHAR, textLength: ::UINT32, |
| fontFace: *mut IDWriteFontFace, isSideways: ::BOOL, isRightToLeft: ::BOOL, |
| scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS, localeName: *const ::WCHAR, |
| numberSubstitution: *mut IDWriteNumberSubstitution, |
| features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES, featureRangeLengths: *const ::UINT32, |
| featureRanges: ::UINT32, maxGlyphCount: ::UINT32, clusterMap: *mut ::UINT16, |
| textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES, glyphIndices: *mut ::UINT16, |
| glyphProps: *mut DWRITE_SHAPING_GLYPH_PROPERTIES, actualGlyphCount: *mut ::UINT32 |
| ) -> ::HRESULT, |
| fn GetGlyphPlacements( |
| &mut self, textString: *const ::WCHAR, clusterMap: *const ::UINT16, |
| textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES, textLength: ::UINT32, |
| glyphIndices: *const ::UINT16, glyphProps: *const DWRITE_SHAPING_GLYPH_PROPERTIES, |
| glyphCount: ::UINT32, fontFace: *mut IDWriteFontFace, fontEmSize: ::FLOAT, |
| isSideways: ::BOOL, isRightToLeft: ::BOOL, scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS, |
| localeName: *const ::WCHAR, features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES, |
| featureRangeLengths: *const ::UINT32, featureRanges: ::UINT32, glyphAdvances: *mut ::FLOAT, |
| glyphOffsets: *mut DWRITE_GLYPH_OFFSET |
| ) -> ::HRESULT, |
| fn GetGdiCompatibleGlyphPlacements( |
| &mut self, textString: *const ::WCHAR, clusterMap: *const ::UINT16, |
| textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES, textLength: ::UINT32, |
| glyphIndices: *const ::UINT16, glyphProps: *const DWRITE_SHAPING_GLYPH_PROPERTIES, |
| glyphCount: ::UINT32, fontFace: *mut IDWriteFontFace, fontEmSize: ::FLOAT, |
| pixelsPerDip: ::FLOAT, transform: *const DWRITE_MATRIX, useGdiNatrual: ::BOOL, |
| isSideways: ::BOOL, isRightToLeft: ::BOOL, scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS, |
| localeName: *const ::WCHAR, features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES, |
| featureRangeLengths: *const ::UINT32, featureRanges: ::UINT32, glyphAdvances: *mut ::FLOAT, |
| glyphOffsets: *mut DWRITE_GLYPH_OFFSET |
| ) -> ::HRESULT |
| }} |
| STRUCT!{struct DWRITE_GLYPH_RUN { |
| fontFace: *mut IDWriteFontFace, |
| fontEmSize: ::FLOAT, |
| glyphCount: ::UINT32, |
| glyphIndices: *const ::UINT16, |
| glyphAdvances: *const ::FLOAT, |
| glyphOffsets: *const DWRITE_GLYPH_OFFSET, |
| isSideways: ::BOOL, |
| bidiLevel: ::UINT32, |
| }} |
| STRUCT!{struct DWRITE_GLYPH_RUN_DESCRIPTION { |
| localeName: *const ::WCHAR, |
| string: *const ::WCHAR, |
| stringLength: ::UINT32, |
| clusterMap: *const ::UINT16, |
| textPosition: ::UINT32, |
| }} |
| STRUCT!{struct DWRITE_UNDERLINE { |
| width: ::FLOAT, |
| thickness: ::FLOAT, |
| offset: ::FLOAT, |
| runHeight: ::FLOAT, |
| readingDirection: DWRITE_READING_DIRECTION, |
| flowDirection: DWRITE_FLOW_DIRECTION, |
| localeName: *const ::WCHAR, |
| measuringMode: ::DWRITE_MEASURING_MODE, |
| }} |
| STRUCT!{struct DWRITE_STRIKETHROUGH { |
| width: ::FLOAT, |
| thickness: ::FLOAT, |
| offset: ::FLOAT, |
| readingDirection: DWRITE_READING_DIRECTION, |
| flowDirection: DWRITE_FLOW_DIRECTION, |
| localeName: *const ::WCHAR, |
| measuringMode: ::DWRITE_MEASURING_MODE, |
| }} |
| STRUCT!{struct DWRITE_LINE_METRICS { |
| length: ::UINT32, |
| trailingWhitespaceLength: ::UINT32, |
| newlineLength: ::UINT32, |
| height: ::FLOAT, |
| baseline: ::FLOAT, |
| isTrimmed: ::BOOL, |
| }} |
| STRUCT!{struct DWRITE_CLUSTER_METRICS { |
| width: ::FLOAT, |
| length: ::UINT16, |
| bit_fields: ::UINT16, |
| }} |
| BITFIELD!{DWRITE_CLUSTER_METRICS bit_fields: ::UINT16 [ |
| canWrapLineAfter set_canWrapLineAfter[0..1], |
| isWhitespace set_isWhitespace[1..2], |
| isNewline set_isNewline[2..3], |
| isSoftHyphen set_isSoftHyphen[3..4], |
| isRightToLeft set_isRightToLeft[4..5], |
| padding set_padding[5..16], |
| ]} |
| STRUCT!{struct DWRITE_TEXT_METRICS { |
| left: ::FLOAT, |
| top: ::FLOAT, |
| width: ::FLOAT, |
| widthIncludingTrailingWhitespace: ::FLOAT, |
| height: ::FLOAT, |
| layoutWidth: ::FLOAT, |
| layoutHeight: ::FLOAT, |
| maxBidiReorderingDepth: ::UINT32, |
| lineCount: ::UINT32, |
| }} |
| STRUCT!{struct DWRITE_INLINE_OBJECT_METRICS { |
| width: ::FLOAT, |
| height: ::FLOAT, |
| baseline: ::FLOAT, |
| supportsSideways: ::BOOL, |
| }} |
| STRUCT!{struct DWRITE_OVERHANG_METRICS { |
| left: ::FLOAT, |
| top: ::FLOAT, |
| right: ::FLOAT, |
| bottom: ::FLOAT, |
| }} |
| STRUCT!{struct DWRITE_HIT_TEST_METRICS { |
| textPosition: ::UINT32, |
| length: ::UINT32, |
| left: ::FLOAT, |
| top: ::FLOAT, |
| width: ::FLOAT, |
| height: ::FLOAT, |
| bidiLevel: ::UINT32, |
| isText: ::BOOL, |
| isTrimmed: ::BOOL, |
| }} |
| RIDL!{interface IDWriteInlineObject(IDWriteInlineObjectVtbl): IUnknown(IUnknownVtbl) { |
| fn Draw( |
| &mut self, clientDrawingContext: *mut ::c_void, renderer: *mut IDWriteTextRenderer, |
| originX: ::FLOAT, originY: ::FLOAT, isSideways: ::BOOL, isRightToLeft: ::BOOL, |
| clientDrawingEffect: *mut ::IUnknown |
| ) -> ::HRESULT, |
| fn GetMetrics(&mut self, metrics: *mut DWRITE_INLINE_OBJECT_METRICS) -> ::HRESULT, |
| fn GetOverhangMetrics(&mut self, overhangs: *mut DWRITE_OVERHANG_METRICS) -> ::HRESULT, |
| fn GetBreakConditions( |
| &mut self, breakConditionBefore: *mut DWRITE_BREAK_CONDITION, |
| breakConditionAfter: *mut DWRITE_BREAK_CONDITION |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWritePixelSnapping(IDWritePixelSnappingVtbl): IUnknown(IUnknownVtbl) { |
| fn IsPixelSnappingDisabled( |
| &mut self, clientDrawingContext: *mut ::c_void, isDisabled: *mut ::BOOL |
| ) -> ::HRESULT, |
| fn GetCurrentTransform( |
| &mut self, clientDrawingContext: *mut ::c_void, transform: *mut DWRITE_MATRIX |
| ) -> ::HRESULT, |
| fn GetPixelsPerDip( |
| &mut self, clientDrawingContext: *mut ::c_void, pixelsPerDip: *mut ::FLOAT |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteTextRenderer(IDWriteTextRendererVtbl): |
| IDWritePixelSnapping(IDWritePixelSnappingVtbl) { |
| fn DrawGlyphRun( |
| &mut self, clientDrawingContext: *mut ::c_void, baselineOriginX: ::FLOAT, |
| baselineOriginY: ::FLOAT, measuringMode: ::DWRITE_MEASURING_MODE, |
| glyphRun: *const DWRITE_GLYPH_RUN, |
| glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION, |
| clientDrawingEffect: *mut ::IUnknown |
| ) -> ::HRESULT, |
| fn DrawUnderline( |
| &mut self, clientDrawingContext: *mut ::c_void, baselineOriginX: ::FLOAT, |
| baselineOriginY: ::FLOAT, underline: *const DWRITE_UNDERLINE, |
| clientDrawingEffect: *mut ::IUnknown |
| ) -> ::HRESULT, |
| fn DrawStrikethrough( |
| &mut self, clientDrawingContext: *mut ::c_void, baselineOriginX: ::FLOAT, |
| baselineOriginY: ::FLOAT, strikethrough: *const DWRITE_STRIKETHROUGH, |
| clientDrawingEffect: *mut ::IUnknown |
| ) -> ::HRESULT, |
| fn DrawInlineObject( |
| &mut self, clientDrawingContext: *mut ::c_void, baselineOriginX: ::FLOAT, |
| baselineOriginY: ::FLOAT, inlineObject: *mut IDWriteInlineObject, |
| isSideways: ::BOOL, isRightToLeft: ::BOOL, clientDrawingEffect: *mut ::IUnknown |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteTextLayout(IDWriteTextLayoutVtbl): |
| IDWriteTextFormat(IDWriteTextFormatVtbl) { |
| fn SetMaxWidth(&mut self, maxWidth: ::FLOAT) -> ::HRESULT, |
| fn SetMaxHeight(&mut self, maxHeight: ::FLOAT) -> ::HRESULT, |
| fn SetFontCollection( |
| &mut self, fontCollection: *mut IDWriteFontCollection, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetFontFamilyName( |
| &mut self, fontFamilyName: *const ::WCHAR, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetFontWeight( |
| &mut self, fontWeight: DWRITE_FONT_WEIGHT, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetFontStyle( |
| &mut self, fontStyle: DWRITE_FONT_STYLE, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetFontStretch( |
| &mut self, fontStretch: DWRITE_FONT_STRETCH, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetFontSize(&mut self, fontSize: ::FLOAT, textRange: DWRITE_TEXT_RANGE) -> ::HRESULT, |
| fn SetUnderline(&mut self, hasUnderline: ::BOOL, textRange: DWRITE_TEXT_RANGE) -> ::HRESULT, |
| fn SetStrikethrough( |
| &mut self, hasStrikethrough: ::BOOL, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetDrawingEffect( |
| &mut self, drawingEffect: *mut ::IUnknown, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetInlineObject( |
| &mut self, inlineObject: *mut IDWriteInlineObject, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetTypography( |
| &mut self, typography: *mut IDWriteTypography, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn SetLocaleName( |
| &mut self, localeName: *const ::WCHAR, textRange: DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetMaxWidth(&mut self) -> ::FLOAT, |
| fn GetMaxHeight(&mut self) -> ::FLOAT, |
| fn GetFontCollection( |
| &mut self, currentPosition: ::UINT32, fontCollection: *mut *mut IDWriteFontCollection, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetFontFamilyNameLength( |
| &mut self, currentPosition: ::UINT32, nameLength: *mut ::UINT32, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetFontFamilyName( |
| &mut self, currentPosition: ::UINT32, fontFamilyName: *mut ::WCHAR, |
| nameSize: ::UINT32, textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetFontWeight( |
| &mut self, currentPosition: ::UINT32, fontWeight: *mut DWRITE_FONT_WEIGHT, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetFontStyle( |
| &mut self, currentPosition: ::UINT32, fontStyle: *mut DWRITE_FONT_STYLE, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetFontStretch( |
| &mut self, currentPosition: ::UINT32, fontStretch: *mut DWRITE_FONT_STRETCH, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetFontSize( |
| &mut self, currentPosition: ::UINT32, fontSize: *mut ::FLOAT, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetUnderline( |
| &mut self, currentPosition: ::UINT32, hasUnderline: *mut ::BOOL, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetStrikethrough( |
| &mut self, currentPosition: ::UINT32, hasStrikethrough: *mut ::BOOL, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetDrawingEffect( |
| &mut self, currentPosition: ::UINT32, drawingEffect: *mut *mut ::IUnknown, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetInlineObject( |
| &mut self, currentPosition: ::UINT32, inlineObject: *mut *mut IDWriteInlineObject, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetTypography( |
| &mut self, currentPosition: ::UINT32, typography: *mut *mut IDWriteTypography, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetLocaleNameLength( |
| &mut self, currentPosition: ::UINT32, nameLength: *mut ::UINT32, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn GetLocaleName( |
| &mut self, currentPosition: ::UINT32, localeName: *mut ::WCHAR, nameSize: ::UINT32, |
| textRange: *mut DWRITE_TEXT_RANGE |
| ) -> ::HRESULT, |
| fn Draw( |
| &mut self, clientDrawingContext: *mut ::c_void, renderer: *mut IDWriteTextRenderer, |
| originX: ::FLOAT, originY: ::FLOAT |
| ) -> ::HRESULT, |
| fn GetLineMetrics( |
| &mut self, lineMetrics: *mut DWRITE_LINE_METRICS, maxLineCount: ::UINT32, |
| actualLineCount: *mut ::UINT32 |
| ) -> ::HRESULT, |
| fn GetMetrics(&mut self, textMetrics: *mut DWRITE_TEXT_METRICS) -> ::HRESULT, |
| fn GetOverhangMetrics(&mut self, overhangs: *mut DWRITE_OVERHANG_METRICS) -> ::HRESULT, |
| fn GetClusterMetrics( |
| &mut self, clusterMetrics: *mut DWRITE_CLUSTER_METRICS, maxClusterCount: ::UINT32, |
| actualClusterCount: *mut ::UINT32 |
| ) -> ::HRESULT, |
| fn DetermineMinWidth(&mut self, minWidth: *mut ::FLOAT) -> ::HRESULT, |
| fn HitTestPoint( |
| &mut self, pointX: ::FLOAT, pointY: ::FLOAT, isTrailingHit: *mut ::BOOL, |
| isInside: *mut ::BOOL, hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS |
| ) -> ::HRESULT, |
| fn HitTestTextPosition( |
| &mut self, textPosition: ::UINT32, isTrailingHit: ::BOOL, pointX: *mut ::FLOAT, |
| pointY: *mut ::FLOAT, hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS |
| ) -> ::HRESULT, |
| fn HitTestTextRange( |
| &mut self, textPosition: ::UINT32, textLength: ::UINT32, originX: ::FLOAT, |
| originY: ::FLOAT, hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS, |
| maxHitTestMetricsCount: ::UINT32, actualHitTestMetricsCount: *mut ::UINT32 |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteBitmapRenderTarget(IDWriteBitmapRenderTargetVtbl): IUnknown(IUnknownVtbl) { |
| fn DrawGlyphRun( |
| &mut self, baselineOriginX: ::FLOAT, baselineOriginY: ::FLOAT, |
| measuringMode: ::DWRITE_MEASURING_MODE, glyphRun: *const ::DWRITE_GLYPH_RUN, |
| renderingParams: *mut IDWriteRenderingParams, textColor: ::COLORREF, |
| blackBoxRect: *mut ::RECT |
| ) -> ::HRESULT, |
| fn GetMemoryDC(&mut self) -> ::HDC, |
| fn GetPixelsPerDip(&mut self) -> ::FLOAT, |
| fn SetPixelsPerDip(&mut self, pixelsPerDip: ::FLOAT) -> ::HRESULT, |
| fn GetCurrentTransform(&mut self, transform: *mut DWRITE_MATRIX) -> ::HRESULT, |
| fn SetCurrentTransform(&mut self, transform: *const DWRITE_MATRIX) -> ::HRESULT, |
| fn GetSize(&mut self, size: *mut ::SIZE) -> ::HRESULT, |
| fn Resize(&mut self, width: ::UINT32, height: ::UINT32) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteGdiInterop(IDWriteGdiInteropVtbl): IUnknown(IUnknownVtbl) { |
| fn CreateFontFromLOGFONT( |
| &mut self, logFont: *const ::LOGFONTW, font: *mut *mut IDWriteFont |
| ) -> ::HRESULT, |
| fn ConvertFontToLOGFONT( |
| &mut self, font: *mut IDWriteFont, logFont: *mut ::LOGFONTW, isSystemFont: *mut ::BOOL |
| ) -> ::HRESULT, |
| fn ConvertFontFaceToLOGFONT( |
| &mut self, font: *mut IDWriteFontFace, logFont: *mut ::LOGFONTW |
| ) -> ::HRESULT, |
| fn CreateFontFaceFromHdc( |
| &mut self, hdc: ::HDC, fontFace: *mut *mut IDWriteFontFace |
| ) -> ::HRESULT, |
| fn CreateBitmapRenderTarget( |
| &mut self, hdc: ::HDC, width: ::UINT32, height: ::UINT32, |
| renderTarget: *mut *mut IDWriteBitmapRenderTarget |
| ) -> ::HRESULT |
| }} |
| ENUM!{enum DWRITE_TEXTURE_TYPE { |
| DWRITE_TEXTURE_ALIASED_1x1 = 0, |
| DWRITE_TEXTURE_CLEARTYPE_3x1 = 1, |
| }} |
| pub const DWRITE_ALPHA_MAX: ::BYTE = 255; |
| RIDL!{interface IDWriteGlyphRunAnalysis(IDWriteGlyphRunAnalysisVtbl): IUnknown(IUnknownVtbl) { |
| fn GetAlphaTextureBounds( |
| &mut self, textureType: DWRITE_TEXTURE_TYPE, textureBounds: *mut ::RECT |
| ) -> ::HRESULT, |
| fn CreateAlphaTexture( |
| &mut self, textureType: DWRITE_TEXTURE_TYPE, textureBounds: *const ::RECT, |
| alphaValues: *mut ::BYTE, bufferSize: ::UINT32 |
| ) -> ::HRESULT, |
| fn GetAlphaBlendParams( |
| &mut self, renderingParams: *mut IDWriteRenderingParams, blendGamma: *mut ::FLOAT, |
| blendEnhancedContrast: *mut ::FLOAT, blendClearTypeLevel: *mut ::FLOAT |
| ) -> ::HRESULT |
| }} |
| RIDL!{interface IDWriteFactory(IDWriteFactoryVtbl): IUnknown(IUnknownVtbl) { |
| fn GetSystemFontCollection( |
| &mut self, fontCollection: *mut *mut IDWriteFontCollection, checkForUpdates: ::BOOL |
| ) -> ::HRESULT, |
| fn CreateCustomFontCollection( |
| &mut self, collectionLoader: *mut IDWriteFontCollectionLoader, |
| collectionKey: *const ::c_void, collectionKeySize: ::UINT32, |
| fontCollection: *mut *mut IDWriteFontCollection |
| ) -> ::HRESULT, |
| fn RegisterFontCollectionLoader( |
| &mut self, fontCollectionLoader: *mut IDWriteFontCollectionLoader |
| ) -> ::HRESULT, |
| fn UnregisterFontCollectionLoader( |
| &mut self, fontCollectionLoader: *mut IDWriteFontCollectionLoader |
| ) -> ::HRESULT, |
| fn CreateFontFileReference( |
| &mut self, filePath: *const ::WCHAR, lastWriteTime: *const ::FILETIME, |
| fontFile: *mut *mut IDWriteFontFile |
| ) -> ::HRESULT, |
| fn CreateCustomFontFileReference( |
| &mut self, fontFileReferenceKey: *const ::c_void, fontFileReferenceKeySize: ::UINT32, |
| fontFileLoader: *mut IDWriteFontFileLoader, fontFile: *mut *mut IDWriteFontFile |
| ) -> ::HRESULT, |
| fn CreateFontFace( |
| &mut self, fontFaceType: DWRITE_FONT_FACE_TYPE, numberOfFiles: ::UINT32, |
| fontFiles: *const *mut IDWriteFontFile, faceIndex: ::UINT32, |
| fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS, fontFace: *mut *mut IDWriteFontFace |
| ) -> ::HRESULT, |
| fn CreateRenderingParams( |
| &mut self, renderingParams: *mut *mut IDWriteRenderingParams |
| ) -> ::HRESULT, |
| fn CreateMonitorRenderingParams( |
| &mut self, monitor: ::HMONITOR, renderingParams: *mut *mut IDWriteRenderingParams |
| ) -> ::HRESULT, |
| fn CreateCustomRenderingParams( |
| &mut self, gamma: ::FLOAT, enhancedContrast: ::FLOAT, clearTypeLevel: ::FLOAT, |
| pixelGeometry: DWRITE_PIXEL_GEOMETRY, renderingMode: DWRITE_RENDERING_MODE, |
| renderingParams: *mut *mut IDWriteRenderingParams |
| ) -> ::HRESULT, |
| fn RegisterFontFileLoader( |
| &mut self, fontFileLoader: *mut IDWriteFontFileLoader |
| ) -> ::HRESULT, |
| fn UnregisterFontFileLoader( |
| &mut self, fontFileLoader: *mut IDWriteFontFileLoader |
| ) -> ::HRESULT, |
| fn CreateTextFormat( |
| &mut self, fontFamilyName: *const ::WCHAR, fontCollection: *mut IDWriteFontCollection, |
| fontWeight: DWRITE_FONT_WEIGHT, fontStyle: DWRITE_FONT_STYLE, |
| fontStretch: DWRITE_FONT_STRETCH, fontSize: ::FLOAT, localeName: *const ::WCHAR, |
| textFormat: *mut *mut IDWriteTextFormat |
| ) -> ::HRESULT, |
| fn CreateTypography(&mut self, typography: *mut *mut IDWriteTypography) -> ::HRESULT, |
| fn GetGdiInterop(&mut self, gdiInterop: *mut *mut IDWriteGdiInterop) -> ::HRESULT, |
| fn CreateTextLayout( |
| &mut self, string: *const ::WCHAR, stringLength: ::UINT32, |
| textFormat: *mut IDWriteTextFormat, maxWidth: ::FLOAT, maxHeight: ::FLOAT, |
| textLayout: *mut *mut IDWriteTextLayout |
| ) -> ::HRESULT, |
| fn CreateGdiCompatibleTextLayout( |
| &mut self, string: *const ::WCHAR, stringLength: ::UINT32, |
| textFormat: *mut IDWriteTextFormat, layoutWidth: ::FLOAT, layoutHeight: ::FLOAT, |
| pixelsPerDip: ::FLOAT, transform: *const DWRITE_MATRIX, useGdiNatrual: ::BOOL, |
| textLayout: *mut *mut IDWriteTextLayout |
| ) -> ::HRESULT, |
| fn CreateEllipsisTrimmingSign( |
| &mut self, textFormat: *mut IDWriteTextFormat, trimmingSign: *mut *mut IDWriteInlineObject |
| ) -> ::HRESULT, |
| fn CreateTextAnalyzer(&mut self, textAnalyzer: *mut *mut IDWriteTextAnalyzer) -> ::HRESULT, |
| fn CreateNumberSubstitution( |
| &mut self, substitutionMethod: DWRITE_NUMBER_SUBSTITUTION_METHOD, |
| localeName: *const ::WCHAR, ignoreUserOverride: ::BOOL, |
| numberSubstitution: *mut *mut IDWriteNumberSubstitution |
| ) -> ::HRESULT, |
| fn CreateGlyphRunAnalysis( |
| &mut self, glyphRun: *const DWRITE_GLYPH_RUN, pixelsPerDip: ::FLOAT, |
| transform: *const DWRITE_MATRIX, renderingMode: DWRITE_RENDERING_MODE, |
| measuringMode: ::DWRITE_MEASURING_MODE, baselineOriginX: ::FLOAT, |
| baselineOriginY: ::FLOAT, glyphRunAnalysis: *mut *mut IDWriteGlyphRunAnalysis |
| ) -> ::HRESULT |
| }} |
| pub const FACILITY_DWRITE: ::HRESULT = 0x898; |
| pub const DWRITE_ERR_BASE: ::HRESULT = 0x5000; |
| #[inline] |
| pub fn MAKE_DWRITE_HR(severity: ::HRESULT, code: ::HRESULT) -> ::HRESULT { |
| ::MAKE_HRESULT(severity, FACILITY_DWRITE, DWRITE_ERR_BASE + code) |
| } |
| #[inline] |
| pub fn MAKE_DWRITE_HR_ERR(code: ::HRESULT) -> ::HRESULT { |
| MAKE_DWRITE_HR(::SEVERITY_ERROR, code) |
| } |