1 // Licensed under the Apache License, Version 2.0 2 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license 3 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option. 4 // All files in the project carrying such notice may not be copied, modified, or distributed 5 // except according to those terms. 6 //! DirectX Typography Services public API definitions. 7 use ctypes::c_void; 8 use shared::basetsd::{INT16, INT32, UINT16, UINT32, UINT64, UINT8}; 9 use shared::guiddef::REFIID; 10 use shared::minwindef::{BOOL, BYTE, FILETIME, FLOAT}; 11 use shared::windef::{COLORREF, HDC, HMONITOR, RECT, SIZE}; 12 use shared::winerror::SEVERITY_ERROR; 13 use um::d2d1::ID2D1SimplifiedGeometrySink; 14 use um::dcommon::DWRITE_MEASURING_MODE; 15 use um::unknwnbase::{IUnknown, IUnknownVtbl}; 16 use um::wingdi::LOGFONTW; 17 use um::winnt::{HRESULT, WCHAR}; 18 ENUM!{enum DWRITE_FONT_FILE_TYPE { 19 DWRITE_FONT_FILE_TYPE_UNKNOWN, 20 DWRITE_FONT_FILE_TYPE_CFF, 21 DWRITE_FONT_FILE_TYPE_TRUETYPE, 22 DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION, 23 DWRITE_FONT_FILE_TYPE_TYPE1_PFM, 24 DWRITE_FONT_FILE_TYPE_TYPE1_PFB, 25 DWRITE_FONT_FILE_TYPE_VECTOR, 26 DWRITE_FONT_FILE_TYPE_BITMAP, 27 DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION, 28 }} 29 ENUM!{enum DWRITE_FONT_FACE_TYPE { 30 DWRITE_FONT_FACE_TYPE_CFF, 31 DWRITE_FONT_FACE_TYPE_TRUETYPE, 32 DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION, 33 DWRITE_FONT_FACE_TYPE_TYPE1, 34 DWRITE_FONT_FACE_TYPE_VECTOR, 35 DWRITE_FONT_FACE_TYPE_BITMAP, 36 DWRITE_FONT_FACE_TYPE_UNKNOWN, 37 DWRITE_FONT_FACE_TYPE_RAW_CFF, 38 DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION, 39 }} 40 ENUM!{enum DWRITE_FONT_SIMULATIONS { 41 DWRITE_FONT_SIMULATIONS_NONE = 0x0000, 42 DWRITE_FONT_SIMULATIONS_BOLD = 0x0001, 43 DWRITE_FONT_SIMULATIONS_OBLIQUE = 0x0002, 44 }} 45 ENUM!{enum DWRITE_FONT_WEIGHT { 46 DWRITE_FONT_WEIGHT_THIN = 100, 47 DWRITE_FONT_WEIGHT_EXTRA_LIGHT = 200, 48 DWRITE_FONT_WEIGHT_ULTRA_LIGHT = 200, 49 DWRITE_FONT_WEIGHT_LIGHT = 300, 50 DWRITE_FONT_WEIGHT_SEMI_LIGHT = 350, 51 DWRITE_FONT_WEIGHT_NORMAL = 400, 52 DWRITE_FONT_WEIGHT_REGULAR = 400, 53 DWRITE_FONT_WEIGHT_MEDIUM = 500, 54 DWRITE_FONT_WEIGHT_DEMI_BOLD = 600, 55 DWRITE_FONT_WEIGHT_SEMI_BOLD = 600, 56 DWRITE_FONT_WEIGHT_BOLD = 700, 57 DWRITE_FONT_WEIGHT_EXTRA_BOLD = 800, 58 DWRITE_FONT_WEIGHT_ULTRA_BOLD = 800, 59 DWRITE_FONT_WEIGHT_BLACK = 900, 60 DWRITE_FONT_WEIGHT_HEAVY = 900, 61 DWRITE_FONT_WEIGHT_EXTRA_BLACK = 950, 62 DWRITE_FONT_WEIGHT_ULTRA_BLACK = 950, 63 }} 64 ENUM!{enum DWRITE_FONT_STRETCH { 65 DWRITE_FONT_STRETCH_UNDEFINED = 0, 66 DWRITE_FONT_STRETCH_ULTRA_CONDENSED = 1, 67 DWRITE_FONT_STRETCH_EXTRA_CONDENSED = 2, 68 DWRITE_FONT_STRETCH_CONDENSED = 3, 69 DWRITE_FONT_STRETCH_SEMI_CONDENSED = 4, 70 DWRITE_FONT_STRETCH_NORMAL = 5, 71 DWRITE_FONT_STRETCH_MEDIUM = 5, 72 DWRITE_FONT_STRETCH_SEMI_EXPANDED = 6, 73 DWRITE_FONT_STRETCH_EXPANDED = 7, 74 DWRITE_FONT_STRETCH_EXTRA_EXPANDED = 8, 75 DWRITE_FONT_STRETCH_ULTRA_EXPANDED = 9, 76 }} 77 ENUM!{enum DWRITE_FONT_STYLE { 78 DWRITE_FONT_STYLE_NORMAL, 79 DWRITE_FONT_STYLE_OBLIQUE, 80 DWRITE_FONT_STYLE_ITALIC, 81 }} 82 ENUM!{enum DWRITE_INFORMATIONAL_STRING_ID { 83 DWRITE_INFORMATIONAL_STRING_NONE, 84 DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE, 85 DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS, 86 DWRITE_INFORMATIONAL_STRING_TRADEMARK, 87 DWRITE_INFORMATIONAL_STRING_MANUFACTURER, 88 DWRITE_INFORMATIONAL_STRING_DESIGNER, 89 DWRITE_INFORMATIONAL_STRING_DESIGNER_URL, 90 DWRITE_INFORMATIONAL_STRING_DESCRIPTION, 91 DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL, 92 DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION, 93 DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL, 94 DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES, 95 DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES, 96 DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES, 97 DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES, 98 DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT, 99 DWRITE_INFORMATIONAL_STRING_FULL_NAME, 100 DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME, 101 DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME, 102 DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME, 103 DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG, 104 DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG, 105 }} 106 STRUCT!{struct DWRITE_FONT_METRICS { 107 designUnitsPerEm: UINT16, 108 ascent: UINT16, 109 descent: UINT16, 110 lineGap: INT16, 111 capHeight: UINT16, 112 xHeight: UINT16, 113 underlinePosition: INT16, 114 underlineThickness: UINT16, 115 strikethroughPosition: INT16, 116 strikethroughThickness: UINT16, 117 }} 118 STRUCT!{struct DWRITE_GLYPH_METRICS { 119 leftSideBearing: INT32, 120 advanceWidth: UINT32, 121 rightSideBearing: INT32, 122 topSideBearing: INT32, 123 advanceHeight: UINT32, 124 bottomSideBearing: INT32, 125 verticalOriginY: INT32, 126 }} 127 STRUCT!{struct DWRITE_GLYPH_OFFSET { 128 advanceOffset: FLOAT, 129 ascenderOffset: FLOAT, 130 }} 131 ENUM!{enum DWRITE_FACTORY_TYPE { 132 DWRITE_FACTORY_TYPE_SHARED, 133 DWRITE_FACTORY_TYPE_ISOLATED, 134 }} 135 RIDL!{#[uuid(0x727cad4e, 0xd6af, 0x4c9e, 0x8a, 0x08, 0xd6, 0x95, 0xb1, 0x1c, 0xaa, 0x49)] 136 interface IDWriteFontFileLoader(IDWriteFontFileLoaderVtbl): IUnknown(IUnknownVtbl) { 137 fn CreateStreamFromKey( 138 fontFileReferenceKey: *const c_void, 139 fontFileReferenceKeySize: UINT32, 140 fontFileStream: *mut *mut IDWriteFontFileStream, 141 ) -> HRESULT, 142 }} 143 RIDL!{#[uuid(0xb2d9f3ec, 0xc9fe, 0x4a11, 0xa2, 0xec, 0xd8, 0x62, 0x08, 0xf7, 0xc0, 0xa2)] 144 interface IDWriteLocalFontFileLoader(IDWriteLocalFontFileLoaderVtbl): 145 IDWriteFontFileLoader(IDWriteFontFileLoaderVtbl) { 146 fn GetFilePathLengthFromKey( 147 fontFileReferenceKey: *const c_void, 148 fontFileReferenceKeySize: UINT32, 149 filePathLength: *mut UINT32, 150 ) -> HRESULT, 151 fn GetFilePathFromKey( 152 fontFileReferenceKey: *const c_void, 153 fontFileReferenceKeySize: UINT32, 154 filePath: *mut WCHAR, 155 filePathSize: UINT32, 156 ) -> HRESULT, 157 fn GetLastWriteTimeFromKey( 158 fontFileReferenceKey: *const c_void, 159 fontFileReferenceKeySize: UINT32, 160 lastWriteTime: *mut FILETIME, 161 ) -> HRESULT, 162 }} 163 RIDL!{#[uuid(0x6d4865fe, 0x0ab8, 0x4d91, 0x8f, 0x62, 0x5d, 0xd6, 0xbe, 0x34, 0xa3, 0xe0)] 164 interface IDWriteFontFileStream(IDWriteFontFileStreamVtbl): IUnknown(IUnknownVtbl) { 165 fn ReadFileFragment( 166 fragmentStart: *mut *const c_void, 167 fileOffset: UINT64, 168 fragmentSize: UINT64, 169 fragmentContext: *mut *mut c_void, 170 ) -> HRESULT, 171 fn ReleaseFileFragment( 172 fragmentContext: *mut c_void, 173 ) -> (), 174 fn GetFileSize( 175 fileSize: *mut UINT64, 176 ) -> HRESULT, 177 fn GetLastWriteTime( 178 lastWriteTime: *mut UINT64, 179 ) -> HRESULT, 180 }} 181 ENUM!{enum DWRITE_OUTLINE_THRESHOLD { 182 DWRITE_OUTLINE_THRESHOLD_ANTIALIASED, 183 DWRITE_OUTLINE_THRESHOLD_ALIASED, 184 }} 185 STRUCT!{struct DWRITE_FONT_METRICS1 { 186 designUnitsPerEm: UINT16, 187 ascent: UINT16, 188 descent: UINT16, 189 lineGap: INT16, 190 capHeight: UINT16, 191 xHeight: UINT16, 192 underlinePosition: INT16, 193 underlineThickness: UINT16, 194 strikethroughPosition: INT16, 195 strikethroughThickness: UINT16, 196 glyphBoxLeft: INT16, 197 glyphBoxTop: INT16, 198 glyphBoxRight: INT16, 199 glyphBoxBottom: INT16, 200 subscriptPositionX: INT16, 201 subscriptPositionY: INT16, 202 subscriptSizeX: INT16, 203 subscriptSizeY: INT16, 204 superscriptPositionX: INT16, 205 superscriptPositionY: INT16, 206 superscriptSizeX: INT16, 207 superscriptSizeY: INT16, 208 hasTypographicMetrics: BOOL, 209 }} 210 STRUCT!{struct DWRITE_UNICODE_RANGE { 211 first: UINT32, 212 last: UINT32, 213 }} 214 STRUCT!{struct DWRITE_CARET_METRICS { 215 slopeRise: INT16, 216 slopeRun: INT16, 217 offset: INT16, 218 }} 219 #[inline] 220 pub fn DWRITE_MAKE_OPENTYPE_TAG(a: u8, b: u8, c: u8, d: u8) -> u32 { 221 ((d as u32) << 24) | ((c as u32) << 16) | ((b as u32) << 8) | (a as u32) 222 } 223 RIDL!{#[uuid(0x739d886a, 0xcef5, 0x47dc, 0x87, 0x69, 0x1a, 0x8b, 0x41, 0xbe, 0xbb, 0xb0)] 224 interface IDWriteFontFile(IDWriteFontFileVtbl): IUnknown(IUnknownVtbl) { 225 fn GetReferenceKey( 226 fontFileReferenceKey: *mut *const c_void, 227 fontFileReferenceKeySize: *mut UINT32, 228 ) -> HRESULT, 229 fn GetLoader( 230 fontFileLoader: *mut *mut IDWriteFontFileLoader, 231 ) -> HRESULT, 232 fn Analyze( 233 isSupportedFontType: *mut BOOL, 234 fontFileType: *mut DWRITE_FONT_FILE_TYPE, 235 fontFaceType: *mut DWRITE_FONT_FACE_TYPE, 236 numberOfFaces: *mut UINT32, 237 ) -> HRESULT, 238 }} 239 ENUM!{enum DWRITE_PIXEL_GEOMETRY { 240 DWRITE_PIXEL_GEOMETRY_FLAT, 241 DWRITE_PIXEL_GEOMETRY_RGB, 242 DWRITE_PIXEL_GEOMETRY_BGR, 243 }} 244 ENUM!{enum DWRITE_RENDERING_MODE { 245 DWRITE_RENDERING_MODE_DEFAULT, 246 DWRITE_RENDERING_MODE_ALIASED, 247 DWRITE_RENDERING_MODE_GDI_CLASSIC, 248 DWRITE_RENDERING_MODE_GDI_NATURAL, 249 DWRITE_RENDERING_MODE_NATURAL, 250 DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, 251 DWRITE_RENDERING_MODE_OUTLINE, 252 DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = DWRITE_RENDERING_MODE_GDI_CLASSIC, 253 DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE_GDI_NATURAL, 254 DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE_NATURAL, 255 DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC, 256 }} 257 STRUCT!{struct DWRITE_MATRIX { 258 m11: FLOAT, 259 m12: FLOAT, 260 m21: FLOAT, 261 m22: FLOAT, 262 dx: FLOAT, 263 dy: FLOAT, 264 }} 265 RIDL!{#[uuid(0x2f0da53a, 0x2add, 0x47cd, 0x82, 0xee, 0xd9, 0xec, 0x34, 0x68, 0x8e, 0x75)] 266 interface IDWriteRenderingParams(IDWriteRenderingParamsVtbl): IUnknown(IUnknownVtbl) { 267 fn GetGamma() -> FLOAT, 268 fn GetEnhancedContrast() -> FLOAT, 269 fn GetClearTypeLevel() -> FLOAT, 270 fn GetPixelGeometry() -> DWRITE_PIXEL_GEOMETRY, 271 fn GetRenderingMode() -> DWRITE_RENDERING_MODE, 272 }} 273 pub type IDWriteGeometrySink = ID2D1SimplifiedGeometrySink; 274 RIDL!{#[uuid(0x5f49804d, 0x7024, 0x4d43, 0xbf, 0xa9, 0xd2, 0x59, 0x84, 0xf5, 0x38, 0x49)] 275 interface IDWriteFontFace(IDWriteFontFaceVtbl): IUnknown(IUnknownVtbl) { 276 fn GetType() -> DWRITE_FONT_FACE_TYPE, 277 fn GetFiles( 278 numberOfFiles: *mut UINT32, 279 fontFiles: *mut *mut IDWriteFontFile, 280 ) -> HRESULT, 281 fn GetIndex() -> UINT32, 282 fn GetSimulations() -> DWRITE_FONT_SIMULATIONS, 283 fn IsSymbolFont() -> BOOL, 284 fn GetMetrics( 285 fontFaceMetrics: *mut DWRITE_FONT_METRICS, 286 ) -> (), 287 fn GetGlyphCount() -> UINT16, 288 fn GetDesignGlyphMetrics( 289 glyphIndices: *const UINT16, 290 glyphCount: UINT32, 291 glyphMetrics: *mut DWRITE_GLYPH_METRICS, 292 isSideways: BOOL, 293 ) -> HRESULT, 294 fn GetGlyphIndices( 295 codePoints: *const UINT32, 296 codePointCount: UINT32, 297 glyphIndices: *mut UINT16, 298 ) -> HRESULT, 299 fn TryGetFontTable( 300 openTypeTableTag: UINT32, 301 tableData: *mut *const c_void, 302 tableSize: *mut UINT32, 303 tableContext: *mut *mut c_void, 304 exists: *mut BOOL, 305 ) -> HRESULT, 306 fn ReleaseFontTable( 307 tableContext: *mut c_void, 308 ) -> HRESULT, 309 fn GetGlyphRunOutline( 310 emSize: FLOAT, 311 glyphIndices: *const UINT16, 312 glyphAdvances: *const FLOAT, 313 glyphOffsets: *const DWRITE_GLYPH_OFFSET, 314 glyphCount: UINT32, 315 isSideways: BOOL, 316 isRightToLeft: BOOL, 317 geometrySink: *mut IDWriteGeometrySink, 318 ) -> HRESULT, 319 fn GetRecommendedRenderingMode( 320 emSize: FLOAT, 321 pixelsPerDip: FLOAT, 322 measuringMode: DWRITE_MEASURING_MODE, 323 renderingParams: *mut IDWriteRenderingParams, 324 renderingMode: *mut DWRITE_RENDERING_MODE, 325 ) -> HRESULT, 326 fn GetGdiCompatibleMetrics( 327 emSize: FLOAT, 328 pixelsPerDip: FLOAT, 329 transform: *const DWRITE_MATRIX, 330 fontFaceMetrics: *mut DWRITE_FONT_METRICS, 331 ) -> HRESULT, 332 fn GetGdiCompatibleGlyphMetrics( 333 enSize: FLOAT, 334 pixelsPerDip: FLOAT, 335 transform: *const DWRITE_MATRIX, 336 useGdiNatrual: BOOL, 337 glyphIndices: *const UINT16, 338 glyphCount: UINT32, 339 glyphMetrics: *mut DWRITE_GLYPH_METRICS, 340 isSideways: BOOL, 341 ) -> HRESULT, 342 }} 343 RIDL!{#[uuid(0xa71efdb4, 0x9fdb, 0x4838, 0xad, 0x90, 0xcf, 0xc3, 0xbe, 0x8c, 0x3d, 0xaf)] 344 interface IDWriteFontFace1(IDWriteFontFace1Vtbl): IDWriteFontFace(IDWriteFontFaceVtbl) { 345 fn GetMetrics( 346 fontFaceMetrics: *mut DWRITE_FONT_METRICS1, 347 ) -> (), 348 fn GetGdiCompatibleMetrics( 349 emSize: FLOAT, 350 pixelsPerDip: FLOAT, 351 transform: *const DWRITE_MATRIX, 352 fontFaceMetrics: *mut DWRITE_FONT_METRICS1, 353 ) -> HRESULT, 354 fn GetCaretMetrics( 355 caretMetrics: *mut DWRITE_CARET_METRICS, 356 ) -> (), 357 fn GetUnicodeRanges( 358 maxRangeCount: UINT32, 359 unicodeRanges: *mut DWRITE_UNICODE_RANGE, 360 actualRangeCount: *mut UINT32, 361 ) -> HRESULT, 362 fn IsMonoSpacedFont() -> BOOL, 363 fn GetDesignGlyphAdvances( 364 glyphCount: UINT32, 365 glyphIndices: *const UINT16, 366 glyphAdvances: *mut INT32, 367 isSideways: BOOL, 368 ) -> HRESULT, 369 fn GetGdiCompatibleGlyphAdvance( 370 emSize: FLOAT, 371 pixelsPerDip: FLOAT, 372 transform: *const DWRITE_MATRIX, 373 useGdiNatural: BOOL, 374 isSideways: BOOL, 375 glyphCount: UINT32, 376 glyphIndices: *const UINT16, 377 glyphAdvances: *mut INT32, 378 ) -> HRESULT, 379 fn GetKerningPairAdjustments( 380 glyphCount: UINT32, 381 glyphIndices: *const UINT16, 382 glyphAdvanceAdjustments: *mut INT32, 383 ) -> HRESULT, 384 fn HasKerningPairs() -> BOOL, 385 fn GetRecommendedRenderingMode( 386 fontEmSize: FLOAT, 387 dpiX: FLOAT, 388 dpiY: FLOAT, 389 transform: *const DWRITE_MATRIX, 390 isSideways: BOOL, 391 outlineThreshold: DWRITE_OUTLINE_THRESHOLD, 392 measuringMode: DWRITE_MEASURING_MODE, 393 renderingMode: *mut DWRITE_RENDERING_MODE, 394 ) -> HRESULT, 395 fn GetVerticalGlyphVariants( 396 nominalGlyphIndices: *const UINT16, 397 verticalGlyphIndices: *mut UINT16, 398 ) -> HRESULT, 399 fn HasVerticalGlyphVariants() -> BOOL, 400 }} 401 RIDL!{#[uuid(0xcca920e4, 0x52f0, 0x492b, 0xbf, 0xa8, 0x29, 0xc7, 0x2e, 0xe0, 0xa4, 0x68)] 402 interface IDWriteFontCollectionLoader(IDWriteFontCollectionLoaderVtbl): 403 IUnknown(IUnknownVtbl) { 404 fn CreateEnumeratorFromKey( 405 factory: *mut IDWriteFactory, 406 collectionKey: *const c_void, 407 collectionKeySize: UINT32, 408 fontFileEnumerator: *mut *mut IDWriteFontFileEnumerator, 409 ) -> HRESULT, 410 }} 411 RIDL!{#[uuid(0x72755049, 0x5ff7, 0x435d, 0x83, 0x48, 0x4b, 0xe9, 0x7c, 0xfa, 0x6c, 0x7c)] 412 interface IDWriteFontFileEnumerator(IDWriteFontFileEnumeratorVtbl): IUnknown(IUnknownVtbl) { 413 fn MoveNext( 414 hasCurrentFile: *mut BOOL, 415 ) -> HRESULT, 416 fn GetCurrentFontFile( 417 fontFile: *mut *mut IDWriteFontFile, 418 ) -> HRESULT, 419 }} 420 RIDL!{#[uuid(0x08256209, 0x099a, 0x4b34, 0xb8, 0x6d, 0xc2, 0x2b, 0x11, 0x0e, 0x77, 0x71)] 421 interface IDWriteLocalizedStrings(IDWriteLocalizedStringsVtbl): IUnknown(IUnknownVtbl) { 422 fn GetCount() -> UINT32, 423 fn FindLocaleName( 424 localeName: *const WCHAR, 425 index: *mut UINT32, 426 exists: *mut BOOL, 427 ) -> HRESULT, 428 fn GetLocaleNameLength( 429 index: UINT32, 430 length: *mut UINT32, 431 ) -> HRESULT, 432 fn GetLocaleName( 433 index: UINT32, 434 localeName: *mut WCHAR, 435 size: UINT32, 436 ) -> HRESULT, 437 fn GetStringLength( 438 index: UINT32, 439 length: *mut UINT32, 440 ) -> HRESULT, 441 fn GetString( 442 index: UINT32, 443 stringBuffer: *mut WCHAR, 444 size: UINT32, 445 ) -> HRESULT, 446 }} 447 RIDL!{#[uuid(0xa84cee02, 0x3eea, 0x4eee, 0xa8, 0x27, 0x87, 0xc1, 0xa0, 0x2a, 0x0f, 0xcc)] 448 interface IDWriteFontCollection(IDWriteFontCollectionVtbl): IUnknown(IUnknownVtbl) { 449 fn GetFontFamilyCount() -> UINT32, 450 fn GetFontFamily( 451 index: UINT32, 452 fontFamily: *mut *mut IDWriteFontFamily, 453 ) -> HRESULT, 454 fn FindFamilyName( 455 familyName: *const WCHAR, 456 index: *mut UINT32, 457 exists: *mut BOOL, 458 ) -> HRESULT, 459 fn GetFontFromFontFace( 460 fontFace: *mut IDWriteFontFace, 461 font: *mut *mut IDWriteFont, 462 ) -> HRESULT, 463 }} 464 RIDL!{#[uuid(0x1a0d8438, 0x1d97, 0x4ec1, 0xae, 0xf9, 0xa2, 0xfb, 0x86, 0xed, 0x6a, 0xcb)] 465 interface IDWriteFontList(IDWriteFontListVtbl): IUnknown(IUnknownVtbl) { 466 fn GetFontCollection( 467 fontCollection: *mut *mut IDWriteFontCollection, 468 ) -> HRESULT, 469 fn GetFontCount() -> UINT32, 470 fn GetFont( 471 index: UINT32, 472 font: *mut *mut IDWriteFont, 473 ) -> HRESULT, 474 }} 475 RIDL!{#[uuid(0xda20d8ef, 0x812a, 0x4c43, 0x98, 0x02, 0x62, 0xec, 0x4a, 0xbd, 0x7a, 0xdd)] 476 interface IDWriteFontFamily(IDWriteFontFamilyVtbl): IDWriteFontList(IDWriteFontListVtbl) { 477 fn GetFamilyNames( 478 names: *mut *mut IDWriteLocalizedStrings, 479 ) -> HRESULT, 480 fn GetFirstMatchingFont( 481 weight: DWRITE_FONT_WEIGHT, 482 stretch: DWRITE_FONT_STRETCH, 483 style: DWRITE_FONT_STYLE, 484 matchingFont: *mut *mut IDWriteFont, 485 ) -> HRESULT, 486 fn GetMatchingFonts( 487 weight: DWRITE_FONT_WEIGHT, 488 stretch: DWRITE_FONT_STRETCH, 489 style: DWRITE_FONT_STYLE, 490 matchingFonts: *mut *mut IDWriteFontList, 491 ) -> HRESULT, 492 }} 493 RIDL!{#[uuid(0xacd16696, 0x8c14, 0x4f5d, 0x87, 0x7e, 0xfe, 0x3f, 0xc1, 0xd3, 0x27, 0x37)] 494 interface IDWriteFont(IDWriteFontVtbl): IUnknown(IUnknownVtbl) { 495 fn GetFontFamily( 496 fontFamily: *mut *mut IDWriteFontFamily, 497 ) -> HRESULT, 498 fn GetWeight() -> DWRITE_FONT_WEIGHT, 499 fn GetStretch() -> DWRITE_FONT_STRETCH, 500 fn GetStyle() -> DWRITE_FONT_STYLE, 501 fn IsSymbolFont() -> BOOL, 502 fn GetFaceNames( 503 names: *mut *mut IDWriteLocalizedStrings, 504 ) -> HRESULT, 505 fn GetInformationalStrings( 506 informationalStringId: DWRITE_INFORMATIONAL_STRING_ID, 507 informationalStrings: *mut *mut IDWriteLocalizedStrings, 508 exists: *mut BOOL, 509 ) -> HRESULT, 510 fn GetSimulations() -> DWRITE_FONT_SIMULATIONS, 511 fn GetMetrics( 512 fontMetrics: *mut DWRITE_FONT_METRICS, 513 ) -> (), 514 fn HasCharacter( 515 unicodeValue: UINT32, 516 exists: *mut BOOL, 517 ) -> HRESULT, 518 fn CreateFontFace( 519 fontFace: *mut *mut IDWriteFontFace, 520 ) -> HRESULT, 521 }} 522 ENUM!{enum DWRITE_READING_DIRECTION { 523 DWRITE_READING_DIRECTION_LEFT_TO_RIGHT = 0, 524 DWRITE_READING_DIRECTION_RIGHT_TO_LEFT = 1, 525 DWRITE_READING_DIRECTION_TOP_TO_BOTTOM = 2, 526 DWRITE_READING_DIRECTION_BOTTOM_TO_TOP = 3, 527 }} 528 ENUM!{enum DWRITE_FLOW_DIRECTION { 529 DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM = 0, 530 DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP = 1, 531 DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT = 2, 532 DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT = 3, 533 }} 534 ENUM!{enum DWRITE_TEXT_ALIGNMENT { 535 DWRITE_TEXT_ALIGNMENT_LEADING, 536 DWRITE_TEXT_ALIGNMENT_TRAILING, 537 DWRITE_TEXT_ALIGNMENT_CENTER, 538 DWRITE_TEXT_ALIGNMENT_JUSTIFIED, 539 }} 540 ENUM!{enum DWRITE_PARAGRAPH_ALIGNMENT { 541 DWRITE_PARAGRAPH_ALIGNMENT_NEAR, 542 DWRITE_PARAGRAPH_ALIGNMENT_FAR, 543 DWRITE_PARAGRAPH_ALIGNMENT_CENTER, 544 }} 545 ENUM!{enum DWRITE_WORD_WRAPPING { 546 DWRITE_WORD_WRAPPING_WRAP = 0, 547 DWRITE_WORD_WRAPPING_NO_WRAP = 1, 548 DWRITE_WORD_WRAPPING_EMERGENCY_BREAK = 2, 549 DWRITE_WORD_WRAPPING_WHOLE_WORD = 3, 550 DWRITE_WORD_WRAPPING_CHARACTER = 4, 551 }} 552 ENUM!{enum DWRITE_LINE_SPACING_METHOD { 553 DWRITE_LINE_SPACING_METHOD_DEFAULT, 554 DWRITE_LINE_SPACING_METHOD_UNIFORM, 555 DWRITE_LINE_SPACING_METHOD_PROPORTIONAL, 556 }} 557 ENUM!{enum DWRITE_TRIMMING_GRANULARITY { 558 DWRITE_TRIMMING_GRANULARITY_NONE, 559 DWRITE_TRIMMING_GRANULARITY_CHARACTER, 560 DWRITE_TRIMMING_GRANULARITY_WORD, 561 }} 562 ENUM!{enum DWRITE_FONT_FEATURE_TAG { 563 DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = 0x63726661, // 'afrc' 564 DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = 0x63703263, // 'c2pc' 565 DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = 0x63733263, // 'c2sc' 566 DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = 0x746c6163, // 'calt' 567 DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = 0x65736163, // 'case' 568 DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = 0x706d6363, // 'ccmp' 569 DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = 0x67696c63, // 'clig' 570 DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = 0x70737063, // 'cpsp' 571 DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = 0x68777363, // 'cswh' 572 DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = 0x73727563, // 'curs' 573 DWRITE_FONT_FEATURE_TAG_DEFAULT = 0x746c6664, // 'dflt' 574 DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = 0x67696c64, // 'dlig' 575 DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = 0x74707865, // 'expt' 576 DWRITE_FONT_FEATURE_TAG_FRACTIONS = 0x63617266, // 'frac' 577 DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = 0x64697766, // 'fwid' 578 DWRITE_FONT_FEATURE_TAG_HALF_FORMS = 0x666c6168, // 'half' 579 DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = 0x6e6c6168, // 'haln' 580 DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = 0x746c6168, // 'halt' 581 DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = 0x74736968, // 'hist' 582 DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = 0x616e6b68, // 'hkna' 583 DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = 0x67696c68, // 'hlig' 584 DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = 0x64697768, // 'hwid' 585 DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = 0x6f6a6f68, // 'hojo' 586 DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = 0x3430706a, // 'jp04' 587 DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = 0x3837706a, // 'jp78' 588 DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = 0x3338706a, // 'jp83' 589 DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = 0x3039706a, // 'jp90' 590 DWRITE_FONT_FEATURE_TAG_KERNING = 0x6e72656b, // 'kern' 591 DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = 0x6167696c, // 'liga' 592 DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = 0x6d756e6c, // 'lnum' 593 DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = 0x6c636f6c, // 'locl' 594 DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = 0x6b72616d, // 'mark' 595 DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = 0x6b72676d, // 'mgrk' 596 DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = 0x6b6d6b6d, // 'mkmk' 597 DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = 0x746c616e, // 'nalt' 598 DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = 0x6b636c6e, // 'nlck' 599 DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = 0x6d756e6f, // 'onum' 600 DWRITE_FONT_FEATURE_TAG_ORDINALS = 0x6e64726f, // 'ordn' 601 DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = 0x746c6170, // 'palt' 602 DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = 0x70616370, // 'pcap' 603 DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = 0x6d756e70, // 'pnum' 604 DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = 0x64697770, // 'pwid' 605 DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = 0x64697771, // 'qwid' 606 DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = 0x67696c72, // 'rlig' 607 DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = 0x79627572, // 'ruby' 608 DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = 0x746c6173, // 'salt' 609 DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = 0x666e6973, // 'sinf' 610 DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = 0x70636d73, // 'smcp' 611 DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = 0x6c706d73, // 'smpl' 612 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = 0x31307373, // 'ss01' 613 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = 0x32307373, // 'ss02' 614 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = 0x33307373, // 'ss03' 615 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = 0x34307373, // 'ss04' 616 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = 0x35307373, // 'ss05' 617 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = 0x36307373, // 'ss06' 618 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = 0x37307373, // 'ss07' 619 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = 0x38307373, // 'ss08' 620 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = 0x39307373, // 'ss09' 621 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = 0x30317373, // 'ss10' 622 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = 0x31317373, // 'ss11' 623 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = 0x32317373, // 'ss12' 624 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = 0x33317373, // 'ss13' 625 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = 0x34317373, // 'ss14' 626 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = 0x35317373, // 'ss15' 627 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = 0x36317373, // 'ss16' 628 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = 0x37317373, // 'ss17' 629 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = 0x38317373, // 'ss18' 630 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = 0x39317373, // 'ss19' 631 DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = 0x30327373, // 'ss20' 632 DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = 0x73627573, // 'subs' 633 DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = 0x73707573, // 'sups' 634 DWRITE_FONT_FEATURE_TAG_SWASH = 0x68737773, // 'swsh' 635 DWRITE_FONT_FEATURE_TAG_TITLING = 0x6c746974, // 'titl' 636 DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = 0x6d616e74, // 'tnam' 637 DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = 0x6d756e74, // 'tnum' 638 DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = 0x64617274, // 'trad' 639 DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = 0x64697774, // 'twid' 640 DWRITE_FONT_FEATURE_TAG_UNICASE = 0x63696e75, // 'unic' 641 DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING = 0x74726576, // 'vert' 642 DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION = 0x32747276, // 'vrt2' 643 DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = 0x6f72657a, // 'zero' 644 }} 645 STRUCT!{struct DWRITE_TEXT_RANGE { 646 startPosition: UINT32, 647 length: UINT32, 648 }} 649 STRUCT!{struct DWRITE_FONT_FEATURE { 650 nameTag: DWRITE_FONT_FEATURE_TAG, 651 parameter: UINT32, 652 }} 653 STRUCT!{struct DWRITE_TYPOGRAPHIC_FEATURES { 654 features: *mut DWRITE_FONT_FEATURE, 655 featureCount: UINT32, 656 }} 657 STRUCT!{struct DWRITE_TRIMMING { 658 granularity: DWRITE_TRIMMING_GRANULARITY, 659 delimiter: UINT32, 660 delimiterCount: UINT32, 661 }} 662 RIDL!{#[uuid(0x9c906818, 0x31d7, 0x4fd3, 0xa1, 0x51, 0x7c, 0x5e, 0x22, 0x5d, 0xb5, 0x5a)] 663 interface IDWriteTextFormat(IDWriteTextFormatVtbl): IUnknown(IUnknownVtbl) { 664 fn SetTextAlignment( 665 textAlignment: DWRITE_TEXT_ALIGNMENT, 666 ) -> HRESULT, 667 fn SetParagraphAlignment( 668 paragraphAlignment: DWRITE_PARAGRAPH_ALIGNMENT, 669 ) -> HRESULT, 670 fn SetWordWrapping( 671 wordWrapping: DWRITE_WORD_WRAPPING, 672 ) -> HRESULT, 673 fn SetReadingDirection( 674 readingDirection: DWRITE_READING_DIRECTION, 675 ) -> HRESULT, 676 fn SetFlowDirection( 677 flowDirection: DWRITE_FLOW_DIRECTION, 678 ) -> HRESULT, 679 fn SetIncrementalTabStop( 680 incrementalTabStop: FLOAT, 681 ) -> HRESULT, 682 fn SetTrimming( 683 trimmingOptions: *const DWRITE_TRIMMING, 684 trimmingSign: *mut IDWriteInlineObject, 685 ) -> HRESULT, 686 fn SetLineSpacing( 687 lineSpacingMethod: DWRITE_LINE_SPACING_METHOD, 688 lineSpacing: FLOAT, 689 baseLine: FLOAT, 690 ) -> HRESULT, 691 fn GetTextAlignment() -> DWRITE_TEXT_ALIGNMENT, 692 fn GetParagraphAlignment() -> DWRITE_PARAGRAPH_ALIGNMENT, 693 fn GetWordWrapping() -> DWRITE_WORD_WRAPPING, 694 fn GetReadingDirection() -> DWRITE_READING_DIRECTION, 695 fn GetFlowDirection() -> DWRITE_FLOW_DIRECTION, 696 fn GetIncrementalTabStop() -> FLOAT, 697 fn GetTrimming( 698 trimmingOptions: *mut DWRITE_TRIMMING, 699 trimmingSign: *mut *mut IDWriteInlineObject, 700 ) -> HRESULT, 701 fn GetLineSpacing( 702 lineSpacingMethod: *mut DWRITE_LINE_SPACING_METHOD, 703 lineSpacing: *mut FLOAT, 704 baseline: *mut FLOAT, 705 ) -> HRESULT, 706 fn GetFontCollection( 707 fontCollection: *mut *mut IDWriteFontCollection, 708 ) -> HRESULT, 709 fn GetFontFamilyNameLength() -> UINT32, 710 fn GetFontFamilyName( 711 fontFamilyName: *mut WCHAR, 712 nameSize: UINT32, 713 ) -> HRESULT, 714 fn GetFontWeight() -> DWRITE_FONT_WEIGHT, 715 fn GetFontStyle() -> DWRITE_FONT_STYLE, 716 fn GetFontStretch() -> DWRITE_FONT_STRETCH, 717 fn GetFontSize() -> FLOAT, 718 fn GetLocaleNameLength() -> UINT32, 719 fn GetLocaleName( 720 localeName: *mut WCHAR, 721 nameSize: UINT32, 722 ) -> HRESULT, 723 }} 724 RIDL!{#[uuid(0x55f1112b, 0x1dc2, 0x4b3c, 0x95, 0x41, 0xf4, 0x68, 0x94, 0xed, 0x85, 0xb6)] 725 interface IDWriteTypography(IDWriteTypographyVtbl): IUnknown(IUnknownVtbl) { 726 fn AddFontFeature( 727 fontFeature: DWRITE_FONT_FEATURE, 728 ) -> HRESULT, 729 fn GetFontFeatureCount() -> UINT32, 730 fn GetFontFeature( 731 fontFeatureIndex: UINT32, 732 fontFeature: *mut DWRITE_FONT_FEATURE, 733 ) -> HRESULT, 734 }} 735 ENUM!{enum DWRITE_SCRIPT_SHAPES { 736 DWRITE_SCRIPT_SHAPES_DEFAULT = 0, 737 DWRITE_SCRIPT_SHAPES_NO_VISUAL = 1, 738 }} 739 STRUCT!{struct DWRITE_SCRIPT_ANALYSIS { 740 script: UINT16, 741 shapes: DWRITE_SCRIPT_SHAPES, 742 }} 743 ENUM!{enum DWRITE_BREAK_CONDITION { 744 DWRITE_BREAK_CONDITION_NEUTRAL, 745 DWRITE_BREAK_CONDITION_CAN_BREAK, 746 DWRITE_BREAK_CONDITION_MAY_NOT_BREAK, 747 DWRITE_BREAK_CONDITION_MUST_BREAK, 748 }} 749 STRUCT!{struct DWRITE_LINE_BREAKPOINT { 750 bit_fields: UINT8, 751 }} 752 BITFIELD!{DWRITE_LINE_BREAKPOINT bit_fields: UINT8 [ 753 breakConditionBefore set_breakConditionBefore[0..2], 754 breakConditionAfter set_breakConditionAfter[2..4], 755 isWhitespace set_isWhitespace[4..5], 756 isSoftHyphen set_isSoftHyphen[5..6], 757 padding set_padding[6..8], 758 ]} 759 ENUM!{enum DWRITE_NUMBER_SUBSTITUTION_METHOD { 760 DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE, 761 DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL, 762 DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE, 763 DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL, 764 DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL, 765 }} 766 RIDL!{#[uuid(0x14885cc9, 0xbab0, 0x4f90, 0xb6, 0xed, 0x5c, 0x36, 0x6a, 0x2c, 0xd0, 0x3d)] 767 interface IDWriteNumberSubstitution(IDWriteNumberSubstitutionVtbl): IUnknown(IUnknownVtbl) {}} 768 STRUCT!{struct DWRITE_SHAPING_TEXT_PROPERTIES { 769 bit_fields: UINT16, 770 }} 771 BITFIELD!{DWRITE_SHAPING_TEXT_PROPERTIES bit_fields: UINT16 [ 772 isShapedAlone set_isShapedAlone[0..1], 773 reserved set_reserved[1..16], 774 ]} 775 STRUCT!{struct DWRITE_SHAPING_GLYPH_PROPERTIES { 776 bit_fields: UINT16, 777 }} 778 BITFIELD!{DWRITE_SHAPING_GLYPH_PROPERTIES bit_fields: UINT16 [ 779 justification set_justification[0..4], 780 isClusterStart set_isClusterStart[4..5], 781 isDiacritic set_isDiacritic[5..6], 782 isZeroWidthSpace set_isZeroWidthSpace[6..7], 783 reserved set_reserved[7..16], 784 ]} 785 RIDL!{#[uuid(0x688e1a58, 0x5094, 0x47c8, 0xad, 0xc8, 0xfb, 0xce, 0xa6, 0x0a, 0xe9, 0x2b)] 786 interface IDWriteTextAnalysisSource(IDWriteTextAnalysisSourceVtbl): IUnknown(IUnknownVtbl) { 787 fn GetTextAtPosition( 788 textPosition: UINT32, 789 textString: *mut *const WCHAR, 790 textLength: *mut UINT32, 791 ) -> HRESULT, 792 fn GetTextBeforePosition( 793 textPosition: UINT32, 794 textString: *mut *const WCHAR, 795 textLength: *mut UINT32, 796 ) -> HRESULT, 797 fn GetParagraphReadingDirection() -> DWRITE_READING_DIRECTION, 798 fn GetLocaleName( 799 textPosition: UINT32, 800 textLength: *mut UINT32, 801 localeName: *mut *const WCHAR, 802 ) -> HRESULT, 803 fn GetNumberSubstitution( 804 textPosition: UINT32, 805 textLength: *mut UINT32, 806 numberSubstitution: *mut *mut IDWriteNumberSubstitution, 807 ) -> HRESULT, 808 }} 809 RIDL!{#[uuid(0x5810cd44, 0x0ca0, 0x4701, 0xb3, 0xfa, 0xbe, 0xc5, 0x18, 0x2a, 0xe4, 0xf6)] 810 interface IDWriteTextAnalysisSink(IDWriteTextAnalysisSinkVtbl): IUnknown(IUnknownVtbl) { 811 fn SetScriptAnalysis( 812 textPosition: UINT32, 813 textLength: UINT32, 814 scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS, 815 ) -> HRESULT, 816 fn SetLineBreakpoints( 817 textPosition: UINT32, 818 textLength: UINT32, 819 lineBreakpoints: *const DWRITE_LINE_BREAKPOINT, 820 ) -> HRESULT, 821 fn SetBidiLevel( 822 textPosition: UINT32, 823 textLength: UINT32, 824 explicitLevel: UINT8, 825 resolvedLevel: UINT8, 826 ) -> HRESULT, 827 fn SetNumberSubstitution( 828 textPosition: UINT32, 829 textLength: UINT32, 830 numberSubstitution: *mut IDWriteNumberSubstitution, 831 ) -> HRESULT, 832 }} 833 RIDL!{#[uuid(0xb7e6163e, 0x7f46, 0x43b4, 0x84, 0xb3, 0xe4, 0xe6, 0x24, 0x9c, 0x36, 0x5d)] 834 interface IDWriteTextAnalyzer(IDWriteTextAnalyzerVtbl): IUnknown(IUnknownVtbl) { 835 fn AnalyzeScript( 836 analysisSource: *mut IDWriteTextAnalysisSource, 837 textPosition: UINT32, 838 textLength: UINT32, 839 analysisSink: *mut IDWriteTextAnalysisSink, 840 ) -> HRESULT, 841 fn AnalyzeBidi( 842 analysisSource: *mut IDWriteTextAnalysisSource, 843 textPosition: UINT32, 844 textLength: UINT32, 845 analysisSink: *mut IDWriteTextAnalysisSink, 846 ) -> HRESULT, 847 fn AnalyzeNumberSubstitution( 848 analysisSource: *mut IDWriteTextAnalysisSource, 849 textPosition: UINT32, 850 textLength: UINT32, 851 analysisSink: *mut IDWriteTextAnalysisSink, 852 ) -> HRESULT, 853 fn AnalyzeLineBreakpoints( 854 analysisSource: *mut IDWriteTextAnalysisSource, 855 textPosition: UINT32, 856 textLength: UINT32, 857 analysisSink: *mut IDWriteTextAnalysisSink, 858 ) -> HRESULT, 859 fn GetGlyphs( 860 textString: *const WCHAR, 861 textLength: UINT32, 862 fontFace: *mut IDWriteFontFace, 863 isSideways: BOOL, 864 isRightToLeft: BOOL, 865 scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS, 866 localeName: *const WCHAR, 867 numberSubstitution: *mut IDWriteNumberSubstitution, 868 features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES, 869 featureRangeLengths: *const UINT32, 870 featureRanges: UINT32, 871 maxGlyphCount: UINT32, 872 clusterMap: *mut UINT16, 873 textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES, 874 glyphIndices: *mut UINT16, 875 glyphProps: *mut DWRITE_SHAPING_GLYPH_PROPERTIES, 876 actualGlyphCount: *mut UINT32, 877 ) -> HRESULT, 878 fn GetGlyphPlacements( 879 textString: *const WCHAR, 880 clusterMap: *const UINT16, 881 textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES, 882 textLength: UINT32, 883 glyphIndices: *const UINT16, 884 glyphProps: *const DWRITE_SHAPING_GLYPH_PROPERTIES, 885 glyphCount: UINT32, 886 fontFace: *mut IDWriteFontFace, 887 fontEmSize: FLOAT, 888 isSideways: BOOL, 889 isRightToLeft: BOOL, 890 scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS, 891 localeName: *const WCHAR, 892 features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES, 893 featureRangeLengths: *const UINT32, 894 featureRanges: UINT32, 895 glyphAdvances: *mut FLOAT, 896 glyphOffsets: *mut DWRITE_GLYPH_OFFSET, 897 ) -> HRESULT, 898 fn GetGdiCompatibleGlyphPlacements( 899 textString: *const WCHAR, 900 clusterMap: *const UINT16, 901 textProps: *mut DWRITE_SHAPING_TEXT_PROPERTIES, 902 textLength: UINT32, 903 glyphIndices: *const UINT16, 904 glyphProps: *const DWRITE_SHAPING_GLYPH_PROPERTIES, 905 glyphCount: UINT32, 906 fontFace: *mut IDWriteFontFace, 907 fontEmSize: FLOAT, 908 pixelsPerDip: FLOAT, 909 transform: *const DWRITE_MATRIX, 910 useGdiNatrual: BOOL, 911 isSideways: BOOL, 912 isRightToLeft: BOOL, 913 scriptAnalysis: *const DWRITE_SCRIPT_ANALYSIS, 914 localeName: *const WCHAR, 915 features: *mut *const DWRITE_TYPOGRAPHIC_FEATURES, 916 featureRangeLengths: *const UINT32, 917 featureRanges: UINT32, 918 glyphAdvances: *mut FLOAT, 919 glyphOffsets: *mut DWRITE_GLYPH_OFFSET, 920 ) -> HRESULT, 921 }} 922 STRUCT!{struct DWRITE_GLYPH_RUN { 923 fontFace: *mut IDWriteFontFace, 924 fontEmSize: FLOAT, 925 glyphCount: UINT32, 926 glyphIndices: *const UINT16, 927 glyphAdvances: *const FLOAT, 928 glyphOffsets: *const DWRITE_GLYPH_OFFSET, 929 isSideways: BOOL, 930 bidiLevel: UINT32, 931 }} 932 STRUCT!{struct DWRITE_GLYPH_RUN_DESCRIPTION { 933 localeName: *const WCHAR, 934 string: *const WCHAR, 935 stringLength: UINT32, 936 clusterMap: *const UINT16, 937 textPosition: UINT32, 938 }} 939 STRUCT!{struct DWRITE_UNDERLINE { 940 width: FLOAT, 941 thickness: FLOAT, 942 offset: FLOAT, 943 runHeight: FLOAT, 944 readingDirection: DWRITE_READING_DIRECTION, 945 flowDirection: DWRITE_FLOW_DIRECTION, 946 localeName: *const WCHAR, 947 measuringMode: DWRITE_MEASURING_MODE, 948 }} 949 STRUCT!{struct DWRITE_STRIKETHROUGH { 950 width: FLOAT, 951 thickness: FLOAT, 952 offset: FLOAT, 953 readingDirection: DWRITE_READING_DIRECTION, 954 flowDirection: DWRITE_FLOW_DIRECTION, 955 localeName: *const WCHAR, 956 measuringMode: DWRITE_MEASURING_MODE, 957 }} 958 STRUCT!{struct DWRITE_LINE_METRICS { 959 length: UINT32, 960 trailingWhitespaceLength: UINT32, 961 newlineLength: UINT32, 962 height: FLOAT, 963 baseline: FLOAT, 964 isTrimmed: BOOL, 965 }} 966 STRUCT!{struct DWRITE_CLUSTER_METRICS { 967 width: FLOAT, 968 length: UINT16, 969 bit_fields: UINT16, 970 }} 971 BITFIELD!{DWRITE_CLUSTER_METRICS bit_fields: UINT16 [ 972 canWrapLineAfter set_canWrapLineAfter[0..1], 973 isWhitespace set_isWhitespace[1..2], 974 isNewline set_isNewline[2..3], 975 isSoftHyphen set_isSoftHyphen[3..4], 976 isRightToLeft set_isRightToLeft[4..5], 977 padding set_padding[5..16], 978 ]} 979 STRUCT!{struct DWRITE_TEXT_METRICS { 980 left: FLOAT, 981 top: FLOAT, 982 width: FLOAT, 983 widthIncludingTrailingWhitespace: FLOAT, 984 height: FLOAT, 985 layoutWidth: FLOAT, 986 layoutHeight: FLOAT, 987 maxBidiReorderingDepth: UINT32, 988 lineCount: UINT32, 989 }} 990 STRUCT!{struct DWRITE_INLINE_OBJECT_METRICS { 991 width: FLOAT, 992 height: FLOAT, 993 baseline: FLOAT, 994 supportsSideways: BOOL, 995 }} 996 STRUCT!{struct DWRITE_OVERHANG_METRICS { 997 left: FLOAT, 998 top: FLOAT, 999 right: FLOAT, 1000 bottom: FLOAT, 1001 }} 1002 STRUCT!{struct DWRITE_HIT_TEST_METRICS { 1003 textPosition: UINT32, 1004 length: UINT32, 1005 left: FLOAT, 1006 top: FLOAT, 1007 width: FLOAT, 1008 height: FLOAT, 1009 bidiLevel: UINT32, 1010 isText: BOOL, 1011 isTrimmed: BOOL, 1012 }} 1013 RIDL!{#[uuid(0x8339fde3, 0x106f, 0x47ab, 0x83, 0x73, 0x1c, 0x62, 0x95, 0xeb, 0x10, 0xb3)] 1014 interface IDWriteInlineObject(IDWriteInlineObjectVtbl): IUnknown(IUnknownVtbl) { 1015 fn Draw( 1016 clientDrawingContext: *mut c_void, 1017 renderer: *mut IDWriteTextRenderer, 1018 originX: FLOAT, 1019 originY: FLOAT, 1020 isSideways: BOOL, 1021 isRightToLeft: BOOL, 1022 clientDrawingEffect: *mut IUnknown, 1023 ) -> HRESULT, 1024 fn GetMetrics( 1025 metrics: *mut DWRITE_INLINE_OBJECT_METRICS, 1026 ) -> HRESULT, 1027 fn GetOverhangMetrics( 1028 overhangs: *mut DWRITE_OVERHANG_METRICS, 1029 ) -> HRESULT, 1030 fn GetBreakConditions( 1031 breakConditionBefore: *mut DWRITE_BREAK_CONDITION, 1032 breakConditionAfter: *mut DWRITE_BREAK_CONDITION, 1033 ) -> HRESULT, 1034 }} 1035 RIDL!{#[uuid(0xeaf3a2da, 0xecf4, 0x4d24, 0xb6, 0x44, 0xb3, 0x4f, 0x68, 0x42, 0x02, 0x4b)] 1036 interface IDWritePixelSnapping(IDWritePixelSnappingVtbl): IUnknown(IUnknownVtbl) { 1037 fn IsPixelSnappingDisabled( 1038 clientDrawingContext: *mut c_void, 1039 isDisabled: *mut BOOL, 1040 ) -> HRESULT, 1041 fn GetCurrentTransform( 1042 clientDrawingContext: *mut c_void, 1043 transform: *mut DWRITE_MATRIX, 1044 ) -> HRESULT, 1045 fn GetPixelsPerDip( 1046 clientDrawingContext: *mut c_void, 1047 pixelsPerDip: *mut FLOAT, 1048 ) -> HRESULT, 1049 }} 1050 RIDL!{#[uuid(0xef8a8135, 0x5cc6, 0x45fe, 0x88, 0x25, 0xc5, 0xa0, 0x72, 0x4e, 0xb8, 0x19)] 1051 interface IDWriteTextRenderer(IDWriteTextRendererVtbl): 1052 IDWritePixelSnapping(IDWritePixelSnappingVtbl) { 1053 fn DrawGlyphRun( 1054 clientDrawingContext: *mut c_void, 1055 baselineOriginX: FLOAT, 1056 baselineOriginY: FLOAT, 1057 measuringMode: DWRITE_MEASURING_MODE, 1058 glyphRun: *const DWRITE_GLYPH_RUN, 1059 glyphRunDescription: *const DWRITE_GLYPH_RUN_DESCRIPTION, 1060 clientDrawingEffect: *mut IUnknown, 1061 ) -> HRESULT, 1062 fn DrawUnderline( 1063 clientDrawingContext: *mut c_void, 1064 baselineOriginX: FLOAT, 1065 baselineOriginY: FLOAT, 1066 underline: *const DWRITE_UNDERLINE, 1067 clientDrawingEffect: *mut IUnknown, 1068 ) -> HRESULT, 1069 fn DrawStrikethrough( 1070 clientDrawingContext: *mut c_void, 1071 baselineOriginX: FLOAT, 1072 baselineOriginY: FLOAT, 1073 strikethrough: *const DWRITE_STRIKETHROUGH, 1074 clientDrawingEffect: *mut IUnknown, 1075 ) -> HRESULT, 1076 fn DrawInlineObject( 1077 clientDrawingContext: *mut c_void, 1078 baselineOriginX: FLOAT, 1079 baselineOriginY: FLOAT, 1080 inlineObject: *mut IDWriteInlineObject, 1081 isSideways: BOOL, 1082 isRightToLeft: BOOL, 1083 clientDrawingEffect: *mut IUnknown, 1084 ) -> HRESULT, 1085 }} 1086 RIDL!{#[uuid(0x53737037, 0x6d14, 0x410b, 0x9b, 0xfe, 0x0b, 0x18, 0x2b, 0xb7, 0x09, 0x61)] 1087 interface IDWriteTextLayout(IDWriteTextLayoutVtbl): 1088 IDWriteTextFormat(IDWriteTextFormatVtbl) { 1089 fn SetMaxWidth( 1090 maxWidth: FLOAT, 1091 ) -> HRESULT, 1092 fn SetMaxHeight( 1093 maxHeight: FLOAT, 1094 ) -> HRESULT, 1095 fn SetFontCollection( 1096 fontCollection: *mut IDWriteFontCollection, 1097 textRange: DWRITE_TEXT_RANGE, 1098 ) -> HRESULT, 1099 fn SetFontFamilyName( 1100 fontFamilyName: *const WCHAR, 1101 textRange: DWRITE_TEXT_RANGE, 1102 ) -> HRESULT, 1103 fn SetFontWeight( 1104 fontWeight: DWRITE_FONT_WEIGHT, 1105 textRange: DWRITE_TEXT_RANGE, 1106 ) -> HRESULT, 1107 fn SetFontStyle( 1108 fontStyle: DWRITE_FONT_STYLE, 1109 textRange: DWRITE_TEXT_RANGE, 1110 ) -> HRESULT, 1111 fn SetFontStretch( 1112 fontStretch: DWRITE_FONT_STRETCH, 1113 textRange: DWRITE_TEXT_RANGE, 1114 ) -> HRESULT, 1115 fn SetFontSize( 1116 fontSize: FLOAT, 1117 textRange: DWRITE_TEXT_RANGE, 1118 ) -> HRESULT, 1119 fn SetUnderline( 1120 hasUnderline: BOOL, 1121 textRange: DWRITE_TEXT_RANGE, 1122 ) -> HRESULT, 1123 fn SetStrikethrough( 1124 hasStrikethrough: BOOL, 1125 textRange: DWRITE_TEXT_RANGE, 1126 ) -> HRESULT, 1127 fn SetDrawingEffect( 1128 drawingEffect: *mut IUnknown, 1129 textRange: DWRITE_TEXT_RANGE, 1130 ) -> HRESULT, 1131 fn SetInlineObject( 1132 inlineObject: *mut IDWriteInlineObject, 1133 textRange: DWRITE_TEXT_RANGE, 1134 ) -> HRESULT, 1135 fn SetTypography( 1136 typography: *mut IDWriteTypography, 1137 textRange: DWRITE_TEXT_RANGE, 1138 ) -> HRESULT, 1139 fn SetLocaleName( 1140 localeName: *const WCHAR, 1141 textRange: DWRITE_TEXT_RANGE, 1142 ) -> HRESULT, 1143 fn GetMaxWidth() -> FLOAT, 1144 fn GetMaxHeight() -> FLOAT, 1145 fn GetFontCollection( 1146 currentPosition: UINT32, 1147 fontCollection: *mut *mut IDWriteFontCollection, 1148 textRange: *mut DWRITE_TEXT_RANGE, 1149 ) -> HRESULT, 1150 fn GetFontFamilyNameLength( 1151 currentPosition: UINT32, 1152 nameLength: *mut UINT32, 1153 textRange: *mut DWRITE_TEXT_RANGE, 1154 ) -> HRESULT, 1155 fn GetFontFamilyName( 1156 currentPosition: UINT32, 1157 fontFamilyName: *mut WCHAR, 1158 nameSize: UINT32, 1159 textRange: *mut DWRITE_TEXT_RANGE, 1160 ) -> HRESULT, 1161 fn GetFontWeight( 1162 currentPosition: UINT32, 1163 fontWeight: *mut DWRITE_FONT_WEIGHT, 1164 textRange: *mut DWRITE_TEXT_RANGE, 1165 ) -> HRESULT, 1166 fn GetFontStyle( 1167 currentPosition: UINT32, 1168 fontStyle: *mut DWRITE_FONT_STYLE, 1169 textRange: *mut DWRITE_TEXT_RANGE, 1170 ) -> HRESULT, 1171 fn GetFontStretch( 1172 currentPosition: UINT32, 1173 fontStretch: *mut DWRITE_FONT_STRETCH, 1174 textRange: *mut DWRITE_TEXT_RANGE, 1175 ) -> HRESULT, 1176 fn GetFontSize( 1177 currentPosition: UINT32, 1178 fontSize: *mut FLOAT, 1179 textRange: *mut DWRITE_TEXT_RANGE, 1180 ) -> HRESULT, 1181 fn GetUnderline( 1182 currentPosition: UINT32, 1183 hasUnderline: *mut BOOL, 1184 textRange: *mut DWRITE_TEXT_RANGE, 1185 ) -> HRESULT, 1186 fn GetStrikethrough( 1187 currentPosition: UINT32, 1188 hasStrikethrough: *mut BOOL, 1189 textRange: *mut DWRITE_TEXT_RANGE, 1190 ) -> HRESULT, 1191 fn GetDrawingEffect( 1192 currentPosition: UINT32, 1193 drawingEffect: *mut *mut IUnknown, 1194 textRange: *mut DWRITE_TEXT_RANGE, 1195 ) -> HRESULT, 1196 fn GetInlineObject( 1197 currentPosition: UINT32, 1198 inlineObject: *mut *mut IDWriteInlineObject, 1199 textRange: *mut DWRITE_TEXT_RANGE, 1200 ) -> HRESULT, 1201 fn GetTypography( 1202 currentPosition: UINT32, 1203 typography: *mut *mut IDWriteTypography, 1204 textRange: *mut DWRITE_TEXT_RANGE, 1205 ) -> HRESULT, 1206 fn GetLocaleNameLength( 1207 currentPosition: UINT32, 1208 nameLength: *mut UINT32, 1209 textRange: *mut DWRITE_TEXT_RANGE, 1210 ) -> HRESULT, 1211 fn GetLocaleName( 1212 currentPosition: UINT32, 1213 localeName: *mut WCHAR, 1214 nameSize: UINT32, 1215 textRange: *mut DWRITE_TEXT_RANGE, 1216 ) -> HRESULT, 1217 fn Draw( 1218 clientDrawingContext: *mut c_void, 1219 renderer: *mut IDWriteTextRenderer, 1220 originX: FLOAT, 1221 originY: FLOAT, 1222 ) -> HRESULT, 1223 fn GetLineMetrics( 1224 lineMetrics: *mut DWRITE_LINE_METRICS, 1225 maxLineCount: UINT32, 1226 actualLineCount: *mut UINT32, 1227 ) -> HRESULT, 1228 fn GetMetrics( 1229 textMetrics: *mut DWRITE_TEXT_METRICS, 1230 ) -> HRESULT, 1231 fn GetOverhangMetrics( 1232 overhangs: *mut DWRITE_OVERHANG_METRICS, 1233 ) -> HRESULT, 1234 fn GetClusterMetrics( 1235 clusterMetrics: *mut DWRITE_CLUSTER_METRICS, 1236 maxClusterCount: UINT32, 1237 actualClusterCount: *mut UINT32, 1238 ) -> HRESULT, 1239 fn DetermineMinWidth( 1240 minWidth: *mut FLOAT, 1241 ) -> HRESULT, 1242 fn HitTestPoint( 1243 pointX: FLOAT, 1244 pointY: FLOAT, 1245 isTrailingHit: *mut BOOL, 1246 isInside: *mut BOOL, 1247 hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS, 1248 ) -> HRESULT, 1249 fn HitTestTextPosition( 1250 textPosition: UINT32, 1251 isTrailingHit: BOOL, 1252 pointX: *mut FLOAT, 1253 pointY: *mut FLOAT, 1254 hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS, 1255 ) -> HRESULT, 1256 fn HitTestTextRange( 1257 textPosition: UINT32, 1258 textLength: UINT32, 1259 originX: FLOAT, 1260 originY: FLOAT, 1261 hitTestMetrics: *mut DWRITE_HIT_TEST_METRICS, 1262 maxHitTestMetricsCount: UINT32, 1263 actualHitTestMetricsCount: *mut UINT32, 1264 ) -> HRESULT, 1265 }} 1266 RIDL!{#[uuid(0x5e5a32a3, 0x8dff, 0x4773, 0x9f, 0xf6, 0x06, 0x96, 0xea, 0xb7, 0x72, 0x67)] 1267 interface IDWriteBitmapRenderTarget(IDWriteBitmapRenderTargetVtbl): IUnknown(IUnknownVtbl) { 1268 fn DrawGlyphRun( 1269 baselineOriginX: FLOAT, 1270 baselineOriginY: FLOAT, 1271 measuringMode: DWRITE_MEASURING_MODE, 1272 glyphRun: *const DWRITE_GLYPH_RUN, 1273 renderingParams: *mut IDWriteRenderingParams, 1274 textColor: COLORREF, 1275 blackBoxRect: *mut RECT, 1276 ) -> HRESULT, 1277 fn GetMemoryDC() -> HDC, 1278 fn GetPixelsPerDip() -> FLOAT, 1279 fn SetPixelsPerDip( 1280 pixelsPerDip: FLOAT, 1281 ) -> HRESULT, 1282 fn GetCurrentTransform( 1283 transform: *mut DWRITE_MATRIX, 1284 ) -> HRESULT, 1285 fn SetCurrentTransform( 1286 transform: *const DWRITE_MATRIX, 1287 ) -> HRESULT, 1288 fn GetSize( 1289 size: *mut SIZE, 1290 ) -> HRESULT, 1291 fn Resize( 1292 width: UINT32, 1293 height: UINT32, 1294 ) -> HRESULT, 1295 }} 1296 RIDL!{#[uuid(0x1edd9491, 0x9853, 0x4299, 0x89, 0x8f, 0x64, 0x32, 0x98, 0x3b, 0x6f, 0x3a)] 1297 interface IDWriteGdiInterop(IDWriteGdiInteropVtbl): IUnknown(IUnknownVtbl) { 1298 fn CreateFontFromLOGFONT( 1299 logFont: *const LOGFONTW, 1300 font: *mut *mut IDWriteFont, 1301 ) -> HRESULT, 1302 fn ConvertFontToLOGFONT( 1303 font: *mut IDWriteFont, 1304 logFont: *mut LOGFONTW, 1305 isSystemFont: *mut BOOL, 1306 ) -> HRESULT, 1307 fn ConvertFontFaceToLOGFONT( 1308 font: *mut IDWriteFontFace, 1309 logFont: *mut LOGFONTW, 1310 ) -> HRESULT, 1311 fn CreateFontFaceFromHdc( 1312 hdc: HDC, 1313 fontFace: *mut *mut IDWriteFontFace, 1314 ) -> HRESULT, 1315 fn CreateBitmapRenderTarget( 1316 hdc: HDC, 1317 width: UINT32, 1318 height: UINT32, 1319 renderTarget: *mut *mut IDWriteBitmapRenderTarget, 1320 ) -> HRESULT, 1321 }} 1322 ENUM!{enum DWRITE_TEXTURE_TYPE { 1323 DWRITE_TEXTURE_ALIASED_1x1 = 0, 1324 DWRITE_TEXTURE_CLEARTYPE_3x1 = 1, 1325 }} 1326 pub const DWRITE_ALPHA_MAX: BYTE = 255; 1327 RIDL!{#[uuid(0x7d97dbf7, 0xe085, 0x42d4, 0x81, 0xe3, 0x6a, 0x88, 0x3b, 0xde, 0xd1, 0x18)] 1328 interface IDWriteGlyphRunAnalysis(IDWriteGlyphRunAnalysisVtbl): IUnknown(IUnknownVtbl) { 1329 fn GetAlphaTextureBounds( 1330 textureType: DWRITE_TEXTURE_TYPE, 1331 textureBounds: *mut RECT, 1332 ) -> HRESULT, 1333 fn CreateAlphaTexture( 1334 textureType: DWRITE_TEXTURE_TYPE, 1335 textureBounds: *const RECT, 1336 alphaValues: *mut BYTE, 1337 bufferSize: UINT32, 1338 ) -> HRESULT, 1339 fn GetAlphaBlendParams( 1340 renderingParams: *mut IDWriteRenderingParams, 1341 blendGamma: *mut FLOAT, 1342 blendEnhancedContrast: *mut FLOAT, 1343 blendClearTypeLevel: *mut FLOAT, 1344 ) -> HRESULT, 1345 }} 1346 RIDL!{#[uuid(0xb859ee5a, 0xd838, 0x4b5b, 0xa2, 0xe8, 0x1a, 0xdc, 0x7d, 0x93, 0xdb, 0x48)] 1347 interface IDWriteFactory(IDWriteFactoryVtbl): IUnknown(IUnknownVtbl) { 1348 fn GetSystemFontCollection( 1349 fontCollection: *mut *mut IDWriteFontCollection, 1350 checkForUpdates: BOOL, 1351 ) -> HRESULT, 1352 fn CreateCustomFontCollection( 1353 collectionLoader: *mut IDWriteFontCollectionLoader, 1354 collectionKey: *const c_void, 1355 collectionKeySize: UINT32, 1356 fontCollection: *mut *mut IDWriteFontCollection, 1357 ) -> HRESULT, 1358 fn RegisterFontCollectionLoader( 1359 fontCollectionLoader: *mut IDWriteFontCollectionLoader, 1360 ) -> HRESULT, 1361 fn UnregisterFontCollectionLoader( 1362 fontCollectionLoader: *mut IDWriteFontCollectionLoader, 1363 ) -> HRESULT, 1364 fn CreateFontFileReference( 1365 filePath: *const WCHAR, 1366 lastWriteTime: *const FILETIME, 1367 fontFile: *mut *mut IDWriteFontFile, 1368 ) -> HRESULT, 1369 fn CreateCustomFontFileReference( 1370 fontFileReferenceKey: *const c_void, 1371 fontFileReferenceKeySize: UINT32, 1372 fontFileLoader: *mut IDWriteFontFileLoader, 1373 fontFile: *mut *mut IDWriteFontFile, 1374 ) -> HRESULT, 1375 fn CreateFontFace( 1376 fontFaceType: DWRITE_FONT_FACE_TYPE, 1377 numberOfFiles: UINT32, 1378 fontFiles: *const *mut IDWriteFontFile, 1379 faceIndex: UINT32, 1380 fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS, 1381 fontFace: *mut *mut IDWriteFontFace, 1382 ) -> HRESULT, 1383 fn CreateRenderingParams( 1384 renderingParams: *mut *mut IDWriteRenderingParams, 1385 ) -> HRESULT, 1386 fn CreateMonitorRenderingParams( 1387 monitor: HMONITOR, 1388 renderingParams: *mut *mut IDWriteRenderingParams, 1389 ) -> HRESULT, 1390 fn CreateCustomRenderingParams( 1391 gamma: FLOAT, 1392 enhancedContrast: FLOAT, 1393 clearTypeLevel: FLOAT, 1394 pixelGeometry: DWRITE_PIXEL_GEOMETRY, 1395 renderingMode: DWRITE_RENDERING_MODE, 1396 renderingParams: *mut *mut IDWriteRenderingParams, 1397 ) -> HRESULT, 1398 fn RegisterFontFileLoader( 1399 fontFileLoader: *mut IDWriteFontFileLoader, 1400 ) -> HRESULT, 1401 fn UnregisterFontFileLoader( 1402 fontFileLoader: *mut IDWriteFontFileLoader, 1403 ) -> HRESULT, 1404 fn CreateTextFormat( 1405 fontFamilyName: *const WCHAR, 1406 fontCollection: *mut IDWriteFontCollection, 1407 fontWeight: DWRITE_FONT_WEIGHT, 1408 fontStyle: DWRITE_FONT_STYLE, 1409 fontStretch: DWRITE_FONT_STRETCH, 1410 fontSize: FLOAT, 1411 localeName: *const WCHAR, 1412 textFormat: *mut *mut IDWriteTextFormat, 1413 ) -> HRESULT, 1414 fn CreateTypography( 1415 typography: *mut *mut IDWriteTypography, 1416 ) -> HRESULT, 1417 fn GetGdiInterop( 1418 gdiInterop: *mut *mut IDWriteGdiInterop, 1419 ) -> HRESULT, 1420 fn CreateTextLayout( 1421 string: *const WCHAR, 1422 stringLength: UINT32, 1423 textFormat: *mut IDWriteTextFormat, 1424 maxWidth: FLOAT, 1425 maxHeight: FLOAT, 1426 textLayout: *mut *mut IDWriteTextLayout, 1427 ) -> HRESULT, 1428 fn CreateGdiCompatibleTextLayout( 1429 string: *const WCHAR, 1430 stringLength: UINT32, 1431 textFormat: *mut IDWriteTextFormat, 1432 layoutWidth: FLOAT, 1433 layoutHeight: FLOAT, 1434 pixelsPerDip: FLOAT, 1435 transform: *const DWRITE_MATRIX, 1436 useGdiNatrual: BOOL, 1437 textLayout: *mut *mut IDWriteTextLayout, 1438 ) -> HRESULT, 1439 fn CreateEllipsisTrimmingSign( 1440 textFormat: *mut IDWriteTextFormat, 1441 trimmingSign: *mut *mut IDWriteInlineObject, 1442 ) -> HRESULT, 1443 fn CreateTextAnalyzer( 1444 textAnalyzer: *mut *mut IDWriteTextAnalyzer, 1445 ) -> HRESULT, 1446 fn CreateNumberSubstitution( 1447 substitutionMethod: DWRITE_NUMBER_SUBSTITUTION_METHOD, 1448 localeName: *const WCHAR, 1449 ignoreUserOverride: BOOL, 1450 numberSubstitution: *mut *mut IDWriteNumberSubstitution, 1451 ) -> HRESULT, 1452 fn CreateGlyphRunAnalysis( 1453 glyphRun: *const DWRITE_GLYPH_RUN, 1454 pixelsPerDip: FLOAT, 1455 transform: *const DWRITE_MATRIX, 1456 renderingMode: DWRITE_RENDERING_MODE, 1457 measuringMode: DWRITE_MEASURING_MODE, 1458 baselineOriginX: FLOAT, 1459 baselineOriginY: FLOAT, 1460 glyphRunAnalysis: *mut *mut IDWriteGlyphRunAnalysis, 1461 ) -> HRESULT, 1462 }} 1463 pub const FACILITY_DWRITE: HRESULT = 0x898; 1464 pub const DWRITE_ERR_BASE: HRESULT = 0x5000; 1465 #[inline] 1466 pub fn MAKE_DWRITE_HR(severity: HRESULT, code: HRESULT) -> HRESULT { 1467 MAKE_HRESULT!(severity, FACILITY_DWRITE, DWRITE_ERR_BASE + code) 1468 } 1469 #[inline] 1470 pub fn MAKE_DWRITE_HR_ERR(code: HRESULT) -> HRESULT { 1471 MAKE_DWRITE_HR(SEVERITY_ERROR, code) 1472 } 1473 extern "system" { 1474 pub fn DWriteCreateFactory( 1475 factoryType: DWRITE_FACTORY_TYPE, iid: REFIID, factory: *mut *mut IUnknown, 1476 ) -> HRESULT; 1477 } 1478