//! NOTE: this file is autogenerated, DO NOT MODIFY
//--------------------------------------------------------------------------------
// Section: Constants (7)
//--------------------------------------------------------------------------------
pub const DWRITE_ALPHA_MAX = @as(u32, 255);
pub const FACILITY_DWRITE = @as(u32, 2200);
pub const DWRITE_ERR_BASE = @as(u32, 20480);
pub const DWRITE_E_REMOTEFONT = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2003283955));
pub const DWRITE_E_DOWNLOADCANCELLED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2003283954));
pub const DWRITE_E_DOWNLOADFAILED = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2003283953));
pub const DWRITE_E_TOOMANYDOWNLOADS = @import("../zig.zig").typedConst(HRESULT, @as(i32, -2003283952));

//--------------------------------------------------------------------------------
// Section: Types (194)
//--------------------------------------------------------------------------------
pub const DWRITE_FONT_AXIS_TAG = enum(u32) {
    WEIGHT = 1952999287,
    WIDTH = 1752458359,
    SLANT = 1953393779,
    OPTICAL_SIZE = 2054385775,
    ITALIC = 1818326121,
};
pub const DWRITE_FONT_AXIS_TAG_WEIGHT = DWRITE_FONT_AXIS_TAG.WEIGHT;
pub const DWRITE_FONT_AXIS_TAG_WIDTH = DWRITE_FONT_AXIS_TAG.WIDTH;
pub const DWRITE_FONT_AXIS_TAG_SLANT = DWRITE_FONT_AXIS_TAG.SLANT;
pub const DWRITE_FONT_AXIS_TAG_OPTICAL_SIZE = DWRITE_FONT_AXIS_TAG.OPTICAL_SIZE;
pub const DWRITE_FONT_AXIS_TAG_ITALIC = DWRITE_FONT_AXIS_TAG.ITALIC;

pub const DWRITE_COLOR_F = extern struct {
    r: f32,
    g: f32,
    b: f32,
    a: f32,
};

pub const DWRITE_MEASURING_MODE = enum(i32) {
    NATURAL = 0,
    GDI_CLASSIC = 1,
    GDI_NATURAL = 2,
};
pub const DWRITE_MEASURING_MODE_NATURAL = DWRITE_MEASURING_MODE.NATURAL;
pub const DWRITE_MEASURING_MODE_GDI_CLASSIC = DWRITE_MEASURING_MODE.GDI_CLASSIC;
pub const DWRITE_MEASURING_MODE_GDI_NATURAL = DWRITE_MEASURING_MODE.GDI_NATURAL;

pub const DWRITE_GLYPH_IMAGE_FORMATS = enum(u32) {
    NONE = 0,
    TRUETYPE = 1,
    CFF = 2,
    COLR = 4,
    SVG = 8,
    PNG = 16,
    JPEG = 32,
    TIFF = 64,
    PREMULTIPLIED_B8G8R8A8 = 128,
    _,
    pub fn initFlags(o: struct {
        NONE: u1 = 0,
        TRUETYPE: u1 = 0,
        CFF: u1 = 0,
        COLR: u1 = 0,
        SVG: u1 = 0,
        PNG: u1 = 0,
        JPEG: u1 = 0,
        TIFF: u1 = 0,
        PREMULTIPLIED_B8G8R8A8: u1 = 0,
    }) DWRITE_GLYPH_IMAGE_FORMATS {
        return @as(DWRITE_GLYPH_IMAGE_FORMATS, @enumFromInt((if (o.NONE == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.NONE) else 0) | (if (o.TRUETYPE == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.TRUETYPE) else 0) | (if (o.CFF == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.CFF) else 0) | (if (o.COLR == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.COLR) else 0) | (if (o.SVG == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.SVG) else 0) | (if (o.PNG == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.PNG) else 0) | (if (o.JPEG == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.JPEG) else 0) | (if (o.TIFF == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.TIFF) else 0) | (if (o.PREMULTIPLIED_B8G8R8A8 == 1) @intFromEnum(DWRITE_GLYPH_IMAGE_FORMATS.PREMULTIPLIED_B8G8R8A8) else 0)));
    }
};
pub const DWRITE_GLYPH_IMAGE_FORMATS_NONE = DWRITE_GLYPH_IMAGE_FORMATS.NONE;
pub const DWRITE_GLYPH_IMAGE_FORMATS_TRUETYPE = DWRITE_GLYPH_IMAGE_FORMATS.TRUETYPE;
pub const DWRITE_GLYPH_IMAGE_FORMATS_CFF = DWRITE_GLYPH_IMAGE_FORMATS.CFF;
pub const DWRITE_GLYPH_IMAGE_FORMATS_COLR = DWRITE_GLYPH_IMAGE_FORMATS.COLR;
pub const DWRITE_GLYPH_IMAGE_FORMATS_SVG = DWRITE_GLYPH_IMAGE_FORMATS.SVG;
pub const DWRITE_GLYPH_IMAGE_FORMATS_PNG = DWRITE_GLYPH_IMAGE_FORMATS.PNG;
pub const DWRITE_GLYPH_IMAGE_FORMATS_JPEG = DWRITE_GLYPH_IMAGE_FORMATS.JPEG;
pub const DWRITE_GLYPH_IMAGE_FORMATS_TIFF = DWRITE_GLYPH_IMAGE_FORMATS.TIFF;
pub const DWRITE_GLYPH_IMAGE_FORMATS_PREMULTIPLIED_B8G8R8A8 = DWRITE_GLYPH_IMAGE_FORMATS.PREMULTIPLIED_B8G8R8A8;

pub const DWRITE_FONT_FILE_TYPE = enum(i32) {
    UNKNOWN = 0,
    CFF = 1,
    TRUETYPE = 2,
    OPENTYPE_COLLECTION = 3,
    TYPE1_PFM = 4,
    TYPE1_PFB = 5,
    VECTOR = 6,
    BITMAP = 7,
    // TRUETYPE_COLLECTION = 3, this enum value conflicts with OPENTYPE_COLLECTION
};
pub const DWRITE_FONT_FILE_TYPE_UNKNOWN = DWRITE_FONT_FILE_TYPE.UNKNOWN;
pub const DWRITE_FONT_FILE_TYPE_CFF = DWRITE_FONT_FILE_TYPE.CFF;
pub const DWRITE_FONT_FILE_TYPE_TRUETYPE = DWRITE_FONT_FILE_TYPE.TRUETYPE;
pub const DWRITE_FONT_FILE_TYPE_OPENTYPE_COLLECTION = DWRITE_FONT_FILE_TYPE.OPENTYPE_COLLECTION;
pub const DWRITE_FONT_FILE_TYPE_TYPE1_PFM = DWRITE_FONT_FILE_TYPE.TYPE1_PFM;
pub const DWRITE_FONT_FILE_TYPE_TYPE1_PFB = DWRITE_FONT_FILE_TYPE.TYPE1_PFB;
pub const DWRITE_FONT_FILE_TYPE_VECTOR = DWRITE_FONT_FILE_TYPE.VECTOR;
pub const DWRITE_FONT_FILE_TYPE_BITMAP = DWRITE_FONT_FILE_TYPE.BITMAP;
pub const DWRITE_FONT_FILE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FILE_TYPE.OPENTYPE_COLLECTION;

pub const DWRITE_FONT_FACE_TYPE = enum(i32) {
    CFF = 0,
    TRUETYPE = 1,
    OPENTYPE_COLLECTION = 2,
    TYPE1 = 3,
    VECTOR = 4,
    BITMAP = 5,
    UNKNOWN = 6,
    RAW_CFF = 7,
    // TRUETYPE_COLLECTION = 2, this enum value conflicts with OPENTYPE_COLLECTION
};
pub const DWRITE_FONT_FACE_TYPE_CFF = DWRITE_FONT_FACE_TYPE.CFF;
pub const DWRITE_FONT_FACE_TYPE_TRUETYPE = DWRITE_FONT_FACE_TYPE.TRUETYPE;
pub const DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION = DWRITE_FONT_FACE_TYPE.OPENTYPE_COLLECTION;
pub const DWRITE_FONT_FACE_TYPE_TYPE1 = DWRITE_FONT_FACE_TYPE.TYPE1;
pub const DWRITE_FONT_FACE_TYPE_VECTOR = DWRITE_FONT_FACE_TYPE.VECTOR;
pub const DWRITE_FONT_FACE_TYPE_BITMAP = DWRITE_FONT_FACE_TYPE.BITMAP;
pub const DWRITE_FONT_FACE_TYPE_UNKNOWN = DWRITE_FONT_FACE_TYPE.UNKNOWN;
pub const DWRITE_FONT_FACE_TYPE_RAW_CFF = DWRITE_FONT_FACE_TYPE.RAW_CFF;
pub const DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = DWRITE_FONT_FACE_TYPE.OPENTYPE_COLLECTION;

pub const DWRITE_FONT_SIMULATIONS = enum(u32) {
    NONE = 0,
    BOLD = 1,
    OBLIQUE = 2,
    _,
    pub fn initFlags(o: struct {
        NONE: u1 = 0,
        BOLD: u1 = 0,
        OBLIQUE: u1 = 0,
    }) DWRITE_FONT_SIMULATIONS {
        return @as(DWRITE_FONT_SIMULATIONS, @enumFromInt((if (o.NONE == 1) @intFromEnum(DWRITE_FONT_SIMULATIONS.NONE) else 0) | (if (o.BOLD == 1) @intFromEnum(DWRITE_FONT_SIMULATIONS.BOLD) else 0) | (if (o.OBLIQUE == 1) @intFromEnum(DWRITE_FONT_SIMULATIONS.OBLIQUE) else 0)));
    }
};
pub const DWRITE_FONT_SIMULATIONS_NONE = DWRITE_FONT_SIMULATIONS.NONE;
pub const DWRITE_FONT_SIMULATIONS_BOLD = DWRITE_FONT_SIMULATIONS.BOLD;
pub const DWRITE_FONT_SIMULATIONS_OBLIQUE = DWRITE_FONT_SIMULATIONS.OBLIQUE;

pub const DWRITE_FONT_WEIGHT = enum(i32) {
    THIN = 100,
    EXTRA_LIGHT = 200,
    // ULTRA_LIGHT = 200, this enum value conflicts with EXTRA_LIGHT
    LIGHT = 300,
    SEMI_LIGHT = 350,
    NORMAL = 400,
    // REGULAR = 400, this enum value conflicts with NORMAL
    MEDIUM = 500,
    DEMI_BOLD = 600,
    // SEMI_BOLD = 600, this enum value conflicts with DEMI_BOLD
    BOLD = 700,
    EXTRA_BOLD = 800,
    // ULTRA_BOLD = 800, this enum value conflicts with EXTRA_BOLD
    BLACK = 900,
    // HEAVY = 900, this enum value conflicts with BLACK
    EXTRA_BLACK = 950,
    // ULTRA_BLACK = 950, this enum value conflicts with EXTRA_BLACK
};
pub const DWRITE_FONT_WEIGHT_THIN = DWRITE_FONT_WEIGHT.THIN;
pub const DWRITE_FONT_WEIGHT_EXTRA_LIGHT = DWRITE_FONT_WEIGHT.EXTRA_LIGHT;
pub const DWRITE_FONT_WEIGHT_ULTRA_LIGHT = DWRITE_FONT_WEIGHT.EXTRA_LIGHT;
pub const DWRITE_FONT_WEIGHT_LIGHT = DWRITE_FONT_WEIGHT.LIGHT;
pub const DWRITE_FONT_WEIGHT_SEMI_LIGHT = DWRITE_FONT_WEIGHT.SEMI_LIGHT;
pub const DWRITE_FONT_WEIGHT_NORMAL = DWRITE_FONT_WEIGHT.NORMAL;
pub const DWRITE_FONT_WEIGHT_REGULAR = DWRITE_FONT_WEIGHT.NORMAL;
pub const DWRITE_FONT_WEIGHT_MEDIUM = DWRITE_FONT_WEIGHT.MEDIUM;
pub const DWRITE_FONT_WEIGHT_DEMI_BOLD = DWRITE_FONT_WEIGHT.DEMI_BOLD;
pub const DWRITE_FONT_WEIGHT_SEMI_BOLD = DWRITE_FONT_WEIGHT.DEMI_BOLD;
pub const DWRITE_FONT_WEIGHT_BOLD = DWRITE_FONT_WEIGHT.BOLD;
pub const DWRITE_FONT_WEIGHT_EXTRA_BOLD = DWRITE_FONT_WEIGHT.EXTRA_BOLD;
pub const DWRITE_FONT_WEIGHT_ULTRA_BOLD = DWRITE_FONT_WEIGHT.EXTRA_BOLD;
pub const DWRITE_FONT_WEIGHT_BLACK = DWRITE_FONT_WEIGHT.BLACK;
pub const DWRITE_FONT_WEIGHT_HEAVY = DWRITE_FONT_WEIGHT.BLACK;
pub const DWRITE_FONT_WEIGHT_EXTRA_BLACK = DWRITE_FONT_WEIGHT.EXTRA_BLACK;
pub const DWRITE_FONT_WEIGHT_ULTRA_BLACK = DWRITE_FONT_WEIGHT.EXTRA_BLACK;

pub const DWRITE_FONT_STRETCH = enum(i32) {
    UNDEFINED = 0,
    ULTRA_CONDENSED = 1,
    EXTRA_CONDENSED = 2,
    CONDENSED = 3,
    SEMI_CONDENSED = 4,
    NORMAL = 5,
    // MEDIUM = 5, this enum value conflicts with NORMAL
    SEMI_EXPANDED = 6,
    EXPANDED = 7,
    EXTRA_EXPANDED = 8,
    ULTRA_EXPANDED = 9,
};
pub const DWRITE_FONT_STRETCH_UNDEFINED = DWRITE_FONT_STRETCH.UNDEFINED;
pub const DWRITE_FONT_STRETCH_ULTRA_CONDENSED = DWRITE_FONT_STRETCH.ULTRA_CONDENSED;
pub const DWRITE_FONT_STRETCH_EXTRA_CONDENSED = DWRITE_FONT_STRETCH.EXTRA_CONDENSED;
pub const DWRITE_FONT_STRETCH_CONDENSED = DWRITE_FONT_STRETCH.CONDENSED;
pub const DWRITE_FONT_STRETCH_SEMI_CONDENSED = DWRITE_FONT_STRETCH.SEMI_CONDENSED;
pub const DWRITE_FONT_STRETCH_NORMAL = DWRITE_FONT_STRETCH.NORMAL;
pub const DWRITE_FONT_STRETCH_MEDIUM = DWRITE_FONT_STRETCH.NORMAL;
pub const DWRITE_FONT_STRETCH_SEMI_EXPANDED = DWRITE_FONT_STRETCH.SEMI_EXPANDED;
pub const DWRITE_FONT_STRETCH_EXPANDED = DWRITE_FONT_STRETCH.EXPANDED;
pub const DWRITE_FONT_STRETCH_EXTRA_EXPANDED = DWRITE_FONT_STRETCH.EXTRA_EXPANDED;
pub const DWRITE_FONT_STRETCH_ULTRA_EXPANDED = DWRITE_FONT_STRETCH.ULTRA_EXPANDED;

pub const DWRITE_FONT_STYLE = enum(i32) {
    NORMAL = 0,
    OBLIQUE = 1,
    ITALIC = 2,
};
pub const DWRITE_FONT_STYLE_NORMAL = DWRITE_FONT_STYLE.NORMAL;
pub const DWRITE_FONT_STYLE_OBLIQUE = DWRITE_FONT_STYLE.OBLIQUE;
pub const DWRITE_FONT_STYLE_ITALIC = DWRITE_FONT_STYLE.ITALIC;

pub const DWRITE_INFORMATIONAL_STRING_ID = enum(i32) {
    NONE = 0,
    COPYRIGHT_NOTICE = 1,
    VERSION_STRINGS = 2,
    TRADEMARK = 3,
    MANUFACTURER = 4,
    DESIGNER = 5,
    DESIGNER_URL = 6,
    DESCRIPTION = 7,
    FONT_VENDOR_URL = 8,
    LICENSE_DESCRIPTION = 9,
    LICENSE_INFO_URL = 10,
    WIN32_FAMILY_NAMES = 11,
    WIN32_SUBFAMILY_NAMES = 12,
    TYPOGRAPHIC_FAMILY_NAMES = 13,
    TYPOGRAPHIC_SUBFAMILY_NAMES = 14,
    SAMPLE_TEXT = 15,
    FULL_NAME = 16,
    POSTSCRIPT_NAME = 17,
    POSTSCRIPT_CID_NAME = 18,
    WEIGHT_STRETCH_STYLE_FAMILY_NAME = 19,
    DESIGN_SCRIPT_LANGUAGE_TAG = 20,
    SUPPORTED_SCRIPT_LANGUAGE_TAG = 21,
    // PREFERRED_FAMILY_NAMES = 13, this enum value conflicts with TYPOGRAPHIC_FAMILY_NAMES
    // PREFERRED_SUBFAMILY_NAMES = 14, this enum value conflicts with TYPOGRAPHIC_SUBFAMILY_NAMES
    // WWS_FAMILY_NAME = 19, this enum value conflicts with WEIGHT_STRETCH_STYLE_FAMILY_NAME
};
pub const DWRITE_INFORMATIONAL_STRING_NONE = DWRITE_INFORMATIONAL_STRING_ID.NONE;
pub const DWRITE_INFORMATIONAL_STRING_COPYRIGHT_NOTICE = DWRITE_INFORMATIONAL_STRING_ID.COPYRIGHT_NOTICE;
pub const DWRITE_INFORMATIONAL_STRING_VERSION_STRINGS = DWRITE_INFORMATIONAL_STRING_ID.VERSION_STRINGS;
pub const DWRITE_INFORMATIONAL_STRING_TRADEMARK = DWRITE_INFORMATIONAL_STRING_ID.TRADEMARK;
pub const DWRITE_INFORMATIONAL_STRING_MANUFACTURER = DWRITE_INFORMATIONAL_STRING_ID.MANUFACTURER;
pub const DWRITE_INFORMATIONAL_STRING_DESIGNER = DWRITE_INFORMATIONAL_STRING_ID.DESIGNER;
pub const DWRITE_INFORMATIONAL_STRING_DESIGNER_URL = DWRITE_INFORMATIONAL_STRING_ID.DESIGNER_URL;
pub const DWRITE_INFORMATIONAL_STRING_DESCRIPTION = DWRITE_INFORMATIONAL_STRING_ID.DESCRIPTION;
pub const DWRITE_INFORMATIONAL_STRING_FONT_VENDOR_URL = DWRITE_INFORMATIONAL_STRING_ID.FONT_VENDOR_URL;
pub const DWRITE_INFORMATIONAL_STRING_LICENSE_DESCRIPTION = DWRITE_INFORMATIONAL_STRING_ID.LICENSE_DESCRIPTION;
pub const DWRITE_INFORMATIONAL_STRING_LICENSE_INFO_URL = DWRITE_INFORMATIONAL_STRING_ID.LICENSE_INFO_URL;
pub const DWRITE_INFORMATIONAL_STRING_WIN32_FAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_ID.WIN32_FAMILY_NAMES;
pub const DWRITE_INFORMATIONAL_STRING_WIN32_SUBFAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_ID.WIN32_SUBFAMILY_NAMES;
pub const DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_FAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_ID.TYPOGRAPHIC_FAMILY_NAMES;
pub const DWRITE_INFORMATIONAL_STRING_TYPOGRAPHIC_SUBFAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_ID.TYPOGRAPHIC_SUBFAMILY_NAMES;
pub const DWRITE_INFORMATIONAL_STRING_SAMPLE_TEXT = DWRITE_INFORMATIONAL_STRING_ID.SAMPLE_TEXT;
pub const DWRITE_INFORMATIONAL_STRING_FULL_NAME = DWRITE_INFORMATIONAL_STRING_ID.FULL_NAME;
pub const DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_NAME = DWRITE_INFORMATIONAL_STRING_ID.POSTSCRIPT_NAME;
pub const DWRITE_INFORMATIONAL_STRING_POSTSCRIPT_CID_NAME = DWRITE_INFORMATIONAL_STRING_ID.POSTSCRIPT_CID_NAME;
pub const DWRITE_INFORMATIONAL_STRING_WEIGHT_STRETCH_STYLE_FAMILY_NAME = DWRITE_INFORMATIONAL_STRING_ID.WEIGHT_STRETCH_STYLE_FAMILY_NAME;
pub const DWRITE_INFORMATIONAL_STRING_DESIGN_SCRIPT_LANGUAGE_TAG = DWRITE_INFORMATIONAL_STRING_ID.DESIGN_SCRIPT_LANGUAGE_TAG;
pub const DWRITE_INFORMATIONAL_STRING_SUPPORTED_SCRIPT_LANGUAGE_TAG = DWRITE_INFORMATIONAL_STRING_ID.SUPPORTED_SCRIPT_LANGUAGE_TAG;
pub const DWRITE_INFORMATIONAL_STRING_PREFERRED_FAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_ID.TYPOGRAPHIC_FAMILY_NAMES;
pub const DWRITE_INFORMATIONAL_STRING_PREFERRED_SUBFAMILY_NAMES = DWRITE_INFORMATIONAL_STRING_ID.TYPOGRAPHIC_SUBFAMILY_NAMES;
pub const DWRITE_INFORMATIONAL_STRING_WWS_FAMILY_NAME = DWRITE_INFORMATIONAL_STRING_ID.WEIGHT_STRETCH_STYLE_FAMILY_NAME;

pub const DWRITE_FONT_METRICS = extern struct {
    designUnitsPerEm: u16,
    ascent: u16,
    descent: u16,
    lineGap: i16,
    capHeight: u16,
    xHeight: u16,
    underlinePosition: i16,
    underlineThickness: u16,
    strikethroughPosition: i16,
    strikethroughThickness: u16,
};

pub const DWRITE_GLYPH_METRICS = extern struct {
    leftSideBearing: i32,
    advanceWidth: u32,
    rightSideBearing: i32,
    topSideBearing: i32,
    advanceHeight: u32,
    bottomSideBearing: i32,
    verticalOriginY: i32,
};

pub const DWRITE_GLYPH_OFFSET = extern struct {
    advanceOffset: f32,
    ascenderOffset: f32,
};

pub const DWRITE_FACTORY_TYPE = enum(i32) {
    SHARED = 0,
    ISOLATED = 1,
};
pub const DWRITE_FACTORY_TYPE_SHARED = DWRITE_FACTORY_TYPE.SHARED;
pub const DWRITE_FACTORY_TYPE_ISOLATED = DWRITE_FACTORY_TYPE.ISOLATED;

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontFileLoader_Value = Guid.initString("727cad4e-d6af-4c9e-8a08-d695b11caa49");
pub const IID_IDWriteFontFileLoader = &IID_IDWriteFontFileLoader_Value;
pub const IDWriteFontFileLoader = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateStreamFromKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                fontFileStream: ?*?*IDWriteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                fontFileStream: ?*?*IDWriteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFileLoader_CreateStreamFromKey(self: *const T, fontFileReferenceKey: ?*const anyopaque, fontFileReferenceKeySize: u32, fontFileStream: ?*?*IDWriteFontFileStream) HRESULT {
                return @as(*const IDWriteFontFileLoader.VTable, @ptrCast(self.vtable)).CreateStreamFromKey(@as(*const IDWriteFontFileLoader, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize, fontFileStream);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteLocalFontFileLoader_Value = Guid.initString("b2d9f3ec-c9fe-4a11-a2ec-d86208f7c0a2");
pub const IID_IDWriteLocalFontFileLoader = &IID_IDWriteLocalFontFileLoader_Value;
pub const IDWriteLocalFontFileLoader = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFileLoader.VTable,
        GetFilePathLengthFromKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                filePathLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                filePathLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilePathFromKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                filePath: [*:0]u16,
                filePathSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                filePath: [*:0]u16,
                filePathSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastWriteTimeFromKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                lastWriteTime: ?*FILETIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                lastWriteTime: ?*FILETIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFileLoader.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalFontFileLoader_GetFilePathLengthFromKey(self: *const T, fontFileReferenceKey: ?*const anyopaque, fontFileReferenceKeySize: u32, filePathLength: ?*u32) HRESULT {
                return @as(*const IDWriteLocalFontFileLoader.VTable, @ptrCast(self.vtable)).GetFilePathLengthFromKey(@as(*const IDWriteLocalFontFileLoader, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize, filePathLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalFontFileLoader_GetFilePathFromKey(self: *const T, fontFileReferenceKey: ?*const anyopaque, fontFileReferenceKeySize: u32, filePath: [*:0]u16, filePathSize: u32) HRESULT {
                return @as(*const IDWriteLocalFontFileLoader.VTable, @ptrCast(self.vtable)).GetFilePathFromKey(@as(*const IDWriteLocalFontFileLoader, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize, filePath, filePathSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalFontFileLoader_GetLastWriteTimeFromKey(self: *const T, fontFileReferenceKey: ?*const anyopaque, fontFileReferenceKeySize: u32, lastWriteTime: ?*FILETIME) HRESULT {
                return @as(*const IDWriteLocalFontFileLoader.VTable, @ptrCast(self.vtable)).GetLastWriteTimeFromKey(@as(*const IDWriteLocalFontFileLoader, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize, lastWriteTime);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontFileStream_Value = Guid.initString("6d4865fe-0ab8-4d91-8f62-5dd6be34a3e0");
pub const IID_IDWriteFontFileStream = &IID_IDWriteFontFileStream_Value;
pub const IDWriteFontFileStream = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        ReadFileFragment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFileStream,
                fragmentStart: ?*const ?*anyopaque,
                fileOffset: u64,
                fragmentSize: u64,
                fragmentContext: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFileStream,
                fragmentStart: ?*const ?*anyopaque,
                fileOffset: u64,
                fragmentSize: u64,
                fragmentContext: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseFileFragment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFileStream,
                fragmentContext: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontFileStream,
                fragmentContext: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetFileSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFileStream,
                fileSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFileStream,
                fileSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastWriteTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFileStream,
                lastWriteTime: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFileStream,
                lastWriteTime: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFileStream_ReadFileFragment(self: *const T, fragmentStart: ?*const ?*anyopaque, fileOffset: u64, fragmentSize: u64, fragmentContext: ?*?*anyopaque) HRESULT {
                return @as(*const IDWriteFontFileStream.VTable, @ptrCast(self.vtable)).ReadFileFragment(@as(*const IDWriteFontFileStream, @ptrCast(self)), fragmentStart, fileOffset, fragmentSize, fragmentContext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFileStream_ReleaseFileFragment(self: *const T, fragmentContext: ?*anyopaque) void {
                return @as(*const IDWriteFontFileStream.VTable, @ptrCast(self.vtable)).ReleaseFileFragment(@as(*const IDWriteFontFileStream, @ptrCast(self)), fragmentContext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFileStream_GetFileSize(self: *const T, fileSize: ?*u64) HRESULT {
                return @as(*const IDWriteFontFileStream.VTable, @ptrCast(self.vtable)).GetFileSize(@as(*const IDWriteFontFileStream, @ptrCast(self)), fileSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFileStream_GetLastWriteTime(self: *const T, lastWriteTime: ?*u64) HRESULT {
                return @as(*const IDWriteFontFileStream.VTable, @ptrCast(self.vtable)).GetLastWriteTime(@as(*const IDWriteFontFileStream, @ptrCast(self)), lastWriteTime);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontFile_Value = Guid.initString("739d886a-cef5-47dc-8769-1a8b41bebbb0");
pub const IID_IDWriteFontFile = &IID_IDWriteFontFile_Value;
pub const IDWriteFontFile = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetReferenceKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFile,
                fontFileReferenceKey: ?*const ?*anyopaque,
                fontFileReferenceKeySize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFile,
                fontFileReferenceKey: ?*const ?*anyopaque,
                fontFileReferenceKeySize: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLoader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFile,
                fontFileLoader: ?*?*IDWriteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFile,
                fontFileLoader: ?*?*IDWriteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Analyze: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFile,
                isSupportedFontType: ?*BOOL,
                fontFileType: ?*DWRITE_FONT_FILE_TYPE,
                fontFaceType: ?*DWRITE_FONT_FACE_TYPE,
                numberOfFaces: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFile,
                isSupportedFontType: ?*BOOL,
                fontFileType: ?*DWRITE_FONT_FILE_TYPE,
                fontFaceType: ?*DWRITE_FONT_FACE_TYPE,
                numberOfFaces: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFile_GetReferenceKey(self: *const T, fontFileReferenceKey: ?*const ?*anyopaque, fontFileReferenceKeySize: ?*u32) HRESULT {
                return @as(*const IDWriteFontFile.VTable, @ptrCast(self.vtable)).GetReferenceKey(@as(*const IDWriteFontFile, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFile_GetLoader(self: *const T, fontFileLoader: ?*?*IDWriteFontFileLoader) HRESULT {
                return @as(*const IDWriteFontFile.VTable, @ptrCast(self.vtable)).GetLoader(@as(*const IDWriteFontFile, @ptrCast(self)), fontFileLoader);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFile_Analyze(self: *const T, isSupportedFontType: ?*BOOL, fontFileType: ?*DWRITE_FONT_FILE_TYPE, fontFaceType: ?*DWRITE_FONT_FACE_TYPE, numberOfFaces: ?*u32) HRESULT {
                return @as(*const IDWriteFontFile.VTable, @ptrCast(self.vtable)).Analyze(@as(*const IDWriteFontFile, @ptrCast(self)), isSupportedFontType, fontFileType, fontFaceType, numberOfFaces);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_PIXEL_GEOMETRY = enum(i32) {
    FLAT = 0,
    RGB = 1,
    BGR = 2,
};
pub const DWRITE_PIXEL_GEOMETRY_FLAT = DWRITE_PIXEL_GEOMETRY.FLAT;
pub const DWRITE_PIXEL_GEOMETRY_RGB = DWRITE_PIXEL_GEOMETRY.RGB;
pub const DWRITE_PIXEL_GEOMETRY_BGR = DWRITE_PIXEL_GEOMETRY.BGR;

pub const DWRITE_RENDERING_MODE = enum(i32) {
    DEFAULT = 0,
    ALIASED = 1,
    GDI_CLASSIC = 2,
    GDI_NATURAL = 3,
    NATURAL = 4,
    NATURAL_SYMMETRIC = 5,
    OUTLINE = 6,
    // CLEARTYPE_GDI_CLASSIC = 2, this enum value conflicts with GDI_CLASSIC
    // CLEARTYPE_GDI_NATURAL = 3, this enum value conflicts with GDI_NATURAL
    // CLEARTYPE_NATURAL = 4, this enum value conflicts with NATURAL
    // CLEARTYPE_NATURAL_SYMMETRIC = 5, this enum value conflicts with NATURAL_SYMMETRIC
};
pub const DWRITE_RENDERING_MODE_DEFAULT = DWRITE_RENDERING_MODE.DEFAULT;
pub const DWRITE_RENDERING_MODE_ALIASED = DWRITE_RENDERING_MODE.ALIASED;
pub const DWRITE_RENDERING_MODE_GDI_CLASSIC = DWRITE_RENDERING_MODE.GDI_CLASSIC;
pub const DWRITE_RENDERING_MODE_GDI_NATURAL = DWRITE_RENDERING_MODE.GDI_NATURAL;
pub const DWRITE_RENDERING_MODE_NATURAL = DWRITE_RENDERING_MODE.NATURAL;
pub const DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE.NATURAL_SYMMETRIC;
pub const DWRITE_RENDERING_MODE_OUTLINE = DWRITE_RENDERING_MODE.OUTLINE;
pub const DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = DWRITE_RENDERING_MODE.GDI_CLASSIC;
pub const DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = DWRITE_RENDERING_MODE.GDI_NATURAL;
pub const DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = DWRITE_RENDERING_MODE.NATURAL;
pub const DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE.NATURAL_SYMMETRIC;

pub const DWRITE_MATRIX = extern struct {
    m11: f32,
    m12: f32,
    m21: f32,
    m22: f32,
    dx: f32,
    dy: f32,
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteRenderingParams_Value = Guid.initString("2f0da53a-2add-47cd-82ee-d9ec34688e75");
pub const IID_IDWriteRenderingParams = &IID_IDWriteRenderingParams_Value;
pub const IDWriteRenderingParams = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetGamma: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        GetEnhancedContrast: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        GetClearTypeLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        GetPixelGeometry: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_PIXEL_GEOMETRY,
            else => *const fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_PIXEL_GEOMETRY,
        },
        GetRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_RENDERING_MODE,
            else => *const fn (
                self: *const IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_RENDERING_MODE,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams_GetGamma(self: *const T) f32 {
                return @as(*const IDWriteRenderingParams.VTable, @ptrCast(self.vtable)).GetGamma(@as(*const IDWriteRenderingParams, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams_GetEnhancedContrast(self: *const T) f32 {
                return @as(*const IDWriteRenderingParams.VTable, @ptrCast(self.vtable)).GetEnhancedContrast(@as(*const IDWriteRenderingParams, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams_GetClearTypeLevel(self: *const T) f32 {
                return @as(*const IDWriteRenderingParams.VTable, @ptrCast(self.vtable)).GetClearTypeLevel(@as(*const IDWriteRenderingParams, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams_GetPixelGeometry(self: *const T) DWRITE_PIXEL_GEOMETRY {
                return @as(*const IDWriteRenderingParams.VTable, @ptrCast(self.vtable)).GetPixelGeometry(@as(*const IDWriteRenderingParams, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams_GetRenderingMode(self: *const T) DWRITE_RENDERING_MODE {
                return @as(*const IDWriteRenderingParams.VTable, @ptrCast(self.vtable)).GetRenderingMode(@as(*const IDWriteRenderingParams, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontFace_Value = Guid.initString("5f49804d-7024-4d43-bfa9-d25984f53849");
pub const IID_IDWriteFontFace = &IID_IDWriteFontFace_Value;
pub const IDWriteFontFace = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_FACE_TYPE,
            else => *const fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_FACE_TYPE,
        },
        GetFiles: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                numberOfFiles: ?*u32,
                fontFiles: ?[*]?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                numberOfFiles: ?*u32,
                fontFiles: ?[*]?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetSimulations: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SIMULATIONS,
            else => *const fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SIMULATIONS,
        },
        IsSymbolFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                fontFaceMetrics: ?*DWRITE_FONT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontFace,
                fontFaceMetrics: ?*DWRITE_FONT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetGlyphCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) u16,
            else => *const fn (
                self: *const IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) u16,
        },
        GetDesignGlyphMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
                glyphMetrics: [*]DWRITE_GLYPH_METRICS,
                isSideways: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
                glyphMetrics: [*]DWRITE_GLYPH_METRICS,
                isSideways: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGlyphIndices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                codePoints: [*]const u32,
                codePointCount: u32,
                glyphIndices: [*:0]u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                codePoints: [*]const u32,
                codePointCount: u32,
                glyphIndices: [*:0]u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TryGetFontTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                openTypeTableTag: u32,
                tableData: ?*const ?*anyopaque,
                tableSize: ?*u32,
                tableContext: ?*?*anyopaque,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                openTypeTableTag: u32,
                tableData: ?*const ?*anyopaque,
                tableSize: ?*u32,
                tableContext: ?*?*anyopaque,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseFontTable: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                tableContext: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontFace,
                tableContext: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetGlyphRunOutline: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                glyphIndices: [*:0]const u16,
                glyphAdvances: ?[*]const f32,
                glyphOffsets: ?[*]const DWRITE_GLYPH_OFFSET,
                glyphCount: u32,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                geometrySink: ?*ID2D1SimplifiedGeometrySink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                glyphIndices: [*:0]const u16,
                glyphAdvances: ?[*]const f32,
                glyphOffsets: ?[*]const DWRITE_GLYPH_OFFSET,
                glyphCount: u32,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                geometrySink: ?*ID2D1SimplifiedGeometrySink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecommendedRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                pixelsPerDip: f32,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingParams: ?*IDWriteRenderingParams,
                renderingMode: ?*DWRITE_RENDERING_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                pixelsPerDip: f32,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingParams: ?*IDWriteRenderingParams,
                renderingMode: ?*DWRITE_RENDERING_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGdiCompatibleMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                fontFaceMetrics: ?*DWRITE_FONT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                fontFaceMetrics: ?*DWRITE_FONT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGdiCompatibleGlyphMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
                glyphMetrics: [*]DWRITE_GLYPH_METRICS,
                isSideways: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
                glyphMetrics: [*]DWRITE_GLYPH_METRICS,
                isSideways: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetType(self: *const T) DWRITE_FONT_FACE_TYPE {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetType(@as(*const IDWriteFontFace, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetFiles(self: *const T, numberOfFiles: ?*u32, fontFiles: ?[*]?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetFiles(@as(*const IDWriteFontFace, @ptrCast(self)), numberOfFiles, fontFiles);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetIndex(self: *const T) u32 {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetIndex(@as(*const IDWriteFontFace, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetSimulations(self: *const T) DWRITE_FONT_SIMULATIONS {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetSimulations(@as(*const IDWriteFontFace, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_IsSymbolFont(self: *const T) BOOL {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).IsSymbolFont(@as(*const IDWriteFontFace, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetMetrics(self: *const T, fontFaceMetrics: ?*DWRITE_FONT_METRICS) void {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetMetrics(@as(*const IDWriteFontFace, @ptrCast(self)), fontFaceMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetGlyphCount(self: *const T) u16 {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetGlyphCount(@as(*const IDWriteFontFace, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetDesignGlyphMetrics(self: *const T, glyphIndices: [*:0]const u16, glyphCount: u32, glyphMetrics: [*]DWRITE_GLYPH_METRICS, isSideways: BOOL) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetDesignGlyphMetrics(@as(*const IDWriteFontFace, @ptrCast(self)), glyphIndices, glyphCount, glyphMetrics, isSideways);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetGlyphIndices(self: *const T, codePoints: [*]const u32, codePointCount: u32, glyphIndices: [*:0]u16) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetGlyphIndices(@as(*const IDWriteFontFace, @ptrCast(self)), codePoints, codePointCount, glyphIndices);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_TryGetFontTable(self: *const T, openTypeTableTag: u32, tableData: ?*const ?*anyopaque, tableSize: ?*u32, tableContext: ?*?*anyopaque, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).TryGetFontTable(@as(*const IDWriteFontFace, @ptrCast(self)), openTypeTableTag, tableData, tableSize, tableContext, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_ReleaseFontTable(self: *const T, tableContext: ?*anyopaque) void {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).ReleaseFontTable(@as(*const IDWriteFontFace, @ptrCast(self)), tableContext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetGlyphRunOutline(self: *const T, emSize: f32, glyphIndices: [*:0]const u16, glyphAdvances: ?[*]const f32, glyphOffsets: ?[*]const DWRITE_GLYPH_OFFSET, glyphCount: u32, isSideways: BOOL, isRightToLeft: BOOL, geometrySink: ?*ID2D1SimplifiedGeometrySink) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetGlyphRunOutline(@as(*const IDWriteFontFace, @ptrCast(self)), emSize, glyphIndices, glyphAdvances, glyphOffsets, glyphCount, isSideways, isRightToLeft, geometrySink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetRecommendedRenderingMode(self: *const T, emSize: f32, pixelsPerDip: f32, measuringMode: DWRITE_MEASURING_MODE, renderingParams: ?*IDWriteRenderingParams, renderingMode: ?*DWRITE_RENDERING_MODE) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetRecommendedRenderingMode(@as(*const IDWriteFontFace, @ptrCast(self)), emSize, pixelsPerDip, measuringMode, renderingParams, renderingMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetGdiCompatibleMetrics(self: *const T, emSize: f32, pixelsPerDip: f32, transform: ?*const DWRITE_MATRIX, fontFaceMetrics: ?*DWRITE_FONT_METRICS) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetGdiCompatibleMetrics(@as(*const IDWriteFontFace, @ptrCast(self)), emSize, pixelsPerDip, transform, fontFaceMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace_GetGdiCompatibleGlyphMetrics(self: *const T, emSize: f32, pixelsPerDip: f32, transform: ?*const DWRITE_MATRIX, useGdiNatural: BOOL, glyphIndices: [*:0]const u16, glyphCount: u32, glyphMetrics: [*]DWRITE_GLYPH_METRICS, isSideways: BOOL) HRESULT {
                return @as(*const IDWriteFontFace.VTable, @ptrCast(self.vtable)).GetGdiCompatibleGlyphMetrics(@as(*const IDWriteFontFace, @ptrCast(self)), emSize, pixelsPerDip, transform, useGdiNatural, glyphIndices, glyphCount, glyphMetrics, isSideways);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontCollectionLoader_Value = Guid.initString("cca920e4-52f0-492b-bfa8-29c72ee0a468");
pub const IID_IDWriteFontCollectionLoader = &IID_IDWriteFontCollectionLoader_Value;
pub const IDWriteFontCollectionLoader = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateEnumeratorFromKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollectionLoader,
                factory: ?*IDWriteFactory,
                // TODO: what to do with BytesParamIndex 2?
                collectionKey: ?*const anyopaque,
                collectionKeySize: u32,
                fontFileEnumerator: ?*?*IDWriteFontFileEnumerator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollectionLoader,
                factory: ?*IDWriteFactory,
                // TODO: what to do with BytesParamIndex 2?
                collectionKey: ?*const anyopaque,
                collectionKeySize: u32,
                fontFileEnumerator: ?*?*IDWriteFontFileEnumerator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollectionLoader_CreateEnumeratorFromKey(self: *const T, factory: ?*IDWriteFactory, collectionKey: ?*const anyopaque, collectionKeySize: u32, fontFileEnumerator: ?*?*IDWriteFontFileEnumerator) HRESULT {
                return @as(*const IDWriteFontCollectionLoader.VTable, @ptrCast(self.vtable)).CreateEnumeratorFromKey(@as(*const IDWriteFontCollectionLoader, @ptrCast(self)), factory, collectionKey, collectionKeySize, fontFileEnumerator);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontFileEnumerator_Value = Guid.initString("72755049-5ff7-435d-8348-4be97cfa6c7c");
pub const IID_IDWriteFontFileEnumerator = &IID_IDWriteFontFileEnumerator_Value;
pub const IDWriteFontFileEnumerator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        MoveNext: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFileEnumerator,
                hasCurrentFile: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFileEnumerator,
                hasCurrentFile: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentFontFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFileEnumerator,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFileEnumerator,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFileEnumerator_MoveNext(self: *const T, hasCurrentFile: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontFileEnumerator.VTable, @ptrCast(self.vtable)).MoveNext(@as(*const IDWriteFontFileEnumerator, @ptrCast(self)), hasCurrentFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFileEnumerator_GetCurrentFontFile(self: *const T, fontFile: ?*?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteFontFileEnumerator.VTable, @ptrCast(self.vtable)).GetCurrentFontFile(@as(*const IDWriteFontFileEnumerator, @ptrCast(self)), fontFile);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteLocalizedStrings_Value = Guid.initString("08256209-099a-4b34-b86d-c22b110e7771");
pub const IID_IDWriteLocalizedStrings = &IID_IDWriteLocalizedStrings_Value;
pub const IDWriteLocalizedStrings = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        FindLocaleName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalizedStrings,
                localeName: ?[*:0]const u16,
                index: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalizedStrings,
                localeName: ?[*:0]const u16,
                index: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocaleNameLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocaleName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                localeName: [*:0]u16,
                size: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                localeName: [*:0]u16,
                size: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStringLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetString: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                stringBuffer: [*:0]u16,
                size: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteLocalizedStrings,
                index: u32,
                stringBuffer: [*:0]u16,
                size: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalizedStrings_GetCount(self: *const T) u32 {
                return @as(*const IDWriteLocalizedStrings.VTable, @ptrCast(self.vtable)).GetCount(@as(*const IDWriteLocalizedStrings, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalizedStrings_FindLocaleName(self: *const T, localeName: ?[*:0]const u16, index: ?*u32, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteLocalizedStrings.VTable, @ptrCast(self.vtable)).FindLocaleName(@as(*const IDWriteLocalizedStrings, @ptrCast(self)), localeName, index, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalizedStrings_GetLocaleNameLength(self: *const T, index: u32, length: ?*u32) HRESULT {
                return @as(*const IDWriteLocalizedStrings.VTable, @ptrCast(self.vtable)).GetLocaleNameLength(@as(*const IDWriteLocalizedStrings, @ptrCast(self)), index, length);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalizedStrings_GetLocaleName(self: *const T, index: u32, localeName: [*:0]u16, size: u32) HRESULT {
                return @as(*const IDWriteLocalizedStrings.VTable, @ptrCast(self.vtable)).GetLocaleName(@as(*const IDWriteLocalizedStrings, @ptrCast(self)), index, localeName, size);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalizedStrings_GetStringLength(self: *const T, index: u32, length: ?*u32) HRESULT {
                return @as(*const IDWriteLocalizedStrings.VTable, @ptrCast(self.vtable)).GetStringLength(@as(*const IDWriteLocalizedStrings, @ptrCast(self)), index, length);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteLocalizedStrings_GetString(self: *const T, index: u32, stringBuffer: [*:0]u16, size: u32) HRESULT {
                return @as(*const IDWriteLocalizedStrings.VTable, @ptrCast(self.vtable)).GetString(@as(*const IDWriteLocalizedStrings, @ptrCast(self)), index, stringBuffer, size);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontCollection_Value = Guid.initString("a84cee02-3eea-4eee-a827-87c1a02a0fcc");
pub const IID_IDWriteFontCollection = &IID_IDWriteFontCollection_Value;
pub const IDWriteFontCollection = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFontFamilyCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontFamily: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection,
                index: u32,
                fontFamily: ?*?*IDWriteFontFamily,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection,
                index: u32,
                fontFamily: ?*?*IDWriteFontFamily,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindFamilyName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection,
                familyName: ?[*:0]const u16,
                index: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection,
                familyName: ?[*:0]const u16,
                index: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFromFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection,
                fontFace: ?*IDWriteFontFace,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection,
                fontFace: ?*IDWriteFontFace,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection_GetFontFamilyCount(self: *const T) u32 {
                return @as(*const IDWriteFontCollection.VTable, @ptrCast(self.vtable)).GetFontFamilyCount(@as(*const IDWriteFontCollection, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection_GetFontFamily(self: *const T, index: u32, fontFamily: ?*?*IDWriteFontFamily) HRESULT {
                return @as(*const IDWriteFontCollection.VTable, @ptrCast(self.vtable)).GetFontFamily(@as(*const IDWriteFontCollection, @ptrCast(self)), index, fontFamily);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection_FindFamilyName(self: *const T, familyName: ?[*:0]const u16, index: ?*u32, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontCollection.VTable, @ptrCast(self.vtable)).FindFamilyName(@as(*const IDWriteFontCollection, @ptrCast(self)), familyName, index, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection_GetFontFromFontFace(self: *const T, fontFace: ?*IDWriteFontFace, font: ?*?*IDWriteFont) HRESULT {
                return @as(*const IDWriteFontCollection.VTable, @ptrCast(self.vtable)).GetFontFromFontFace(@as(*const IDWriteFontCollection, @ptrCast(self)), fontFace, font);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontList_Value = Guid.initString("1a0d8438-1d97-4ec1-aef9-a2fb86ed6acb");
pub const IID_IDWriteFontList = &IID_IDWriteFontList_Value;
pub const IDWriteFontList = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontList,
                fontCollection: ?*?*IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontList,
                fontCollection: ?*?*IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontList,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontList,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontList,
                index: u32,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontList,
                index: u32,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontList_GetFontCollection(self: *const T, fontCollection: ?*?*IDWriteFontCollection) HRESULT {
                return @as(*const IDWriteFontList.VTable, @ptrCast(self.vtable)).GetFontCollection(@as(*const IDWriteFontList, @ptrCast(self)), fontCollection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontList_GetFontCount(self: *const T) u32 {
                return @as(*const IDWriteFontList.VTable, @ptrCast(self.vtable)).GetFontCount(@as(*const IDWriteFontList, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontList_GetFont(self: *const T, index: u32, font: ?*?*IDWriteFont) HRESULT {
                return @as(*const IDWriteFontList.VTable, @ptrCast(self.vtable)).GetFont(@as(*const IDWriteFontList, @ptrCast(self)), index, font);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontFamily_Value = Guid.initString("da20d8ef-812a-4c43-9802-62ec4abd7add");
pub const IID_IDWriteFontFamily = &IID_IDWriteFontFamily_Value;
pub const IDWriteFontFamily = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontList.VTable,
        GetFamilyNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFamily,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFirstMatchingFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily,
                weight: DWRITE_FONT_WEIGHT,
                stretch: DWRITE_FONT_STRETCH,
                style: DWRITE_FONT_STYLE,
                matchingFont: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFamily,
                weight: DWRITE_FONT_WEIGHT,
                stretch: DWRITE_FONT_STRETCH,
                style: DWRITE_FONT_STYLE,
                matchingFont: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMatchingFonts: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily,
                weight: DWRITE_FONT_WEIGHT,
                stretch: DWRITE_FONT_STRETCH,
                style: DWRITE_FONT_STYLE,
                matchingFonts: ?*?*IDWriteFontList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFamily,
                weight: DWRITE_FONT_WEIGHT,
                stretch: DWRITE_FONT_STRETCH,
                style: DWRITE_FONT_STYLE,
                matchingFonts: ?*?*IDWriteFontList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontList.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily_GetFamilyNames(self: *const T, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontFamily.VTable, @ptrCast(self.vtable)).GetFamilyNames(@as(*const IDWriteFontFamily, @ptrCast(self)), names);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily_GetFirstMatchingFont(self: *const T, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, style: DWRITE_FONT_STYLE, matchingFont: ?*?*IDWriteFont) HRESULT {
                return @as(*const IDWriteFontFamily.VTable, @ptrCast(self.vtable)).GetFirstMatchingFont(@as(*const IDWriteFontFamily, @ptrCast(self)), weight, stretch, style, matchingFont);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily_GetMatchingFonts(self: *const T, weight: DWRITE_FONT_WEIGHT, stretch: DWRITE_FONT_STRETCH, style: DWRITE_FONT_STYLE, matchingFonts: ?*?*IDWriteFontList) HRESULT {
                return @as(*const IDWriteFontFamily.VTable, @ptrCast(self.vtable)).GetMatchingFonts(@as(*const IDWriteFontFamily, @ptrCast(self)), weight, stretch, style, matchingFonts);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFont_Value = Guid.initString("acd16696-8c14-4f5d-877e-fe3fc1d32737");
pub const IID_IDWriteFont = &IID_IDWriteFont_Value;
pub const IDWriteFont = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFontFamily: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
                fontFamily: ?*?*IDWriteFontFamily,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont,
                fontFamily: ?*?*IDWriteFontFamily,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetWeight: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_WEIGHT,
            else => *const fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_WEIGHT,
        },
        GetStretch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STRETCH,
            else => *const fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STRETCH,
        },
        GetStyle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STYLE,
            else => *const fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STYLE,
        },
        IsSymbolFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetFaceNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInformationalStrings: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
                informationalStringID: DWRITE_INFORMATIONAL_STRING_ID,
                informationalStrings: ?*?*IDWriteLocalizedStrings,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont,
                informationalStringID: DWRITE_INFORMATIONAL_STRING_ID,
                informationalStrings: ?*?*IDWriteLocalizedStrings,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSimulations: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SIMULATIONS,
            else => *const fn (
                self: *const IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SIMULATIONS,
        },
        GetMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
                fontMetrics: ?*DWRITE_FONT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFont,
                fontMetrics: ?*DWRITE_FONT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        HasCharacter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
                unicodeValue: u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont,
                unicodeValue: u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont,
                fontFace: ?*?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont,
                fontFace: ?*?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetFontFamily(self: *const T, fontFamily: ?*?*IDWriteFontFamily) HRESULT {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetFontFamily(@as(*const IDWriteFont, @ptrCast(self)), fontFamily);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetWeight(self: *const T) DWRITE_FONT_WEIGHT {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetWeight(@as(*const IDWriteFont, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetStretch(self: *const T) DWRITE_FONT_STRETCH {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetStretch(@as(*const IDWriteFont, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetStyle(self: *const T) DWRITE_FONT_STYLE {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetStyle(@as(*const IDWriteFont, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_IsSymbolFont(self: *const T) BOOL {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).IsSymbolFont(@as(*const IDWriteFont, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetFaceNames(self: *const T, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetFaceNames(@as(*const IDWriteFont, @ptrCast(self)), names);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetInformationalStrings(self: *const T, informationalStringID: DWRITE_INFORMATIONAL_STRING_ID, informationalStrings: ?*?*IDWriteLocalizedStrings, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetInformationalStrings(@as(*const IDWriteFont, @ptrCast(self)), informationalStringID, informationalStrings, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetSimulations(self: *const T) DWRITE_FONT_SIMULATIONS {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetSimulations(@as(*const IDWriteFont, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_GetMetrics(self: *const T, fontMetrics: ?*DWRITE_FONT_METRICS) void {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).GetMetrics(@as(*const IDWriteFont, @ptrCast(self)), fontMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_HasCharacter(self: *const T, unicodeValue: u32, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).HasCharacter(@as(*const IDWriteFont, @ptrCast(self)), unicodeValue, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont_CreateFontFace(self: *const T, fontFace: ?*?*IDWriteFontFace) HRESULT {
                return @as(*const IDWriteFont.VTable, @ptrCast(self.vtable)).CreateFontFace(@as(*const IDWriteFont, @ptrCast(self)), fontFace);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_READING_DIRECTION = enum(i32) {
    LEFT_TO_RIGHT = 0,
    RIGHT_TO_LEFT = 1,
    TOP_TO_BOTTOM = 2,
    BOTTOM_TO_TOP = 3,
};
pub const DWRITE_READING_DIRECTION_LEFT_TO_RIGHT = DWRITE_READING_DIRECTION.LEFT_TO_RIGHT;
pub const DWRITE_READING_DIRECTION_RIGHT_TO_LEFT = DWRITE_READING_DIRECTION.RIGHT_TO_LEFT;
pub const DWRITE_READING_DIRECTION_TOP_TO_BOTTOM = DWRITE_READING_DIRECTION.TOP_TO_BOTTOM;
pub const DWRITE_READING_DIRECTION_BOTTOM_TO_TOP = DWRITE_READING_DIRECTION.BOTTOM_TO_TOP;

pub const DWRITE_FLOW_DIRECTION = enum(i32) {
    TOP_TO_BOTTOM = 0,
    BOTTOM_TO_TOP = 1,
    LEFT_TO_RIGHT = 2,
    RIGHT_TO_LEFT = 3,
};
pub const DWRITE_FLOW_DIRECTION_TOP_TO_BOTTOM = DWRITE_FLOW_DIRECTION.TOP_TO_BOTTOM;
pub const DWRITE_FLOW_DIRECTION_BOTTOM_TO_TOP = DWRITE_FLOW_DIRECTION.BOTTOM_TO_TOP;
pub const DWRITE_FLOW_DIRECTION_LEFT_TO_RIGHT = DWRITE_FLOW_DIRECTION.LEFT_TO_RIGHT;
pub const DWRITE_FLOW_DIRECTION_RIGHT_TO_LEFT = DWRITE_FLOW_DIRECTION.RIGHT_TO_LEFT;

pub const DWRITE_TEXT_ALIGNMENT = enum(i32) {
    LEADING = 0,
    TRAILING = 1,
    CENTER = 2,
    JUSTIFIED = 3,
};
pub const DWRITE_TEXT_ALIGNMENT_LEADING = DWRITE_TEXT_ALIGNMENT.LEADING;
pub const DWRITE_TEXT_ALIGNMENT_TRAILING = DWRITE_TEXT_ALIGNMENT.TRAILING;
pub const DWRITE_TEXT_ALIGNMENT_CENTER = DWRITE_TEXT_ALIGNMENT.CENTER;
pub const DWRITE_TEXT_ALIGNMENT_JUSTIFIED = DWRITE_TEXT_ALIGNMENT.JUSTIFIED;

pub const DWRITE_PARAGRAPH_ALIGNMENT = enum(i32) {
    NEAR = 0,
    FAR = 1,
    CENTER = 2,
};
pub const DWRITE_PARAGRAPH_ALIGNMENT_NEAR = DWRITE_PARAGRAPH_ALIGNMENT.NEAR;
pub const DWRITE_PARAGRAPH_ALIGNMENT_FAR = DWRITE_PARAGRAPH_ALIGNMENT.FAR;
pub const DWRITE_PARAGRAPH_ALIGNMENT_CENTER = DWRITE_PARAGRAPH_ALIGNMENT.CENTER;

pub const DWRITE_WORD_WRAPPING = enum(i32) {
    WRAP = 0,
    NO_WRAP = 1,
    EMERGENCY_BREAK = 2,
    WHOLE_WORD = 3,
    CHARACTER = 4,
};
pub const DWRITE_WORD_WRAPPING_WRAP = DWRITE_WORD_WRAPPING.WRAP;
pub const DWRITE_WORD_WRAPPING_NO_WRAP = DWRITE_WORD_WRAPPING.NO_WRAP;
pub const DWRITE_WORD_WRAPPING_EMERGENCY_BREAK = DWRITE_WORD_WRAPPING.EMERGENCY_BREAK;
pub const DWRITE_WORD_WRAPPING_WHOLE_WORD = DWRITE_WORD_WRAPPING.WHOLE_WORD;
pub const DWRITE_WORD_WRAPPING_CHARACTER = DWRITE_WORD_WRAPPING.CHARACTER;

pub const DWRITE_LINE_SPACING_METHOD = enum(i32) {
    DEFAULT = 0,
    UNIFORM = 1,
    PROPORTIONAL = 2,
};
pub const DWRITE_LINE_SPACING_METHOD_DEFAULT = DWRITE_LINE_SPACING_METHOD.DEFAULT;
pub const DWRITE_LINE_SPACING_METHOD_UNIFORM = DWRITE_LINE_SPACING_METHOD.UNIFORM;
pub const DWRITE_LINE_SPACING_METHOD_PROPORTIONAL = DWRITE_LINE_SPACING_METHOD.PROPORTIONAL;

pub const DWRITE_TRIMMING_GRANULARITY = enum(i32) {
    NONE = 0,
    CHARACTER = 1,
    WORD = 2,
};
pub const DWRITE_TRIMMING_GRANULARITY_NONE = DWRITE_TRIMMING_GRANULARITY.NONE;
pub const DWRITE_TRIMMING_GRANULARITY_CHARACTER = DWRITE_TRIMMING_GRANULARITY.CHARACTER;
pub const DWRITE_TRIMMING_GRANULARITY_WORD = DWRITE_TRIMMING_GRANULARITY.WORD;

pub const DWRITE_FONT_FEATURE_TAG = enum(u32) {
    ALTERNATIVE_FRACTIONS = 1668441697,
    PETITE_CAPITALS_FROM_CAPITALS = 1668297315,
    SMALL_CAPITALS_FROM_CAPITALS = 1668493923,
    CONTEXTUAL_ALTERNATES = 1953259875,
    CASE_SENSITIVE_FORMS = 1702060387,
    GLYPH_COMPOSITION_DECOMPOSITION = 1886217059,
    CONTEXTUAL_LIGATURES = 1734962275,
    CAPITAL_SPACING = 1886613603,
    CONTEXTUAL_SWASH = 1752658787,
    CURSIVE_POSITIONING = 1936880995,
    DEFAULT = 1953261156,
    DISCRETIONARY_LIGATURES = 1734962276,
    EXPERT_FORMS = 1953527909,
    FRACTIONS = 1667330662,
    FULL_WIDTH = 1684633446,
    HALF_FORMS = 1718378856,
    HALANT_FORMS = 1852596584,
    ALTERNATE_HALF_WIDTH = 1953259880,
    HISTORICAL_FORMS = 1953720680,
    HORIZONTAL_KANA_ALTERNATES = 1634626408,
    HISTORICAL_LIGATURES = 1734962280,
    HALF_WIDTH = 1684633448,
    HOJO_KANJI_FORMS = 1869246312,
    JIS04_FORMS = 875589738,
    JIS78_FORMS = 943157354,
    JIS83_FORMS = 859336810,
    JIS90_FORMS = 809070698,
    KERNING = 1852990827,
    STANDARD_LIGATURES = 1634167148,
    LINING_FIGURES = 1836412524,
    LOCALIZED_FORMS = 1818455916,
    MARK_POSITIONING = 1802658157,
    MATHEMATICAL_GREEK = 1802659693,
    MARK_TO_MARK_POSITIONING = 1802333037,
    ALTERNATE_ANNOTATION_FORMS = 1953259886,
    NLC_KANJI_FORMS = 1801677934,
    OLD_STYLE_FIGURES = 1836412527,
    ORDINALS = 1852076655,
    PROPORTIONAL_ALTERNATE_WIDTH = 1953259888,
    PETITE_CAPITALS = 1885430640,
    PROPORTIONAL_FIGURES = 1836412528,
    PROPORTIONAL_WIDTHS = 1684633456,
    QUARTER_WIDTHS = 1684633457,
    REQUIRED_LIGATURES = 1734962290,
    RUBY_NOTATION_FORMS = 2036495730,
    STYLISTIC_ALTERNATES = 1953259891,
    SCIENTIFIC_INFERIORS = 1718511987,
    SMALL_CAPITALS = 1885564275,
    SIMPLIFIED_FORMS = 1819307379,
    STYLISTIC_SET_1 = 825258867,
    STYLISTIC_SET_2 = 842036083,
    STYLISTIC_SET_3 = 858813299,
    STYLISTIC_SET_4 = 875590515,
    STYLISTIC_SET_5 = 892367731,
    STYLISTIC_SET_6 = 909144947,
    STYLISTIC_SET_7 = 925922163,
    STYLISTIC_SET_8 = 942699379,
    STYLISTIC_SET_9 = 959476595,
    STYLISTIC_SET_10 = 808547187,
    STYLISTIC_SET_11 = 825324403,
    STYLISTIC_SET_12 = 842101619,
    STYLISTIC_SET_13 = 858878835,
    STYLISTIC_SET_14 = 875656051,
    STYLISTIC_SET_15 = 892433267,
    STYLISTIC_SET_16 = 909210483,
    STYLISTIC_SET_17 = 925987699,
    STYLISTIC_SET_18 = 942764915,
    STYLISTIC_SET_19 = 959542131,
    STYLISTIC_SET_20 = 808612723,
    SUBSCRIPT = 1935832435,
    SUPERSCRIPT = 1936749939,
    SWASH = 1752397683,
    TITLING = 1819568500,
    TRADITIONAL_NAME_FORMS = 1835101812,
    TABULAR_FIGURES = 1836412532,
    TRADITIONAL_FORMS = 1684107892,
    THIRD_WIDTHS = 1684633460,
    UNICASE = 1667853941,
    VERTICAL_WRITING = 1953654134,
    VERTICAL_ALTERNATES_AND_ROTATION = 846492278,
    SLASHED_ZERO = 1869768058,
};
pub const DWRITE_FONT_FEATURE_TAG_ALTERNATIVE_FRACTIONS = DWRITE_FONT_FEATURE_TAG.ALTERNATIVE_FRACTIONS;
pub const DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS_FROM_CAPITALS = DWRITE_FONT_FEATURE_TAG.PETITE_CAPITALS_FROM_CAPITALS;
pub const DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS_FROM_CAPITALS = DWRITE_FONT_FEATURE_TAG.SMALL_CAPITALS_FROM_CAPITALS;
pub const DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_ALTERNATES = DWRITE_FONT_FEATURE_TAG.CONTEXTUAL_ALTERNATES;
pub const DWRITE_FONT_FEATURE_TAG_CASE_SENSITIVE_FORMS = DWRITE_FONT_FEATURE_TAG.CASE_SENSITIVE_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_GLYPH_COMPOSITION_DECOMPOSITION = DWRITE_FONT_FEATURE_TAG.GLYPH_COMPOSITION_DECOMPOSITION;
pub const DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_LIGATURES = DWRITE_FONT_FEATURE_TAG.CONTEXTUAL_LIGATURES;
pub const DWRITE_FONT_FEATURE_TAG_CAPITAL_SPACING = DWRITE_FONT_FEATURE_TAG.CAPITAL_SPACING;
pub const DWRITE_FONT_FEATURE_TAG_CONTEXTUAL_SWASH = DWRITE_FONT_FEATURE_TAG.CONTEXTUAL_SWASH;
pub const DWRITE_FONT_FEATURE_TAG_CURSIVE_POSITIONING = DWRITE_FONT_FEATURE_TAG.CURSIVE_POSITIONING;
pub const DWRITE_FONT_FEATURE_TAG_DEFAULT = DWRITE_FONT_FEATURE_TAG.DEFAULT;
pub const DWRITE_FONT_FEATURE_TAG_DISCRETIONARY_LIGATURES = DWRITE_FONT_FEATURE_TAG.DISCRETIONARY_LIGATURES;
pub const DWRITE_FONT_FEATURE_TAG_EXPERT_FORMS = DWRITE_FONT_FEATURE_TAG.EXPERT_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_FRACTIONS = DWRITE_FONT_FEATURE_TAG.FRACTIONS;
pub const DWRITE_FONT_FEATURE_TAG_FULL_WIDTH = DWRITE_FONT_FEATURE_TAG.FULL_WIDTH;
pub const DWRITE_FONT_FEATURE_TAG_HALF_FORMS = DWRITE_FONT_FEATURE_TAG.HALF_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_HALANT_FORMS = DWRITE_FONT_FEATURE_TAG.HALANT_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_ALTERNATE_HALF_WIDTH = DWRITE_FONT_FEATURE_TAG.ALTERNATE_HALF_WIDTH;
pub const DWRITE_FONT_FEATURE_TAG_HISTORICAL_FORMS = DWRITE_FONT_FEATURE_TAG.HISTORICAL_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_HORIZONTAL_KANA_ALTERNATES = DWRITE_FONT_FEATURE_TAG.HORIZONTAL_KANA_ALTERNATES;
pub const DWRITE_FONT_FEATURE_TAG_HISTORICAL_LIGATURES = DWRITE_FONT_FEATURE_TAG.HISTORICAL_LIGATURES;
pub const DWRITE_FONT_FEATURE_TAG_HALF_WIDTH = DWRITE_FONT_FEATURE_TAG.HALF_WIDTH;
pub const DWRITE_FONT_FEATURE_TAG_HOJO_KANJI_FORMS = DWRITE_FONT_FEATURE_TAG.HOJO_KANJI_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_JIS04_FORMS = DWRITE_FONT_FEATURE_TAG.JIS04_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_JIS78_FORMS = DWRITE_FONT_FEATURE_TAG.JIS78_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_JIS83_FORMS = DWRITE_FONT_FEATURE_TAG.JIS83_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_JIS90_FORMS = DWRITE_FONT_FEATURE_TAG.JIS90_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_KERNING = DWRITE_FONT_FEATURE_TAG.KERNING;
pub const DWRITE_FONT_FEATURE_TAG_STANDARD_LIGATURES = DWRITE_FONT_FEATURE_TAG.STANDARD_LIGATURES;
pub const DWRITE_FONT_FEATURE_TAG_LINING_FIGURES = DWRITE_FONT_FEATURE_TAG.LINING_FIGURES;
pub const DWRITE_FONT_FEATURE_TAG_LOCALIZED_FORMS = DWRITE_FONT_FEATURE_TAG.LOCALIZED_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_MARK_POSITIONING = DWRITE_FONT_FEATURE_TAG.MARK_POSITIONING;
pub const DWRITE_FONT_FEATURE_TAG_MATHEMATICAL_GREEK = DWRITE_FONT_FEATURE_TAG.MATHEMATICAL_GREEK;
pub const DWRITE_FONT_FEATURE_TAG_MARK_TO_MARK_POSITIONING = DWRITE_FONT_FEATURE_TAG.MARK_TO_MARK_POSITIONING;
pub const DWRITE_FONT_FEATURE_TAG_ALTERNATE_ANNOTATION_FORMS = DWRITE_FONT_FEATURE_TAG.ALTERNATE_ANNOTATION_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_NLC_KANJI_FORMS = DWRITE_FONT_FEATURE_TAG.NLC_KANJI_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_OLD_STYLE_FIGURES = DWRITE_FONT_FEATURE_TAG.OLD_STYLE_FIGURES;
pub const DWRITE_FONT_FEATURE_TAG_ORDINALS = DWRITE_FONT_FEATURE_TAG.ORDINALS;
pub const DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_ALTERNATE_WIDTH = DWRITE_FONT_FEATURE_TAG.PROPORTIONAL_ALTERNATE_WIDTH;
pub const DWRITE_FONT_FEATURE_TAG_PETITE_CAPITALS = DWRITE_FONT_FEATURE_TAG.PETITE_CAPITALS;
pub const DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_FIGURES = DWRITE_FONT_FEATURE_TAG.PROPORTIONAL_FIGURES;
pub const DWRITE_FONT_FEATURE_TAG_PROPORTIONAL_WIDTHS = DWRITE_FONT_FEATURE_TAG.PROPORTIONAL_WIDTHS;
pub const DWRITE_FONT_FEATURE_TAG_QUARTER_WIDTHS = DWRITE_FONT_FEATURE_TAG.QUARTER_WIDTHS;
pub const DWRITE_FONT_FEATURE_TAG_REQUIRED_LIGATURES = DWRITE_FONT_FEATURE_TAG.REQUIRED_LIGATURES;
pub const DWRITE_FONT_FEATURE_TAG_RUBY_NOTATION_FORMS = DWRITE_FONT_FEATURE_TAG.RUBY_NOTATION_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_ALTERNATES = DWRITE_FONT_FEATURE_TAG.STYLISTIC_ALTERNATES;
pub const DWRITE_FONT_FEATURE_TAG_SCIENTIFIC_INFERIORS = DWRITE_FONT_FEATURE_TAG.SCIENTIFIC_INFERIORS;
pub const DWRITE_FONT_FEATURE_TAG_SMALL_CAPITALS = DWRITE_FONT_FEATURE_TAG.SMALL_CAPITALS;
pub const DWRITE_FONT_FEATURE_TAG_SIMPLIFIED_FORMS = DWRITE_FONT_FEATURE_TAG.SIMPLIFIED_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_1 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_1;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_2 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_2;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_3 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_3;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_4 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_4;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_5 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_5;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_6 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_6;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_7 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_7;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_8 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_8;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_9 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_9;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_10 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_10;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_11 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_11;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_12 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_12;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_13 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_13;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_14 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_14;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_15 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_15;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_16 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_16;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_17 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_17;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_18 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_18;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_19 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_19;
pub const DWRITE_FONT_FEATURE_TAG_STYLISTIC_SET_20 = DWRITE_FONT_FEATURE_TAG.STYLISTIC_SET_20;
pub const DWRITE_FONT_FEATURE_TAG_SUBSCRIPT = DWRITE_FONT_FEATURE_TAG.SUBSCRIPT;
pub const DWRITE_FONT_FEATURE_TAG_SUPERSCRIPT = DWRITE_FONT_FEATURE_TAG.SUPERSCRIPT;
pub const DWRITE_FONT_FEATURE_TAG_SWASH = DWRITE_FONT_FEATURE_TAG.SWASH;
pub const DWRITE_FONT_FEATURE_TAG_TITLING = DWRITE_FONT_FEATURE_TAG.TITLING;
pub const DWRITE_FONT_FEATURE_TAG_TRADITIONAL_NAME_FORMS = DWRITE_FONT_FEATURE_TAG.TRADITIONAL_NAME_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_TABULAR_FIGURES = DWRITE_FONT_FEATURE_TAG.TABULAR_FIGURES;
pub const DWRITE_FONT_FEATURE_TAG_TRADITIONAL_FORMS = DWRITE_FONT_FEATURE_TAG.TRADITIONAL_FORMS;
pub const DWRITE_FONT_FEATURE_TAG_THIRD_WIDTHS = DWRITE_FONT_FEATURE_TAG.THIRD_WIDTHS;
pub const DWRITE_FONT_FEATURE_TAG_UNICASE = DWRITE_FONT_FEATURE_TAG.UNICASE;
pub const DWRITE_FONT_FEATURE_TAG_VERTICAL_WRITING = DWRITE_FONT_FEATURE_TAG.VERTICAL_WRITING;
pub const DWRITE_FONT_FEATURE_TAG_VERTICAL_ALTERNATES_AND_ROTATION = DWRITE_FONT_FEATURE_TAG.VERTICAL_ALTERNATES_AND_ROTATION;
pub const DWRITE_FONT_FEATURE_TAG_SLASHED_ZERO = DWRITE_FONT_FEATURE_TAG.SLASHED_ZERO;

pub const DWRITE_TEXT_RANGE = extern struct {
    startPosition: u32,
    length: u32,
};

pub const DWRITE_FONT_FEATURE = extern struct {
    nameTag: DWRITE_FONT_FEATURE_TAG,
    parameter: u32,
};

pub const DWRITE_TYPOGRAPHIC_FEATURES = extern struct {
    features: ?*DWRITE_FONT_FEATURE,
    featureCount: u32,
};

pub const DWRITE_TRIMMING = extern struct {
    granularity: DWRITE_TRIMMING_GRANULARITY,
    delimiter: u32,
    delimiterCount: u32,
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteTextFormat_Value = Guid.initString("9c906818-31d7-4fd3-a151-7c5e225db55a");
pub const IID_IDWriteTextFormat = &IID_IDWriteTextFormat_Value;
pub const IDWriteTextFormat = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetTextAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                textAlignment: DWRITE_TEXT_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                textAlignment: DWRITE_TEXT_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetParagraphAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                paragraphAlignment: DWRITE_PARAGRAPH_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                paragraphAlignment: DWRITE_PARAGRAPH_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetWordWrapping: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                wordWrapping: DWRITE_WORD_WRAPPING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                wordWrapping: DWRITE_WORD_WRAPPING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetReadingDirection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                readingDirection: DWRITE_READING_DIRECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                readingDirection: DWRITE_READING_DIRECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFlowDirection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                flowDirection: DWRITE_FLOW_DIRECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                flowDirection: DWRITE_FLOW_DIRECTION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetIncrementalTabStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                incrementalTabStop: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                incrementalTabStop: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTrimming: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                trimmingOptions: ?*const DWRITE_TRIMMING,
                trimmingSign: ?*IDWriteInlineObject,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                trimmingOptions: ?*const DWRITE_TRIMMING,
                trimmingSign: ?*IDWriteInlineObject,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetLineSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                lineSpacingMethod: DWRITE_LINE_SPACING_METHOD,
                lineSpacing: f32,
                baseline: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                lineSpacingMethod: DWRITE_LINE_SPACING_METHOD,
                lineSpacing: f32,
                baseline: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_TEXT_ALIGNMENT,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_TEXT_ALIGNMENT,
        },
        GetParagraphAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_PARAGRAPH_ALIGNMENT,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_PARAGRAPH_ALIGNMENT,
        },
        GetWordWrapping: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_WORD_WRAPPING,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_WORD_WRAPPING,
        },
        GetReadingDirection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_READING_DIRECTION,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_READING_DIRECTION,
        },
        GetFlowDirection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FLOW_DIRECTION,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FLOW_DIRECTION,
        },
        GetIncrementalTabStop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        GetTrimming: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                trimmingOptions: ?*DWRITE_TRIMMING,
                trimmingSign: ?*?*IDWriteInlineObject,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                trimmingOptions: ?*DWRITE_TRIMMING,
                trimmingSign: ?*?*IDWriteInlineObject,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLineSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                lineSpacingMethod: ?*DWRITE_LINE_SPACING_METHOD,
                lineSpacing: ?*f32,
                baseline: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                lineSpacingMethod: ?*DWRITE_LINE_SPACING_METHOD,
                lineSpacing: ?*f32,
                baseline: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                fontCollection: ?*?*IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                fontCollection: ?*?*IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFamilyNameLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontFamilyName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                fontFamilyName: [*:0]u16,
                nameSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                fontFamilyName: [*:0]u16,
                nameSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontWeight: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_WEIGHT,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_WEIGHT,
        },
        GetFontStyle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STYLE,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STYLE,
        },
        GetFontStretch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STRETCH,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STRETCH,
        },
        GetFontSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        GetLocaleNameLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetLocaleName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat,
                localeName: [*:0]u16,
                nameSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat,
                localeName: [*:0]u16,
                nameSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetTextAlignment(self: *const T, textAlignment: DWRITE_TEXT_ALIGNMENT) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetTextAlignment(@as(*const IDWriteTextFormat, @ptrCast(self)), textAlignment);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetParagraphAlignment(self: *const T, paragraphAlignment: DWRITE_PARAGRAPH_ALIGNMENT) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetParagraphAlignment(@as(*const IDWriteTextFormat, @ptrCast(self)), paragraphAlignment);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetWordWrapping(self: *const T, wordWrapping: DWRITE_WORD_WRAPPING) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetWordWrapping(@as(*const IDWriteTextFormat, @ptrCast(self)), wordWrapping);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetReadingDirection(self: *const T, readingDirection: DWRITE_READING_DIRECTION) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetReadingDirection(@as(*const IDWriteTextFormat, @ptrCast(self)), readingDirection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetFlowDirection(self: *const T, flowDirection: DWRITE_FLOW_DIRECTION) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetFlowDirection(@as(*const IDWriteTextFormat, @ptrCast(self)), flowDirection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetIncrementalTabStop(self: *const T, incrementalTabStop: f32) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetIncrementalTabStop(@as(*const IDWriteTextFormat, @ptrCast(self)), incrementalTabStop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetTrimming(self: *const T, trimmingOptions: ?*const DWRITE_TRIMMING, trimmingSign: ?*IDWriteInlineObject) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetTrimming(@as(*const IDWriteTextFormat, @ptrCast(self)), trimmingOptions, trimmingSign);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_SetLineSpacing(self: *const T, lineSpacingMethod: DWRITE_LINE_SPACING_METHOD, lineSpacing: f32, baseline: f32) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).SetLineSpacing(@as(*const IDWriteTextFormat, @ptrCast(self)), lineSpacingMethod, lineSpacing, baseline);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetTextAlignment(self: *const T) DWRITE_TEXT_ALIGNMENT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetTextAlignment(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetParagraphAlignment(self: *const T) DWRITE_PARAGRAPH_ALIGNMENT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetParagraphAlignment(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetWordWrapping(self: *const T) DWRITE_WORD_WRAPPING {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetWordWrapping(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetReadingDirection(self: *const T) DWRITE_READING_DIRECTION {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetReadingDirection(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFlowDirection(self: *const T) DWRITE_FLOW_DIRECTION {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFlowDirection(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetIncrementalTabStop(self: *const T) f32 {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetIncrementalTabStop(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetTrimming(self: *const T, trimmingOptions: ?*DWRITE_TRIMMING, trimmingSign: ?*?*IDWriteInlineObject) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetTrimming(@as(*const IDWriteTextFormat, @ptrCast(self)), trimmingOptions, trimmingSign);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetLineSpacing(self: *const T, lineSpacingMethod: ?*DWRITE_LINE_SPACING_METHOD, lineSpacing: ?*f32, baseline: ?*f32) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetLineSpacing(@as(*const IDWriteTextFormat, @ptrCast(self)), lineSpacingMethod, lineSpacing, baseline);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFontCollection(self: *const T, fontCollection: ?*?*IDWriteFontCollection) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFontCollection(@as(*const IDWriteTextFormat, @ptrCast(self)), fontCollection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFontFamilyNameLength(self: *const T) u32 {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFontFamilyNameLength(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFontFamilyName(self: *const T, fontFamilyName: [*:0]u16, nameSize: u32) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFontFamilyName(@as(*const IDWriteTextFormat, @ptrCast(self)), fontFamilyName, nameSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFontWeight(self: *const T) DWRITE_FONT_WEIGHT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFontWeight(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFontStyle(self: *const T) DWRITE_FONT_STYLE {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFontStyle(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFontStretch(self: *const T) DWRITE_FONT_STRETCH {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFontStretch(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetFontSize(self: *const T) f32 {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetFontSize(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetLocaleNameLength(self: *const T) u32 {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetLocaleNameLength(@as(*const IDWriteTextFormat, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat_GetLocaleName(self: *const T, localeName: [*:0]u16, nameSize: u32) HRESULT {
                return @as(*const IDWriteTextFormat.VTable, @ptrCast(self.vtable)).GetLocaleName(@as(*const IDWriteTextFormat, @ptrCast(self)), localeName, nameSize);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteTypography_Value = Guid.initString("55f1112b-1dc2-4b3c-9541-f46894ed85b6");
pub const IID_IDWriteTypography = &IID_IDWriteTypography_Value;
pub const IDWriteTypography = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AddFontFeature: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTypography,
                fontFeature: DWRITE_FONT_FEATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTypography,
                fontFeature: DWRITE_FONT_FEATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFeatureCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTypography,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteTypography,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontFeature: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTypography,
                fontFeatureIndex: u32,
                fontFeature: ?*DWRITE_FONT_FEATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTypography,
                fontFeatureIndex: u32,
                fontFeature: ?*DWRITE_FONT_FEATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTypography_AddFontFeature(self: *const T, fontFeature: DWRITE_FONT_FEATURE) HRESULT {
                return @as(*const IDWriteTypography.VTable, @ptrCast(self.vtable)).AddFontFeature(@as(*const IDWriteTypography, @ptrCast(self)), fontFeature);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTypography_GetFontFeatureCount(self: *const T) u32 {
                return @as(*const IDWriteTypography.VTable, @ptrCast(self.vtable)).GetFontFeatureCount(@as(*const IDWriteTypography, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTypography_GetFontFeature(self: *const T, fontFeatureIndex: u32, fontFeature: ?*DWRITE_FONT_FEATURE) HRESULT {
                return @as(*const IDWriteTypography.VTable, @ptrCast(self.vtable)).GetFontFeature(@as(*const IDWriteTypography, @ptrCast(self)), fontFeatureIndex, fontFeature);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_SCRIPT_SHAPES = enum(u32) {
    DEFAULT = 0,
    NO_VISUAL = 1,
    _,
    pub fn initFlags(o: struct {
        DEFAULT: u1 = 0,
        NO_VISUAL: u1 = 0,
    }) DWRITE_SCRIPT_SHAPES {
        return @as(DWRITE_SCRIPT_SHAPES, @enumFromInt((if (o.DEFAULT == 1) @intFromEnum(DWRITE_SCRIPT_SHAPES.DEFAULT) else 0) | (if (o.NO_VISUAL == 1) @intFromEnum(DWRITE_SCRIPT_SHAPES.NO_VISUAL) else 0)));
    }
};
pub const DWRITE_SCRIPT_SHAPES_DEFAULT = DWRITE_SCRIPT_SHAPES.DEFAULT;
pub const DWRITE_SCRIPT_SHAPES_NO_VISUAL = DWRITE_SCRIPT_SHAPES.NO_VISUAL;

pub const DWRITE_SCRIPT_ANALYSIS = extern struct {
    script: u16,
    shapes: DWRITE_SCRIPT_SHAPES,
};

pub const DWRITE_BREAK_CONDITION = enum(i32) {
    NEUTRAL = 0,
    CAN_BREAK = 1,
    MAY_NOT_BREAK = 2,
    MUST_BREAK = 3,
};
pub const DWRITE_BREAK_CONDITION_NEUTRAL = DWRITE_BREAK_CONDITION.NEUTRAL;
pub const DWRITE_BREAK_CONDITION_CAN_BREAK = DWRITE_BREAK_CONDITION.CAN_BREAK;
pub const DWRITE_BREAK_CONDITION_MAY_NOT_BREAK = DWRITE_BREAK_CONDITION.MAY_NOT_BREAK;
pub const DWRITE_BREAK_CONDITION_MUST_BREAK = DWRITE_BREAK_CONDITION.MUST_BREAK;

pub const DWRITE_LINE_BREAKPOINT = extern struct {
    _bitfield: u8,
};

pub const DWRITE_NUMBER_SUBSTITUTION_METHOD = enum(i32) {
    FROM_CULTURE = 0,
    CONTEXTUAL = 1,
    NONE = 2,
    NATIONAL = 3,
    TRADITIONAL = 4,
};
pub const DWRITE_NUMBER_SUBSTITUTION_METHOD_FROM_CULTURE = DWRITE_NUMBER_SUBSTITUTION_METHOD.FROM_CULTURE;
pub const DWRITE_NUMBER_SUBSTITUTION_METHOD_CONTEXTUAL = DWRITE_NUMBER_SUBSTITUTION_METHOD.CONTEXTUAL;
pub const DWRITE_NUMBER_SUBSTITUTION_METHOD_NONE = DWRITE_NUMBER_SUBSTITUTION_METHOD.NONE;
pub const DWRITE_NUMBER_SUBSTITUTION_METHOD_NATIONAL = DWRITE_NUMBER_SUBSTITUTION_METHOD.NATIONAL;
pub const DWRITE_NUMBER_SUBSTITUTION_METHOD_TRADITIONAL = DWRITE_NUMBER_SUBSTITUTION_METHOD.TRADITIONAL;

const IID_IDWriteNumberSubstitution_Value = Guid.initString("14885cc9-bab0-4f90-b6ed-5c366a2cd03d");
pub const IID_IDWriteNumberSubstitution = &IID_IDWriteNumberSubstitution_Value;
pub const IDWriteNumberSubstitution = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_SHAPING_TEXT_PROPERTIES = extern struct {
    _bitfield: u16,
};

pub const DWRITE_SHAPING_GLYPH_PROPERTIES = extern struct {
    _bitfield: u16,
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteTextAnalysisSource_Value = Guid.initString("688e1a58-5094-47c8-adc8-fbcea60ae92b");
pub const IID_IDWriteTextAnalysisSource = &IID_IDWriteTextAnalysisSource_Value;
pub const IDWriteTextAnalysisSource = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetTextAtPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textString: ?*const ?*u16,
                textLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textString: ?*const ?*u16,
                textLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextBeforePosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textString: ?*const ?*u16,
                textLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textString: ?*const ?*u16,
                textLength: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetParagraphReadingDirection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSource,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_READING_DIRECTION,
            else => *const fn (
                self: *const IDWriteTextAnalysisSource,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_READING_DIRECTION,
        },
        GetLocaleName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: ?*u32,
                localeName: ?*const ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: ?*u32,
                localeName: ?*const ?*u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetNumberSubstitution: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: ?*u32,
                numberSubstitution: ?*?*IDWriteNumberSubstitution,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: ?*u32,
                numberSubstitution: ?*?*IDWriteNumberSubstitution,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSource_GetTextAtPosition(self: *const T, textPosition: u32, textString: ?*const ?*u16, textLength: ?*u32) HRESULT {
                return @as(*const IDWriteTextAnalysisSource.VTable, @ptrCast(self.vtable)).GetTextAtPosition(@as(*const IDWriteTextAnalysisSource, @ptrCast(self)), textPosition, textString, textLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSource_GetTextBeforePosition(self: *const T, textPosition: u32, textString: ?*const ?*u16, textLength: ?*u32) HRESULT {
                return @as(*const IDWriteTextAnalysisSource.VTable, @ptrCast(self.vtable)).GetTextBeforePosition(@as(*const IDWriteTextAnalysisSource, @ptrCast(self)), textPosition, textString, textLength);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSource_GetParagraphReadingDirection(self: *const T) DWRITE_READING_DIRECTION {
                return @as(*const IDWriteTextAnalysisSource.VTable, @ptrCast(self.vtable)).GetParagraphReadingDirection(@as(*const IDWriteTextAnalysisSource, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSource_GetLocaleName(self: *const T, textPosition: u32, textLength: ?*u32, localeName: ?*const ?*u16) HRESULT {
                return @as(*const IDWriteTextAnalysisSource.VTable, @ptrCast(self.vtable)).GetLocaleName(@as(*const IDWriteTextAnalysisSource, @ptrCast(self)), textPosition, textLength, localeName);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSource_GetNumberSubstitution(self: *const T, textPosition: u32, textLength: ?*u32, numberSubstitution: ?*?*IDWriteNumberSubstitution) HRESULT {
                return @as(*const IDWriteTextAnalysisSource.VTable, @ptrCast(self.vtable)).GetNumberSubstitution(@as(*const IDWriteTextAnalysisSource, @ptrCast(self)), textPosition, textLength, numberSubstitution);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteTextAnalysisSink_Value = Guid.initString("5810cd44-0ca0-4701-b3fa-bec5182ae4f6");
pub const IID_IDWriteTextAnalysisSink = &IID_IDWriteTextAnalysisSink_Value;
pub const IDWriteTextAnalysisSink = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        SetScriptAnalysis: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetLineBreakpoints: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                lineBreakpoints: [*]const DWRITE_LINE_BREAKPOINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                lineBreakpoints: [*]const DWRITE_LINE_BREAKPOINT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetBidiLevel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                explicitLevel: u8,
                resolvedLevel: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                explicitLevel: u8,
                resolvedLevel: u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetNumberSubstitution: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                numberSubstitution: ?*IDWriteNumberSubstitution,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSink,
                textPosition: u32,
                textLength: u32,
                numberSubstitution: ?*IDWriteNumberSubstitution,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSink_SetScriptAnalysis(self: *const T, textPosition: u32, textLength: u32, scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS) HRESULT {
                return @as(*const IDWriteTextAnalysisSink.VTable, @ptrCast(self.vtable)).SetScriptAnalysis(@as(*const IDWriteTextAnalysisSink, @ptrCast(self)), textPosition, textLength, scriptAnalysis);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSink_SetLineBreakpoints(self: *const T, textPosition: u32, textLength: u32, lineBreakpoints: [*]const DWRITE_LINE_BREAKPOINT) HRESULT {
                return @as(*const IDWriteTextAnalysisSink.VTable, @ptrCast(self.vtable)).SetLineBreakpoints(@as(*const IDWriteTextAnalysisSink, @ptrCast(self)), textPosition, textLength, lineBreakpoints);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSink_SetBidiLevel(self: *const T, textPosition: u32, textLength: u32, explicitLevel: u8, resolvedLevel: u8) HRESULT {
                return @as(*const IDWriteTextAnalysisSink.VTable, @ptrCast(self.vtable)).SetBidiLevel(@as(*const IDWriteTextAnalysisSink, @ptrCast(self)), textPosition, textLength, explicitLevel, resolvedLevel);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSink_SetNumberSubstitution(self: *const T, textPosition: u32, textLength: u32, numberSubstitution: ?*IDWriteNumberSubstitution) HRESULT {
                return @as(*const IDWriteTextAnalysisSink.VTable, @ptrCast(self.vtable)).SetNumberSubstitution(@as(*const IDWriteTextAnalysisSink, @ptrCast(self)), textPosition, textLength, numberSubstitution);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteTextAnalyzer_Value = Guid.initString("b7e6163e-7f46-43b4-84b3-e4e6249c365d");
pub const IID_IDWriteTextAnalyzer = &IID_IDWriteTextAnalyzer_Value;
pub const IDWriteTextAnalyzer = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AnalyzeScript: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AnalyzeBidi: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AnalyzeNumberSubstitution: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AnalyzeLineBreakpoints: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGlyphs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer,
                textString: [*:0]const u16,
                textLength: u32,
                fontFace: ?*IDWriteFontFace,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                numberSubstitution: ?*IDWriteNumberSubstitution,
                features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES,
                featureRangeLengths: ?[*]const u32,
                featureRanges: u32,
                maxGlyphCount: u32,
                clusterMap: [*:0]u16,
                textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES,
                glyphIndices: [*:0]u16,
                glyphProps: [*]DWRITE_SHAPING_GLYPH_PROPERTIES,
                actualGlyphCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer,
                textString: [*:0]const u16,
                textLength: u32,
                fontFace: ?*IDWriteFontFace,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                numberSubstitution: ?*IDWriteNumberSubstitution,
                features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES,
                featureRangeLengths: ?[*]const u32,
                featureRanges: u32,
                maxGlyphCount: u32,
                clusterMap: [*:0]u16,
                textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES,
                glyphIndices: [*:0]u16,
                glyphProps: [*]DWRITE_SHAPING_GLYPH_PROPERTIES,
                actualGlyphCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGlyphPlacements: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer,
                textString: [*:0]const u16,
                clusterMap: [*:0]const u16,
                textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES,
                textLength: u32,
                glyphIndices: [*:0]const u16,
                glyphProps: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                glyphCount: u32,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES,
                featureRangeLengths: ?[*]const u32,
                featureRanges: u32,
                glyphAdvances: [*]f32,
                glyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer,
                textString: [*:0]const u16,
                clusterMap: [*:0]const u16,
                textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES,
                textLength: u32,
                glyphIndices: [*:0]const u16,
                glyphProps: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                glyphCount: u32,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES,
                featureRangeLengths: ?[*]const u32,
                featureRanges: u32,
                glyphAdvances: [*]f32,
                glyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGdiCompatibleGlyphPlacements: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer,
                textString: [*:0]const u16,
                clusterMap: [*:0]const u16,
                textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES,
                textLength: u32,
                glyphIndices: [*:0]const u16,
                glyphProps: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                glyphCount: u32,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES,
                featureRangeLengths: ?[*]const u32,
                featureRanges: u32,
                glyphAdvances: [*]f32,
                glyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer,
                textString: [*:0]const u16,
                clusterMap: [*:0]const u16,
                textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES,
                textLength: u32,
                glyphIndices: [*:0]const u16,
                glyphProps: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                glyphCount: u32,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES,
                featureRangeLengths: ?[*]const u32,
                featureRanges: u32,
                glyphAdvances: [*]f32,
                glyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer_AnalyzeScript(self: *const T, analysisSource: ?*IDWriteTextAnalysisSource, textPosition: u32, textLength: u32, analysisSink: ?*IDWriteTextAnalysisSink) HRESULT {
                return @as(*const IDWriteTextAnalyzer.VTable, @ptrCast(self.vtable)).AnalyzeScript(@as(*const IDWriteTextAnalyzer, @ptrCast(self)), analysisSource, textPosition, textLength, analysisSink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer_AnalyzeBidi(self: *const T, analysisSource: ?*IDWriteTextAnalysisSource, textPosition: u32, textLength: u32, analysisSink: ?*IDWriteTextAnalysisSink) HRESULT {
                return @as(*const IDWriteTextAnalyzer.VTable, @ptrCast(self.vtable)).AnalyzeBidi(@as(*const IDWriteTextAnalyzer, @ptrCast(self)), analysisSource, textPosition, textLength, analysisSink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer_AnalyzeNumberSubstitution(self: *const T, analysisSource: ?*IDWriteTextAnalysisSource, textPosition: u32, textLength: u32, analysisSink: ?*IDWriteTextAnalysisSink) HRESULT {
                return @as(*const IDWriteTextAnalyzer.VTable, @ptrCast(self.vtable)).AnalyzeNumberSubstitution(@as(*const IDWriteTextAnalyzer, @ptrCast(self)), analysisSource, textPosition, textLength, analysisSink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer_AnalyzeLineBreakpoints(self: *const T, analysisSource: ?*IDWriteTextAnalysisSource, textPosition: u32, textLength: u32, analysisSink: ?*IDWriteTextAnalysisSink) HRESULT {
                return @as(*const IDWriteTextAnalyzer.VTable, @ptrCast(self.vtable)).AnalyzeLineBreakpoints(@as(*const IDWriteTextAnalyzer, @ptrCast(self)), analysisSource, textPosition, textLength, analysisSink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer_GetGlyphs(self: *const T, textString: [*:0]const u16, textLength: u32, fontFace: ?*IDWriteFontFace, isSideways: BOOL, isRightToLeft: BOOL, scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS, localeName: ?[*:0]const u16, numberSubstitution: ?*IDWriteNumberSubstitution, features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES, featureRangeLengths: ?[*]const u32, featureRanges: u32, maxGlyphCount: u32, clusterMap: [*:0]u16, textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES, glyphIndices: [*:0]u16, glyphProps: [*]DWRITE_SHAPING_GLYPH_PROPERTIES, actualGlyphCount: ?*u32) HRESULT {
                return @as(*const IDWriteTextAnalyzer.VTable, @ptrCast(self.vtable)).GetGlyphs(@as(*const IDWriteTextAnalyzer, @ptrCast(self)), textString, textLength, fontFace, isSideways, isRightToLeft, scriptAnalysis, localeName, numberSubstitution, features, featureRangeLengths, featureRanges, maxGlyphCount, clusterMap, textProps, glyphIndices, glyphProps, actualGlyphCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer_GetGlyphPlacements(self: *const T, textString: [*:0]const u16, clusterMap: [*:0]const u16, textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES, textLength: u32, glyphIndices: [*:0]const u16, glyphProps: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES, glyphCount: u32, fontFace: ?*IDWriteFontFace, fontEmSize: f32, isSideways: BOOL, isRightToLeft: BOOL, scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS, localeName: ?[*:0]const u16, features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES, featureRangeLengths: ?[*]const u32, featureRanges: u32, glyphAdvances: [*]f32, glyphOffsets: [*]DWRITE_GLYPH_OFFSET) HRESULT {
                return @as(*const IDWriteTextAnalyzer.VTable, @ptrCast(self.vtable)).GetGlyphPlacements(@as(*const IDWriteTextAnalyzer, @ptrCast(self)), textString, clusterMap, textProps, textLength, glyphIndices, glyphProps, glyphCount, fontFace, fontEmSize, isSideways, isRightToLeft, scriptAnalysis, localeName, features, featureRangeLengths, featureRanges, glyphAdvances, glyphOffsets);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer_GetGdiCompatibleGlyphPlacements(self: *const T, textString: [*:0]const u16, clusterMap: [*:0]const u16, textProps: [*]DWRITE_SHAPING_TEXT_PROPERTIES, textLength: u32, glyphIndices: [*:0]const u16, glyphProps: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES, glyphCount: u32, fontFace: ?*IDWriteFontFace, fontEmSize: f32, pixelsPerDip: f32, transform: ?*const DWRITE_MATRIX, useGdiNatural: BOOL, isSideways: BOOL, isRightToLeft: BOOL, scriptAnalysis: ?*const DWRITE_SCRIPT_ANALYSIS, localeName: ?[*:0]const u16, features: ?[*]const ?*const DWRITE_TYPOGRAPHIC_FEATURES, featureRangeLengths: ?[*]const u32, featureRanges: u32, glyphAdvances: [*]f32, glyphOffsets: [*]DWRITE_GLYPH_OFFSET) HRESULT {
                return @as(*const IDWriteTextAnalyzer.VTable, @ptrCast(self.vtable)).GetGdiCompatibleGlyphPlacements(@as(*const IDWriteTextAnalyzer, @ptrCast(self)), textString, clusterMap, textProps, textLength, glyphIndices, glyphProps, glyphCount, fontFace, fontEmSize, pixelsPerDip, transform, useGdiNatural, isSideways, isRightToLeft, scriptAnalysis, localeName, features, featureRangeLengths, featureRanges, glyphAdvances, glyphOffsets);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_GLYPH_RUN = extern struct {
    fontFace: ?*IDWriteFontFace,
    fontEmSize: f32,
    glyphCount: u32,
    glyphIndices: ?*const u16,
    glyphAdvances: ?*const f32,
    glyphOffsets: ?*const DWRITE_GLYPH_OFFSET,
    isSideways: BOOL,
    bidiLevel: u32,
};

pub const DWRITE_GLYPH_RUN_DESCRIPTION = extern struct {
    localeName: ?[*:0]const u16,
    string: ?[*:0]const u16,
    stringLength: u32,
    clusterMap: ?*const u16,
    textPosition: u32,
};

pub const DWRITE_UNDERLINE = extern struct {
    width: f32,
    thickness: f32,
    offset: f32,
    runHeight: f32,
    readingDirection: DWRITE_READING_DIRECTION,
    flowDirection: DWRITE_FLOW_DIRECTION,
    localeName: ?[*:0]const u16,
    measuringMode: DWRITE_MEASURING_MODE,
};

pub const DWRITE_STRIKETHROUGH = extern struct {
    width: f32,
    thickness: f32,
    offset: f32,
    readingDirection: DWRITE_READING_DIRECTION,
    flowDirection: DWRITE_FLOW_DIRECTION,
    localeName: ?[*:0]const u16,
    measuringMode: DWRITE_MEASURING_MODE,
};

pub const DWRITE_LINE_METRICS = extern struct {
    length: u32,
    trailingWhitespaceLength: u32,
    newlineLength: u32,
    height: f32,
    baseline: f32,
    isTrimmed: BOOL,
};

pub const DWRITE_CLUSTER_METRICS = extern struct {
    width: f32,
    length: u16,
    _bitfield: u16,
};

pub const DWRITE_TEXT_METRICS = extern struct {
    left: f32,
    top: f32,
    width: f32,
    widthIncludingTrailingWhitespace: f32,
    height: f32,
    layoutWidth: f32,
    layoutHeight: f32,
    maxBidiReorderingDepth: u32,
    lineCount: u32,
};

pub const DWRITE_INLINE_OBJECT_METRICS = extern struct {
    width: f32,
    height: f32,
    baseline: f32,
    supportsSideways: BOOL,
};

pub const DWRITE_OVERHANG_METRICS = extern struct {
    left: f32,
    top: f32,
    right: f32,
    bottom: f32,
};

pub const DWRITE_HIT_TEST_METRICS = extern struct {
    textPosition: u32,
    length: u32,
    left: f32,
    top: f32,
    width: f32,
    height: f32,
    bidiLevel: u32,
    isText: BOOL,
    isTrimmed: BOOL,
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteInlineObject_Value = Guid.initString("8339fde3-106f-47ab-8373-1c6295eb10b3");
pub const IID_IDWriteInlineObject = &IID_IDWriteInlineObject_Value;
pub const IDWriteInlineObject = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        Draw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteInlineObject,
                clientDrawingContext: ?*anyopaque,
                renderer: ?*IDWriteTextRenderer,
                originX: f32,
                originY: f32,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteInlineObject,
                clientDrawingContext: ?*anyopaque,
                renderer: ?*IDWriteTextRenderer,
                originX: f32,
                originY: f32,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteInlineObject,
                metrics: ?*DWRITE_INLINE_OBJECT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteInlineObject,
                metrics: ?*DWRITE_INLINE_OBJECT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOverhangMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteInlineObject,
                overhangs: ?*DWRITE_OVERHANG_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteInlineObject,
                overhangs: ?*DWRITE_OVERHANG_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBreakConditions: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteInlineObject,
                breakConditionBefore: ?*DWRITE_BREAK_CONDITION,
                breakConditionAfter: ?*DWRITE_BREAK_CONDITION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteInlineObject,
                breakConditionBefore: ?*DWRITE_BREAK_CONDITION,
                breakConditionAfter: ?*DWRITE_BREAK_CONDITION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteInlineObject_Draw(self: *const T, clientDrawingContext: ?*anyopaque, renderer: ?*IDWriteTextRenderer, originX: f32, originY: f32, isSideways: BOOL, isRightToLeft: BOOL, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteInlineObject.VTable, @ptrCast(self.vtable)).Draw(@as(*const IDWriteInlineObject, @ptrCast(self)), clientDrawingContext, renderer, originX, originY, isSideways, isRightToLeft, clientDrawingEffect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteInlineObject_GetMetrics(self: *const T, metrics: ?*DWRITE_INLINE_OBJECT_METRICS) HRESULT {
                return @as(*const IDWriteInlineObject.VTable, @ptrCast(self.vtable)).GetMetrics(@as(*const IDWriteInlineObject, @ptrCast(self)), metrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteInlineObject_GetOverhangMetrics(self: *const T, overhangs: ?*DWRITE_OVERHANG_METRICS) HRESULT {
                return @as(*const IDWriteInlineObject.VTable, @ptrCast(self.vtable)).GetOverhangMetrics(@as(*const IDWriteInlineObject, @ptrCast(self)), overhangs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteInlineObject_GetBreakConditions(self: *const T, breakConditionBefore: ?*DWRITE_BREAK_CONDITION, breakConditionAfter: ?*DWRITE_BREAK_CONDITION) HRESULT {
                return @as(*const IDWriteInlineObject.VTable, @ptrCast(self.vtable)).GetBreakConditions(@as(*const IDWriteInlineObject, @ptrCast(self)), breakConditionBefore, breakConditionAfter);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWritePixelSnapping_Value = Guid.initString("eaf3a2da-ecf4-4d24-b644-b34f6842024b");
pub const IID_IDWritePixelSnapping = &IID_IDWritePixelSnapping_Value;
pub const IDWritePixelSnapping = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        IsPixelSnappingDisabled: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWritePixelSnapping,
                clientDrawingContext: ?*anyopaque,
                isDisabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWritePixelSnapping,
                clientDrawingContext: ?*anyopaque,
                isDisabled: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentTransform: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWritePixelSnapping,
                clientDrawingContext: ?*anyopaque,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWritePixelSnapping,
                clientDrawingContext: ?*anyopaque,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPixelsPerDip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWritePixelSnapping,
                clientDrawingContext: ?*anyopaque,
                pixelsPerDip: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWritePixelSnapping,
                clientDrawingContext: ?*anyopaque,
                pixelsPerDip: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWritePixelSnapping_IsPixelSnappingDisabled(self: *const T, clientDrawingContext: ?*anyopaque, isDisabled: ?*BOOL) HRESULT {
                return @as(*const IDWritePixelSnapping.VTable, @ptrCast(self.vtable)).IsPixelSnappingDisabled(@as(*const IDWritePixelSnapping, @ptrCast(self)), clientDrawingContext, isDisabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWritePixelSnapping_GetCurrentTransform(self: *const T, clientDrawingContext: ?*anyopaque, transform: ?*DWRITE_MATRIX) HRESULT {
                return @as(*const IDWritePixelSnapping.VTable, @ptrCast(self.vtable)).GetCurrentTransform(@as(*const IDWritePixelSnapping, @ptrCast(self)), clientDrawingContext, transform);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWritePixelSnapping_GetPixelsPerDip(self: *const T, clientDrawingContext: ?*anyopaque, pixelsPerDip: ?*f32) HRESULT {
                return @as(*const IDWritePixelSnapping.VTable, @ptrCast(self.vtable)).GetPixelsPerDip(@as(*const IDWritePixelSnapping, @ptrCast(self)), clientDrawingContext, pixelsPerDip);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteTextRenderer_Value = Guid.initString("ef8a8135-5cc6-45fe-8825-c5a0724eb819");
pub const IID_IDWriteTextRenderer = &IID_IDWriteTextRenderer_Value;
pub const IDWriteTextRenderer = extern struct {
    pub const VTable = extern struct {
        base: IDWritePixelSnapping.VTable,
        DrawGlyphRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                measuringMode: DWRITE_MEASURING_MODE,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                measuringMode: DWRITE_MEASURING_MODE,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawUnderline: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                underline: ?*const DWRITE_UNDERLINE,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                underline: ?*const DWRITE_UNDERLINE,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawStrikethrough: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                strikethrough: ?*const DWRITE_STRIKETHROUGH,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                strikethrough: ?*const DWRITE_STRIKETHROUGH,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawInlineObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                originX: f32,
                originY: f32,
                inlineObject: ?*IDWriteInlineObject,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer,
                clientDrawingContext: ?*anyopaque,
                originX: f32,
                originY: f32,
                inlineObject: ?*IDWriteInlineObject,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWritePixelSnapping.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer_DrawGlyphRun(self: *const T, clientDrawingContext: ?*anyopaque, baselineOriginX: f32, baselineOriginY: f32, measuringMode: DWRITE_MEASURING_MODE, glyphRun: ?*const DWRITE_GLYPH_RUN, glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer.VTable, @ptrCast(self.vtable)).DrawGlyphRun(@as(*const IDWriteTextRenderer, @ptrCast(self)), clientDrawingContext, baselineOriginX, baselineOriginY, measuringMode, glyphRun, glyphRunDescription, clientDrawingEffect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer_DrawUnderline(self: *const T, clientDrawingContext: ?*anyopaque, baselineOriginX: f32, baselineOriginY: f32, underline: ?*const DWRITE_UNDERLINE, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer.VTable, @ptrCast(self.vtable)).DrawUnderline(@as(*const IDWriteTextRenderer, @ptrCast(self)), clientDrawingContext, baselineOriginX, baselineOriginY, underline, clientDrawingEffect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer_DrawStrikethrough(self: *const T, clientDrawingContext: ?*anyopaque, baselineOriginX: f32, baselineOriginY: f32, strikethrough: ?*const DWRITE_STRIKETHROUGH, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer.VTable, @ptrCast(self.vtable)).DrawStrikethrough(@as(*const IDWriteTextRenderer, @ptrCast(self)), clientDrawingContext, baselineOriginX, baselineOriginY, strikethrough, clientDrawingEffect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer_DrawInlineObject(self: *const T, clientDrawingContext: ?*anyopaque, originX: f32, originY: f32, inlineObject: ?*IDWriteInlineObject, isSideways: BOOL, isRightToLeft: BOOL, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer.VTable, @ptrCast(self.vtable)).DrawInlineObject(@as(*const IDWriteTextRenderer, @ptrCast(self)), clientDrawingContext, originX, originY, inlineObject, isSideways, isRightToLeft, clientDrawingEffect);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteTextLayout_Value = Guid.initString("53737037-6d14-410b-9bfe-0b182bb70961");
pub const IID_IDWriteTextLayout = &IID_IDWriteTextLayout_Value;
pub const IDWriteTextLayout = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextFormat.VTable,
        SetMaxWidth: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                maxWidth: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                maxWidth: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetMaxHeight: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                maxHeight: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                maxHeight: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                fontCollection: ?*IDWriteFontCollection,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                fontCollection: ?*IDWriteFontCollection,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFontFamilyName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                fontFamilyName: ?[*:0]const u16,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                fontFamilyName: ?[*:0]const u16,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFontWeight: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                fontWeight: DWRITE_FONT_WEIGHT,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                fontWeight: DWRITE_FONT_WEIGHT,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFontStyle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                fontStyle: DWRITE_FONT_STYLE,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                fontStyle: DWRITE_FONT_STYLE,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFontStretch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                fontStretch: DWRITE_FONT_STRETCH,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                fontStretch: DWRITE_FONT_STRETCH,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetFontSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                fontSize: f32,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                fontSize: f32,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetUnderline: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                hasUnderline: BOOL,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                hasUnderline: BOOL,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetStrikethrough: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                hasStrikethrough: BOOL,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                hasStrikethrough: BOOL,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetDrawingEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                drawingEffect: ?*IUnknown,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                drawingEffect: ?*IUnknown,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetInlineObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                inlineObject: ?*IDWriteInlineObject,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                inlineObject: ?*IDWriteInlineObject,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetTypography: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                typography: ?*IDWriteTypography,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                typography: ?*IDWriteTypography,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetLocaleName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                localeName: ?[*:0]const u16,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                localeName: ?[*:0]const u16,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMaxWidth: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        GetMaxHeight: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        GetFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontCollection: ?*?*IDWriteFontCollection,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontCollection: ?*?*IDWriteFontCollection,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFamilyNameLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                nameLength: ?*u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                nameLength: ?*u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFamilyName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontFamilyName: [*:0]u16,
                nameSize: u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontFamilyName: [*:0]u16,
                nameSize: u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontWeight: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontWeight: ?*DWRITE_FONT_WEIGHT,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontWeight: ?*DWRITE_FONT_WEIGHT,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontStyle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontStyle: ?*DWRITE_FONT_STYLE,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontStyle: ?*DWRITE_FONT_STYLE,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontStretch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontStretch: ?*DWRITE_FONT_STRETCH,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontStretch: ?*DWRITE_FONT_STRETCH,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontSize: ?*f32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                fontSize: ?*f32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetUnderline: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                hasUnderline: ?*BOOL,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                hasUnderline: ?*BOOL,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStrikethrough: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                hasStrikethrough: ?*BOOL,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                hasStrikethrough: ?*BOOL,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetDrawingEffect: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                drawingEffect: ?*?*IUnknown,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                drawingEffect: ?*?*IUnknown,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInlineObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                inlineObject: ?*?*IDWriteInlineObject,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                inlineObject: ?*?*IDWriteInlineObject,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTypography: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                typography: ?*?*IDWriteTypography,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                typography: ?*?*IDWriteTypography,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocaleNameLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                nameLength: ?*u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                nameLength: ?*u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocaleName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                localeName: [*:0]u16,
                nameSize: u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                currentPosition: u32,
                localeName: [*:0]u16,
                nameSize: u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Draw: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                clientDrawingContext: ?*anyopaque,
                renderer: ?*IDWriteTextRenderer,
                originX: f32,
                originY: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                clientDrawingContext: ?*anyopaque,
                renderer: ?*IDWriteTextRenderer,
                originX: f32,
                originY: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLineMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                lineMetrics: ?[*]DWRITE_LINE_METRICS,
                maxLineCount: u32,
                actualLineCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                lineMetrics: ?[*]DWRITE_LINE_METRICS,
                maxLineCount: u32,
                actualLineCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                textMetrics: ?*DWRITE_TEXT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                textMetrics: ?*DWRITE_TEXT_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOverhangMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                overhangs: ?*DWRITE_OVERHANG_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                overhangs: ?*DWRITE_OVERHANG_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetClusterMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                clusterMetrics: ?[*]DWRITE_CLUSTER_METRICS,
                maxClusterCount: u32,
                actualClusterCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                clusterMetrics: ?[*]DWRITE_CLUSTER_METRICS,
                maxClusterCount: u32,
                actualClusterCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DetermineMinWidth: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                minWidth: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                minWidth: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HitTestPoint: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                pointX: f32,
                pointY: f32,
                isTrailingHit: ?*BOOL,
                isInside: ?*BOOL,
                hitTestMetrics: ?*DWRITE_HIT_TEST_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                pointX: f32,
                pointY: f32,
                isTrailingHit: ?*BOOL,
                isInside: ?*BOOL,
                hitTestMetrics: ?*DWRITE_HIT_TEST_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HitTestTextPosition: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                textPosition: u32,
                isTrailingHit: BOOL,
                pointX: ?*f32,
                pointY: ?*f32,
                hitTestMetrics: ?*DWRITE_HIT_TEST_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                textPosition: u32,
                isTrailingHit: BOOL,
                pointX: ?*f32,
                pointY: ?*f32,
                hitTestMetrics: ?*DWRITE_HIT_TEST_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HitTestTextRange: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout,
                textPosition: u32,
                textLength: u32,
                originX: f32,
                originY: f32,
                hitTestMetrics: ?[*]DWRITE_HIT_TEST_METRICS,
                maxHitTestMetricsCount: u32,
                actualHitTestMetricsCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout,
                textPosition: u32,
                textLength: u32,
                originX: f32,
                originY: f32,
                hitTestMetrics: ?[*]DWRITE_HIT_TEST_METRICS,
                maxHitTestMetricsCount: u32,
                actualHitTestMetricsCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextFormat.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetMaxWidth(self: *const T, maxWidth: f32) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetMaxWidth(@as(*const IDWriteTextLayout, @ptrCast(self)), maxWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetMaxHeight(self: *const T, maxHeight: f32) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetMaxHeight(@as(*const IDWriteTextLayout, @ptrCast(self)), maxHeight);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetFontCollection(self: *const T, fontCollection: ?*IDWriteFontCollection, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetFontCollection(@as(*const IDWriteTextLayout, @ptrCast(self)), fontCollection, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetFontFamilyName(self: *const T, fontFamilyName: ?[*:0]const u16, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetFontFamilyName(@as(*const IDWriteTextLayout, @ptrCast(self)), fontFamilyName, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetFontWeight(self: *const T, fontWeight: DWRITE_FONT_WEIGHT, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetFontWeight(@as(*const IDWriteTextLayout, @ptrCast(self)), fontWeight, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetFontStyle(self: *const T, fontStyle: DWRITE_FONT_STYLE, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetFontStyle(@as(*const IDWriteTextLayout, @ptrCast(self)), fontStyle, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetFontStretch(self: *const T, fontStretch: DWRITE_FONT_STRETCH, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetFontStretch(@as(*const IDWriteTextLayout, @ptrCast(self)), fontStretch, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetFontSize(self: *const T, fontSize: f32, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetFontSize(@as(*const IDWriteTextLayout, @ptrCast(self)), fontSize, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetUnderline(self: *const T, hasUnderline: BOOL, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetUnderline(@as(*const IDWriteTextLayout, @ptrCast(self)), hasUnderline, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetStrikethrough(self: *const T, hasStrikethrough: BOOL, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetStrikethrough(@as(*const IDWriteTextLayout, @ptrCast(self)), hasStrikethrough, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetDrawingEffect(self: *const T, drawingEffect: ?*IUnknown, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetDrawingEffect(@as(*const IDWriteTextLayout, @ptrCast(self)), drawingEffect, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetInlineObject(self: *const T, inlineObject: ?*IDWriteInlineObject, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetInlineObject(@as(*const IDWriteTextLayout, @ptrCast(self)), inlineObject, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetTypography(self: *const T, typography: ?*IDWriteTypography, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetTypography(@as(*const IDWriteTextLayout, @ptrCast(self)), typography, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_SetLocaleName(self: *const T, localeName: ?[*:0]const u16, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).SetLocaleName(@as(*const IDWriteTextLayout, @ptrCast(self)), localeName, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetMaxWidth(self: *const T) f32 {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetMaxWidth(@as(*const IDWriteTextLayout, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetMaxHeight(self: *const T) f32 {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetMaxHeight(@as(*const IDWriteTextLayout, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetFontCollection(self: *const T, currentPosition: u32, fontCollection: ?*?*IDWriteFontCollection, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetFontCollection(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, fontCollection, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetFontFamilyNameLength(self: *const T, currentPosition: u32, nameLength: ?*u32, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetFontFamilyNameLength(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, nameLength, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetFontFamilyName(self: *const T, currentPosition: u32, fontFamilyName: [*:0]u16, nameSize: u32, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetFontFamilyName(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, fontFamilyName, nameSize, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetFontWeight(self: *const T, currentPosition: u32, fontWeight: ?*DWRITE_FONT_WEIGHT, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetFontWeight(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, fontWeight, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetFontStyle(self: *const T, currentPosition: u32, fontStyle: ?*DWRITE_FONT_STYLE, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetFontStyle(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, fontStyle, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetFontStretch(self: *const T, currentPosition: u32, fontStretch: ?*DWRITE_FONT_STRETCH, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetFontStretch(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, fontStretch, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetFontSize(self: *const T, currentPosition: u32, fontSize: ?*f32, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetFontSize(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, fontSize, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetUnderline(self: *const T, currentPosition: u32, hasUnderline: ?*BOOL, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetUnderline(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, hasUnderline, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetStrikethrough(self: *const T, currentPosition: u32, hasStrikethrough: ?*BOOL, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetStrikethrough(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, hasStrikethrough, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetDrawingEffect(self: *const T, currentPosition: u32, drawingEffect: ?*?*IUnknown, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetDrawingEffect(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, drawingEffect, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetInlineObject(self: *const T, currentPosition: u32, inlineObject: ?*?*IDWriteInlineObject, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetInlineObject(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, inlineObject, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetTypography(self: *const T, currentPosition: u32, typography: ?*?*IDWriteTypography, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetTypography(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, typography, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetLocaleNameLength(self: *const T, currentPosition: u32, nameLength: ?*u32, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetLocaleNameLength(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, nameLength, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetLocaleName(self: *const T, currentPosition: u32, localeName: [*:0]u16, nameSize: u32, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetLocaleName(@as(*const IDWriteTextLayout, @ptrCast(self)), currentPosition, localeName, nameSize, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_Draw(self: *const T, clientDrawingContext: ?*anyopaque, renderer: ?*IDWriteTextRenderer, originX: f32, originY: f32) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).Draw(@as(*const IDWriteTextLayout, @ptrCast(self)), clientDrawingContext, renderer, originX, originY);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetLineMetrics(self: *const T, lineMetrics: ?[*]DWRITE_LINE_METRICS, maxLineCount: u32, actualLineCount: ?*u32) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetLineMetrics(@as(*const IDWriteTextLayout, @ptrCast(self)), lineMetrics, maxLineCount, actualLineCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetMetrics(self: *const T, textMetrics: ?*DWRITE_TEXT_METRICS) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetMetrics(@as(*const IDWriteTextLayout, @ptrCast(self)), textMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetOverhangMetrics(self: *const T, overhangs: ?*DWRITE_OVERHANG_METRICS) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetOverhangMetrics(@as(*const IDWriteTextLayout, @ptrCast(self)), overhangs);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_GetClusterMetrics(self: *const T, clusterMetrics: ?[*]DWRITE_CLUSTER_METRICS, maxClusterCount: u32, actualClusterCount: ?*u32) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).GetClusterMetrics(@as(*const IDWriteTextLayout, @ptrCast(self)), clusterMetrics, maxClusterCount, actualClusterCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_DetermineMinWidth(self: *const T, minWidth: ?*f32) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).DetermineMinWidth(@as(*const IDWriteTextLayout, @ptrCast(self)), minWidth);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_HitTestPoint(self: *const T, pointX: f32, pointY: f32, isTrailingHit: ?*BOOL, isInside: ?*BOOL, hitTestMetrics: ?*DWRITE_HIT_TEST_METRICS) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).HitTestPoint(@as(*const IDWriteTextLayout, @ptrCast(self)), pointX, pointY, isTrailingHit, isInside, hitTestMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_HitTestTextPosition(self: *const T, textPosition: u32, isTrailingHit: BOOL, pointX: ?*f32, pointY: ?*f32, hitTestMetrics: ?*DWRITE_HIT_TEST_METRICS) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).HitTestTextPosition(@as(*const IDWriteTextLayout, @ptrCast(self)), textPosition, isTrailingHit, pointX, pointY, hitTestMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout_HitTestTextRange(self: *const T, textPosition: u32, textLength: u32, originX: f32, originY: f32, hitTestMetrics: ?[*]DWRITE_HIT_TEST_METRICS, maxHitTestMetricsCount: u32, actualHitTestMetricsCount: ?*u32) HRESULT {
                return @as(*const IDWriteTextLayout.VTable, @ptrCast(self.vtable)).HitTestTextRange(@as(*const IDWriteTextLayout, @ptrCast(self)), textPosition, textLength, originX, originY, hitTestMetrics, maxHitTestMetricsCount, actualHitTestMetricsCount);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteBitmapRenderTarget_Value = Guid.initString("5e5a32a3-8dff-4773-9ff6-0696eab77267");
pub const IID_IDWriteBitmapRenderTarget = &IID_IDWriteBitmapRenderTarget_Value;
pub const IDWriteBitmapRenderTarget = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        DrawGlyphRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
                baselineOriginX: f32,
                baselineOriginY: f32,
                measuringMode: DWRITE_MEASURING_MODE,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                renderingParams: ?*IDWriteRenderingParams,
                textColor: u32,
                blackBoxRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
                baselineOriginX: f32,
                baselineOriginY: f32,
                measuringMode: DWRITE_MEASURING_MODE,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                renderingParams: ?*IDWriteRenderingParams,
                textColor: u32,
                blackBoxRect: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMemoryDC: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
            ) callconv(@import("std").os.windows.WINAPI) ?HDC,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
            ) callconv(@import("std").os.windows.WINAPI) ?HDC,
        },
        GetPixelsPerDip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
        SetPixelsPerDip: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
                pixelsPerDip: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
                pixelsPerDip: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentTransform: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCurrentTransform: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
                transform: ?*const DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
                transform: ?*const DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
                size: ?*SIZE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
                size: ?*SIZE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Resize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget,
                width: u32,
                height: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget,
                width: u32,
                height: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_DrawGlyphRun(self: *const T, baselineOriginX: f32, baselineOriginY: f32, measuringMode: DWRITE_MEASURING_MODE, glyphRun: ?*const DWRITE_GLYPH_RUN, renderingParams: ?*IDWriteRenderingParams, textColor: u32, blackBoxRect: ?*RECT) HRESULT {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).DrawGlyphRun(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)), baselineOriginX, baselineOriginY, measuringMode, glyphRun, renderingParams, textColor, blackBoxRect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_GetMemoryDC(self: *const T) ?HDC {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).GetMemoryDC(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_GetPixelsPerDip(self: *const T) f32 {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).GetPixelsPerDip(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_SetPixelsPerDip(self: *const T, pixelsPerDip: f32) HRESULT {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).SetPixelsPerDip(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)), pixelsPerDip);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_GetCurrentTransform(self: *const T, transform: ?*DWRITE_MATRIX) HRESULT {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).GetCurrentTransform(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)), transform);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_SetCurrentTransform(self: *const T, transform: ?*const DWRITE_MATRIX) HRESULT {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).SetCurrentTransform(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)), transform);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_GetSize(self: *const T, size: ?*SIZE) HRESULT {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).GetSize(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)), size);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget_Resize(self: *const T, width: u32, height: u32) HRESULT {
                return @as(*const IDWriteBitmapRenderTarget.VTable, @ptrCast(self.vtable)).Resize(@as(*const IDWriteBitmapRenderTarget, @ptrCast(self)), width, height);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteGdiInterop_Value = Guid.initString("1edd9491-9853-4299-898f-6432983b6f3a");
pub const IID_IDWriteGdiInterop = &IID_IDWriteGdiInterop_Value;
pub const IDWriteGdiInterop = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateFontFromLOGFONT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop,
                logFont: ?*const LOGFONTW,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop,
                logFont: ?*const LOGFONTW,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertFontToLOGFONT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop,
                font: ?*IDWriteFont,
                logFont: ?*LOGFONTW,
                isSystemFont: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop,
                font: ?*IDWriteFont,
                logFont: ?*LOGFONTW,
                isSystemFont: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ConvertFontFaceToLOGFONT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop,
                font: ?*IDWriteFontFace,
                logFont: ?*LOGFONTW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop,
                font: ?*IDWriteFontFace,
                logFont: ?*LOGFONTW,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFaceFromHdc: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop,
                hdc: ?HDC,
                fontFace: ?*?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop,
                hdc: ?HDC,
                fontFace: ?*?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateBitmapRenderTarget: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop,
                hdc: ?HDC,
                width: u32,
                height: u32,
                renderTarget: ?*?*IDWriteBitmapRenderTarget,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop,
                hdc: ?HDC,
                width: u32,
                height: u32,
                renderTarget: ?*?*IDWriteBitmapRenderTarget,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop_CreateFontFromLOGFONT(self: *const T, logFont: ?*const LOGFONTW, font: ?*?*IDWriteFont) HRESULT {
                return @as(*const IDWriteGdiInterop.VTable, @ptrCast(self.vtable)).CreateFontFromLOGFONT(@as(*const IDWriteGdiInterop, @ptrCast(self)), logFont, font);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop_ConvertFontToLOGFONT(self: *const T, font: ?*IDWriteFont, logFont: ?*LOGFONTW, isSystemFont: ?*BOOL) HRESULT {
                return @as(*const IDWriteGdiInterop.VTable, @ptrCast(self.vtable)).ConvertFontToLOGFONT(@as(*const IDWriteGdiInterop, @ptrCast(self)), font, logFont, isSystemFont);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop_ConvertFontFaceToLOGFONT(self: *const T, font: ?*IDWriteFontFace, logFont: ?*LOGFONTW) HRESULT {
                return @as(*const IDWriteGdiInterop.VTable, @ptrCast(self.vtable)).ConvertFontFaceToLOGFONT(@as(*const IDWriteGdiInterop, @ptrCast(self)), font, logFont);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop_CreateFontFaceFromHdc(self: *const T, hdc: ?HDC, fontFace: ?*?*IDWriteFontFace) HRESULT {
                return @as(*const IDWriteGdiInterop.VTable, @ptrCast(self.vtable)).CreateFontFaceFromHdc(@as(*const IDWriteGdiInterop, @ptrCast(self)), hdc, fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop_CreateBitmapRenderTarget(self: *const T, hdc: ?HDC, width: u32, height: u32, renderTarget: ?*?*IDWriteBitmapRenderTarget) HRESULT {
                return @as(*const IDWriteGdiInterop.VTable, @ptrCast(self.vtable)).CreateBitmapRenderTarget(@as(*const IDWriteGdiInterop, @ptrCast(self)), hdc, width, height, renderTarget);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_TEXTURE_TYPE = enum(i32) {
    ALIASED_1x1 = 0,
    CLEARTYPE_3x1 = 1,
};
pub const DWRITE_TEXTURE_ALIASED_1x1 = DWRITE_TEXTURE_TYPE.ALIASED_1x1;
pub const DWRITE_TEXTURE_CLEARTYPE_3x1 = DWRITE_TEXTURE_TYPE.CLEARTYPE_3x1;

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteGlyphRunAnalysis_Value = Guid.initString("7d97dbf7-e085-42d4-81e3-6a883bded118");
pub const IID_IDWriteGlyphRunAnalysis = &IID_IDWriteGlyphRunAnalysis_Value;
pub const IDWriteGlyphRunAnalysis = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetAlphaTextureBounds: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGlyphRunAnalysis,
                textureType: DWRITE_TEXTURE_TYPE,
                textureBounds: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGlyphRunAnalysis,
                textureType: DWRITE_TEXTURE_TYPE,
                textureBounds: ?*RECT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateAlphaTexture: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGlyphRunAnalysis,
                textureType: DWRITE_TEXTURE_TYPE,
                textureBounds: ?*const RECT,
                // TODO: what to do with BytesParamIndex 3?
                alphaValues: ?*u8,
                bufferSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGlyphRunAnalysis,
                textureType: DWRITE_TEXTURE_TYPE,
                textureBounds: ?*const RECT,
                // TODO: what to do with BytesParamIndex 3?
                alphaValues: ?*u8,
                bufferSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAlphaBlendParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGlyphRunAnalysis,
                renderingParams: ?*IDWriteRenderingParams,
                blendGamma: ?*f32,
                blendEnhancedContrast: ?*f32,
                blendClearTypeLevel: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGlyphRunAnalysis,
                renderingParams: ?*IDWriteRenderingParams,
                blendGamma: ?*f32,
                blendEnhancedContrast: ?*f32,
                blendClearTypeLevel: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGlyphRunAnalysis_GetAlphaTextureBounds(self: *const T, textureType: DWRITE_TEXTURE_TYPE, textureBounds: ?*RECT) HRESULT {
                return @as(*const IDWriteGlyphRunAnalysis.VTable, @ptrCast(self.vtable)).GetAlphaTextureBounds(@as(*const IDWriteGlyphRunAnalysis, @ptrCast(self)), textureType, textureBounds);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGlyphRunAnalysis_CreateAlphaTexture(self: *const T, textureType: DWRITE_TEXTURE_TYPE, textureBounds: ?*const RECT, alphaValues: ?*u8, bufferSize: u32) HRESULT {
                return @as(*const IDWriteGlyphRunAnalysis.VTable, @ptrCast(self.vtable)).CreateAlphaTexture(@as(*const IDWriteGlyphRunAnalysis, @ptrCast(self)), textureType, textureBounds, alphaValues, bufferSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGlyphRunAnalysis_GetAlphaBlendParams(self: *const T, renderingParams: ?*IDWriteRenderingParams, blendGamma: ?*f32, blendEnhancedContrast: ?*f32, blendClearTypeLevel: ?*f32) HRESULT {
                return @as(*const IDWriteGlyphRunAnalysis.VTable, @ptrCast(self.vtable)).GetAlphaBlendParams(@as(*const IDWriteGlyphRunAnalysis, @ptrCast(self)), renderingParams, blendGamma, blendEnhancedContrast, blendClearTypeLevel);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFactory_Value = Guid.initString("b859ee5a-d838-4b5b-a2e8-1adc7d93db48");
pub const IID_IDWriteFactory = &IID_IDWriteFactory_Value;
pub const IDWriteFactory = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetSystemFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                fontCollection: ?*?*IDWriteFontCollection,
                checkForUpdates: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                fontCollection: ?*?*IDWriteFontCollection,
                checkForUpdates: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateCustomFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                collectionLoader: ?*IDWriteFontCollectionLoader,
                // TODO: what to do with BytesParamIndex 2?
                collectionKey: ?*const anyopaque,
                collectionKeySize: u32,
                fontCollection: ?*?*IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                collectionLoader: ?*IDWriteFontCollectionLoader,
                // TODO: what to do with BytesParamIndex 2?
                collectionKey: ?*const anyopaque,
                collectionKeySize: u32,
                fontCollection: ?*?*IDWriteFontCollection,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterFontCollectionLoader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                fontCollectionLoader: ?*IDWriteFontCollectionLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                fontCollectionLoader: ?*IDWriteFontCollectionLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterFontCollectionLoader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                fontCollectionLoader: ?*IDWriteFontCollectionLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                fontCollectionLoader: ?*IDWriteFontCollectionLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFileReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                filePath: ?[*:0]const u16,
                lastWriteTime: ?*const FILETIME,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                filePath: ?[*:0]const u16,
                lastWriteTime: ?*const FILETIME,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateCustomFontFileReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                fontFileLoader: ?*IDWriteFontFileLoader,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                fontFileLoader: ?*IDWriteFontFileLoader,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                fontFaceType: DWRITE_FONT_FACE_TYPE,
                numberOfFiles: u32,
                fontFiles: [*]?*IDWriteFontFile,
                faceIndex: u32,
                fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS,
                fontFace: ?*?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                fontFaceType: DWRITE_FONT_FACE_TYPE,
                numberOfFiles: u32,
                fontFiles: [*]?*IDWriteFontFile,
                faceIndex: u32,
                fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS,
                fontFace: ?*?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateRenderingParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                renderingParams: ?*?*IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                renderingParams: ?*?*IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateMonitorRenderingParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                monitor: ?HMONITOR,
                renderingParams: ?*?*IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                monitor: ?HMONITOR,
                renderingParams: ?*?*IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateCustomRenderingParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                gamma: f32,
                enhancedContrast: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE,
                renderingParams: ?*?*IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                gamma: f32,
                enhancedContrast: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE,
                renderingParams: ?*?*IDWriteRenderingParams,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RegisterFontFileLoader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                fontFileLoader: ?*IDWriteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                fontFileLoader: ?*IDWriteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        UnregisterFontFileLoader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                fontFileLoader: ?*IDWriteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                fontFileLoader: ?*IDWriteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateTextFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                fontFamilyName: ?[*:0]const u16,
                fontCollection: ?*IDWriteFontCollection,
                fontWeight: DWRITE_FONT_WEIGHT,
                fontStyle: DWRITE_FONT_STYLE,
                fontStretch: DWRITE_FONT_STRETCH,
                fontSize: f32,
                localeName: ?[*:0]const u16,
                textFormat: ?*?*IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                fontFamilyName: ?[*:0]const u16,
                fontCollection: ?*IDWriteFontCollection,
                fontWeight: DWRITE_FONT_WEIGHT,
                fontStyle: DWRITE_FONT_STYLE,
                fontStretch: DWRITE_FONT_STRETCH,
                fontSize: f32,
                localeName: ?[*:0]const u16,
                textFormat: ?*?*IDWriteTextFormat,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateTypography: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                typography: ?*?*IDWriteTypography,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                typography: ?*?*IDWriteTypography,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGdiInterop: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                gdiInterop: ?*?*IDWriteGdiInterop,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                gdiInterop: ?*?*IDWriteGdiInterop,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateTextLayout: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                string: [*:0]const u16,
                stringLength: u32,
                textFormat: ?*IDWriteTextFormat,
                maxWidth: f32,
                maxHeight: f32,
                textLayout: ?*?*IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                string: [*:0]const u16,
                stringLength: u32,
                textFormat: ?*IDWriteTextFormat,
                maxWidth: f32,
                maxHeight: f32,
                textLayout: ?*?*IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateGdiCompatibleTextLayout: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                string: [*:0]const u16,
                stringLength: u32,
                textFormat: ?*IDWriteTextFormat,
                layoutWidth: f32,
                layoutHeight: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                textLayout: ?*?*IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                string: [*:0]const u16,
                stringLength: u32,
                textFormat: ?*IDWriteTextFormat,
                layoutWidth: f32,
                layoutHeight: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                textLayout: ?*?*IDWriteTextLayout,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateEllipsisTrimmingSign: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                textFormat: ?*IDWriteTextFormat,
                trimmingSign: ?*?*IDWriteInlineObject,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                textFormat: ?*IDWriteTextFormat,
                trimmingSign: ?*?*IDWriteInlineObject,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateTextAnalyzer: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                textAnalyzer: ?*?*IDWriteTextAnalyzer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                textAnalyzer: ?*?*IDWriteTextAnalyzer,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateNumberSubstitution: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                substitutionMethod: DWRITE_NUMBER_SUBSTITUTION_METHOD,
                localeName: ?[*:0]const u16,
                ignoreUserOverride: BOOL,
                numberSubstitution: ?*?*IDWriteNumberSubstitution,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                substitutionMethod: DWRITE_NUMBER_SUBSTITUTION_METHOD,
                localeName: ?[*:0]const u16,
                ignoreUserOverride: BOOL,
                numberSubstitution: ?*?*IDWriteNumberSubstitution,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateGlyphRunAnalysis: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                renderingMode: DWRITE_RENDERING_MODE,
                measuringMode: DWRITE_MEASURING_MODE,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                renderingMode: DWRITE_RENDERING_MODE,
                measuringMode: DWRITE_MEASURING_MODE,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_GetSystemFontCollection(self: *const T, fontCollection: ?*?*IDWriteFontCollection, checkForUpdates: BOOL) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).GetSystemFontCollection(@as(*const IDWriteFactory, @ptrCast(self)), fontCollection, checkForUpdates);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateCustomFontCollection(self: *const T, collectionLoader: ?*IDWriteFontCollectionLoader, collectionKey: ?*const anyopaque, collectionKeySize: u32, fontCollection: ?*?*IDWriteFontCollection) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateCustomFontCollection(@as(*const IDWriteFactory, @ptrCast(self)), collectionLoader, collectionKey, collectionKeySize, fontCollection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_RegisterFontCollectionLoader(self: *const T, fontCollectionLoader: ?*IDWriteFontCollectionLoader) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).RegisterFontCollectionLoader(@as(*const IDWriteFactory, @ptrCast(self)), fontCollectionLoader);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_UnregisterFontCollectionLoader(self: *const T, fontCollectionLoader: ?*IDWriteFontCollectionLoader) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).UnregisterFontCollectionLoader(@as(*const IDWriteFactory, @ptrCast(self)), fontCollectionLoader);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateFontFileReference(self: *const T, filePath: ?[*:0]const u16, lastWriteTime: ?*const FILETIME, fontFile: ?*?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateFontFileReference(@as(*const IDWriteFactory, @ptrCast(self)), filePath, lastWriteTime, fontFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateCustomFontFileReference(self: *const T, fontFileReferenceKey: ?*const anyopaque, fontFileReferenceKeySize: u32, fontFileLoader: ?*IDWriteFontFileLoader, fontFile: ?*?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateCustomFontFileReference(@as(*const IDWriteFactory, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize, fontFileLoader, fontFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateFontFace(self: *const T, fontFaceType: DWRITE_FONT_FACE_TYPE, numberOfFiles: u32, fontFiles: [*]?*IDWriteFontFile, faceIndex: u32, fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS, fontFace: ?*?*IDWriteFontFace) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateFontFace(@as(*const IDWriteFactory, @ptrCast(self)), fontFaceType, numberOfFiles, fontFiles, faceIndex, fontFaceSimulationFlags, fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateRenderingParams(self: *const T, renderingParams: ?*?*IDWriteRenderingParams) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateRenderingParams(@as(*const IDWriteFactory, @ptrCast(self)), renderingParams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateMonitorRenderingParams(self: *const T, monitor: ?HMONITOR, renderingParams: ?*?*IDWriteRenderingParams) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateMonitorRenderingParams(@as(*const IDWriteFactory, @ptrCast(self)), monitor, renderingParams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateCustomRenderingParams(self: *const T, gamma: f32, enhancedContrast: f32, clearTypeLevel: f32, pixelGeometry: DWRITE_PIXEL_GEOMETRY, renderingMode: DWRITE_RENDERING_MODE, renderingParams: ?*?*IDWriteRenderingParams) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateCustomRenderingParams(@as(*const IDWriteFactory, @ptrCast(self)), gamma, enhancedContrast, clearTypeLevel, pixelGeometry, renderingMode, renderingParams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_RegisterFontFileLoader(self: *const T, fontFileLoader: ?*IDWriteFontFileLoader) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).RegisterFontFileLoader(@as(*const IDWriteFactory, @ptrCast(self)), fontFileLoader);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_UnregisterFontFileLoader(self: *const T, fontFileLoader: ?*IDWriteFontFileLoader) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).UnregisterFontFileLoader(@as(*const IDWriteFactory, @ptrCast(self)), fontFileLoader);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateTextFormat(self: *const T, fontFamilyName: ?[*:0]const u16, fontCollection: ?*IDWriteFontCollection, fontWeight: DWRITE_FONT_WEIGHT, fontStyle: DWRITE_FONT_STYLE, fontStretch: DWRITE_FONT_STRETCH, fontSize: f32, localeName: ?[*:0]const u16, textFormat: ?*?*IDWriteTextFormat) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateTextFormat(@as(*const IDWriteFactory, @ptrCast(self)), fontFamilyName, fontCollection, fontWeight, fontStyle, fontStretch, fontSize, localeName, textFormat);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateTypography(self: *const T, typography: ?*?*IDWriteTypography) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateTypography(@as(*const IDWriteFactory, @ptrCast(self)), typography);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_GetGdiInterop(self: *const T, gdiInterop: ?*?*IDWriteGdiInterop) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).GetGdiInterop(@as(*const IDWriteFactory, @ptrCast(self)), gdiInterop);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateTextLayout(self: *const T, string: [*:0]const u16, stringLength: u32, textFormat: ?*IDWriteTextFormat, maxWidth: f32, maxHeight: f32, textLayout: ?*?*IDWriteTextLayout) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateTextLayout(@as(*const IDWriteFactory, @ptrCast(self)), string, stringLength, textFormat, maxWidth, maxHeight, textLayout);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateGdiCompatibleTextLayout(self: *const T, string: [*:0]const u16, stringLength: u32, textFormat: ?*IDWriteTextFormat, layoutWidth: f32, layoutHeight: f32, pixelsPerDip: f32, transform: ?*const DWRITE_MATRIX, useGdiNatural: BOOL, textLayout: ?*?*IDWriteTextLayout) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateGdiCompatibleTextLayout(@as(*const IDWriteFactory, @ptrCast(self)), string, stringLength, textFormat, layoutWidth, layoutHeight, pixelsPerDip, transform, useGdiNatural, textLayout);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateEllipsisTrimmingSign(self: *const T, textFormat: ?*IDWriteTextFormat, trimmingSign: ?*?*IDWriteInlineObject) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateEllipsisTrimmingSign(@as(*const IDWriteFactory, @ptrCast(self)), textFormat, trimmingSign);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateTextAnalyzer(self: *const T, textAnalyzer: ?*?*IDWriteTextAnalyzer) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateTextAnalyzer(@as(*const IDWriteFactory, @ptrCast(self)), textAnalyzer);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateNumberSubstitution(self: *const T, substitutionMethod: DWRITE_NUMBER_SUBSTITUTION_METHOD, localeName: ?[*:0]const u16, ignoreUserOverride: BOOL, numberSubstitution: ?*?*IDWriteNumberSubstitution) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateNumberSubstitution(@as(*const IDWriteFactory, @ptrCast(self)), substitutionMethod, localeName, ignoreUserOverride, numberSubstitution);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory_CreateGlyphRunAnalysis(self: *const T, glyphRun: ?*const DWRITE_GLYPH_RUN, pixelsPerDip: f32, transform: ?*const DWRITE_MATRIX, renderingMode: DWRITE_RENDERING_MODE, measuringMode: DWRITE_MEASURING_MODE, baselineOriginX: f32, baselineOriginY: f32, glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis) HRESULT {
                return @as(*const IDWriteFactory.VTable, @ptrCast(self.vtable)).CreateGlyphRunAnalysis(@as(*const IDWriteFactory, @ptrCast(self)), glyphRun, pixelsPerDip, transform, renderingMode, measuringMode, baselineOriginX, baselineOriginY, glyphRunAnalysis);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_PANOSE_FAMILY = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    TEXT_DISPLAY = 2,
    SCRIPT = 3,
    DECORATIVE = 4,
    SYMBOL = 5,
    // PICTORIAL = 5, this enum value conflicts with SYMBOL
};
pub const DWRITE_PANOSE_FAMILY_ANY = DWRITE_PANOSE_FAMILY.ANY;
pub const DWRITE_PANOSE_FAMILY_NO_FIT = DWRITE_PANOSE_FAMILY.NO_FIT;
pub const DWRITE_PANOSE_FAMILY_TEXT_DISPLAY = DWRITE_PANOSE_FAMILY.TEXT_DISPLAY;
pub const DWRITE_PANOSE_FAMILY_SCRIPT = DWRITE_PANOSE_FAMILY.SCRIPT;
pub const DWRITE_PANOSE_FAMILY_DECORATIVE = DWRITE_PANOSE_FAMILY.DECORATIVE;
pub const DWRITE_PANOSE_FAMILY_SYMBOL = DWRITE_PANOSE_FAMILY.SYMBOL;
pub const DWRITE_PANOSE_FAMILY_PICTORIAL = DWRITE_PANOSE_FAMILY.SYMBOL;

pub const DWRITE_PANOSE_SERIF_STYLE = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    COVE = 2,
    OBTUSE_COVE = 3,
    SQUARE_COVE = 4,
    OBTUSE_SQUARE_COVE = 5,
    SQUARE = 6,
    THIN = 7,
    OVAL = 8,
    EXAGGERATED = 9,
    TRIANGLE = 10,
    NORMAL_SANS = 11,
    OBTUSE_SANS = 12,
    PERPENDICULAR_SANS = 13,
    FLARED = 14,
    ROUNDED = 15,
    SCRIPT = 16,
    // PERP_SANS = 13, this enum value conflicts with PERPENDICULAR_SANS
    // BONE = 8, this enum value conflicts with OVAL
};
pub const DWRITE_PANOSE_SERIF_STYLE_ANY = DWRITE_PANOSE_SERIF_STYLE.ANY;
pub const DWRITE_PANOSE_SERIF_STYLE_NO_FIT = DWRITE_PANOSE_SERIF_STYLE.NO_FIT;
pub const DWRITE_PANOSE_SERIF_STYLE_COVE = DWRITE_PANOSE_SERIF_STYLE.COVE;
pub const DWRITE_PANOSE_SERIF_STYLE_OBTUSE_COVE = DWRITE_PANOSE_SERIF_STYLE.OBTUSE_COVE;
pub const DWRITE_PANOSE_SERIF_STYLE_SQUARE_COVE = DWRITE_PANOSE_SERIF_STYLE.SQUARE_COVE;
pub const DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SQUARE_COVE = DWRITE_PANOSE_SERIF_STYLE.OBTUSE_SQUARE_COVE;
pub const DWRITE_PANOSE_SERIF_STYLE_SQUARE = DWRITE_PANOSE_SERIF_STYLE.SQUARE;
pub const DWRITE_PANOSE_SERIF_STYLE_THIN = DWRITE_PANOSE_SERIF_STYLE.THIN;
pub const DWRITE_PANOSE_SERIF_STYLE_OVAL = DWRITE_PANOSE_SERIF_STYLE.OVAL;
pub const DWRITE_PANOSE_SERIF_STYLE_EXAGGERATED = DWRITE_PANOSE_SERIF_STYLE.EXAGGERATED;
pub const DWRITE_PANOSE_SERIF_STYLE_TRIANGLE = DWRITE_PANOSE_SERIF_STYLE.TRIANGLE;
pub const DWRITE_PANOSE_SERIF_STYLE_NORMAL_SANS = DWRITE_PANOSE_SERIF_STYLE.NORMAL_SANS;
pub const DWRITE_PANOSE_SERIF_STYLE_OBTUSE_SANS = DWRITE_PANOSE_SERIF_STYLE.OBTUSE_SANS;
pub const DWRITE_PANOSE_SERIF_STYLE_PERPENDICULAR_SANS = DWRITE_PANOSE_SERIF_STYLE.PERPENDICULAR_SANS;
pub const DWRITE_PANOSE_SERIF_STYLE_FLARED = DWRITE_PANOSE_SERIF_STYLE.FLARED;
pub const DWRITE_PANOSE_SERIF_STYLE_ROUNDED = DWRITE_PANOSE_SERIF_STYLE.ROUNDED;
pub const DWRITE_PANOSE_SERIF_STYLE_SCRIPT = DWRITE_PANOSE_SERIF_STYLE.SCRIPT;
pub const DWRITE_PANOSE_SERIF_STYLE_PERP_SANS = DWRITE_PANOSE_SERIF_STYLE.PERPENDICULAR_SANS;
pub const DWRITE_PANOSE_SERIF_STYLE_BONE = DWRITE_PANOSE_SERIF_STYLE.OVAL;

pub const DWRITE_PANOSE_WEIGHT = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    VERY_LIGHT = 2,
    LIGHT = 3,
    THIN = 4,
    BOOK = 5,
    MEDIUM = 6,
    DEMI = 7,
    BOLD = 8,
    HEAVY = 9,
    BLACK = 10,
    EXTRA_BLACK = 11,
    // NORD = 11, this enum value conflicts with EXTRA_BLACK
};
pub const DWRITE_PANOSE_WEIGHT_ANY = DWRITE_PANOSE_WEIGHT.ANY;
pub const DWRITE_PANOSE_WEIGHT_NO_FIT = DWRITE_PANOSE_WEIGHT.NO_FIT;
pub const DWRITE_PANOSE_WEIGHT_VERY_LIGHT = DWRITE_PANOSE_WEIGHT.VERY_LIGHT;
pub const DWRITE_PANOSE_WEIGHT_LIGHT = DWRITE_PANOSE_WEIGHT.LIGHT;
pub const DWRITE_PANOSE_WEIGHT_THIN = DWRITE_PANOSE_WEIGHT.THIN;
pub const DWRITE_PANOSE_WEIGHT_BOOK = DWRITE_PANOSE_WEIGHT.BOOK;
pub const DWRITE_PANOSE_WEIGHT_MEDIUM = DWRITE_PANOSE_WEIGHT.MEDIUM;
pub const DWRITE_PANOSE_WEIGHT_DEMI = DWRITE_PANOSE_WEIGHT.DEMI;
pub const DWRITE_PANOSE_WEIGHT_BOLD = DWRITE_PANOSE_WEIGHT.BOLD;
pub const DWRITE_PANOSE_WEIGHT_HEAVY = DWRITE_PANOSE_WEIGHT.HEAVY;
pub const DWRITE_PANOSE_WEIGHT_BLACK = DWRITE_PANOSE_WEIGHT.BLACK;
pub const DWRITE_PANOSE_WEIGHT_EXTRA_BLACK = DWRITE_PANOSE_WEIGHT.EXTRA_BLACK;
pub const DWRITE_PANOSE_WEIGHT_NORD = DWRITE_PANOSE_WEIGHT.EXTRA_BLACK;

pub const DWRITE_PANOSE_PROPORTION = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    OLD_STYLE = 2,
    MODERN = 3,
    EVEN_WIDTH = 4,
    EXPANDED = 5,
    CONDENSED = 6,
    VERY_EXPANDED = 7,
    VERY_CONDENSED = 8,
    MONOSPACED = 9,
};
pub const DWRITE_PANOSE_PROPORTION_ANY = DWRITE_PANOSE_PROPORTION.ANY;
pub const DWRITE_PANOSE_PROPORTION_NO_FIT = DWRITE_PANOSE_PROPORTION.NO_FIT;
pub const DWRITE_PANOSE_PROPORTION_OLD_STYLE = DWRITE_PANOSE_PROPORTION.OLD_STYLE;
pub const DWRITE_PANOSE_PROPORTION_MODERN = DWRITE_PANOSE_PROPORTION.MODERN;
pub const DWRITE_PANOSE_PROPORTION_EVEN_WIDTH = DWRITE_PANOSE_PROPORTION.EVEN_WIDTH;
pub const DWRITE_PANOSE_PROPORTION_EXPANDED = DWRITE_PANOSE_PROPORTION.EXPANDED;
pub const DWRITE_PANOSE_PROPORTION_CONDENSED = DWRITE_PANOSE_PROPORTION.CONDENSED;
pub const DWRITE_PANOSE_PROPORTION_VERY_EXPANDED = DWRITE_PANOSE_PROPORTION.VERY_EXPANDED;
pub const DWRITE_PANOSE_PROPORTION_VERY_CONDENSED = DWRITE_PANOSE_PROPORTION.VERY_CONDENSED;
pub const DWRITE_PANOSE_PROPORTION_MONOSPACED = DWRITE_PANOSE_PROPORTION.MONOSPACED;

pub const DWRITE_PANOSE_CONTRAST = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    NONE = 2,
    VERY_LOW = 3,
    LOW = 4,
    MEDIUM_LOW = 5,
    MEDIUM = 6,
    MEDIUM_HIGH = 7,
    HIGH = 8,
    VERY_HIGH = 9,
    HORIZONTAL_LOW = 10,
    HORIZONTAL_MEDIUM = 11,
    HORIZONTAL_HIGH = 12,
    BROKEN = 13,
};
pub const DWRITE_PANOSE_CONTRAST_ANY = DWRITE_PANOSE_CONTRAST.ANY;
pub const DWRITE_PANOSE_CONTRAST_NO_FIT = DWRITE_PANOSE_CONTRAST.NO_FIT;
pub const DWRITE_PANOSE_CONTRAST_NONE = DWRITE_PANOSE_CONTRAST.NONE;
pub const DWRITE_PANOSE_CONTRAST_VERY_LOW = DWRITE_PANOSE_CONTRAST.VERY_LOW;
pub const DWRITE_PANOSE_CONTRAST_LOW = DWRITE_PANOSE_CONTRAST.LOW;
pub const DWRITE_PANOSE_CONTRAST_MEDIUM_LOW = DWRITE_PANOSE_CONTRAST.MEDIUM_LOW;
pub const DWRITE_PANOSE_CONTRAST_MEDIUM = DWRITE_PANOSE_CONTRAST.MEDIUM;
pub const DWRITE_PANOSE_CONTRAST_MEDIUM_HIGH = DWRITE_PANOSE_CONTRAST.MEDIUM_HIGH;
pub const DWRITE_PANOSE_CONTRAST_HIGH = DWRITE_PANOSE_CONTRAST.HIGH;
pub const DWRITE_PANOSE_CONTRAST_VERY_HIGH = DWRITE_PANOSE_CONTRAST.VERY_HIGH;
pub const DWRITE_PANOSE_CONTRAST_HORIZONTAL_LOW = DWRITE_PANOSE_CONTRAST.HORIZONTAL_LOW;
pub const DWRITE_PANOSE_CONTRAST_HORIZONTAL_MEDIUM = DWRITE_PANOSE_CONTRAST.HORIZONTAL_MEDIUM;
pub const DWRITE_PANOSE_CONTRAST_HORIZONTAL_HIGH = DWRITE_PANOSE_CONTRAST.HORIZONTAL_HIGH;
pub const DWRITE_PANOSE_CONTRAST_BROKEN = DWRITE_PANOSE_CONTRAST.BROKEN;

pub const DWRITE_PANOSE_STROKE_VARIATION = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    NO_VARIATION = 2,
    GRADUAL_DIAGONAL = 3,
    GRADUAL_TRANSITIONAL = 4,
    GRADUAL_VERTICAL = 5,
    GRADUAL_HORIZONTAL = 6,
    RAPID_VERTICAL = 7,
    RAPID_HORIZONTAL = 8,
    INSTANT_VERTICAL = 9,
    INSTANT_HORIZONTAL = 10,
};
pub const DWRITE_PANOSE_STROKE_VARIATION_ANY = DWRITE_PANOSE_STROKE_VARIATION.ANY;
pub const DWRITE_PANOSE_STROKE_VARIATION_NO_FIT = DWRITE_PANOSE_STROKE_VARIATION.NO_FIT;
pub const DWRITE_PANOSE_STROKE_VARIATION_NO_VARIATION = DWRITE_PANOSE_STROKE_VARIATION.NO_VARIATION;
pub const DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_DIAGONAL = DWRITE_PANOSE_STROKE_VARIATION.GRADUAL_DIAGONAL;
pub const DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_TRANSITIONAL = DWRITE_PANOSE_STROKE_VARIATION.GRADUAL_TRANSITIONAL;
pub const DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_VERTICAL = DWRITE_PANOSE_STROKE_VARIATION.GRADUAL_VERTICAL;
pub const DWRITE_PANOSE_STROKE_VARIATION_GRADUAL_HORIZONTAL = DWRITE_PANOSE_STROKE_VARIATION.GRADUAL_HORIZONTAL;
pub const DWRITE_PANOSE_STROKE_VARIATION_RAPID_VERTICAL = DWRITE_PANOSE_STROKE_VARIATION.RAPID_VERTICAL;
pub const DWRITE_PANOSE_STROKE_VARIATION_RAPID_HORIZONTAL = DWRITE_PANOSE_STROKE_VARIATION.RAPID_HORIZONTAL;
pub const DWRITE_PANOSE_STROKE_VARIATION_INSTANT_VERTICAL = DWRITE_PANOSE_STROKE_VARIATION.INSTANT_VERTICAL;
pub const DWRITE_PANOSE_STROKE_VARIATION_INSTANT_HORIZONTAL = DWRITE_PANOSE_STROKE_VARIATION.INSTANT_HORIZONTAL;

pub const DWRITE_PANOSE_ARM_STYLE = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    STRAIGHT_ARMS_HORIZONTAL = 2,
    STRAIGHT_ARMS_WEDGE = 3,
    STRAIGHT_ARMS_VERTICAL = 4,
    STRAIGHT_ARMS_SINGLE_SERIF = 5,
    STRAIGHT_ARMS_DOUBLE_SERIF = 6,
    NONSTRAIGHT_ARMS_HORIZONTAL = 7,
    NONSTRAIGHT_ARMS_WEDGE = 8,
    NONSTRAIGHT_ARMS_VERTICAL = 9,
    NONSTRAIGHT_ARMS_SINGLE_SERIF = 10,
    NONSTRAIGHT_ARMS_DOUBLE_SERIF = 11,
    // STRAIGHT_ARMS_HORZ = 2, this enum value conflicts with STRAIGHT_ARMS_HORIZONTAL
    // STRAIGHT_ARMS_VERT = 4, this enum value conflicts with STRAIGHT_ARMS_VERTICAL
    // BENT_ARMS_HORZ = 7, this enum value conflicts with NONSTRAIGHT_ARMS_HORIZONTAL
    // BENT_ARMS_WEDGE = 8, this enum value conflicts with NONSTRAIGHT_ARMS_WEDGE
    // BENT_ARMS_VERT = 9, this enum value conflicts with NONSTRAIGHT_ARMS_VERTICAL
    // BENT_ARMS_SINGLE_SERIF = 10, this enum value conflicts with NONSTRAIGHT_ARMS_SINGLE_SERIF
    // BENT_ARMS_DOUBLE_SERIF = 11, this enum value conflicts with NONSTRAIGHT_ARMS_DOUBLE_SERIF
};
pub const DWRITE_PANOSE_ARM_STYLE_ANY = DWRITE_PANOSE_ARM_STYLE.ANY;
pub const DWRITE_PANOSE_ARM_STYLE_NO_FIT = DWRITE_PANOSE_ARM_STYLE.NO_FIT;
pub const DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORIZONTAL = DWRITE_PANOSE_ARM_STYLE.STRAIGHT_ARMS_HORIZONTAL;
pub const DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE.STRAIGHT_ARMS_WEDGE;
pub const DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERTICAL = DWRITE_PANOSE_ARM_STYLE.STRAIGHT_ARMS_VERTICAL;
pub const DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE.STRAIGHT_ARMS_SINGLE_SERIF;
pub const DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE.STRAIGHT_ARMS_DOUBLE_SERIF;
pub const DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_HORIZONTAL = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_HORIZONTAL;
pub const DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_WEDGE;
pub const DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_VERTICAL = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_VERTICAL;
pub const DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_SINGLE_SERIF;
pub const DWRITE_PANOSE_ARM_STYLE_NONSTRAIGHT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_DOUBLE_SERIF;
pub const DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE.STRAIGHT_ARMS_HORIZONTAL;
pub const DWRITE_PANOSE_ARM_STYLE_STRAIGHT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE.STRAIGHT_ARMS_VERTICAL;
pub const DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_HORZ = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_HORIZONTAL;
pub const DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_WEDGE = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_WEDGE;
pub const DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_VERT = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_VERTICAL;
pub const DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_SINGLE_SERIF = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_SINGLE_SERIF;
pub const DWRITE_PANOSE_ARM_STYLE_BENT_ARMS_DOUBLE_SERIF = DWRITE_PANOSE_ARM_STYLE.NONSTRAIGHT_ARMS_DOUBLE_SERIF;

pub const DWRITE_PANOSE_LETTERFORM = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    NORMAL_CONTACT = 2,
    NORMAL_WEIGHTED = 3,
    NORMAL_BOXED = 4,
    NORMAL_FLATTENED = 5,
    NORMAL_ROUNDED = 6,
    NORMAL_OFF_CENTER = 7,
    NORMAL_SQUARE = 8,
    OBLIQUE_CONTACT = 9,
    OBLIQUE_WEIGHTED = 10,
    OBLIQUE_BOXED = 11,
    OBLIQUE_FLATTENED = 12,
    OBLIQUE_ROUNDED = 13,
    OBLIQUE_OFF_CENTER = 14,
    OBLIQUE_SQUARE = 15,
};
pub const DWRITE_PANOSE_LETTERFORM_ANY = DWRITE_PANOSE_LETTERFORM.ANY;
pub const DWRITE_PANOSE_LETTERFORM_NO_FIT = DWRITE_PANOSE_LETTERFORM.NO_FIT;
pub const DWRITE_PANOSE_LETTERFORM_NORMAL_CONTACT = DWRITE_PANOSE_LETTERFORM.NORMAL_CONTACT;
pub const DWRITE_PANOSE_LETTERFORM_NORMAL_WEIGHTED = DWRITE_PANOSE_LETTERFORM.NORMAL_WEIGHTED;
pub const DWRITE_PANOSE_LETTERFORM_NORMAL_BOXED = DWRITE_PANOSE_LETTERFORM.NORMAL_BOXED;
pub const DWRITE_PANOSE_LETTERFORM_NORMAL_FLATTENED = DWRITE_PANOSE_LETTERFORM.NORMAL_FLATTENED;
pub const DWRITE_PANOSE_LETTERFORM_NORMAL_ROUNDED = DWRITE_PANOSE_LETTERFORM.NORMAL_ROUNDED;
pub const DWRITE_PANOSE_LETTERFORM_NORMAL_OFF_CENTER = DWRITE_PANOSE_LETTERFORM.NORMAL_OFF_CENTER;
pub const DWRITE_PANOSE_LETTERFORM_NORMAL_SQUARE = DWRITE_PANOSE_LETTERFORM.NORMAL_SQUARE;
pub const DWRITE_PANOSE_LETTERFORM_OBLIQUE_CONTACT = DWRITE_PANOSE_LETTERFORM.OBLIQUE_CONTACT;
pub const DWRITE_PANOSE_LETTERFORM_OBLIQUE_WEIGHTED = DWRITE_PANOSE_LETTERFORM.OBLIQUE_WEIGHTED;
pub const DWRITE_PANOSE_LETTERFORM_OBLIQUE_BOXED = DWRITE_PANOSE_LETTERFORM.OBLIQUE_BOXED;
pub const DWRITE_PANOSE_LETTERFORM_OBLIQUE_FLATTENED = DWRITE_PANOSE_LETTERFORM.OBLIQUE_FLATTENED;
pub const DWRITE_PANOSE_LETTERFORM_OBLIQUE_ROUNDED = DWRITE_PANOSE_LETTERFORM.OBLIQUE_ROUNDED;
pub const DWRITE_PANOSE_LETTERFORM_OBLIQUE_OFF_CENTER = DWRITE_PANOSE_LETTERFORM.OBLIQUE_OFF_CENTER;
pub const DWRITE_PANOSE_LETTERFORM_OBLIQUE_SQUARE = DWRITE_PANOSE_LETTERFORM.OBLIQUE_SQUARE;

pub const DWRITE_PANOSE_MIDLINE = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    STANDARD_TRIMMED = 2,
    STANDARD_POINTED = 3,
    STANDARD_SERIFED = 4,
    HIGH_TRIMMED = 5,
    HIGH_POINTED = 6,
    HIGH_SERIFED = 7,
    CONSTANT_TRIMMED = 8,
    CONSTANT_POINTED = 9,
    CONSTANT_SERIFED = 10,
    LOW_TRIMMED = 11,
    LOW_POINTED = 12,
    LOW_SERIFED = 13,
};
pub const DWRITE_PANOSE_MIDLINE_ANY = DWRITE_PANOSE_MIDLINE.ANY;
pub const DWRITE_PANOSE_MIDLINE_NO_FIT = DWRITE_PANOSE_MIDLINE.NO_FIT;
pub const DWRITE_PANOSE_MIDLINE_STANDARD_TRIMMED = DWRITE_PANOSE_MIDLINE.STANDARD_TRIMMED;
pub const DWRITE_PANOSE_MIDLINE_STANDARD_POINTED = DWRITE_PANOSE_MIDLINE.STANDARD_POINTED;
pub const DWRITE_PANOSE_MIDLINE_STANDARD_SERIFED = DWRITE_PANOSE_MIDLINE.STANDARD_SERIFED;
pub const DWRITE_PANOSE_MIDLINE_HIGH_TRIMMED = DWRITE_PANOSE_MIDLINE.HIGH_TRIMMED;
pub const DWRITE_PANOSE_MIDLINE_HIGH_POINTED = DWRITE_PANOSE_MIDLINE.HIGH_POINTED;
pub const DWRITE_PANOSE_MIDLINE_HIGH_SERIFED = DWRITE_PANOSE_MIDLINE.HIGH_SERIFED;
pub const DWRITE_PANOSE_MIDLINE_CONSTANT_TRIMMED = DWRITE_PANOSE_MIDLINE.CONSTANT_TRIMMED;
pub const DWRITE_PANOSE_MIDLINE_CONSTANT_POINTED = DWRITE_PANOSE_MIDLINE.CONSTANT_POINTED;
pub const DWRITE_PANOSE_MIDLINE_CONSTANT_SERIFED = DWRITE_PANOSE_MIDLINE.CONSTANT_SERIFED;
pub const DWRITE_PANOSE_MIDLINE_LOW_TRIMMED = DWRITE_PANOSE_MIDLINE.LOW_TRIMMED;
pub const DWRITE_PANOSE_MIDLINE_LOW_POINTED = DWRITE_PANOSE_MIDLINE.LOW_POINTED;
pub const DWRITE_PANOSE_MIDLINE_LOW_SERIFED = DWRITE_PANOSE_MIDLINE.LOW_SERIFED;

pub const DWRITE_PANOSE_XHEIGHT = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    CONSTANT_SMALL = 2,
    CONSTANT_STANDARD = 3,
    CONSTANT_LARGE = 4,
    DUCKING_SMALL = 5,
    DUCKING_STANDARD = 6,
    DUCKING_LARGE = 7,
    // CONSTANT_STD = 3, this enum value conflicts with CONSTANT_STANDARD
    // DUCKING_STD = 6, this enum value conflicts with DUCKING_STANDARD
};
pub const DWRITE_PANOSE_XHEIGHT_ANY = DWRITE_PANOSE_XHEIGHT.ANY;
pub const DWRITE_PANOSE_XHEIGHT_NO_FIT = DWRITE_PANOSE_XHEIGHT.NO_FIT;
pub const DWRITE_PANOSE_XHEIGHT_CONSTANT_SMALL = DWRITE_PANOSE_XHEIGHT.CONSTANT_SMALL;
pub const DWRITE_PANOSE_XHEIGHT_CONSTANT_STANDARD = DWRITE_PANOSE_XHEIGHT.CONSTANT_STANDARD;
pub const DWRITE_PANOSE_XHEIGHT_CONSTANT_LARGE = DWRITE_PANOSE_XHEIGHT.CONSTANT_LARGE;
pub const DWRITE_PANOSE_XHEIGHT_DUCKING_SMALL = DWRITE_PANOSE_XHEIGHT.DUCKING_SMALL;
pub const DWRITE_PANOSE_XHEIGHT_DUCKING_STANDARD = DWRITE_PANOSE_XHEIGHT.DUCKING_STANDARD;
pub const DWRITE_PANOSE_XHEIGHT_DUCKING_LARGE = DWRITE_PANOSE_XHEIGHT.DUCKING_LARGE;
pub const DWRITE_PANOSE_XHEIGHT_CONSTANT_STD = DWRITE_PANOSE_XHEIGHT.CONSTANT_STANDARD;
pub const DWRITE_PANOSE_XHEIGHT_DUCKING_STD = DWRITE_PANOSE_XHEIGHT.DUCKING_STANDARD;

pub const DWRITE_PANOSE_TOOL_KIND = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    FLAT_NIB = 2,
    PRESSURE_POINT = 3,
    ENGRAVED = 4,
    BALL = 5,
    BRUSH = 6,
    ROUGH = 7,
    FELT_PEN_BRUSH_TIP = 8,
    WILD_BRUSH = 9,
};
pub const DWRITE_PANOSE_TOOL_KIND_ANY = DWRITE_PANOSE_TOOL_KIND.ANY;
pub const DWRITE_PANOSE_TOOL_KIND_NO_FIT = DWRITE_PANOSE_TOOL_KIND.NO_FIT;
pub const DWRITE_PANOSE_TOOL_KIND_FLAT_NIB = DWRITE_PANOSE_TOOL_KIND.FLAT_NIB;
pub const DWRITE_PANOSE_TOOL_KIND_PRESSURE_POINT = DWRITE_PANOSE_TOOL_KIND.PRESSURE_POINT;
pub const DWRITE_PANOSE_TOOL_KIND_ENGRAVED = DWRITE_PANOSE_TOOL_KIND.ENGRAVED;
pub const DWRITE_PANOSE_TOOL_KIND_BALL = DWRITE_PANOSE_TOOL_KIND.BALL;
pub const DWRITE_PANOSE_TOOL_KIND_BRUSH = DWRITE_PANOSE_TOOL_KIND.BRUSH;
pub const DWRITE_PANOSE_TOOL_KIND_ROUGH = DWRITE_PANOSE_TOOL_KIND.ROUGH;
pub const DWRITE_PANOSE_TOOL_KIND_FELT_PEN_BRUSH_TIP = DWRITE_PANOSE_TOOL_KIND.FELT_PEN_BRUSH_TIP;
pub const DWRITE_PANOSE_TOOL_KIND_WILD_BRUSH = DWRITE_PANOSE_TOOL_KIND.WILD_BRUSH;

pub const DWRITE_PANOSE_SPACING = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    PROPORTIONAL_SPACED = 2,
    MONOSPACED = 3,
};
pub const DWRITE_PANOSE_SPACING_ANY = DWRITE_PANOSE_SPACING.ANY;
pub const DWRITE_PANOSE_SPACING_NO_FIT = DWRITE_PANOSE_SPACING.NO_FIT;
pub const DWRITE_PANOSE_SPACING_PROPORTIONAL_SPACED = DWRITE_PANOSE_SPACING.PROPORTIONAL_SPACED;
pub const DWRITE_PANOSE_SPACING_MONOSPACED = DWRITE_PANOSE_SPACING.MONOSPACED;

pub const DWRITE_PANOSE_ASPECT_RATIO = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    VERY_CONDENSED = 2,
    CONDENSED = 3,
    NORMAL = 4,
    EXPANDED = 5,
    VERY_EXPANDED = 6,
};
pub const DWRITE_PANOSE_ASPECT_RATIO_ANY = DWRITE_PANOSE_ASPECT_RATIO.ANY;
pub const DWRITE_PANOSE_ASPECT_RATIO_NO_FIT = DWRITE_PANOSE_ASPECT_RATIO.NO_FIT;
pub const DWRITE_PANOSE_ASPECT_RATIO_VERY_CONDENSED = DWRITE_PANOSE_ASPECT_RATIO.VERY_CONDENSED;
pub const DWRITE_PANOSE_ASPECT_RATIO_CONDENSED = DWRITE_PANOSE_ASPECT_RATIO.CONDENSED;
pub const DWRITE_PANOSE_ASPECT_RATIO_NORMAL = DWRITE_PANOSE_ASPECT_RATIO.NORMAL;
pub const DWRITE_PANOSE_ASPECT_RATIO_EXPANDED = DWRITE_PANOSE_ASPECT_RATIO.EXPANDED;
pub const DWRITE_PANOSE_ASPECT_RATIO_VERY_EXPANDED = DWRITE_PANOSE_ASPECT_RATIO.VERY_EXPANDED;

pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    ROMAN_DISCONNECTED = 2,
    ROMAN_TRAILING = 3,
    ROMAN_CONNECTED = 4,
    CURSIVE_DISCONNECTED = 5,
    CURSIVE_TRAILING = 6,
    CURSIVE_CONNECTED = 7,
    BLACKLETTER_DISCONNECTED = 8,
    BLACKLETTER_TRAILING = 9,
    BLACKLETTER_CONNECTED = 10,
};
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_ANY = DWRITE_PANOSE_SCRIPT_TOPOLOGY.ANY;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_NO_FIT = DWRITE_PANOSE_SCRIPT_TOPOLOGY.NO_FIT;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_DISCONNECTED = DWRITE_PANOSE_SCRIPT_TOPOLOGY.ROMAN_DISCONNECTED;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_TRAILING = DWRITE_PANOSE_SCRIPT_TOPOLOGY.ROMAN_TRAILING;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_ROMAN_CONNECTED = DWRITE_PANOSE_SCRIPT_TOPOLOGY.ROMAN_CONNECTED;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_DISCONNECTED = DWRITE_PANOSE_SCRIPT_TOPOLOGY.CURSIVE_DISCONNECTED;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_TRAILING = DWRITE_PANOSE_SCRIPT_TOPOLOGY.CURSIVE_TRAILING;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_CURSIVE_CONNECTED = DWRITE_PANOSE_SCRIPT_TOPOLOGY.CURSIVE_CONNECTED;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_DISCONNECTED = DWRITE_PANOSE_SCRIPT_TOPOLOGY.BLACKLETTER_DISCONNECTED;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_TRAILING = DWRITE_PANOSE_SCRIPT_TOPOLOGY.BLACKLETTER_TRAILING;
pub const DWRITE_PANOSE_SCRIPT_TOPOLOGY_BLACKLETTER_CONNECTED = DWRITE_PANOSE_SCRIPT_TOPOLOGY.BLACKLETTER_CONNECTED;

pub const DWRITE_PANOSE_SCRIPT_FORM = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    UPRIGHT_NO_WRAPPING = 2,
    UPRIGHT_SOME_WRAPPING = 3,
    UPRIGHT_MORE_WRAPPING = 4,
    UPRIGHT_EXTREME_WRAPPING = 5,
    OBLIQUE_NO_WRAPPING = 6,
    OBLIQUE_SOME_WRAPPING = 7,
    OBLIQUE_MORE_WRAPPING = 8,
    OBLIQUE_EXTREME_WRAPPING = 9,
    EXAGGERATED_NO_WRAPPING = 10,
    EXAGGERATED_SOME_WRAPPING = 11,
    EXAGGERATED_MORE_WRAPPING = 12,
    EXAGGERATED_EXTREME_WRAPPING = 13,
};
pub const DWRITE_PANOSE_SCRIPT_FORM_ANY = DWRITE_PANOSE_SCRIPT_FORM.ANY;
pub const DWRITE_PANOSE_SCRIPT_FORM_NO_FIT = DWRITE_PANOSE_SCRIPT_FORM.NO_FIT;
pub const DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_NO_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.UPRIGHT_NO_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_SOME_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.UPRIGHT_SOME_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_MORE_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.UPRIGHT_MORE_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_UPRIGHT_EXTREME_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.UPRIGHT_EXTREME_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_NO_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.OBLIQUE_NO_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_SOME_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.OBLIQUE_SOME_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_MORE_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.OBLIQUE_MORE_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_OBLIQUE_EXTREME_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.OBLIQUE_EXTREME_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_NO_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.EXAGGERATED_NO_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_SOME_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.EXAGGERATED_SOME_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_MORE_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.EXAGGERATED_MORE_WRAPPING;
pub const DWRITE_PANOSE_SCRIPT_FORM_EXAGGERATED_EXTREME_WRAPPING = DWRITE_PANOSE_SCRIPT_FORM.EXAGGERATED_EXTREME_WRAPPING;

pub const DWRITE_PANOSE_FINIALS = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    NONE_NO_LOOPS = 2,
    NONE_CLOSED_LOOPS = 3,
    NONE_OPEN_LOOPS = 4,
    SHARP_NO_LOOPS = 5,
    SHARP_CLOSED_LOOPS = 6,
    SHARP_OPEN_LOOPS = 7,
    TAPERED_NO_LOOPS = 8,
    TAPERED_CLOSED_LOOPS = 9,
    TAPERED_OPEN_LOOPS = 10,
    ROUND_NO_LOOPS = 11,
    ROUND_CLOSED_LOOPS = 12,
    ROUND_OPEN_LOOPS = 13,
};
pub const DWRITE_PANOSE_FINIALS_ANY = DWRITE_PANOSE_FINIALS.ANY;
pub const DWRITE_PANOSE_FINIALS_NO_FIT = DWRITE_PANOSE_FINIALS.NO_FIT;
pub const DWRITE_PANOSE_FINIALS_NONE_NO_LOOPS = DWRITE_PANOSE_FINIALS.NONE_NO_LOOPS;
pub const DWRITE_PANOSE_FINIALS_NONE_CLOSED_LOOPS = DWRITE_PANOSE_FINIALS.NONE_CLOSED_LOOPS;
pub const DWRITE_PANOSE_FINIALS_NONE_OPEN_LOOPS = DWRITE_PANOSE_FINIALS.NONE_OPEN_LOOPS;
pub const DWRITE_PANOSE_FINIALS_SHARP_NO_LOOPS = DWRITE_PANOSE_FINIALS.SHARP_NO_LOOPS;
pub const DWRITE_PANOSE_FINIALS_SHARP_CLOSED_LOOPS = DWRITE_PANOSE_FINIALS.SHARP_CLOSED_LOOPS;
pub const DWRITE_PANOSE_FINIALS_SHARP_OPEN_LOOPS = DWRITE_PANOSE_FINIALS.SHARP_OPEN_LOOPS;
pub const DWRITE_PANOSE_FINIALS_TAPERED_NO_LOOPS = DWRITE_PANOSE_FINIALS.TAPERED_NO_LOOPS;
pub const DWRITE_PANOSE_FINIALS_TAPERED_CLOSED_LOOPS = DWRITE_PANOSE_FINIALS.TAPERED_CLOSED_LOOPS;
pub const DWRITE_PANOSE_FINIALS_TAPERED_OPEN_LOOPS = DWRITE_PANOSE_FINIALS.TAPERED_OPEN_LOOPS;
pub const DWRITE_PANOSE_FINIALS_ROUND_NO_LOOPS = DWRITE_PANOSE_FINIALS.ROUND_NO_LOOPS;
pub const DWRITE_PANOSE_FINIALS_ROUND_CLOSED_LOOPS = DWRITE_PANOSE_FINIALS.ROUND_CLOSED_LOOPS;
pub const DWRITE_PANOSE_FINIALS_ROUND_OPEN_LOOPS = DWRITE_PANOSE_FINIALS.ROUND_OPEN_LOOPS;

pub const DWRITE_PANOSE_XASCENT = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    VERY_LOW = 2,
    LOW = 3,
    MEDIUM = 4,
    HIGH = 5,
    VERY_HIGH = 6,
};
pub const DWRITE_PANOSE_XASCENT_ANY = DWRITE_PANOSE_XASCENT.ANY;
pub const DWRITE_PANOSE_XASCENT_NO_FIT = DWRITE_PANOSE_XASCENT.NO_FIT;
pub const DWRITE_PANOSE_XASCENT_VERY_LOW = DWRITE_PANOSE_XASCENT.VERY_LOW;
pub const DWRITE_PANOSE_XASCENT_LOW = DWRITE_PANOSE_XASCENT.LOW;
pub const DWRITE_PANOSE_XASCENT_MEDIUM = DWRITE_PANOSE_XASCENT.MEDIUM;
pub const DWRITE_PANOSE_XASCENT_HIGH = DWRITE_PANOSE_XASCENT.HIGH;
pub const DWRITE_PANOSE_XASCENT_VERY_HIGH = DWRITE_PANOSE_XASCENT.VERY_HIGH;

pub const DWRITE_PANOSE_DECORATIVE_CLASS = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    DERIVATIVE = 2,
    NONSTANDARD_TOPOLOGY = 3,
    NONSTANDARD_ELEMENTS = 4,
    NONSTANDARD_ASPECT = 5,
    INITIALS = 6,
    CARTOON = 7,
    PICTURE_STEMS = 8,
    ORNAMENTED = 9,
    TEXT_AND_BACKGROUND = 10,
    COLLAGE = 11,
    MONTAGE = 12,
};
pub const DWRITE_PANOSE_DECORATIVE_CLASS_ANY = DWRITE_PANOSE_DECORATIVE_CLASS.ANY;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_NO_FIT = DWRITE_PANOSE_DECORATIVE_CLASS.NO_FIT;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_DERIVATIVE = DWRITE_PANOSE_DECORATIVE_CLASS.DERIVATIVE;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_TOPOLOGY = DWRITE_PANOSE_DECORATIVE_CLASS.NONSTANDARD_TOPOLOGY;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ELEMENTS = DWRITE_PANOSE_DECORATIVE_CLASS.NONSTANDARD_ELEMENTS;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_NONSTANDARD_ASPECT = DWRITE_PANOSE_DECORATIVE_CLASS.NONSTANDARD_ASPECT;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_INITIALS = DWRITE_PANOSE_DECORATIVE_CLASS.INITIALS;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_CARTOON = DWRITE_PANOSE_DECORATIVE_CLASS.CARTOON;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_PICTURE_STEMS = DWRITE_PANOSE_DECORATIVE_CLASS.PICTURE_STEMS;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_ORNAMENTED = DWRITE_PANOSE_DECORATIVE_CLASS.ORNAMENTED;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_TEXT_AND_BACKGROUND = DWRITE_PANOSE_DECORATIVE_CLASS.TEXT_AND_BACKGROUND;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_COLLAGE = DWRITE_PANOSE_DECORATIVE_CLASS.COLLAGE;
pub const DWRITE_PANOSE_DECORATIVE_CLASS_MONTAGE = DWRITE_PANOSE_DECORATIVE_CLASS.MONTAGE;

pub const DWRITE_PANOSE_ASPECT = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    SUPER_CONDENSED = 2,
    VERY_CONDENSED = 3,
    CONDENSED = 4,
    NORMAL = 5,
    EXTENDED = 6,
    VERY_EXTENDED = 7,
    SUPER_EXTENDED = 8,
    MONOSPACED = 9,
};
pub const DWRITE_PANOSE_ASPECT_ANY = DWRITE_PANOSE_ASPECT.ANY;
pub const DWRITE_PANOSE_ASPECT_NO_FIT = DWRITE_PANOSE_ASPECT.NO_FIT;
pub const DWRITE_PANOSE_ASPECT_SUPER_CONDENSED = DWRITE_PANOSE_ASPECT.SUPER_CONDENSED;
pub const DWRITE_PANOSE_ASPECT_VERY_CONDENSED = DWRITE_PANOSE_ASPECT.VERY_CONDENSED;
pub const DWRITE_PANOSE_ASPECT_CONDENSED = DWRITE_PANOSE_ASPECT.CONDENSED;
pub const DWRITE_PANOSE_ASPECT_NORMAL = DWRITE_PANOSE_ASPECT.NORMAL;
pub const DWRITE_PANOSE_ASPECT_EXTENDED = DWRITE_PANOSE_ASPECT.EXTENDED;
pub const DWRITE_PANOSE_ASPECT_VERY_EXTENDED = DWRITE_PANOSE_ASPECT.VERY_EXTENDED;
pub const DWRITE_PANOSE_ASPECT_SUPER_EXTENDED = DWRITE_PANOSE_ASPECT.SUPER_EXTENDED;
pub const DWRITE_PANOSE_ASPECT_MONOSPACED = DWRITE_PANOSE_ASPECT.MONOSPACED;

pub const DWRITE_PANOSE_FILL = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    STANDARD_SOLID_FILL = 2,
    NO_FILL = 3,
    PATTERNED_FILL = 4,
    COMPLEX_FILL = 5,
    SHAPED_FILL = 6,
    DRAWN_DISTRESSED = 7,
};
pub const DWRITE_PANOSE_FILL_ANY = DWRITE_PANOSE_FILL.ANY;
pub const DWRITE_PANOSE_FILL_NO_FIT = DWRITE_PANOSE_FILL.NO_FIT;
pub const DWRITE_PANOSE_FILL_STANDARD_SOLID_FILL = DWRITE_PANOSE_FILL.STANDARD_SOLID_FILL;
pub const DWRITE_PANOSE_FILL_NO_FILL = DWRITE_PANOSE_FILL.NO_FILL;
pub const DWRITE_PANOSE_FILL_PATTERNED_FILL = DWRITE_PANOSE_FILL.PATTERNED_FILL;
pub const DWRITE_PANOSE_FILL_COMPLEX_FILL = DWRITE_PANOSE_FILL.COMPLEX_FILL;
pub const DWRITE_PANOSE_FILL_SHAPED_FILL = DWRITE_PANOSE_FILL.SHAPED_FILL;
pub const DWRITE_PANOSE_FILL_DRAWN_DISTRESSED = DWRITE_PANOSE_FILL.DRAWN_DISTRESSED;

pub const DWRITE_PANOSE_LINING = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    NONE = 2,
    INLINE = 3,
    OUTLINE = 4,
    ENGRAVED = 5,
    SHADOW = 6,
    RELIEF = 7,
    BACKDROP = 8,
};
pub const DWRITE_PANOSE_LINING_ANY = DWRITE_PANOSE_LINING.ANY;
pub const DWRITE_PANOSE_LINING_NO_FIT = DWRITE_PANOSE_LINING.NO_FIT;
pub const DWRITE_PANOSE_LINING_NONE = DWRITE_PANOSE_LINING.NONE;
pub const DWRITE_PANOSE_LINING_INLINE = DWRITE_PANOSE_LINING.INLINE;
pub const DWRITE_PANOSE_LINING_OUTLINE = DWRITE_PANOSE_LINING.OUTLINE;
pub const DWRITE_PANOSE_LINING_ENGRAVED = DWRITE_PANOSE_LINING.ENGRAVED;
pub const DWRITE_PANOSE_LINING_SHADOW = DWRITE_PANOSE_LINING.SHADOW;
pub const DWRITE_PANOSE_LINING_RELIEF = DWRITE_PANOSE_LINING.RELIEF;
pub const DWRITE_PANOSE_LINING_BACKDROP = DWRITE_PANOSE_LINING.BACKDROP;

pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    STANDARD = 2,
    SQUARE = 3,
    MULTIPLE_SEGMENT = 4,
    ART_DECO = 5,
    UNEVEN_WEIGHTING = 6,
    DIVERSE_ARMS = 7,
    DIVERSE_FORMS = 8,
    LOMBARDIC_FORMS = 9,
    UPPER_CASE_IN_LOWER_CASE = 10,
    IMPLIED_TOPOLOGY = 11,
    HORSESHOE_E_AND_A = 12,
    CURSIVE = 13,
    BLACKLETTER = 14,
    SWASH_VARIANCE = 15,
};
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ANY = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.ANY;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_NO_FIT = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.NO_FIT;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_STANDARD = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.STANDARD;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SQUARE = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.SQUARE;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_MULTIPLE_SEGMENT = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.MULTIPLE_SEGMENT;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_ART_DECO = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.ART_DECO;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UNEVEN_WEIGHTING = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.UNEVEN_WEIGHTING;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_ARMS = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.DIVERSE_ARMS;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_DIVERSE_FORMS = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.DIVERSE_FORMS;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_LOMBARDIC_FORMS = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.LOMBARDIC_FORMS;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_UPPER_CASE_IN_LOWER_CASE = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.UPPER_CASE_IN_LOWER_CASE;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_IMPLIED_TOPOLOGY = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.IMPLIED_TOPOLOGY;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_HORSESHOE_E_AND_A = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.HORSESHOE_E_AND_A;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_CURSIVE = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.CURSIVE;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_BLACKLETTER = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.BLACKLETTER;
pub const DWRITE_PANOSE_DECORATIVE_TOPOLOGY_SWASH_VARIANCE = DWRITE_PANOSE_DECORATIVE_TOPOLOGY.SWASH_VARIANCE;

pub const DWRITE_PANOSE_CHARACTER_RANGES = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    EXTENDED_COLLECTION = 2,
    LITERALS = 3,
    NO_LOWER_CASE = 4,
    SMALL_CAPS = 5,
};
pub const DWRITE_PANOSE_CHARACTER_RANGES_ANY = DWRITE_PANOSE_CHARACTER_RANGES.ANY;
pub const DWRITE_PANOSE_CHARACTER_RANGES_NO_FIT = DWRITE_PANOSE_CHARACTER_RANGES.NO_FIT;
pub const DWRITE_PANOSE_CHARACTER_RANGES_EXTENDED_COLLECTION = DWRITE_PANOSE_CHARACTER_RANGES.EXTENDED_COLLECTION;
pub const DWRITE_PANOSE_CHARACTER_RANGES_LITERALS = DWRITE_PANOSE_CHARACTER_RANGES.LITERALS;
pub const DWRITE_PANOSE_CHARACTER_RANGES_NO_LOWER_CASE = DWRITE_PANOSE_CHARACTER_RANGES.NO_LOWER_CASE;
pub const DWRITE_PANOSE_CHARACTER_RANGES_SMALL_CAPS = DWRITE_PANOSE_CHARACTER_RANGES.SMALL_CAPS;

pub const DWRITE_PANOSE_SYMBOL_KIND = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    MONTAGES = 2,
    PICTURES = 3,
    SHAPES = 4,
    SCIENTIFIC = 5,
    MUSIC = 6,
    EXPERT = 7,
    PATTERNS = 8,
    BOARDERS = 9,
    ICONS = 10,
    LOGOS = 11,
    INDUSTRY_SPECIFIC = 12,
};
pub const DWRITE_PANOSE_SYMBOL_KIND_ANY = DWRITE_PANOSE_SYMBOL_KIND.ANY;
pub const DWRITE_PANOSE_SYMBOL_KIND_NO_FIT = DWRITE_PANOSE_SYMBOL_KIND.NO_FIT;
pub const DWRITE_PANOSE_SYMBOL_KIND_MONTAGES = DWRITE_PANOSE_SYMBOL_KIND.MONTAGES;
pub const DWRITE_PANOSE_SYMBOL_KIND_PICTURES = DWRITE_PANOSE_SYMBOL_KIND.PICTURES;
pub const DWRITE_PANOSE_SYMBOL_KIND_SHAPES = DWRITE_PANOSE_SYMBOL_KIND.SHAPES;
pub const DWRITE_PANOSE_SYMBOL_KIND_SCIENTIFIC = DWRITE_PANOSE_SYMBOL_KIND.SCIENTIFIC;
pub const DWRITE_PANOSE_SYMBOL_KIND_MUSIC = DWRITE_PANOSE_SYMBOL_KIND.MUSIC;
pub const DWRITE_PANOSE_SYMBOL_KIND_EXPERT = DWRITE_PANOSE_SYMBOL_KIND.EXPERT;
pub const DWRITE_PANOSE_SYMBOL_KIND_PATTERNS = DWRITE_PANOSE_SYMBOL_KIND.PATTERNS;
pub const DWRITE_PANOSE_SYMBOL_KIND_BOARDERS = DWRITE_PANOSE_SYMBOL_KIND.BOARDERS;
pub const DWRITE_PANOSE_SYMBOL_KIND_ICONS = DWRITE_PANOSE_SYMBOL_KIND.ICONS;
pub const DWRITE_PANOSE_SYMBOL_KIND_LOGOS = DWRITE_PANOSE_SYMBOL_KIND.LOGOS;
pub const DWRITE_PANOSE_SYMBOL_KIND_INDUSTRY_SPECIFIC = DWRITE_PANOSE_SYMBOL_KIND.INDUSTRY_SPECIFIC;

pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO = enum(i32) {
    ANY = 0,
    NO_FIT = 1,
    NO_WIDTH = 2,
    EXCEPTIONALLY_WIDE = 3,
    SUPER_WIDE = 4,
    VERY_WIDE = 5,
    WIDE = 6,
    NORMAL = 7,
    NARROW = 8,
    VERY_NARROW = 9,
};
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_ANY = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.ANY;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_FIT = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.NO_FIT;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NO_WIDTH = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.NO_WIDTH;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_EXCEPTIONALLY_WIDE = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.EXCEPTIONALLY_WIDE;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_SUPER_WIDE = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.SUPER_WIDE;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_WIDE = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.VERY_WIDE;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_WIDE = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.WIDE;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NORMAL = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.NORMAL;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_NARROW = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.NARROW;
pub const DWRITE_PANOSE_SYMBOL_ASPECT_RATIO_VERY_NARROW = DWRITE_PANOSE_SYMBOL_ASPECT_RATIO.VERY_NARROW;

pub const DWRITE_OUTLINE_THRESHOLD = enum(i32) {
    NTIALIASED = 0,
    LIASED = 1,
};
pub const DWRITE_OUTLINE_THRESHOLD_ANTIALIASED = DWRITE_OUTLINE_THRESHOLD.NTIALIASED;
pub const DWRITE_OUTLINE_THRESHOLD_ALIASED = DWRITE_OUTLINE_THRESHOLD.LIASED;

pub const DWRITE_BASELINE = enum(i32) {
    DEFAULT = 0,
    ROMAN = 1,
    CENTRAL = 2,
    MATH = 3,
    HANGING = 4,
    IDEOGRAPHIC_BOTTOM = 5,
    IDEOGRAPHIC_TOP = 6,
    MINIMUM = 7,
    MAXIMUM = 8,
};
pub const DWRITE_BASELINE_DEFAULT = DWRITE_BASELINE.DEFAULT;
pub const DWRITE_BASELINE_ROMAN = DWRITE_BASELINE.ROMAN;
pub const DWRITE_BASELINE_CENTRAL = DWRITE_BASELINE.CENTRAL;
pub const DWRITE_BASELINE_MATH = DWRITE_BASELINE.MATH;
pub const DWRITE_BASELINE_HANGING = DWRITE_BASELINE.HANGING;
pub const DWRITE_BASELINE_IDEOGRAPHIC_BOTTOM = DWRITE_BASELINE.IDEOGRAPHIC_BOTTOM;
pub const DWRITE_BASELINE_IDEOGRAPHIC_TOP = DWRITE_BASELINE.IDEOGRAPHIC_TOP;
pub const DWRITE_BASELINE_MINIMUM = DWRITE_BASELINE.MINIMUM;
pub const DWRITE_BASELINE_MAXIMUM = DWRITE_BASELINE.MAXIMUM;

pub const DWRITE_VERTICAL_GLYPH_ORIENTATION = enum(i32) {
    DEFAULT = 0,
    STACKED = 1,
};
pub const DWRITE_VERTICAL_GLYPH_ORIENTATION_DEFAULT = DWRITE_VERTICAL_GLYPH_ORIENTATION.DEFAULT;
pub const DWRITE_VERTICAL_GLYPH_ORIENTATION_STACKED = DWRITE_VERTICAL_GLYPH_ORIENTATION.STACKED;

pub const DWRITE_GLYPH_ORIENTATION_ANGLE = enum(i32) {
    @"0_DEGREES" = 0,
    @"90_DEGREES" = 1,
    @"180_DEGREES" = 2,
    @"270_DEGREES" = 3,
};
pub const DWRITE_GLYPH_ORIENTATION_ANGLE_0_DEGREES = DWRITE_GLYPH_ORIENTATION_ANGLE.@"0_DEGREES";
pub const DWRITE_GLYPH_ORIENTATION_ANGLE_90_DEGREES = DWRITE_GLYPH_ORIENTATION_ANGLE.@"90_DEGREES";
pub const DWRITE_GLYPH_ORIENTATION_ANGLE_180_DEGREES = DWRITE_GLYPH_ORIENTATION_ANGLE.@"180_DEGREES";
pub const DWRITE_GLYPH_ORIENTATION_ANGLE_270_DEGREES = DWRITE_GLYPH_ORIENTATION_ANGLE.@"270_DEGREES";

pub const DWRITE_FONT_METRICS1 = extern struct {
    __AnonymousBase_DWrite_1_L627_C38: DWRITE_FONT_METRICS,
    glyphBoxLeft: i16,
    glyphBoxTop: i16,
    glyphBoxRight: i16,
    glyphBoxBottom: i16,
    subscriptPositionX: i16,
    subscriptPositionY: i16,
    subscriptSizeX: i16,
    subscriptSizeY: i16,
    superscriptPositionX: i16,
    superscriptPositionY: i16,
    superscriptSizeX: i16,
    superscriptSizeY: i16,
    hasTypographicMetrics: BOOL,
};

pub const DWRITE_CARET_METRICS = extern struct {
    slopeRise: i16,
    slopeRun: i16,
    offset: i16,
};

pub const DWRITE_PANOSE = extern union {
    values: [10]u8,
    familyKind: u8,
    text: extern struct {
        familyKind: u8,
        serifStyle: u8,
        weight: u8,
        proportion: u8,
        contrast: u8,
        strokeVariation: u8,
        armStyle: u8,
        letterform: u8,
        midline: u8,
        xHeight: u8,
    },
    script: extern struct {
        familyKind: u8,
        toolKind: u8,
        weight: u8,
        spacing: u8,
        aspectRatio: u8,
        contrast: u8,
        scriptTopology: u8,
        scriptForm: u8,
        finials: u8,
        xAscent: u8,
    },
    decorative: extern struct {
        familyKind: u8,
        decorativeClass: u8,
        weight: u8,
        aspect: u8,
        contrast: u8,
        serifVariant: u8,
        fill: u8,
        lining: u8,
        decorativeTopology: u8,
        characterRange: u8,
    },
    symbol: extern struct {
        familyKind: u8,
        symbolKind: u8,
        weight: u8,
        spacing: u8,
        aspectRatioAndContrast: u8,
        aspectRatio94: u8,
        aspectRatio119: u8,
        aspectRatio157: u8,
        aspectRatio163: u8,
        aspectRatio211: u8,
    },
};

pub const DWRITE_UNICODE_RANGE = extern struct {
    first: u32,
    last: u32,
};

pub const DWRITE_SCRIPT_PROPERTIES = extern struct {
    isoScriptCode: u32,
    isoScriptNumber: u32,
    clusterLookahead: u32,
    justificationCharacter: u32,
    _bitfield: u32,
};

pub const DWRITE_JUSTIFICATION_OPPORTUNITY = extern struct {
    expansionMinimum: f32,
    expansionMaximum: f32,
    compressionMaximum: f32,
    _bitfield: u32,
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteFactory1_Value = Guid.initString("30572f99-dac6-41db-a16e-0486307e606a");
pub const IID_IDWriteFactory1 = &IID_IDWriteFactory1_Value;
pub const IDWriteFactory1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFactory.VTable,
        GetEudcFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory1,
                fontCollection: ?*?*IDWriteFontCollection,
                checkForUpdates: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory1,
                fontCollection: ?*?*IDWriteFontCollection,
                checkForUpdates: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateCustomRenderingParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory1,
                gamma: f32,
                enhancedContrast: f32,
                enhancedContrastGrayscale: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE,
                renderingParams: ?*?*IDWriteRenderingParams1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory1,
                gamma: f32,
                enhancedContrast: f32,
                enhancedContrastGrayscale: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE,
                renderingParams: ?*?*IDWriteRenderingParams1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFactory.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory1_GetEudcFontCollection(self: *const T, fontCollection: ?*?*IDWriteFontCollection, checkForUpdates: BOOL) HRESULT {
                return @as(*const IDWriteFactory1.VTable, @ptrCast(self.vtable)).GetEudcFontCollection(@as(*const IDWriteFactory1, @ptrCast(self)), fontCollection, checkForUpdates);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory1_CreateCustomRenderingParams(self: *const T, gamma: f32, enhancedContrast: f32, enhancedContrastGrayscale: f32, clearTypeLevel: f32, pixelGeometry: DWRITE_PIXEL_GEOMETRY, renderingMode: DWRITE_RENDERING_MODE, renderingParams: ?*?*IDWriteRenderingParams1) HRESULT {
                return @as(*const IDWriteFactory1.VTable, @ptrCast(self.vtable)).CreateCustomRenderingParams(@as(*const IDWriteFactory1, @ptrCast(self)), gamma, enhancedContrast, enhancedContrastGrayscale, clearTypeLevel, pixelGeometry, renderingMode, renderingParams);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteFontFace1_Value = Guid.initString("a71efdb4-9fdb-4838-ad90-cfc3be8c3daf");
pub const IID_IDWriteFontFace1 = &IID_IDWriteFontFace1_Value;
pub const IDWriteFontFace1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFace.VTable,
        GetMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                fontMetrics: ?*DWRITE_FONT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontFace1,
                fontMetrics: ?*DWRITE_FONT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetGdiCompatibleMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                fontMetrics: ?*DWRITE_FONT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace1,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                fontMetrics: ?*DWRITE_FONT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCaretMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                caretMetrics: ?*DWRITE_CARET_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontFace1,
                caretMetrics: ?*DWRITE_CARET_METRICS,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetUnicodeRanges: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                maxRangeCount: u32,
                unicodeRanges: ?[*]DWRITE_UNICODE_RANGE,
                actualRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace1,
                maxRangeCount: u32,
                unicodeRanges: ?[*]DWRITE_UNICODE_RANGE,
                actualRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsMonospacedFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetDesignGlyphAdvances: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                glyphAdvances: [*]i32,
                isSideways: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace1,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                glyphAdvances: [*]i32,
                isSideways: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGdiCompatibleGlyphAdvances: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                isSideways: BOOL,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                glyphAdvances: [*]i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace1,
                emSize: f32,
                pixelsPerDip: f32,
                transform: ?*const DWRITE_MATRIX,
                useGdiNatural: BOOL,
                isSideways: BOOL,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                glyphAdvances: [*]i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetKerningPairAdjustments: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                glyphAdvanceAdjustments: [*]i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace1,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                glyphAdvanceAdjustments: [*]i32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HasKerningPairs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetRecommendedRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                fontEmSize: f32,
                dpiX: f32,
                dpiY: f32,
                transform: ?*const DWRITE_MATRIX,
                isSideways: BOOL,
                outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingMode: ?*DWRITE_RENDERING_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace1,
                fontEmSize: f32,
                dpiX: f32,
                dpiY: f32,
                transform: ?*const DWRITE_MATRIX,
                isSideways: BOOL,
                outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingMode: ?*DWRITE_RENDERING_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVerticalGlyphVariants: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
                glyphCount: u32,
                nominalGlyphIndices: [*:0]const u16,
                verticalGlyphIndices: [*:0]u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace1,
                glyphCount: u32,
                nominalGlyphIndices: [*:0]const u16,
                verticalGlyphIndices: [*:0]u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HasVerticalGlyphVariants: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFace.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetMetrics(self: *const T, fontMetrics: ?*DWRITE_FONT_METRICS1) void {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetMetrics(@as(*const IDWriteFontFace1, @ptrCast(self)), fontMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetGdiCompatibleMetrics(self: *const T, emSize: f32, pixelsPerDip: f32, transform: ?*const DWRITE_MATRIX, fontMetrics: ?*DWRITE_FONT_METRICS1) HRESULT {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetGdiCompatibleMetrics(@as(*const IDWriteFontFace1, @ptrCast(self)), emSize, pixelsPerDip, transform, fontMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetCaretMetrics(self: *const T, caretMetrics: ?*DWRITE_CARET_METRICS) void {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetCaretMetrics(@as(*const IDWriteFontFace1, @ptrCast(self)), caretMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetUnicodeRanges(self: *const T, maxRangeCount: u32, unicodeRanges: ?[*]DWRITE_UNICODE_RANGE, actualRangeCount: ?*u32) HRESULT {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetUnicodeRanges(@as(*const IDWriteFontFace1, @ptrCast(self)), maxRangeCount, unicodeRanges, actualRangeCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_IsMonospacedFont(self: *const T) BOOL {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).IsMonospacedFont(@as(*const IDWriteFontFace1, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetDesignGlyphAdvances(self: *const T, glyphCount: u32, glyphIndices: [*:0]const u16, glyphAdvances: [*]i32, isSideways: BOOL) HRESULT {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetDesignGlyphAdvances(@as(*const IDWriteFontFace1, @ptrCast(self)), glyphCount, glyphIndices, glyphAdvances, isSideways);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetGdiCompatibleGlyphAdvances(self: *const T, emSize: f32, pixelsPerDip: f32, transform: ?*const DWRITE_MATRIX, useGdiNatural: BOOL, isSideways: BOOL, glyphCount: u32, glyphIndices: [*:0]const u16, glyphAdvances: [*]i32) HRESULT {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetGdiCompatibleGlyphAdvances(@as(*const IDWriteFontFace1, @ptrCast(self)), emSize, pixelsPerDip, transform, useGdiNatural, isSideways, glyphCount, glyphIndices, glyphAdvances);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetKerningPairAdjustments(self: *const T, glyphCount: u32, glyphIndices: [*:0]const u16, glyphAdvanceAdjustments: [*]i32) HRESULT {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetKerningPairAdjustments(@as(*const IDWriteFontFace1, @ptrCast(self)), glyphCount, glyphIndices, glyphAdvanceAdjustments);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_HasKerningPairs(self: *const T) BOOL {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).HasKerningPairs(@as(*const IDWriteFontFace1, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetRecommendedRenderingMode(self: *const T, fontEmSize: f32, dpiX: f32, dpiY: f32, transform: ?*const DWRITE_MATRIX, isSideways: BOOL, outlineThreshold: DWRITE_OUTLINE_THRESHOLD, measuringMode: DWRITE_MEASURING_MODE, renderingMode: ?*DWRITE_RENDERING_MODE) HRESULT {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetRecommendedRenderingMode(@as(*const IDWriteFontFace1, @ptrCast(self)), fontEmSize, dpiX, dpiY, transform, isSideways, outlineThreshold, measuringMode, renderingMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_GetVerticalGlyphVariants(self: *const T, glyphCount: u32, nominalGlyphIndices: [*:0]const u16, verticalGlyphIndices: [*:0]u16) HRESULT {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).GetVerticalGlyphVariants(@as(*const IDWriteFontFace1, @ptrCast(self)), glyphCount, nominalGlyphIndices, verticalGlyphIndices);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace1_HasVerticalGlyphVariants(self: *const T) BOOL {
                return @as(*const IDWriteFontFace1.VTable, @ptrCast(self.vtable)).HasVerticalGlyphVariants(@as(*const IDWriteFontFace1, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteFont1_Value = Guid.initString("acd16696-8c14-4f5d-877e-fe3fc1d32738");
pub const IID_IDWriteFont1 = &IID_IDWriteFont1_Value;
pub const IDWriteFont1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFont.VTable,
        GetMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont1,
                fontMetrics: ?*DWRITE_FONT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFont1,
                fontMetrics: ?*DWRITE_FONT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetPanose: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont1,
                panose: ?*DWRITE_PANOSE,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFont1,
                panose: ?*DWRITE_PANOSE,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetUnicodeRanges: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont1,
                maxRangeCount: u32,
                unicodeRanges: ?[*]DWRITE_UNICODE_RANGE,
                actualRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont1,
                maxRangeCount: u32,
                unicodeRanges: ?[*]DWRITE_UNICODE_RANGE,
                actualRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsMonospacedFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFont1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFont.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont1_GetMetrics(self: *const T, fontMetrics: ?*DWRITE_FONT_METRICS1) void {
                return @as(*const IDWriteFont1.VTable, @ptrCast(self.vtable)).GetMetrics(@as(*const IDWriteFont1, @ptrCast(self)), fontMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont1_GetPanose(self: *const T, panose: ?*DWRITE_PANOSE) void {
                return @as(*const IDWriteFont1.VTable, @ptrCast(self.vtable)).GetPanose(@as(*const IDWriteFont1, @ptrCast(self)), panose);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont1_GetUnicodeRanges(self: *const T, maxRangeCount: u32, unicodeRanges: ?[*]DWRITE_UNICODE_RANGE, actualRangeCount: ?*u32) HRESULT {
                return @as(*const IDWriteFont1.VTable, @ptrCast(self.vtable)).GetUnicodeRanges(@as(*const IDWriteFont1, @ptrCast(self)), maxRangeCount, unicodeRanges, actualRangeCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont1_IsMonospacedFont(self: *const T) BOOL {
                return @as(*const IDWriteFont1.VTable, @ptrCast(self.vtable)).IsMonospacedFont(@as(*const IDWriteFont1, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteRenderingParams1_Value = Guid.initString("94413cf4-a6fc-4248-8b50-6674348fcad3");
pub const IID_IDWriteRenderingParams1 = &IID_IDWriteRenderingParams1_Value;
pub const IDWriteRenderingParams1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteRenderingParams.VTable,
        GetGrayscaleEnhancedContrast: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams1,
            ) callconv(@import("std").os.windows.WINAPI) f32,
            else => *const fn (
                self: *const IDWriteRenderingParams1,
            ) callconv(@import("std").os.windows.WINAPI) f32,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteRenderingParams.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams1_GetGrayscaleEnhancedContrast(self: *const T) f32 {
                return @as(*const IDWriteRenderingParams1.VTable, @ptrCast(self.vtable)).GetGrayscaleEnhancedContrast(@as(*const IDWriteRenderingParams1, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteTextAnalyzer1_Value = Guid.initString("80dad800-e21f-4e83-96ce-bfcce500db7c");
pub const IID_IDWriteTextAnalyzer1 = &IID_IDWriteTextAnalyzer1_Value;
pub const IDWriteTextAnalyzer1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextAnalyzer.VTable,
        ApplyCharacterSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                leadingSpacing: f32,
                trailingSpacing: f32,
                minimumAdvanceWidth: f32,
                textLength: u32,
                glyphCount: u32,
                clusterMap: [*:0]const u16,
                glyphAdvances: [*]const f32,
                glyphOffsets: [*]const DWRITE_GLYPH_OFFSET,
                glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                modifiedGlyphAdvances: [*]f32,
                modifiedGlyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                leadingSpacing: f32,
                trailingSpacing: f32,
                minimumAdvanceWidth: f32,
                textLength: u32,
                glyphCount: u32,
                clusterMap: [*:0]const u16,
                glyphAdvances: [*]const f32,
                glyphOffsets: [*]const DWRITE_GLYPH_OFFSET,
                glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                modifiedGlyphAdvances: [*]f32,
                modifiedGlyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetBaseline: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                fontFace: ?*IDWriteFontFace,
                baseline: DWRITE_BASELINE,
                isVertical: BOOL,
                isSimulationAllowed: BOOL,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                baselineCoordinate: ?*i32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                fontFace: ?*IDWriteFontFace,
                baseline: DWRITE_BASELINE,
                isVertical: BOOL,
                isSimulationAllowed: BOOL,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                baselineCoordinate: ?*i32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AnalyzeVerticalGlyphOrientation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                analysisSource: ?*IDWriteTextAnalysisSource1,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                analysisSource: ?*IDWriteTextAnalysisSource1,
                textPosition: u32,
                textLength: u32,
                analysisSink: ?*IDWriteTextAnalysisSink1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGlyphOrientationTransform: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                isSideways: BOOL,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                isSideways: BOOL,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetScriptProperties: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                scriptProperties: ?*DWRITE_SCRIPT_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                scriptProperties: ?*DWRITE_SCRIPT_PROPERTIES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTextComplexity: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                textString: [*:0]const u16,
                textLength: u32,
                fontFace: ?*IDWriteFontFace,
                isTextSimple: ?*BOOL,
                textLengthRead: ?*u32,
                glyphIndices: ?[*:0]u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                textString: [*:0]const u16,
                textLength: u32,
                fontFace: ?*IDWriteFontFace,
                isTextSimple: ?*BOOL,
                textLengthRead: ?*u32,
                glyphIndices: ?[*:0]u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetJustificationOpportunities: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                textLength: u32,
                glyphCount: u32,
                textString: [*:0]const u16,
                clusterMap: [*:0]const u16,
                glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                justificationOpportunities: [*]DWRITE_JUSTIFICATION_OPPORTUNITY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                textLength: u32,
                glyphCount: u32,
                textString: [*:0]const u16,
                clusterMap: [*:0]const u16,
                glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                justificationOpportunities: [*]DWRITE_JUSTIFICATION_OPPORTUNITY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        JustifyGlyphAdvances: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                lineWidth: f32,
                glyphCount: u32,
                justificationOpportunities: [*]const DWRITE_JUSTIFICATION_OPPORTUNITY,
                glyphAdvances: [*]const f32,
                glyphOffsets: [*]const DWRITE_GLYPH_OFFSET,
                justifiedGlyphAdvances: [*]f32,
                justifiedGlyphOffsets: ?[*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                lineWidth: f32,
                glyphCount: u32,
                justificationOpportunities: [*]const DWRITE_JUSTIFICATION_OPPORTUNITY,
                glyphAdvances: [*]const f32,
                glyphOffsets: [*]const DWRITE_GLYPH_OFFSET,
                justifiedGlyphAdvances: [*]f32,
                justifiedGlyphOffsets: ?[*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetJustifiedGlyphs: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer1,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                textLength: u32,
                glyphCount: u32,
                maxGlyphCount: u32,
                clusterMap: ?[*:0]const u16,
                glyphIndices: [*:0]const u16,
                glyphAdvances: [*]const f32,
                justifiedGlyphAdvances: [*]const f32,
                justifiedGlyphOffsets: [*]const DWRITE_GLYPH_OFFSET,
                glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                actualGlyphCount: ?*u32,
                modifiedClusterMap: ?[*:0]u16,
                modifiedGlyphIndices: [*:0]u16,
                modifiedGlyphAdvances: [*]f32,
                modifiedGlyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer1,
                fontFace: ?*IDWriteFontFace,
                fontEmSize: f32,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                textLength: u32,
                glyphCount: u32,
                maxGlyphCount: u32,
                clusterMap: ?[*:0]const u16,
                glyphIndices: [*:0]const u16,
                glyphAdvances: [*]const f32,
                justifiedGlyphAdvances: [*]const f32,
                justifiedGlyphOffsets: [*]const DWRITE_GLYPH_OFFSET,
                glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES,
                actualGlyphCount: ?*u32,
                modifiedClusterMap: ?[*:0]u16,
                modifiedGlyphIndices: [*:0]u16,
                modifiedGlyphAdvances: [*]f32,
                modifiedGlyphOffsets: [*]DWRITE_GLYPH_OFFSET,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextAnalyzer.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_ApplyCharacterSpacing(self: *const T, leadingSpacing: f32, trailingSpacing: f32, minimumAdvanceWidth: f32, textLength: u32, glyphCount: u32, clusterMap: [*:0]const u16, glyphAdvances: [*]const f32, glyphOffsets: [*]const DWRITE_GLYPH_OFFSET, glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES, modifiedGlyphAdvances: [*]f32, modifiedGlyphOffsets: [*]DWRITE_GLYPH_OFFSET) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).ApplyCharacterSpacing(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), leadingSpacing, trailingSpacing, minimumAdvanceWidth, textLength, glyphCount, clusterMap, glyphAdvances, glyphOffsets, glyphProperties, modifiedGlyphAdvances, modifiedGlyphOffsets);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_GetBaseline(self: *const T, fontFace: ?*IDWriteFontFace, baseline: DWRITE_BASELINE, isVertical: BOOL, isSimulationAllowed: BOOL, scriptAnalysis: DWRITE_SCRIPT_ANALYSIS, localeName: ?[*:0]const u16, baselineCoordinate: ?*i32, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).GetBaseline(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), fontFace, baseline, isVertical, isSimulationAllowed, scriptAnalysis, localeName, baselineCoordinate, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_AnalyzeVerticalGlyphOrientation(self: *const T, analysisSource: ?*IDWriteTextAnalysisSource1, textPosition: u32, textLength: u32, analysisSink: ?*IDWriteTextAnalysisSink1) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).AnalyzeVerticalGlyphOrientation(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), analysisSource, textPosition, textLength, analysisSink);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_GetGlyphOrientationTransform(self: *const T, glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE, isSideways: BOOL, transform: ?*DWRITE_MATRIX) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).GetGlyphOrientationTransform(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), glyphOrientationAngle, isSideways, transform);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_GetScriptProperties(self: *const T, scriptAnalysis: DWRITE_SCRIPT_ANALYSIS, scriptProperties: ?*DWRITE_SCRIPT_PROPERTIES) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).GetScriptProperties(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), scriptAnalysis, scriptProperties);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_GetTextComplexity(self: *const T, textString: [*:0]const u16, textLength: u32, fontFace: ?*IDWriteFontFace, isTextSimple: ?*BOOL, textLengthRead: ?*u32, glyphIndices: ?[*:0]u16) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).GetTextComplexity(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), textString, textLength, fontFace, isTextSimple, textLengthRead, glyphIndices);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_GetJustificationOpportunities(self: *const T, fontFace: ?*IDWriteFontFace, fontEmSize: f32, scriptAnalysis: DWRITE_SCRIPT_ANALYSIS, textLength: u32, glyphCount: u32, textString: [*:0]const u16, clusterMap: [*:0]const u16, glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES, justificationOpportunities: [*]DWRITE_JUSTIFICATION_OPPORTUNITY) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).GetJustificationOpportunities(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), fontFace, fontEmSize, scriptAnalysis, textLength, glyphCount, textString, clusterMap, glyphProperties, justificationOpportunities);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_JustifyGlyphAdvances(self: *const T, lineWidth: f32, glyphCount: u32, justificationOpportunities: [*]const DWRITE_JUSTIFICATION_OPPORTUNITY, glyphAdvances: [*]const f32, glyphOffsets: [*]const DWRITE_GLYPH_OFFSET, justifiedGlyphAdvances: [*]f32, justifiedGlyphOffsets: ?[*]DWRITE_GLYPH_OFFSET) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).JustifyGlyphAdvances(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), lineWidth, glyphCount, justificationOpportunities, glyphAdvances, glyphOffsets, justifiedGlyphAdvances, justifiedGlyphOffsets);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer1_GetJustifiedGlyphs(self: *const T, fontFace: ?*IDWriteFontFace, fontEmSize: f32, scriptAnalysis: DWRITE_SCRIPT_ANALYSIS, textLength: u32, glyphCount: u32, maxGlyphCount: u32, clusterMap: ?[*:0]const u16, glyphIndices: [*:0]const u16, glyphAdvances: [*]const f32, justifiedGlyphAdvances: [*]const f32, justifiedGlyphOffsets: [*]const DWRITE_GLYPH_OFFSET, glyphProperties: [*]const DWRITE_SHAPING_GLYPH_PROPERTIES, actualGlyphCount: ?*u32, modifiedClusterMap: ?[*:0]u16, modifiedGlyphIndices: [*:0]u16, modifiedGlyphAdvances: [*]f32, modifiedGlyphOffsets: [*]DWRITE_GLYPH_OFFSET) HRESULT {
                return @as(*const IDWriteTextAnalyzer1.VTable, @ptrCast(self.vtable)).GetJustifiedGlyphs(@as(*const IDWriteTextAnalyzer1, @ptrCast(self)), fontFace, fontEmSize, scriptAnalysis, textLength, glyphCount, maxGlyphCount, clusterMap, glyphIndices, glyphAdvances, justifiedGlyphAdvances, justifiedGlyphOffsets, glyphProperties, actualGlyphCount, modifiedClusterMap, modifiedGlyphIndices, modifiedGlyphAdvances, modifiedGlyphOffsets);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteTextAnalysisSource1_Value = Guid.initString("639cfad8-0fb4-4b21-a58a-067920120009");
pub const IID_IDWriteTextAnalysisSource1 = &IID_IDWriteTextAnalysisSource1_Value;
pub const IDWriteTextAnalysisSource1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextAnalysisSource.VTable,
        GetVerticalGlyphOrientation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSource1,
                textPosition: u32,
                textLength: ?*u32,
                glyphOrientation: ?*DWRITE_VERTICAL_GLYPH_ORIENTATION,
                bidiLevel: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSource1,
                textPosition: u32,
                textLength: ?*u32,
                glyphOrientation: ?*DWRITE_VERTICAL_GLYPH_ORIENTATION,
                bidiLevel: ?*u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextAnalysisSource.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSource1_GetVerticalGlyphOrientation(self: *const T, textPosition: u32, textLength: ?*u32, glyphOrientation: ?*DWRITE_VERTICAL_GLYPH_ORIENTATION, bidiLevel: ?*u8) HRESULT {
                return @as(*const IDWriteTextAnalysisSource1.VTable, @ptrCast(self.vtable)).GetVerticalGlyphOrientation(@as(*const IDWriteTextAnalysisSource1, @ptrCast(self)), textPosition, textLength, glyphOrientation, bidiLevel);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteTextAnalysisSink1_Value = Guid.initString("b0d941a0-85e7-4d8b-9fd3-5ced9934482a");
pub const IID_IDWriteTextAnalysisSink1 = &IID_IDWriteTextAnalysisSink1_Value;
pub const IDWriteTextAnalysisSink1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextAnalysisSink.VTable,
        SetGlyphOrientation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalysisSink1,
                textPosition: u32,
                textLength: u32,
                glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                adjustedBidiLevel: u8,
                isSideways: BOOL,
                isRightToLeft: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalysisSink1,
                textPosition: u32,
                textLength: u32,
                glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                adjustedBidiLevel: u8,
                isSideways: BOOL,
                isRightToLeft: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextAnalysisSink.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalysisSink1_SetGlyphOrientation(self: *const T, textPosition: u32, textLength: u32, glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE, adjustedBidiLevel: u8, isSideways: BOOL, isRightToLeft: BOOL) HRESULT {
                return @as(*const IDWriteTextAnalysisSink1.VTable, @ptrCast(self.vtable)).SetGlyphOrientation(@as(*const IDWriteTextAnalysisSink1, @ptrCast(self)), textPosition, textLength, glyphOrientationAngle, adjustedBidiLevel, isSideways, isRightToLeft);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteTextLayout1_Value = Guid.initString("9064d822-80a7-465c-a986-df65f78b8feb");
pub const IID_IDWriteTextLayout1 = &IID_IDWriteTextLayout1_Value;
pub const IDWriteTextLayout1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextLayout.VTable,
        SetPairKerning: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout1,
                isPairKerningEnabled: BOOL,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout1,
                isPairKerningEnabled: BOOL,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPairKerning: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout1,
                currentPosition: u32,
                isPairKerningEnabled: ?*BOOL,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout1,
                currentPosition: u32,
                isPairKerningEnabled: ?*BOOL,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetCharacterSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout1,
                leadingSpacing: f32,
                trailingSpacing: f32,
                minimumAdvanceWidth: f32,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout1,
                leadingSpacing: f32,
                trailingSpacing: f32,
                minimumAdvanceWidth: f32,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCharacterSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout1,
                currentPosition: u32,
                leadingSpacing: ?*f32,
                trailingSpacing: ?*f32,
                minimumAdvanceWidth: ?*f32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout1,
                currentPosition: u32,
                leadingSpacing: ?*f32,
                trailingSpacing: ?*f32,
                minimumAdvanceWidth: ?*f32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextLayout.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout1_SetPairKerning(self: *const T, isPairKerningEnabled: BOOL, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout1.VTable, @ptrCast(self.vtable)).SetPairKerning(@as(*const IDWriteTextLayout1, @ptrCast(self)), isPairKerningEnabled, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout1_GetPairKerning(self: *const T, currentPosition: u32, isPairKerningEnabled: ?*BOOL, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout1.VTable, @ptrCast(self.vtable)).GetPairKerning(@as(*const IDWriteTextLayout1, @ptrCast(self)), currentPosition, isPairKerningEnabled, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout1_SetCharacterSpacing(self: *const T, leadingSpacing: f32, trailingSpacing: f32, minimumAdvanceWidth: f32, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout1.VTable, @ptrCast(self.vtable)).SetCharacterSpacing(@as(*const IDWriteTextLayout1, @ptrCast(self)), leadingSpacing, trailingSpacing, minimumAdvanceWidth, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout1_GetCharacterSpacing(self: *const T, currentPosition: u32, leadingSpacing: ?*f32, trailingSpacing: ?*f32, minimumAdvanceWidth: ?*f32, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout1.VTable, @ptrCast(self.vtable)).GetCharacterSpacing(@as(*const IDWriteTextLayout1, @ptrCast(self)), currentPosition, leadingSpacing, trailingSpacing, minimumAdvanceWidth, textRange);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_TEXT_ANTIALIAS_MODE = enum(i32) {
    CLEARTYPE = 0,
    GRAYSCALE = 1,
};
pub const DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE = DWRITE_TEXT_ANTIALIAS_MODE.CLEARTYPE;
pub const DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE = DWRITE_TEXT_ANTIALIAS_MODE.GRAYSCALE;

// TODO: this type is limited to platform 'windows8.0'
const IID_IDWriteBitmapRenderTarget1_Value = Guid.initString("791e8298-3ef3-4230-9880-c9bdecc42064");
pub const IID_IDWriteBitmapRenderTarget1 = &IID_IDWriteBitmapRenderTarget1_Value;
pub const IDWriteBitmapRenderTarget1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteBitmapRenderTarget.VTable,
        GetTextAntialiasMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget1,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_TEXT_ANTIALIAS_MODE,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget1,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_TEXT_ANTIALIAS_MODE,
        },
        SetTextAntialiasMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteBitmapRenderTarget1,
                antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteBitmapRenderTarget1,
                antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteBitmapRenderTarget.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget1_GetTextAntialiasMode(self: *const T) DWRITE_TEXT_ANTIALIAS_MODE {
                return @as(*const IDWriteBitmapRenderTarget1.VTable, @ptrCast(self.vtable)).GetTextAntialiasMode(@as(*const IDWriteBitmapRenderTarget1, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteBitmapRenderTarget1_SetTextAntialiasMode(self: *const T, antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE) HRESULT {
                return @as(*const IDWriteBitmapRenderTarget1.VTable, @ptrCast(self.vtable)).SetTextAntialiasMode(@as(*const IDWriteBitmapRenderTarget1, @ptrCast(self)), antialiasMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_OPTICAL_ALIGNMENT = enum(i32) {
    NE = 0,
    _SIDE_BEARINGS = 1,
};
pub const DWRITE_OPTICAL_ALIGNMENT_NONE = DWRITE_OPTICAL_ALIGNMENT.NE;
pub const DWRITE_OPTICAL_ALIGNMENT_NO_SIDE_BEARINGS = DWRITE_OPTICAL_ALIGNMENT._SIDE_BEARINGS;

pub const DWRITE_GRID_FIT_MODE = enum(i32) {
    DEFAULT = 0,
    DISABLED = 1,
    ENABLED = 2,
};
pub const DWRITE_GRID_FIT_MODE_DEFAULT = DWRITE_GRID_FIT_MODE.DEFAULT;
pub const DWRITE_GRID_FIT_MODE_DISABLED = DWRITE_GRID_FIT_MODE.DISABLED;
pub const DWRITE_GRID_FIT_MODE_ENABLED = DWRITE_GRID_FIT_MODE.ENABLED;

pub const DWRITE_TEXT_METRICS1 = extern struct {
    Base: DWRITE_TEXT_METRICS,
    heightIncludingTrailingWhitespace: f32,
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteTextRenderer1_Value = Guid.initString("d3e0e934-22a0-427e-aae4-7d9574b59db1");
pub const IID_IDWriteTextRenderer1 = &IID_IDWriteTextRenderer1_Value;
pub const IDWriteTextRenderer1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextRenderer.VTable,
        DrawGlyphRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                measuringMode: DWRITE_MEASURING_MODE,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                measuringMode: DWRITE_MEASURING_MODE,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawUnderline: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                underline: ?*const DWRITE_UNDERLINE,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                underline: ?*const DWRITE_UNDERLINE,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawStrikethrough: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                strikethrough: ?*const DWRITE_STRIKETHROUGH,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                baselineOriginX: f32,
                baselineOriginY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                strikethrough: ?*const DWRITE_STRIKETHROUGH,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        DrawInlineObject: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                originX: f32,
                originY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                inlineObject: ?*IDWriteInlineObject,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextRenderer1,
                clientDrawingContext: ?*anyopaque,
                originX: f32,
                originY: f32,
                orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                inlineObject: ?*IDWriteInlineObject,
                isSideways: BOOL,
                isRightToLeft: BOOL,
                clientDrawingEffect: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextRenderer.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer1_DrawGlyphRun(self: *const T, clientDrawingContext: ?*anyopaque, baselineOriginX: f32, baselineOriginY: f32, orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE, measuringMode: DWRITE_MEASURING_MODE, glyphRun: ?*const DWRITE_GLYPH_RUN, glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer1.VTable, @ptrCast(self.vtable)).DrawGlyphRun(@as(*const IDWriteTextRenderer1, @ptrCast(self)), clientDrawingContext, baselineOriginX, baselineOriginY, orientationAngle, measuringMode, glyphRun, glyphRunDescription, clientDrawingEffect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer1_DrawUnderline(self: *const T, clientDrawingContext: ?*anyopaque, baselineOriginX: f32, baselineOriginY: f32, orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE, underline: ?*const DWRITE_UNDERLINE, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer1.VTable, @ptrCast(self.vtable)).DrawUnderline(@as(*const IDWriteTextRenderer1, @ptrCast(self)), clientDrawingContext, baselineOriginX, baselineOriginY, orientationAngle, underline, clientDrawingEffect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer1_DrawStrikethrough(self: *const T, clientDrawingContext: ?*anyopaque, baselineOriginX: f32, baselineOriginY: f32, orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE, strikethrough: ?*const DWRITE_STRIKETHROUGH, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer1.VTable, @ptrCast(self.vtable)).DrawStrikethrough(@as(*const IDWriteTextRenderer1, @ptrCast(self)), clientDrawingContext, baselineOriginX, baselineOriginY, orientationAngle, strikethrough, clientDrawingEffect);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextRenderer1_DrawInlineObject(self: *const T, clientDrawingContext: ?*anyopaque, originX: f32, originY: f32, orientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE, inlineObject: ?*IDWriteInlineObject, isSideways: BOOL, isRightToLeft: BOOL, clientDrawingEffect: ?*IUnknown) HRESULT {
                return @as(*const IDWriteTextRenderer1.VTable, @ptrCast(self.vtable)).DrawInlineObject(@as(*const IDWriteTextRenderer1, @ptrCast(self)), clientDrawingContext, originX, originY, orientationAngle, inlineObject, isSideways, isRightToLeft, clientDrawingEffect);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteTextFormat1_Value = Guid.initString("5f174b49-0d8b-4cfb-8bca-f1cce9d06c67");
pub const IID_IDWriteTextFormat1 = &IID_IDWriteTextFormat1_Value;
pub const IDWriteTextFormat1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextFormat.VTable,
        SetVerticalGlyphOrientation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
                glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat1,
                glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVerticalGlyphOrientation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_VERTICAL_GLYPH_ORIENTATION,
            else => *const fn (
                self: *const IDWriteTextFormat1,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_VERTICAL_GLYPH_ORIENTATION,
        },
        SetLastLineWrapping: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
                isLastLineWrappingEnabled: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat1,
                isLastLineWrappingEnabled: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastLineWrapping: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteTextFormat1,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        SetOpticalAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
                opticalAlignment: DWRITE_OPTICAL_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat1,
                opticalAlignment: DWRITE_OPTICAL_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOpticalAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_OPTICAL_ALIGNMENT,
            else => *const fn (
                self: *const IDWriteTextFormat1,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_OPTICAL_ALIGNMENT,
        },
        SetFontFallback: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
                fontFallback: ?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat1,
                fontFallback: ?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFallback: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat1,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat1,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextFormat.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_SetVerticalGlyphOrientation(self: *const T, glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION) HRESULT {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).SetVerticalGlyphOrientation(@as(*const IDWriteTextFormat1, @ptrCast(self)), glyphOrientation);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_GetVerticalGlyphOrientation(self: *const T) DWRITE_VERTICAL_GLYPH_ORIENTATION {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).GetVerticalGlyphOrientation(@as(*const IDWriteTextFormat1, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_SetLastLineWrapping(self: *const T, isLastLineWrappingEnabled: BOOL) HRESULT {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).SetLastLineWrapping(@as(*const IDWriteTextFormat1, @ptrCast(self)), isLastLineWrappingEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_GetLastLineWrapping(self: *const T) BOOL {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).GetLastLineWrapping(@as(*const IDWriteTextFormat1, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_SetOpticalAlignment(self: *const T, opticalAlignment: DWRITE_OPTICAL_ALIGNMENT) HRESULT {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).SetOpticalAlignment(@as(*const IDWriteTextFormat1, @ptrCast(self)), opticalAlignment);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_GetOpticalAlignment(self: *const T) DWRITE_OPTICAL_ALIGNMENT {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).GetOpticalAlignment(@as(*const IDWriteTextFormat1, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_SetFontFallback(self: *const T, fontFallback: ?*IDWriteFontFallback) HRESULT {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).SetFontFallback(@as(*const IDWriteTextFormat1, @ptrCast(self)), fontFallback);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat1_GetFontFallback(self: *const T, fontFallback: ?*?*IDWriteFontFallback) HRESULT {
                return @as(*const IDWriteTextFormat1.VTable, @ptrCast(self.vtable)).GetFontFallback(@as(*const IDWriteTextFormat1, @ptrCast(self)), fontFallback);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteTextLayout2_Value = Guid.initString("1093c18f-8d5e-43f0-b064-0917311b525e");
pub const IID_IDWriteTextLayout2 = &IID_IDWriteTextLayout2_Value;
pub const IDWriteTextLayout2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextLayout1.VTable,
        GetMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
                textMetrics: ?*DWRITE_TEXT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout2,
                textMetrics: ?*DWRITE_TEXT_METRICS1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetVerticalGlyphOrientation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
                glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout2,
                glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetVerticalGlyphOrientation: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_VERTICAL_GLYPH_ORIENTATION,
            else => *const fn (
                self: *const IDWriteTextLayout2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_VERTICAL_GLYPH_ORIENTATION,
        },
        SetLastLineWrapping: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
                isLastLineWrappingEnabled: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout2,
                isLastLineWrappingEnabled: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLastLineWrapping: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteTextLayout2,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        SetOpticalAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
                opticalAlignment: DWRITE_OPTICAL_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout2,
                opticalAlignment: DWRITE_OPTICAL_ALIGNMENT,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetOpticalAlignment: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_OPTICAL_ALIGNMENT,
            else => *const fn (
                self: *const IDWriteTextLayout2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_OPTICAL_ALIGNMENT,
        },
        SetFontFallback: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
                fontFallback: ?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout2,
                fontFallback: ?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFallback: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout2,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout2,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextLayout1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_GetMetrics(self: *const T, textMetrics: ?*DWRITE_TEXT_METRICS1) HRESULT {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).GetMetrics(@as(*const IDWriteTextLayout2, @ptrCast(self)), textMetrics);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_SetVerticalGlyphOrientation(self: *const T, glyphOrientation: DWRITE_VERTICAL_GLYPH_ORIENTATION) HRESULT {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).SetVerticalGlyphOrientation(@as(*const IDWriteTextLayout2, @ptrCast(self)), glyphOrientation);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_GetVerticalGlyphOrientation(self: *const T) DWRITE_VERTICAL_GLYPH_ORIENTATION {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).GetVerticalGlyphOrientation(@as(*const IDWriteTextLayout2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_SetLastLineWrapping(self: *const T, isLastLineWrappingEnabled: BOOL) HRESULT {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).SetLastLineWrapping(@as(*const IDWriteTextLayout2, @ptrCast(self)), isLastLineWrappingEnabled);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_GetLastLineWrapping(self: *const T) BOOL {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).GetLastLineWrapping(@as(*const IDWriteTextLayout2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_SetOpticalAlignment(self: *const T, opticalAlignment: DWRITE_OPTICAL_ALIGNMENT) HRESULT {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).SetOpticalAlignment(@as(*const IDWriteTextLayout2, @ptrCast(self)), opticalAlignment);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_GetOpticalAlignment(self: *const T) DWRITE_OPTICAL_ALIGNMENT {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).GetOpticalAlignment(@as(*const IDWriteTextLayout2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_SetFontFallback(self: *const T, fontFallback: ?*IDWriteFontFallback) HRESULT {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).SetFontFallback(@as(*const IDWriteTextLayout2, @ptrCast(self)), fontFallback);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout2_GetFontFallback(self: *const T, fontFallback: ?*?*IDWriteFontFallback) HRESULT {
                return @as(*const IDWriteTextLayout2.VTable, @ptrCast(self.vtable)).GetFontFallback(@as(*const IDWriteTextLayout2, @ptrCast(self)), fontFallback);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteTextAnalyzer2_Value = Guid.initString("553a9ff3-5693-4df7-b52b-74806f7f2eb9");
pub const IID_IDWriteTextAnalyzer2 = &IID_IDWriteTextAnalyzer2_Value;
pub const IDWriteTextAnalyzer2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextAnalyzer1.VTable,
        GetGlyphOrientationTransform: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer2,
                glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                isSideways: BOOL,
                originX: f32,
                originY: f32,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer2,
                glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE,
                isSideways: BOOL,
                originX: f32,
                originY: f32,
                transform: ?*DWRITE_MATRIX,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetTypographicFeatures: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer2,
                fontFace: ?*IDWriteFontFace,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                maxTagCount: u32,
                actualTagCount: ?*u32,
                tags: [*]DWRITE_FONT_FEATURE_TAG,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer2,
                fontFace: ?*IDWriteFontFace,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                maxTagCount: u32,
                actualTagCount: ?*u32,
                tags: [*]DWRITE_FONT_FEATURE_TAG,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CheckTypographicFeature: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextAnalyzer2,
                fontFace: ?*IDWriteFontFace,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                featureTag: DWRITE_FONT_FEATURE_TAG,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                featureApplies: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextAnalyzer2,
                fontFace: ?*IDWriteFontFace,
                scriptAnalysis: DWRITE_SCRIPT_ANALYSIS,
                localeName: ?[*:0]const u16,
                featureTag: DWRITE_FONT_FEATURE_TAG,
                glyphCount: u32,
                glyphIndices: [*:0]const u16,
                featureApplies: [*:0]u8,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextAnalyzer1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer2_GetGlyphOrientationTransform(self: *const T, glyphOrientationAngle: DWRITE_GLYPH_ORIENTATION_ANGLE, isSideways: BOOL, originX: f32, originY: f32, transform: ?*DWRITE_MATRIX) HRESULT {
                return @as(*const IDWriteTextAnalyzer2.VTable, @ptrCast(self.vtable)).GetGlyphOrientationTransform(@as(*const IDWriteTextAnalyzer2, @ptrCast(self)), glyphOrientationAngle, isSideways, originX, originY, transform);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer2_GetTypographicFeatures(self: *const T, fontFace: ?*IDWriteFontFace, scriptAnalysis: DWRITE_SCRIPT_ANALYSIS, localeName: ?[*:0]const u16, maxTagCount: u32, actualTagCount: ?*u32, tags: [*]DWRITE_FONT_FEATURE_TAG) HRESULT {
                return @as(*const IDWriteTextAnalyzer2.VTable, @ptrCast(self.vtable)).GetTypographicFeatures(@as(*const IDWriteTextAnalyzer2, @ptrCast(self)), fontFace, scriptAnalysis, localeName, maxTagCount, actualTagCount, tags);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextAnalyzer2_CheckTypographicFeature(self: *const T, fontFace: ?*IDWriteFontFace, scriptAnalysis: DWRITE_SCRIPT_ANALYSIS, localeName: ?[*:0]const u16, featureTag: DWRITE_FONT_FEATURE_TAG, glyphCount: u32, glyphIndices: [*:0]const u16, featureApplies: [*:0]u8) HRESULT {
                return @as(*const IDWriteTextAnalyzer2.VTable, @ptrCast(self.vtable)).CheckTypographicFeature(@as(*const IDWriteTextAnalyzer2, @ptrCast(self)), fontFace, scriptAnalysis, localeName, featureTag, glyphCount, glyphIndices, featureApplies);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteFontFallback_Value = Guid.initString("efa008f9-f7a1-48bf-b05c-f224713cc0ff");
pub const IID_IDWriteFontFallback = &IID_IDWriteFontFallback_Value;
pub const IDWriteFontFallback = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        MapCharacters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFallback,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                baseFontCollection: ?*IDWriteFontCollection,
                baseFamilyName: ?[*:0]const u16,
                baseWeight: DWRITE_FONT_WEIGHT,
                baseStyle: DWRITE_FONT_STYLE,
                baseStretch: DWRITE_FONT_STRETCH,
                mappedLength: ?*u32,
                mappedFont: ?*?*IDWriteFont,
                scale: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFallback,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                baseFontCollection: ?*IDWriteFontCollection,
                baseFamilyName: ?[*:0]const u16,
                baseWeight: DWRITE_FONT_WEIGHT,
                baseStyle: DWRITE_FONT_STYLE,
                baseStretch: DWRITE_FONT_STRETCH,
                mappedLength: ?*u32,
                mappedFont: ?*?*IDWriteFont,
                scale: ?*f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFallback_MapCharacters(self: *const T, analysisSource: ?*IDWriteTextAnalysisSource, textPosition: u32, textLength: u32, baseFontCollection: ?*IDWriteFontCollection, baseFamilyName: ?[*:0]const u16, baseWeight: DWRITE_FONT_WEIGHT, baseStyle: DWRITE_FONT_STYLE, baseStretch: DWRITE_FONT_STRETCH, mappedLength: ?*u32, mappedFont: ?*?*IDWriteFont, scale: ?*f32) HRESULT {
                return @as(*const IDWriteFontFallback.VTable, @ptrCast(self.vtable)).MapCharacters(@as(*const IDWriteFontFallback, @ptrCast(self)), analysisSource, textPosition, textLength, baseFontCollection, baseFamilyName, baseWeight, baseStyle, baseStretch, mappedLength, mappedFont, scale);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteFontFallbackBuilder_Value = Guid.initString("fd882d06-8aba-4fb8-b849-8be8b73e14de");
pub const IID_IDWriteFontFallbackBuilder = &IID_IDWriteFontFallbackBuilder_Value;
pub const IDWriteFontFallbackBuilder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AddMapping: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFallbackBuilder,
                ranges: [*]const DWRITE_UNICODE_RANGE,
                rangesCount: u32,
                targetFamilyNames: [*]const ?*const u16,
                targetFamilyNamesCount: u32,
                fontCollection: ?*IDWriteFontCollection,
                localeName: ?[*:0]const u16,
                baseFamilyName: ?[*:0]const u16,
                scale: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFallbackBuilder,
                ranges: [*]const DWRITE_UNICODE_RANGE,
                rangesCount: u32,
                targetFamilyNames: [*]const ?*const u16,
                targetFamilyNamesCount: u32,
                fontCollection: ?*IDWriteFontCollection,
                localeName: ?[*:0]const u16,
                baseFamilyName: ?[*:0]const u16,
                scale: f32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddMappings: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFallbackBuilder,
                fontFallback: ?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFallbackBuilder,
                fontFallback: ?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFallback: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFallbackBuilder,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFallbackBuilder,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFallbackBuilder_AddMapping(self: *const T, ranges: [*]const DWRITE_UNICODE_RANGE, rangesCount: u32, targetFamilyNames: [*]const ?*const u16, targetFamilyNamesCount: u32, fontCollection: ?*IDWriteFontCollection, localeName: ?[*:0]const u16, baseFamilyName: ?[*:0]const u16, scale: f32) HRESULT {
                return @as(*const IDWriteFontFallbackBuilder.VTable, @ptrCast(self.vtable)).AddMapping(@as(*const IDWriteFontFallbackBuilder, @ptrCast(self)), ranges, rangesCount, targetFamilyNames, targetFamilyNamesCount, fontCollection, localeName, baseFamilyName, scale);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFallbackBuilder_AddMappings(self: *const T, fontFallback: ?*IDWriteFontFallback) HRESULT {
                return @as(*const IDWriteFontFallbackBuilder.VTable, @ptrCast(self.vtable)).AddMappings(@as(*const IDWriteFontFallbackBuilder, @ptrCast(self)), fontFallback);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFallbackBuilder_CreateFontFallback(self: *const T, fontFallback: ?*?*IDWriteFontFallback) HRESULT {
                return @as(*const IDWriteFontFallbackBuilder.VTable, @ptrCast(self.vtable)).CreateFontFallback(@as(*const IDWriteFontFallbackBuilder, @ptrCast(self)), fontFallback);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteFont2_Value = Guid.initString("29748ed6-8c9c-4a6a-be0b-d912e8538944");
pub const IID_IDWriteFont2 = &IID_IDWriteFont2_Value;
pub const IDWriteFont2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFont1.VTable,
        IsColorFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont2,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFont2,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFont1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont2_IsColorFont(self: *const T) BOOL {
                return @as(*const IDWriteFont2.VTable, @ptrCast(self.vtable)).IsColorFont(@as(*const IDWriteFont2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteFontFace2_Value = Guid.initString("d8b768ff-64bc-4e66-982b-ec8e87f693f7");
pub const IID_IDWriteFontFace2 = &IID_IDWriteFontFace2_Value;
pub const IDWriteFontFace2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFace1.VTable,
        IsColorFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace2,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace2,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetColorPaletteCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace2,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontFace2,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetPaletteEntryCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace2,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontFace2,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetPaletteEntries: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace2,
                colorPaletteIndex: u32,
                firstEntryIndex: u32,
                entryCount: u32,
                paletteEntries: [*]DWRITE_COLOR_F,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace2,
                colorPaletteIndex: u32,
                firstEntryIndex: u32,
                entryCount: u32,
                paletteEntries: [*]DWRITE_COLOR_F,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetRecommendedRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace2,
                fontEmSize: f32,
                dpiX: f32,
                dpiY: f32,
                transform: ?*const DWRITE_MATRIX,
                isSideways: BOOL,
                outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingParams: ?*IDWriteRenderingParams,
                renderingMode: ?*DWRITE_RENDERING_MODE,
                gridFitMode: ?*DWRITE_GRID_FIT_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace2,
                fontEmSize: f32,
                dpiX: f32,
                dpiY: f32,
                transform: ?*const DWRITE_MATRIX,
                isSideways: BOOL,
                outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingParams: ?*IDWriteRenderingParams,
                renderingMode: ?*DWRITE_RENDERING_MODE,
                gridFitMode: ?*DWRITE_GRID_FIT_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFace1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace2_IsColorFont(self: *const T) BOOL {
                return @as(*const IDWriteFontFace2.VTable, @ptrCast(self.vtable)).IsColorFont(@as(*const IDWriteFontFace2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace2_GetColorPaletteCount(self: *const T) u32 {
                return @as(*const IDWriteFontFace2.VTable, @ptrCast(self.vtable)).GetColorPaletteCount(@as(*const IDWriteFontFace2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace2_GetPaletteEntryCount(self: *const T) u32 {
                return @as(*const IDWriteFontFace2.VTable, @ptrCast(self.vtable)).GetPaletteEntryCount(@as(*const IDWriteFontFace2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace2_GetPaletteEntries(self: *const T, colorPaletteIndex: u32, firstEntryIndex: u32, entryCount: u32, paletteEntries: [*]DWRITE_COLOR_F) HRESULT {
                return @as(*const IDWriteFontFace2.VTable, @ptrCast(self.vtable)).GetPaletteEntries(@as(*const IDWriteFontFace2, @ptrCast(self)), colorPaletteIndex, firstEntryIndex, entryCount, paletteEntries);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace2_GetRecommendedRenderingMode(self: *const T, fontEmSize: f32, dpiX: f32, dpiY: f32, transform: ?*const DWRITE_MATRIX, isSideways: BOOL, outlineThreshold: DWRITE_OUTLINE_THRESHOLD, measuringMode: DWRITE_MEASURING_MODE, renderingParams: ?*IDWriteRenderingParams, renderingMode: ?*DWRITE_RENDERING_MODE, gridFitMode: ?*DWRITE_GRID_FIT_MODE) HRESULT {
                return @as(*const IDWriteFontFace2.VTable, @ptrCast(self.vtable)).GetRecommendedRenderingMode(@as(*const IDWriteFontFace2, @ptrCast(self)), fontEmSize, dpiX, dpiY, transform, isSideways, outlineThreshold, measuringMode, renderingParams, renderingMode, gridFitMode);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_COLOR_GLYPH_RUN = extern struct {
    glyphRun: DWRITE_GLYPH_RUN,
    glyphRunDescription: ?*DWRITE_GLYPH_RUN_DESCRIPTION,
    baselineOriginX: f32,
    baselineOriginY: f32,
    runColor: DWRITE_COLOR_F,
    paletteIndex: u16,
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteColorGlyphRunEnumerator_Value = Guid.initString("d31fbe17-f157-41a2-8d24-cb779e0560e8");
pub const IID_IDWriteColorGlyphRunEnumerator = &IID_IDWriteColorGlyphRunEnumerator_Value;
pub const IDWriteColorGlyphRunEnumerator = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        MoveNext: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteColorGlyphRunEnumerator,
                hasRun: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteColorGlyphRunEnumerator,
                hasRun: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetCurrentRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteColorGlyphRunEnumerator,
                colorGlyphRun: ?*const ?*DWRITE_COLOR_GLYPH_RUN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteColorGlyphRunEnumerator,
                colorGlyphRun: ?*const ?*DWRITE_COLOR_GLYPH_RUN,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteColorGlyphRunEnumerator_MoveNext(self: *const T, hasRun: ?*BOOL) HRESULT {
                return @as(*const IDWriteColorGlyphRunEnumerator.VTable, @ptrCast(self.vtable)).MoveNext(@as(*const IDWriteColorGlyphRunEnumerator, @ptrCast(self)), hasRun);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteColorGlyphRunEnumerator_GetCurrentRun(self: *const T, colorGlyphRun: ?*const ?*DWRITE_COLOR_GLYPH_RUN) HRESULT {
                return @as(*const IDWriteColorGlyphRunEnumerator.VTable, @ptrCast(self.vtable)).GetCurrentRun(@as(*const IDWriteColorGlyphRunEnumerator, @ptrCast(self)), colorGlyphRun);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteRenderingParams2_Value = Guid.initString("f9d711c3-9777-40ae-87e8-3e5af9bf0948");
pub const IID_IDWriteRenderingParams2 = &IID_IDWriteRenderingParams2_Value;
pub const IDWriteRenderingParams2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteRenderingParams1.VTable,
        GetGridFitMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_GRID_FIT_MODE,
            else => *const fn (
                self: *const IDWriteRenderingParams2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_GRID_FIT_MODE,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteRenderingParams1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams2_GetGridFitMode(self: *const T) DWRITE_GRID_FIT_MODE {
                return @as(*const IDWriteRenderingParams2.VTable, @ptrCast(self.vtable)).GetGridFitMode(@as(*const IDWriteRenderingParams2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteFactory2_Value = Guid.initString("0439fc60-ca44-4994-8dee-3a9af7b732ec");
pub const IID_IDWriteFactory2 = &IID_IDWriteFactory2_Value;
pub const IDWriteFactory2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFactory1.VTable,
        GetSystemFontFallback: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory2,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory2,
                fontFallback: ?*?*IDWriteFontFallback,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFallbackBuilder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory2,
                fontFallbackBuilder: ?*?*IDWriteFontFallbackBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory2,
                fontFallbackBuilder: ?*?*IDWriteFontFallbackBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        TranslateColorGlyphRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory2,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                measuringMode: DWRITE_MEASURING_MODE,
                worldToDeviceTransform: ?*const DWRITE_MATRIX,
                colorPaletteIndex: u32,
                colorLayers: ?*?*IDWriteColorGlyphRunEnumerator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory2,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                measuringMode: DWRITE_MEASURING_MODE,
                worldToDeviceTransform: ?*const DWRITE_MATRIX,
                colorPaletteIndex: u32,
                colorLayers: ?*?*IDWriteColorGlyphRunEnumerator,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateCustomRenderingParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory2,
                gamma: f32,
                enhancedContrast: f32,
                grayscaleEnhancedContrast: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                renderingParams: ?*?*IDWriteRenderingParams2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory2,
                gamma: f32,
                enhancedContrast: f32,
                grayscaleEnhancedContrast: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                renderingParams: ?*?*IDWriteRenderingParams2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateGlyphRunAnalysis: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory2,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                transform: ?*const DWRITE_MATRIX,
                renderingMode: DWRITE_RENDERING_MODE,
                measuringMode: DWRITE_MEASURING_MODE,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory2,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                transform: ?*const DWRITE_MATRIX,
                renderingMode: DWRITE_RENDERING_MODE,
                measuringMode: DWRITE_MEASURING_MODE,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFactory1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory2_GetSystemFontFallback(self: *const T, fontFallback: ?*?*IDWriteFontFallback) HRESULT {
                return @as(*const IDWriteFactory2.VTable, @ptrCast(self.vtable)).GetSystemFontFallback(@as(*const IDWriteFactory2, @ptrCast(self)), fontFallback);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory2_CreateFontFallbackBuilder(self: *const T, fontFallbackBuilder: ?*?*IDWriteFontFallbackBuilder) HRESULT {
                return @as(*const IDWriteFactory2.VTable, @ptrCast(self.vtable)).CreateFontFallbackBuilder(@as(*const IDWriteFactory2, @ptrCast(self)), fontFallbackBuilder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory2_TranslateColorGlyphRun(self: *const T, baselineOriginX: f32, baselineOriginY: f32, glyphRun: ?*const DWRITE_GLYPH_RUN, glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION, measuringMode: DWRITE_MEASURING_MODE, worldToDeviceTransform: ?*const DWRITE_MATRIX, colorPaletteIndex: u32, colorLayers: ?*?*IDWriteColorGlyphRunEnumerator) HRESULT {
                return @as(*const IDWriteFactory2.VTable, @ptrCast(self.vtable)).TranslateColorGlyphRun(@as(*const IDWriteFactory2, @ptrCast(self)), baselineOriginX, baselineOriginY, glyphRun, glyphRunDescription, measuringMode, worldToDeviceTransform, colorPaletteIndex, colorLayers);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory2_CreateCustomRenderingParams(self: *const T, gamma: f32, enhancedContrast: f32, grayscaleEnhancedContrast: f32, clearTypeLevel: f32, pixelGeometry: DWRITE_PIXEL_GEOMETRY, renderingMode: DWRITE_RENDERING_MODE, gridFitMode: DWRITE_GRID_FIT_MODE, renderingParams: ?*?*IDWriteRenderingParams2) HRESULT {
                return @as(*const IDWriteFactory2.VTable, @ptrCast(self.vtable)).CreateCustomRenderingParams(@as(*const IDWriteFactory2, @ptrCast(self)), gamma, enhancedContrast, grayscaleEnhancedContrast, clearTypeLevel, pixelGeometry, renderingMode, gridFitMode, renderingParams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory2_CreateGlyphRunAnalysis(self: *const T, glyphRun: ?*const DWRITE_GLYPH_RUN, transform: ?*const DWRITE_MATRIX, renderingMode: DWRITE_RENDERING_MODE, measuringMode: DWRITE_MEASURING_MODE, gridFitMode: DWRITE_GRID_FIT_MODE, antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE, baselineOriginX: f32, baselineOriginY: f32, glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis) HRESULT {
                return @as(*const IDWriteFactory2.VTable, @ptrCast(self.vtable)).CreateGlyphRunAnalysis(@as(*const IDWriteFactory2, @ptrCast(self)), glyphRun, transform, renderingMode, measuringMode, gridFitMode, antialiasMode, baselineOriginX, baselineOriginY, glyphRunAnalysis);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_FONT_PROPERTY_ID = enum(i32) {
    NONE = 0,
    WEIGHT_STRETCH_STYLE_FAMILY_NAME = 1,
    TYPOGRAPHIC_FAMILY_NAME = 2,
    WEIGHT_STRETCH_STYLE_FACE_NAME = 3,
    FULL_NAME = 4,
    WIN32_FAMILY_NAME = 5,
    POSTSCRIPT_NAME = 6,
    DESIGN_SCRIPT_LANGUAGE_TAG = 7,
    SUPPORTED_SCRIPT_LANGUAGE_TAG = 8,
    SEMANTIC_TAG = 9,
    WEIGHT = 10,
    STRETCH = 11,
    STYLE = 12,
    TYPOGRAPHIC_FACE_NAME = 13,
    // TOTAL = 13, this enum value conflicts with TYPOGRAPHIC_FACE_NAME
    TOTAL_RS3 = 14,
    // PREFERRED_FAMILY_NAME = 2, this enum value conflicts with TYPOGRAPHIC_FAMILY_NAME
    // FAMILY_NAME = 1, this enum value conflicts with WEIGHT_STRETCH_STYLE_FAMILY_NAME
    // FACE_NAME = 3, this enum value conflicts with WEIGHT_STRETCH_STYLE_FACE_NAME
};
pub const DWRITE_FONT_PROPERTY_ID_NONE = DWRITE_FONT_PROPERTY_ID.NONE;
pub const DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID.WEIGHT_STRETCH_STYLE_FAMILY_NAME;
pub const DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID.TYPOGRAPHIC_FAMILY_NAME;
pub const DWRITE_FONT_PROPERTY_ID_WEIGHT_STRETCH_STYLE_FACE_NAME = DWRITE_FONT_PROPERTY_ID.WEIGHT_STRETCH_STYLE_FACE_NAME;
pub const DWRITE_FONT_PROPERTY_ID_FULL_NAME = DWRITE_FONT_PROPERTY_ID.FULL_NAME;
pub const DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID.WIN32_FAMILY_NAME;
pub const DWRITE_FONT_PROPERTY_ID_POSTSCRIPT_NAME = DWRITE_FONT_PROPERTY_ID.POSTSCRIPT_NAME;
pub const DWRITE_FONT_PROPERTY_ID_DESIGN_SCRIPT_LANGUAGE_TAG = DWRITE_FONT_PROPERTY_ID.DESIGN_SCRIPT_LANGUAGE_TAG;
pub const DWRITE_FONT_PROPERTY_ID_SUPPORTED_SCRIPT_LANGUAGE_TAG = DWRITE_FONT_PROPERTY_ID.SUPPORTED_SCRIPT_LANGUAGE_TAG;
pub const DWRITE_FONT_PROPERTY_ID_SEMANTIC_TAG = DWRITE_FONT_PROPERTY_ID.SEMANTIC_TAG;
pub const DWRITE_FONT_PROPERTY_ID_WEIGHT = DWRITE_FONT_PROPERTY_ID.WEIGHT;
pub const DWRITE_FONT_PROPERTY_ID_STRETCH = DWRITE_FONT_PROPERTY_ID.STRETCH;
pub const DWRITE_FONT_PROPERTY_ID_STYLE = DWRITE_FONT_PROPERTY_ID.STYLE;
pub const DWRITE_FONT_PROPERTY_ID_TYPOGRAPHIC_FACE_NAME = DWRITE_FONT_PROPERTY_ID.TYPOGRAPHIC_FACE_NAME;
pub const DWRITE_FONT_PROPERTY_ID_TOTAL = DWRITE_FONT_PROPERTY_ID.TYPOGRAPHIC_FACE_NAME;
pub const DWRITE_FONT_PROPERTY_ID_TOTAL_RS3 = DWRITE_FONT_PROPERTY_ID.TOTAL_RS3;
pub const DWRITE_FONT_PROPERTY_ID_PREFERRED_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID.TYPOGRAPHIC_FAMILY_NAME;
pub const DWRITE_FONT_PROPERTY_ID_FAMILY_NAME = DWRITE_FONT_PROPERTY_ID.WEIGHT_STRETCH_STYLE_FAMILY_NAME;
pub const DWRITE_FONT_PROPERTY_ID_FACE_NAME = DWRITE_FONT_PROPERTY_ID.WEIGHT_STRETCH_STYLE_FACE_NAME;

pub const DWRITE_FONT_PROPERTY = extern struct {
    propertyId: DWRITE_FONT_PROPERTY_ID,
    propertyValue: ?[*:0]const u16,
    localeName: ?[*:0]const u16,
};

pub const DWRITE_LOCALITY = enum(i32) {
    REMOTE = 0,
    PARTIAL = 1,
    LOCAL = 2,
};
pub const DWRITE_LOCALITY_REMOTE = DWRITE_LOCALITY.REMOTE;
pub const DWRITE_LOCALITY_PARTIAL = DWRITE_LOCALITY.PARTIAL;
pub const DWRITE_LOCALITY_LOCAL = DWRITE_LOCALITY.LOCAL;

pub const DWRITE_RENDERING_MODE1 = enum(i32) {
    DEFAULT = 0,
    ALIASED = 1,
    GDI_CLASSIC = 2,
    GDI_NATURAL = 3,
    NATURAL = 4,
    NATURAL_SYMMETRIC = 5,
    OUTLINE = 6,
    NATURAL_SYMMETRIC_DOWNSAMPLED = 7,
};
pub const DWRITE_RENDERING_MODE1_DEFAULT = DWRITE_RENDERING_MODE1.DEFAULT;
pub const DWRITE_RENDERING_MODE1_ALIASED = DWRITE_RENDERING_MODE1.ALIASED;
pub const DWRITE_RENDERING_MODE1_GDI_CLASSIC = DWRITE_RENDERING_MODE1.GDI_CLASSIC;
pub const DWRITE_RENDERING_MODE1_GDI_NATURAL = DWRITE_RENDERING_MODE1.GDI_NATURAL;
pub const DWRITE_RENDERING_MODE1_NATURAL = DWRITE_RENDERING_MODE1.NATURAL;
pub const DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC = DWRITE_RENDERING_MODE1.NATURAL_SYMMETRIC;
pub const DWRITE_RENDERING_MODE1_OUTLINE = DWRITE_RENDERING_MODE1.OUTLINE;
pub const DWRITE_RENDERING_MODE1_NATURAL_SYMMETRIC_DOWNSAMPLED = DWRITE_RENDERING_MODE1.NATURAL_SYMMETRIC_DOWNSAMPLED;

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteRenderingParams3_Value = Guid.initString("b7924baa-391b-412a-8c5c-e44cc2d867dc");
pub const IID_IDWriteRenderingParams3 = &IID_IDWriteRenderingParams3_Value;
pub const IDWriteRenderingParams3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteRenderingParams2.VTable,
        GetRenderingMode1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRenderingParams3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_RENDERING_MODE1,
            else => *const fn (
                self: *const IDWriteRenderingParams3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_RENDERING_MODE1,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteRenderingParams2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRenderingParams3_GetRenderingMode1(self: *const T) DWRITE_RENDERING_MODE1 {
                return @as(*const IDWriteRenderingParams3.VTable, @ptrCast(self.vtable)).GetRenderingMode1(@as(*const IDWriteRenderingParams3, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteFactory3_Value = Guid.initString("9a1b41c3-d3bb-466a-87fc-fe67556a3b65");
pub const IID_IDWriteFactory3 = &IID_IDWriteFactory3_Value;
pub const IDWriteFactory3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFactory2.VTable,
        CreateGlyphRunAnalysis: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                transform: ?*const DWRITE_MATRIX,
                renderingMode: DWRITE_RENDERING_MODE1,
                measuringMode: DWRITE_MEASURING_MODE,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                transform: ?*const DWRITE_MATRIX,
                renderingMode: DWRITE_RENDERING_MODE1,
                measuringMode: DWRITE_MEASURING_MODE,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE,
                baselineOriginX: f32,
                baselineOriginY: f32,
                glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateCustomRenderingParams: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                gamma: f32,
                enhancedContrast: f32,
                grayscaleEnhancedContrast: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE1,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                renderingParams: ?*?*IDWriteRenderingParams3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                gamma: f32,
                enhancedContrast: f32,
                grayscaleEnhancedContrast: f32,
                clearTypeLevel: f32,
                pixelGeometry: DWRITE_PIXEL_GEOMETRY,
                renderingMode: DWRITE_RENDERING_MODE1,
                gridFitMode: DWRITE_GRID_FIT_MODE,
                renderingParams: ?*?*IDWriteRenderingParams3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                fontFile: ?*IDWriteFontFile,
                faceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                fontFile: ?*IDWriteFontFile,
                faceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFaceReference1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                filePath: ?[*:0]const u16,
                lastWriteTime: ?*const FILETIME,
                faceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                filePath: ?[*:0]const u16,
                lastWriteTime: ?*const FILETIME,
                faceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSystemFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                fontSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                fontSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontSetBuilder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                fontSetBuilder: ?*?*IDWriteFontSetBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                fontSetBuilder: ?*?*IDWriteFontSetBuilder,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontCollectionFromFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                fontSet: ?*IDWriteFontSet,
                fontCollection: ?*?*IDWriteFontCollection1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                fontSet: ?*IDWriteFontSet,
                fontCollection: ?*?*IDWriteFontCollection1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSystemFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                includeDownloadableFonts: BOOL,
                fontCollection: ?*?*IDWriteFontCollection1,
                checkForUpdates: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                includeDownloadableFonts: BOOL,
                fontCollection: ?*?*IDWriteFontCollection1,
                checkForUpdates: BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontDownloadQueue: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory3,
                fontDownloadQueue: ?*?*IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory3,
                fontDownloadQueue: ?*?*IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFactory2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_CreateGlyphRunAnalysis(self: *const T, glyphRun: ?*const DWRITE_GLYPH_RUN, transform: ?*const DWRITE_MATRIX, renderingMode: DWRITE_RENDERING_MODE1, measuringMode: DWRITE_MEASURING_MODE, gridFitMode: DWRITE_GRID_FIT_MODE, antialiasMode: DWRITE_TEXT_ANTIALIAS_MODE, baselineOriginX: f32, baselineOriginY: f32, glyphRunAnalysis: ?*?*IDWriteGlyphRunAnalysis) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).CreateGlyphRunAnalysis(@as(*const IDWriteFactory3, @ptrCast(self)), glyphRun, transform, renderingMode, measuringMode, gridFitMode, antialiasMode, baselineOriginX, baselineOriginY, glyphRunAnalysis);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_CreateCustomRenderingParams(self: *const T, gamma: f32, enhancedContrast: f32, grayscaleEnhancedContrast: f32, clearTypeLevel: f32, pixelGeometry: DWRITE_PIXEL_GEOMETRY, renderingMode: DWRITE_RENDERING_MODE1, gridFitMode: DWRITE_GRID_FIT_MODE, renderingParams: ?*?*IDWriteRenderingParams3) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).CreateCustomRenderingParams(@as(*const IDWriteFactory3, @ptrCast(self)), gamma, enhancedContrast, grayscaleEnhancedContrast, clearTypeLevel, pixelGeometry, renderingMode, gridFitMode, renderingParams);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_CreateFontFaceReference(self: *const T, fontFile: ?*IDWriteFontFile, faceIndex: u32, fontSimulations: DWRITE_FONT_SIMULATIONS, fontFaceReference: ?*?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).CreateFontFaceReference(@as(*const IDWriteFactory3, @ptrCast(self)), fontFile, faceIndex, fontSimulations, fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_CreateFontFaceReference1(self: *const T, filePath: ?[*:0]const u16, lastWriteTime: ?*const FILETIME, faceIndex: u32, fontSimulations: DWRITE_FONT_SIMULATIONS, fontFaceReference: ?*?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).CreateFontFaceReference(@as(*const IDWriteFactory3, @ptrCast(self)), filePath, lastWriteTime, faceIndex, fontSimulations, fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_GetSystemFontSet(self: *const T, fontSet: ?*?*IDWriteFontSet) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).GetSystemFontSet(@as(*const IDWriteFactory3, @ptrCast(self)), fontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_CreateFontSetBuilder(self: *const T, fontSetBuilder: ?*?*IDWriteFontSetBuilder) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).CreateFontSetBuilder(@as(*const IDWriteFactory3, @ptrCast(self)), fontSetBuilder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_CreateFontCollectionFromFontSet(self: *const T, fontSet: ?*IDWriteFontSet, fontCollection: ?*?*IDWriteFontCollection1) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).CreateFontCollectionFromFontSet(@as(*const IDWriteFactory3, @ptrCast(self)), fontSet, fontCollection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_GetSystemFontCollection(self: *const T, includeDownloadableFonts: BOOL, fontCollection: ?*?*IDWriteFontCollection1, checkForUpdates: BOOL) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).GetSystemFontCollection(@as(*const IDWriteFactory3, @ptrCast(self)), includeDownloadableFonts, fontCollection, checkForUpdates);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory3_GetFontDownloadQueue(self: *const T, fontDownloadQueue: ?*?*IDWriteFontDownloadQueue) HRESULT {
                return @as(*const IDWriteFactory3.VTable, @ptrCast(self.vtable)).GetFontDownloadQueue(@as(*const IDWriteFactory3, @ptrCast(self)), fontDownloadQueue);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteFontSet_Value = Guid.initString("53585141-d9f8-4095-8321-d73cf6bd116b");
pub const IID_IDWriteFontSet = &IID_IDWriteFontSet_Value;
pub const IDWriteFontSet = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFontCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                fontFaceReference: ?*IDWriteFontFaceReference,
                listIndex: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                fontFaceReference: ?*IDWriteFontFaceReference,
                listIndex: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        FindFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                fontFace: ?*IDWriteFontFace,
                listIndex: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                fontFace: ?*IDWriteFontFace,
                listIndex: ?*u32,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPropertyValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                propertyID: DWRITE_FONT_PROPERTY_ID,
                values: ?*?*IDWriteStringList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                propertyID: DWRITE_FONT_PROPERTY_ID,
                values: ?*?*IDWriteStringList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPropertyValues1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                propertyID: DWRITE_FONT_PROPERTY_ID,
                preferredLocaleNames: ?[*:0]const u16,
                values: ?*?*IDWriteStringList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                propertyID: DWRITE_FONT_PROPERTY_ID,
                preferredLocaleNames: ?[*:0]const u16,
                values: ?*?*IDWriteStringList,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPropertyValues2: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                listIndex: u32,
                propertyId: DWRITE_FONT_PROPERTY_ID,
                exists: ?*BOOL,
                values: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                listIndex: u32,
                propertyId: DWRITE_FONT_PROPERTY_ID,
                exists: ?*BOOL,
                values: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPropertyOccurrenceCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                property: ?*const DWRITE_FONT_PROPERTY,
                propertyOccurrenceCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                property: ?*const DWRITE_FONT_PROPERTY,
                propertyOccurrenceCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMatchingFonts: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                familyName: ?[*:0]const u16,
                fontWeight: DWRITE_FONT_WEIGHT,
                fontStretch: DWRITE_FONT_STRETCH,
                fontStyle: DWRITE_FONT_STYLE,
                filteredSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                familyName: ?[*:0]const u16,
                fontWeight: DWRITE_FONT_WEIGHT,
                fontStretch: DWRITE_FONT_STRETCH,
                fontStyle: DWRITE_FONT_STYLE,
                filteredSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMatchingFonts1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
                filteredSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
                filteredSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetFontCount(self: *const T) u32 {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetFontCount(@as(*const IDWriteFontSet, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetFontFaceReference(self: *const T, listIndex: u32, fontFaceReference: ?*?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetFontFaceReference(@as(*const IDWriteFontSet, @ptrCast(self)), listIndex, fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_FindFontFaceReference(self: *const T, fontFaceReference: ?*IDWriteFontFaceReference, listIndex: ?*u32, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).FindFontFaceReference(@as(*const IDWriteFontSet, @ptrCast(self)), fontFaceReference, listIndex, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_FindFontFace(self: *const T, fontFace: ?*IDWriteFontFace, listIndex: ?*u32, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).FindFontFace(@as(*const IDWriteFontSet, @ptrCast(self)), fontFace, listIndex, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetPropertyValues(self: *const T, propertyID: DWRITE_FONT_PROPERTY_ID, values: ?*?*IDWriteStringList) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetPropertyValues(@as(*const IDWriteFontSet, @ptrCast(self)), propertyID, values);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetPropertyValues1(self: *const T, propertyID: DWRITE_FONT_PROPERTY_ID, preferredLocaleNames: ?[*:0]const u16, values: ?*?*IDWriteStringList) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetPropertyValues(@as(*const IDWriteFontSet, @ptrCast(self)), propertyID, preferredLocaleNames, values);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetPropertyValues2(self: *const T, listIndex: u32, propertyId: DWRITE_FONT_PROPERTY_ID, exists: ?*BOOL, values: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetPropertyValues(@as(*const IDWriteFontSet, @ptrCast(self)), listIndex, propertyId, exists, values);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetPropertyOccurrenceCount(self: *const T, property: ?*const DWRITE_FONT_PROPERTY, propertyOccurrenceCount: ?*u32) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetPropertyOccurrenceCount(@as(*const IDWriteFontSet, @ptrCast(self)), property, propertyOccurrenceCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetMatchingFonts(self: *const T, familyName: ?[*:0]const u16, fontWeight: DWRITE_FONT_WEIGHT, fontStretch: DWRITE_FONT_STRETCH, fontStyle: DWRITE_FONT_STYLE, filteredSet: ?*?*IDWriteFontSet) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetMatchingFonts(@as(*const IDWriteFontSet, @ptrCast(self)), familyName, fontWeight, fontStretch, fontStyle, filteredSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet_GetMatchingFonts1(self: *const T, properties: [*]const DWRITE_FONT_PROPERTY, propertyCount: u32, filteredSet: ?*?*IDWriteFontSet) HRESULT {
                return @as(*const IDWriteFontSet.VTable, @ptrCast(self.vtable)).GetMatchingFonts(@as(*const IDWriteFontSet, @ptrCast(self)), properties, propertyCount, filteredSet);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontSetBuilder_Value = Guid.initString("2f642afe-9c68-4f40-b8be-457401afcb3d");
pub const IID_IDWriteFontSetBuilder = &IID_IDWriteFontSetBuilder_Value;
pub const IDWriteFontSetBuilder = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AddFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSetBuilder,
                fontFaceReference: ?*IDWriteFontFaceReference,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSetBuilder,
                fontFaceReference: ?*IDWriteFontFaceReference,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddFontFaceReference1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSetBuilder,
                fontFaceReference: ?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSetBuilder,
                fontFaceReference: ?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSetBuilder,
                fontSet: ?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSetBuilder,
                fontSet: ?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSetBuilder,
                fontSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSetBuilder,
                fontSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSetBuilder_AddFontFaceReference(self: *const T, fontFaceReference: ?*IDWriteFontFaceReference, properties: [*]const DWRITE_FONT_PROPERTY, propertyCount: u32) HRESULT {
                return @as(*const IDWriteFontSetBuilder.VTable, @ptrCast(self.vtable)).AddFontFaceReference(@as(*const IDWriteFontSetBuilder, @ptrCast(self)), fontFaceReference, properties, propertyCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSetBuilder_AddFontFaceReference1(self: *const T, fontFaceReference: ?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFontSetBuilder.VTable, @ptrCast(self.vtable)).AddFontFaceReference(@as(*const IDWriteFontSetBuilder, @ptrCast(self)), fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSetBuilder_AddFontSet(self: *const T, fontSet: ?*IDWriteFontSet) HRESULT {
                return @as(*const IDWriteFontSetBuilder.VTable, @ptrCast(self.vtable)).AddFontSet(@as(*const IDWriteFontSetBuilder, @ptrCast(self)), fontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSetBuilder_CreateFontSet(self: *const T, fontSet: ?*?*IDWriteFontSet) HRESULT {
                return @as(*const IDWriteFontSetBuilder.VTable, @ptrCast(self.vtable)).CreateFontSet(@as(*const IDWriteFontSetBuilder, @ptrCast(self)), fontSet);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows6.1'
const IID_IDWriteFontCollection1_Value = Guid.initString("53585141-d9f8-4095-8321-d73cf6bd116c");
pub const IID_IDWriteFontCollection1 = &IID_IDWriteFontCollection1_Value;
pub const IDWriteFontCollection1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontCollection.VTable,
        GetFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection1,
                fontSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection1,
                fontSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFamily: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection1,
                index: u32,
                fontFamily: ?*?*IDWriteFontFamily1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection1,
                index: u32,
                fontFamily: ?*?*IDWriteFontFamily1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontCollection.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection1_GetFontSet(self: *const T, fontSet: ?*?*IDWriteFontSet) HRESULT {
                return @as(*const IDWriteFontCollection1.VTable, @ptrCast(self.vtable)).GetFontSet(@as(*const IDWriteFontCollection1, @ptrCast(self)), fontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection1_GetFontFamily(self: *const T, index: u32, fontFamily: ?*?*IDWriteFontFamily1) HRESULT {
                return @as(*const IDWriteFontCollection1.VTable, @ptrCast(self.vtable)).GetFontFamily(@as(*const IDWriteFontCollection1, @ptrCast(self)), index, fontFamily);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteFontFamily1_Value = Guid.initString("da20d8ef-812a-4c43-9802-62ec4abd7adf");
pub const IID_IDWriteFontFamily1 = &IID_IDWriteFontFamily1_Value;
pub const IDWriteFontFamily1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFamily.VTable,
        GetFontLocality: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily1,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
            else => *const fn (
                self: *const IDWriteFontFamily1,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
        },
        GetFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily1,
                listIndex: u32,
                font: ?*?*IDWriteFont3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFamily1,
                listIndex: u32,
                font: ?*?*IDWriteFont3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily1,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFamily1,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFamily.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily1_GetFontLocality(self: *const T, listIndex: u32) DWRITE_LOCALITY {
                return @as(*const IDWriteFontFamily1.VTable, @ptrCast(self.vtable)).GetFontLocality(@as(*const IDWriteFontFamily1, @ptrCast(self)), listIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily1_GetFont(self: *const T, listIndex: u32, font: ?*?*IDWriteFont3) HRESULT {
                return @as(*const IDWriteFontFamily1.VTable, @ptrCast(self.vtable)).GetFont(@as(*const IDWriteFontFamily1, @ptrCast(self)), listIndex, font);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily1_GetFontFaceReference(self: *const T, listIndex: u32, fontFaceReference: ?*?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFontFamily1.VTable, @ptrCast(self.vtable)).GetFontFaceReference(@as(*const IDWriteFontFamily1, @ptrCast(self)), listIndex, fontFaceReference);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteFontList1_Value = Guid.initString("da20d8ef-812a-4c43-9802-62ec4abd7ade");
pub const IID_IDWriteFontList1 = &IID_IDWriteFontList1_Value;
pub const IDWriteFontList1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontList.VTable,
        GetFontLocality: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontList1,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
            else => *const fn (
                self: *const IDWriteFontList1,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
        },
        GetFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontList1,
                listIndex: u32,
                font: ?*?*IDWriteFont3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontList1,
                listIndex: u32,
                font: ?*?*IDWriteFont3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontList1,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontList1,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontList.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontList1_GetFontLocality(self: *const T, listIndex: u32) DWRITE_LOCALITY {
                return @as(*const IDWriteFontList1.VTable, @ptrCast(self.vtable)).GetFontLocality(@as(*const IDWriteFontList1, @ptrCast(self)), listIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontList1_GetFont(self: *const T, listIndex: u32, font: ?*?*IDWriteFont3) HRESULT {
                return @as(*const IDWriteFontList1.VTable, @ptrCast(self.vtable)).GetFont(@as(*const IDWriteFontList1, @ptrCast(self)), listIndex, font);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontList1_GetFontFaceReference(self: *const T, listIndex: u32, fontFaceReference: ?*?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFontList1.VTable, @ptrCast(self.vtable)).GetFontFaceReference(@as(*const IDWriteFontList1, @ptrCast(self)), listIndex, fontFaceReference);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteFontFaceReference_Value = Guid.initString("5e7fa7ca-dde3-424c-89f0-9fcd6fed58cd");
pub const IID_IDWriteFontFaceReference = &IID_IDWriteFontFaceReference_Value;
pub const IDWriteFontFaceReference = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        CreateFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                fontFace: ?*?*IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                fontFace: ?*?*IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFaceWithSimulations: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS,
                fontFace: ?*?*IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS,
                fontFace: ?*?*IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Equals: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                fontFaceReference: ?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                fontFaceReference: ?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetFontFaceIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetSimulations: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SIMULATIONS,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SIMULATIONS,
        },
        GetFontFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocalFileSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) u64,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) u64,
        },
        GetFileSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) u64,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) u64,
        },
        GetFileTime: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                lastWriteTime: ?*FILETIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                lastWriteTime: ?*FILETIME,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocality: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
        },
        EnqueueFontDownloadRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnqueueCharacterDownloadRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                characters: [*:0]const u16,
                characterCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                characters: [*:0]const u16,
                characterCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnqueueGlyphDownloadRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        EnqueueFileFragmentDownloadRequest: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference,
                fileOffset: u64,
                fragmentSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference,
                fileOffset: u64,
                fragmentSize: u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_CreateFontFace(self: *const T, fontFace: ?*?*IDWriteFontFace3) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).CreateFontFace(@as(*const IDWriteFontFaceReference, @ptrCast(self)), fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_CreateFontFaceWithSimulations(self: *const T, fontFaceSimulationFlags: DWRITE_FONT_SIMULATIONS, fontFace: ?*?*IDWriteFontFace3) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).CreateFontFaceWithSimulations(@as(*const IDWriteFontFaceReference, @ptrCast(self)), fontFaceSimulationFlags, fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_Equals(self: *const T, fontFaceReference: ?*IDWriteFontFaceReference) BOOL {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).Equals(@as(*const IDWriteFontFaceReference, @ptrCast(self)), fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_GetFontFaceIndex(self: *const T) u32 {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).GetFontFaceIndex(@as(*const IDWriteFontFaceReference, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_GetSimulations(self: *const T) DWRITE_FONT_SIMULATIONS {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).GetSimulations(@as(*const IDWriteFontFaceReference, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_GetFontFile(self: *const T, fontFile: ?*?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).GetFontFile(@as(*const IDWriteFontFaceReference, @ptrCast(self)), fontFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_GetLocalFileSize(self: *const T) u64 {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).GetLocalFileSize(@as(*const IDWriteFontFaceReference, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_GetFileSize(self: *const T) u64 {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).GetFileSize(@as(*const IDWriteFontFaceReference, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_GetFileTime(self: *const T, lastWriteTime: ?*FILETIME) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).GetFileTime(@as(*const IDWriteFontFaceReference, @ptrCast(self)), lastWriteTime);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_GetLocality(self: *const T) DWRITE_LOCALITY {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).GetLocality(@as(*const IDWriteFontFaceReference, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_EnqueueFontDownloadRequest(self: *const T) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).EnqueueFontDownloadRequest(@as(*const IDWriteFontFaceReference, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_EnqueueCharacterDownloadRequest(self: *const T, characters: [*:0]const u16, characterCount: u32) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).EnqueueCharacterDownloadRequest(@as(*const IDWriteFontFaceReference, @ptrCast(self)), characters, characterCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_EnqueueGlyphDownloadRequest(self: *const T, glyphIndices: [*:0]const u16, glyphCount: u32) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).EnqueueGlyphDownloadRequest(@as(*const IDWriteFontFaceReference, @ptrCast(self)), glyphIndices, glyphCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference_EnqueueFileFragmentDownloadRequest(self: *const T, fileOffset: u64, fragmentSize: u64) HRESULT {
                return @as(*const IDWriteFontFaceReference.VTable, @ptrCast(self.vtable)).EnqueueFileFragmentDownloadRequest(@as(*const IDWriteFontFaceReference, @ptrCast(self)), fileOffset, fragmentSize);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteFont3_Value = Guid.initString("29748ed6-8c9c-4a6a-be0b-d912e8538944");
pub const IID_IDWriteFont3 = &IID_IDWriteFont3_Value;
pub const IDWriteFont3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFont2.VTable,
        CreateFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont3,
                fontFace: ?*?*IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont3,
                fontFace: ?*?*IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Equals: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont3,
                font: ?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFont3,
                font: ?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont3,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFont3,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HasCharacter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont3,
                unicodeValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFont3,
                unicodeValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetLocality: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFont3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
            else => *const fn (
                self: *const IDWriteFont3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFont2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont3_CreateFontFace(self: *const T, fontFace: ?*?*IDWriteFontFace3) HRESULT {
                return @as(*const IDWriteFont3.VTable, @ptrCast(self.vtable)).CreateFontFace(@as(*const IDWriteFont3, @ptrCast(self)), fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont3_Equals(self: *const T, font: ?*IDWriteFont) BOOL {
                return @as(*const IDWriteFont3.VTable, @ptrCast(self.vtable)).Equals(@as(*const IDWriteFont3, @ptrCast(self)), font);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont3_GetFontFaceReference(self: *const T, fontFaceReference: ?*?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFont3.VTable, @ptrCast(self.vtable)).GetFontFaceReference(@as(*const IDWriteFont3, @ptrCast(self)), fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont3_HasCharacter(self: *const T, unicodeValue: u32) BOOL {
                return @as(*const IDWriteFont3.VTable, @ptrCast(self.vtable)).HasCharacter(@as(*const IDWriteFont3, @ptrCast(self)), unicodeValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFont3_GetLocality(self: *const T) DWRITE_LOCALITY {
                return @as(*const IDWriteFont3.VTable, @ptrCast(self.vtable)).GetLocality(@as(*const IDWriteFont3, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows10.0.10240'
const IID_IDWriteFontFace3_Value = Guid.initString("d37d7598-09be-4222-a236-2081341cc1f2");
pub const IID_IDWriteFontFace3 = &IID_IDWriteFontFace3_Value;
pub const IDWriteFontFace3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFace2.VTable,
        GetFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace3,
                fontFaceReference: ?*?*IDWriteFontFaceReference,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetPanose: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                panose: ?*DWRITE_PANOSE,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontFace3,
                panose: ?*DWRITE_PANOSE,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
        GetWeight: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_WEIGHT,
            else => *const fn (
                self: *const IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_WEIGHT,
        },
        GetStretch: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STRETCH,
            else => *const fn (
                self: *const IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STRETCH,
        },
        GetStyle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STYLE,
            else => *const fn (
                self: *const IDWriteFontFace3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_STYLE,
        },
        GetFamilyNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace3,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFaceNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace3,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetInformationalStrings: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                informationalStringID: DWRITE_INFORMATIONAL_STRING_ID,
                informationalStrings: ?*?*IDWriteLocalizedStrings,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace3,
                informationalStringID: DWRITE_INFORMATIONAL_STRING_ID,
                informationalStrings: ?*?*IDWriteLocalizedStrings,
                exists: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HasCharacter: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                unicodeValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace3,
                unicodeValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetRecommendedRenderingMode: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                fontEmSize: f32,
                dpiX: f32,
                dpiY: f32,
                transform: ?*const DWRITE_MATRIX,
                isSideways: BOOL,
                outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingParams: ?*IDWriteRenderingParams,
                renderingMode: ?*DWRITE_RENDERING_MODE1,
                gridFitMode: ?*DWRITE_GRID_FIT_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace3,
                fontEmSize: f32,
                dpiX: f32,
                dpiY: f32,
                transform: ?*const DWRITE_MATRIX,
                isSideways: BOOL,
                outlineThreshold: DWRITE_OUTLINE_THRESHOLD,
                measuringMode: DWRITE_MEASURING_MODE,
                renderingParams: ?*IDWriteRenderingParams,
                renderingMode: ?*DWRITE_RENDERING_MODE1,
                gridFitMode: ?*DWRITE_GRID_FIT_MODE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsCharacterLocal: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                unicodeValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace3,
                unicodeValue: u32,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        IsGlyphLocal: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                glyphId: u16,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace3,
                glyphId: u16,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        AreCharactersLocal: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                characters: [*:0]const u16,
                characterCount: u32,
                enqueueIfNotLocal: BOOL,
                isLocal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace3,
                characters: [*:0]const u16,
                characterCount: u32,
                enqueueIfNotLocal: BOOL,
                isLocal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AreGlyphsLocal: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace3,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
                enqueueIfNotLocal: BOOL,
                isLocal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace3,
                glyphIndices: [*:0]const u16,
                glyphCount: u32,
                enqueueIfNotLocal: BOOL,
                isLocal: ?*BOOL,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFace2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetFontFaceReference(self: *const T, fontFaceReference: ?*?*IDWriteFontFaceReference) HRESULT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetFontFaceReference(@as(*const IDWriteFontFace3, @ptrCast(self)), fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetPanose(self: *const T, panose: ?*DWRITE_PANOSE) void {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetPanose(@as(*const IDWriteFontFace3, @ptrCast(self)), panose);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetWeight(self: *const T) DWRITE_FONT_WEIGHT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetWeight(@as(*const IDWriteFontFace3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetStretch(self: *const T) DWRITE_FONT_STRETCH {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetStretch(@as(*const IDWriteFontFace3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetStyle(self: *const T) DWRITE_FONT_STYLE {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetStyle(@as(*const IDWriteFontFace3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetFamilyNames(self: *const T, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetFamilyNames(@as(*const IDWriteFontFace3, @ptrCast(self)), names);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetFaceNames(self: *const T, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetFaceNames(@as(*const IDWriteFontFace3, @ptrCast(self)), names);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetInformationalStrings(self: *const T, informationalStringID: DWRITE_INFORMATIONAL_STRING_ID, informationalStrings: ?*?*IDWriteLocalizedStrings, exists: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetInformationalStrings(@as(*const IDWriteFontFace3, @ptrCast(self)), informationalStringID, informationalStrings, exists);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_HasCharacter(self: *const T, unicodeValue: u32) BOOL {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).HasCharacter(@as(*const IDWriteFontFace3, @ptrCast(self)), unicodeValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_GetRecommendedRenderingMode(self: *const T, fontEmSize: f32, dpiX: f32, dpiY: f32, transform: ?*const DWRITE_MATRIX, isSideways: BOOL, outlineThreshold: DWRITE_OUTLINE_THRESHOLD, measuringMode: DWRITE_MEASURING_MODE, renderingParams: ?*IDWriteRenderingParams, renderingMode: ?*DWRITE_RENDERING_MODE1, gridFitMode: ?*DWRITE_GRID_FIT_MODE) HRESULT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).GetRecommendedRenderingMode(@as(*const IDWriteFontFace3, @ptrCast(self)), fontEmSize, dpiX, dpiY, transform, isSideways, outlineThreshold, measuringMode, renderingParams, renderingMode, gridFitMode);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_IsCharacterLocal(self: *const T, unicodeValue: u32) BOOL {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).IsCharacterLocal(@as(*const IDWriteFontFace3, @ptrCast(self)), unicodeValue);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_IsGlyphLocal(self: *const T, glyphId: u16) BOOL {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).IsGlyphLocal(@as(*const IDWriteFontFace3, @ptrCast(self)), glyphId);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_AreCharactersLocal(self: *const T, characters: [*:0]const u16, characterCount: u32, enqueueIfNotLocal: BOOL, isLocal: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).AreCharactersLocal(@as(*const IDWriteFontFace3, @ptrCast(self)), characters, characterCount, enqueueIfNotLocal, isLocal);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace3_AreGlyphsLocal(self: *const T, glyphIndices: [*:0]const u16, glyphCount: u32, enqueueIfNotLocal: BOOL, isLocal: ?*BOOL) HRESULT {
                return @as(*const IDWriteFontFace3.VTable, @ptrCast(self.vtable)).AreGlyphsLocal(@as(*const IDWriteFontFace3, @ptrCast(self)), glyphIndices, glyphCount, enqueueIfNotLocal, isLocal);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteStringList_Value = Guid.initString("cfee3140-1157-47ca-8b85-31bfcf3f2d0e");
pub const IID_IDWriteStringList = &IID_IDWriteStringList_Value;
pub const IDWriteStringList = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteStringList,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteStringList,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetLocaleNameLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocaleName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                localeName: [*:0]u16,
                size: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                localeName: [*:0]u16,
                size: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetStringLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                length: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetString: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                stringBuffer: [*:0]u16,
                stringBufferSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteStringList,
                listIndex: u32,
                stringBuffer: [*:0]u16,
                stringBufferSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteStringList_GetCount(self: *const T) u32 {
                return @as(*const IDWriteStringList.VTable, @ptrCast(self.vtable)).GetCount(@as(*const IDWriteStringList, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteStringList_GetLocaleNameLength(self: *const T, listIndex: u32, length: ?*u32) HRESULT {
                return @as(*const IDWriteStringList.VTable, @ptrCast(self.vtable)).GetLocaleNameLength(@as(*const IDWriteStringList, @ptrCast(self)), listIndex, length);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteStringList_GetLocaleName(self: *const T, listIndex: u32, localeName: [*:0]u16, size: u32) HRESULT {
                return @as(*const IDWriteStringList.VTable, @ptrCast(self.vtable)).GetLocaleName(@as(*const IDWriteStringList, @ptrCast(self)), listIndex, localeName, size);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteStringList_GetStringLength(self: *const T, listIndex: u32, length: ?*u32) HRESULT {
                return @as(*const IDWriteStringList.VTable, @ptrCast(self.vtable)).GetStringLength(@as(*const IDWriteStringList, @ptrCast(self)), listIndex, length);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteStringList_GetString(self: *const T, listIndex: u32, stringBuffer: [*:0]u16, stringBufferSize: u32) HRESULT {
                return @as(*const IDWriteStringList.VTable, @ptrCast(self.vtable)).GetString(@as(*const IDWriteStringList, @ptrCast(self)), listIndex, stringBuffer, stringBufferSize);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteFontDownloadListener_Value = Guid.initString("b06fe5b9-43ec-4393-881b-dbe4dc72fda7");
pub const IID_IDWriteFontDownloadListener = &IID_IDWriteFontDownloadListener_Value;
pub const IDWriteFontDownloadListener = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        DownloadCompleted: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontDownloadListener,
                downloadQueue: ?*IDWriteFontDownloadQueue,
                context: ?*IUnknown,
                downloadResult: HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontDownloadListener,
                downloadQueue: ?*IDWriteFontDownloadQueue,
                context: ?*IUnknown,
                downloadResult: HRESULT,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontDownloadListener_DownloadCompleted(self: *const T, downloadQueue: ?*IDWriteFontDownloadQueue, context: ?*IUnknown, downloadResult: HRESULT) void {
                return @as(*const IDWriteFontDownloadListener.VTable, @ptrCast(self.vtable)).DownloadCompleted(@as(*const IDWriteFontDownloadListener, @ptrCast(self)), downloadQueue, context, downloadResult);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteFontDownloadQueue_Value = Guid.initString("b71e6052-5aea-4fa3-832e-f60d431f7e91");
pub const IID_IDWriteFontDownloadQueue = &IID_IDWriteFontDownloadQueue_Value;
pub const IDWriteFontDownloadQueue = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        AddListener: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontDownloadQueue,
                listener: ?*IDWriteFontDownloadListener,
                token: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontDownloadQueue,
                listener: ?*IDWriteFontDownloadListener,
                token: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        RemoveListener: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontDownloadQueue,
                token: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontDownloadQueue,
                token: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        IsEmpty: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        BeginDownload: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontDownloadQueue,
                context: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontDownloadQueue,
                context: ?*IUnknown,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CancelDownload: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGenerationCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) u64,
            else => *const fn (
                self: *const IDWriteFontDownloadQueue,
            ) callconv(@import("std").os.windows.WINAPI) u64,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontDownloadQueue_AddListener(self: *const T, listener: ?*IDWriteFontDownloadListener, token: ?*u32) HRESULT {
                return @as(*const IDWriteFontDownloadQueue.VTable, @ptrCast(self.vtable)).AddListener(@as(*const IDWriteFontDownloadQueue, @ptrCast(self)), listener, token);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontDownloadQueue_RemoveListener(self: *const T, token: u32) HRESULT {
                return @as(*const IDWriteFontDownloadQueue.VTable, @ptrCast(self.vtable)).RemoveListener(@as(*const IDWriteFontDownloadQueue, @ptrCast(self)), token);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontDownloadQueue_IsEmpty(self: *const T) BOOL {
                return @as(*const IDWriteFontDownloadQueue.VTable, @ptrCast(self.vtable)).IsEmpty(@as(*const IDWriteFontDownloadQueue, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontDownloadQueue_BeginDownload(self: *const T, context: ?*IUnknown) HRESULT {
                return @as(*const IDWriteFontDownloadQueue.VTable, @ptrCast(self.vtable)).BeginDownload(@as(*const IDWriteFontDownloadQueue, @ptrCast(self)), context);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontDownloadQueue_CancelDownload(self: *const T) HRESULT {
                return @as(*const IDWriteFontDownloadQueue.VTable, @ptrCast(self.vtable)).CancelDownload(@as(*const IDWriteFontDownloadQueue, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontDownloadQueue_GetGenerationCount(self: *const T) u64 {
                return @as(*const IDWriteFontDownloadQueue.VTable, @ptrCast(self.vtable)).GetGenerationCount(@as(*const IDWriteFontDownloadQueue, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteGdiInterop1_Value = Guid.initString("4556be70-3abd-4f70-90be-421780a6f515");
pub const IID_IDWriteGdiInterop1 = &IID_IDWriteGdiInterop1_Value;
pub const IDWriteGdiInterop1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteGdiInterop.VTable,
        CreateFontFromLOGFONT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop1,
                logFont: ?*const LOGFONTW,
                fontCollection: ?*IDWriteFontCollection,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop1,
                logFont: ?*const LOGFONTW,
                fontCollection: ?*IDWriteFontCollection,
                font: ?*?*IDWriteFont,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontSignature: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop1,
                fontFace: ?*IDWriteFontFace,
                fontSignature: ?*FONTSIGNATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop1,
                fontFace: ?*IDWriteFontFace,
                fontSignature: ?*FONTSIGNATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontSignature1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop1,
                font: ?*IDWriteFont,
                fontSignature: ?*FONTSIGNATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop1,
                font: ?*IDWriteFont,
                fontSignature: ?*FONTSIGNATURE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMatchingFontsByLOGFONT: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteGdiInterop1,
                logFont: ?*const LOGFONTA,
                fontSet: ?*IDWriteFontSet,
                filteredSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteGdiInterop1,
                logFont: ?*const LOGFONTA,
                fontSet: ?*IDWriteFontSet,
                filteredSet: ?*?*IDWriteFontSet,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteGdiInterop.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop1_CreateFontFromLOGFONT(self: *const T, logFont: ?*const LOGFONTW, fontCollection: ?*IDWriteFontCollection, font: ?*?*IDWriteFont) HRESULT {
                return @as(*const IDWriteGdiInterop1.VTable, @ptrCast(self.vtable)).CreateFontFromLOGFONT(@as(*const IDWriteGdiInterop1, @ptrCast(self)), logFont, fontCollection, font);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop1_GetFontSignature(self: *const T, fontFace: ?*IDWriteFontFace, fontSignature: ?*FONTSIGNATURE) HRESULT {
                return @as(*const IDWriteGdiInterop1.VTable, @ptrCast(self.vtable)).GetFontSignature(@as(*const IDWriteGdiInterop1, @ptrCast(self)), fontFace, fontSignature);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop1_GetFontSignature1(self: *const T, font: ?*IDWriteFont, fontSignature: ?*FONTSIGNATURE) HRESULT {
                return @as(*const IDWriteGdiInterop1.VTable, @ptrCast(self.vtable)).GetFontSignature(@as(*const IDWriteGdiInterop1, @ptrCast(self)), font, fontSignature);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteGdiInterop1_GetMatchingFontsByLOGFONT(self: *const T, logFont: ?*const LOGFONTA, fontSet: ?*IDWriteFontSet, filteredSet: ?*?*IDWriteFontSet) HRESULT {
                return @as(*const IDWriteGdiInterop1.VTable, @ptrCast(self.vtable)).GetMatchingFontsByLOGFONT(@as(*const IDWriteGdiInterop1, @ptrCast(self)), logFont, fontSet, filteredSet);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_LINE_METRICS1 = extern struct {
    Base: DWRITE_LINE_METRICS,
    leadingBefore: f32,
    leadingAfter: f32,
};

pub const DWRITE_FONT_LINE_GAP_USAGE = enum(i32) {
    DEFAULT = 0,
    DISABLED = 1,
    ENABLED = 2,
};
pub const DWRITE_FONT_LINE_GAP_USAGE_DEFAULT = DWRITE_FONT_LINE_GAP_USAGE.DEFAULT;
pub const DWRITE_FONT_LINE_GAP_USAGE_DISABLED = DWRITE_FONT_LINE_GAP_USAGE.DISABLED;
pub const DWRITE_FONT_LINE_GAP_USAGE_ENABLED = DWRITE_FONT_LINE_GAP_USAGE.ENABLED;

pub const DWRITE_LINE_SPACING = extern struct {
    method: DWRITE_LINE_SPACING_METHOD,
    height: f32,
    baseline: f32,
    leadingBefore: f32,
    fontLineGapUsage: DWRITE_FONT_LINE_GAP_USAGE,
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteTextFormat2_Value = Guid.initString("f67e0edd-9e3d-4ecc-8c32-4183253dfe70");
pub const IID_IDWriteTextFormat2 = &IID_IDWriteTextFormat2_Value;
pub const IDWriteTextFormat2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextFormat1.VTable,
        SetLineSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat2,
                lineSpacingOptions: ?*const DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat2,
                lineSpacingOptions: ?*const DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLineSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat2,
                lineSpacingOptions: ?*DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat2,
                lineSpacingOptions: ?*DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextFormat1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat2_SetLineSpacing(self: *const T, lineSpacingOptions: ?*const DWRITE_LINE_SPACING) HRESULT {
                return @as(*const IDWriteTextFormat2.VTable, @ptrCast(self.vtable)).SetLineSpacing(@as(*const IDWriteTextFormat2, @ptrCast(self)), lineSpacingOptions);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat2_GetLineSpacing(self: *const T, lineSpacingOptions: ?*DWRITE_LINE_SPACING) HRESULT {
                return @as(*const IDWriteTextFormat2.VTable, @ptrCast(self.vtable)).GetLineSpacing(@as(*const IDWriteTextFormat2, @ptrCast(self)), lineSpacingOptions);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

// TODO: this type is limited to platform 'windows8.1'
const IID_IDWriteTextLayout3_Value = Guid.initString("07ddcd52-020e-4de8-ac33-6c953d83f92d");
pub const IID_IDWriteTextLayout3 = &IID_IDWriteTextLayout3_Value;
pub const IDWriteTextLayout3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextLayout2.VTable,
        InvalidateLayout: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        SetLineSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout3,
                lineSpacingOptions: ?*const DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout3,
                lineSpacingOptions: ?*const DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLineSpacing: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout3,
                lineSpacingOptions: ?*DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout3,
                lineSpacingOptions: ?*DWRITE_LINE_SPACING,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLineMetrics: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout3,
                lineMetrics: ?[*]DWRITE_LINE_METRICS1,
                maxLineCount: u32,
                actualLineCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout3,
                lineMetrics: ?[*]DWRITE_LINE_METRICS1,
                maxLineCount: u32,
                actualLineCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextLayout2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout3_InvalidateLayout(self: *const T) HRESULT {
                return @as(*const IDWriteTextLayout3.VTable, @ptrCast(self.vtable)).InvalidateLayout(@as(*const IDWriteTextLayout3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout3_SetLineSpacing(self: *const T, lineSpacingOptions: ?*const DWRITE_LINE_SPACING) HRESULT {
                return @as(*const IDWriteTextLayout3.VTable, @ptrCast(self.vtable)).SetLineSpacing(@as(*const IDWriteTextLayout3, @ptrCast(self)), lineSpacingOptions);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout3_GetLineSpacing(self: *const T, lineSpacingOptions: ?*DWRITE_LINE_SPACING) HRESULT {
                return @as(*const IDWriteTextLayout3.VTable, @ptrCast(self.vtable)).GetLineSpacing(@as(*const IDWriteTextLayout3, @ptrCast(self)), lineSpacingOptions);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout3_GetLineMetrics(self: *const T, lineMetrics: ?[*]DWRITE_LINE_METRICS1, maxLineCount: u32, actualLineCount: ?*u32) HRESULT {
                return @as(*const IDWriteTextLayout3.VTable, @ptrCast(self.vtable)).GetLineMetrics(@as(*const IDWriteTextLayout3, @ptrCast(self)), lineMetrics, maxLineCount, actualLineCount);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_COLOR_GLYPH_RUN1 = extern struct {
    Base: DWRITE_COLOR_GLYPH_RUN,
    glyphImageFormat: DWRITE_GLYPH_IMAGE_FORMATS,
    measuringMode: DWRITE_MEASURING_MODE,
};

pub const DWRITE_GLYPH_IMAGE_DATA = extern struct {
    imageData: ?*const anyopaque,
    imageDataSize: u32,
    uniqueDataId: u32,
    pixelsPerEm: u32,
    pixelSize: D2D_SIZE_U,
    horizontalLeftOrigin: POINT,
    horizontalRightOrigin: POINT,
    verticalTopOrigin: POINT,
    verticalBottomOrigin: POINT,
};

const IID_IDWriteColorGlyphRunEnumerator1_Value = Guid.initString("7c5f86da-c7a1-4f05-b8e1-55a179fe5a35");
pub const IID_IDWriteColorGlyphRunEnumerator1 = &IID_IDWriteColorGlyphRunEnumerator1_Value;
pub const IDWriteColorGlyphRunEnumerator1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteColorGlyphRunEnumerator.VTable,
        GetCurrentRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteColorGlyphRunEnumerator1,
                colorGlyphRun: ?*const ?*DWRITE_COLOR_GLYPH_RUN1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteColorGlyphRunEnumerator1,
                colorGlyphRun: ?*const ?*DWRITE_COLOR_GLYPH_RUN1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteColorGlyphRunEnumerator.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteColorGlyphRunEnumerator1_GetCurrentRun(self: *const T, colorGlyphRun: ?*const ?*DWRITE_COLOR_GLYPH_RUN1) HRESULT {
                return @as(*const IDWriteColorGlyphRunEnumerator1.VTable, @ptrCast(self.vtable)).GetCurrentRun(@as(*const IDWriteColorGlyphRunEnumerator1, @ptrCast(self)), colorGlyphRun);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontFace4_Value = Guid.initString("27f2a904-4eb8-441d-9678-0563f53e3e2f");
pub const IID_IDWriteFontFace4 = &IID_IDWriteFontFace4_Value;
pub const IDWriteFontFace4 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFace3.VTable,
        GetGlyphImageFormats: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace4,
                glyphId: u16,
                pixelsPerEmFirst: u32,
                pixelsPerEmLast: u32,
                glyphImageFormats: ?*DWRITE_GLYPH_IMAGE_FORMATS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace4,
                glyphId: u16,
                pixelsPerEmFirst: u32,
                pixelsPerEmLast: u32,
                glyphImageFormats: ?*DWRITE_GLYPH_IMAGE_FORMATS,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetGlyphImageFormats1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace4,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_GLYPH_IMAGE_FORMATS,
            else => *const fn (
                self: *const IDWriteFontFace4,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_GLYPH_IMAGE_FORMATS,
        },
        GetGlyphImageData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace4,
                glyphId: u16,
                pixelsPerEm: u32,
                glyphImageFormat: DWRITE_GLYPH_IMAGE_FORMATS,
                glyphData: ?*DWRITE_GLYPH_IMAGE_DATA,
                glyphDataContext: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace4,
                glyphId: u16,
                pixelsPerEm: u32,
                glyphImageFormat: DWRITE_GLYPH_IMAGE_FORMATS,
                glyphData: ?*DWRITE_GLYPH_IMAGE_DATA,
                glyphDataContext: ?*?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ReleaseGlyphImageData: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace4,
                glyphDataContext: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) void,
            else => *const fn (
                self: *const IDWriteFontFace4,
                glyphDataContext: ?*anyopaque,
            ) callconv(@import("std").os.windows.WINAPI) void,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFace3.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace4_GetGlyphImageFormats(self: *const T, glyphId: u16, pixelsPerEmFirst: u32, pixelsPerEmLast: u32, glyphImageFormats: ?*DWRITE_GLYPH_IMAGE_FORMATS) HRESULT {
                return @as(*const IDWriteFontFace4.VTable, @ptrCast(self.vtable)).GetGlyphImageFormats(@as(*const IDWriteFontFace4, @ptrCast(self)), glyphId, pixelsPerEmFirst, pixelsPerEmLast, glyphImageFormats);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace4_GetGlyphImageFormats1(self: *const T) DWRITE_GLYPH_IMAGE_FORMATS {
                return @as(*const IDWriteFontFace4.VTable, @ptrCast(self.vtable)).GetGlyphImageFormats(@as(*const IDWriteFontFace4, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace4_GetGlyphImageData(self: *const T, glyphId: u16, pixelsPerEm: u32, glyphImageFormat: DWRITE_GLYPH_IMAGE_FORMATS, glyphData: ?*DWRITE_GLYPH_IMAGE_DATA, glyphDataContext: ?*?*anyopaque) HRESULT {
                return @as(*const IDWriteFontFace4.VTable, @ptrCast(self.vtable)).GetGlyphImageData(@as(*const IDWriteFontFace4, @ptrCast(self)), glyphId, pixelsPerEm, glyphImageFormat, glyphData, glyphDataContext);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace4_ReleaseGlyphImageData(self: *const T, glyphDataContext: ?*anyopaque) void {
                return @as(*const IDWriteFontFace4.VTable, @ptrCast(self.vtable)).ReleaseGlyphImageData(@as(*const IDWriteFontFace4, @ptrCast(self)), glyphDataContext);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFactory4_Value = Guid.initString("4b0b5bd3-0797-4549-8ac5-fe915cc53856");
pub const IID_IDWriteFactory4 = &IID_IDWriteFactory4_Value;
pub const IDWriteFactory4 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFactory3.VTable,
        TranslateColorGlyphRun: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory4,
                baselineOrigin: D2D_POINT_2F,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                desiredGlyphImageFormats: DWRITE_GLYPH_IMAGE_FORMATS,
                measuringMode: DWRITE_MEASURING_MODE,
                worldAndDpiTransform: ?*const DWRITE_MATRIX,
                colorPaletteIndex: u32,
                colorLayers: ?*?*IDWriteColorGlyphRunEnumerator1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory4,
                baselineOrigin: D2D_POINT_2F,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION,
                desiredGlyphImageFormats: DWRITE_GLYPH_IMAGE_FORMATS,
                measuringMode: DWRITE_MEASURING_MODE,
                worldAndDpiTransform: ?*const DWRITE_MATRIX,
                colorPaletteIndex: u32,
                colorLayers: ?*?*IDWriteColorGlyphRunEnumerator1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ComputeGlyphOrigins: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory4,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                baselineOrigin: D2D_POINT_2F,
                glyphOrigins: ?*D2D_POINT_2F,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory4,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                baselineOrigin: D2D_POINT_2F,
                glyphOrigins: ?*D2D_POINT_2F,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        ComputeGlyphOrigins1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory4,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                measuringMode: DWRITE_MEASURING_MODE,
                baselineOrigin: D2D_POINT_2F,
                worldAndDpiTransform: ?*const DWRITE_MATRIX,
                glyphOrigins: ?*D2D_POINT_2F,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory4,
                glyphRun: ?*const DWRITE_GLYPH_RUN,
                measuringMode: DWRITE_MEASURING_MODE,
                baselineOrigin: D2D_POINT_2F,
                worldAndDpiTransform: ?*const DWRITE_MATRIX,
                glyphOrigins: ?*D2D_POINT_2F,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFactory3.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory4_TranslateColorGlyphRun(self: *const T, baselineOrigin: D2D_POINT_2F, glyphRun: ?*const DWRITE_GLYPH_RUN, glyphRunDescription: ?*const DWRITE_GLYPH_RUN_DESCRIPTION, desiredGlyphImageFormats: DWRITE_GLYPH_IMAGE_FORMATS, measuringMode: DWRITE_MEASURING_MODE, worldAndDpiTransform: ?*const DWRITE_MATRIX, colorPaletteIndex: u32, colorLayers: ?*?*IDWriteColorGlyphRunEnumerator1) HRESULT {
                return @as(*const IDWriteFactory4.VTable, @ptrCast(self.vtable)).TranslateColorGlyphRun(@as(*const IDWriteFactory4, @ptrCast(self)), baselineOrigin, glyphRun, glyphRunDescription, desiredGlyphImageFormats, measuringMode, worldAndDpiTransform, colorPaletteIndex, colorLayers);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory4_ComputeGlyphOrigins(self: *const T, glyphRun: ?*const DWRITE_GLYPH_RUN, baselineOrigin: D2D_POINT_2F, glyphOrigins: ?*D2D_POINT_2F) HRESULT {
                return @as(*const IDWriteFactory4.VTable, @ptrCast(self.vtable)).ComputeGlyphOrigins(@as(*const IDWriteFactory4, @ptrCast(self)), glyphRun, baselineOrigin, glyphOrigins);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory4_ComputeGlyphOrigins1(self: *const T, glyphRun: ?*const DWRITE_GLYPH_RUN, measuringMode: DWRITE_MEASURING_MODE, baselineOrigin: D2D_POINT_2F, worldAndDpiTransform: ?*const DWRITE_MATRIX, glyphOrigins: ?*D2D_POINT_2F) HRESULT {
                return @as(*const IDWriteFactory4.VTable, @ptrCast(self.vtable)).ComputeGlyphOrigins(@as(*const IDWriteFactory4, @ptrCast(self)), glyphRun, measuringMode, baselineOrigin, worldAndDpiTransform, glyphOrigins);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontSetBuilder1_Value = Guid.initString("3ff7715f-3cdc-4dc6-9b72-ec5621dccafd");
pub const IID_IDWriteFontSetBuilder1 = &IID_IDWriteFontSetBuilder1_Value;
pub const IDWriteFontSetBuilder1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontSetBuilder.VTable,
        AddFontFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSetBuilder1,
                fontFile: ?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSetBuilder1,
                fontFile: ?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontSetBuilder.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSetBuilder1_AddFontFile(self: *const T, fontFile: ?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteFontSetBuilder1.VTable, @ptrCast(self.vtable)).AddFontFile(@as(*const IDWriteFontSetBuilder1, @ptrCast(self)), fontFile);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteAsyncResult_Value = Guid.initString("ce25f8fd-863b-4d13-9651-c1f88dc73fe2");
pub const IID_IDWriteAsyncResult = &IID_IDWriteAsyncResult_Value;
pub const IDWriteAsyncResult = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetWaitHandle: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteAsyncResult,
            ) callconv(@import("std").os.windows.WINAPI) ?HANDLE,
            else => *const fn (
                self: *const IDWriteAsyncResult,
            ) callconv(@import("std").os.windows.WINAPI) ?HANDLE,
        },
        GetResult: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteAsyncResult,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteAsyncResult,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteAsyncResult_GetWaitHandle(self: *const T) ?HANDLE {
                return @as(*const IDWriteAsyncResult.VTable, @ptrCast(self.vtable)).GetWaitHandle(@as(*const IDWriteAsyncResult, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteAsyncResult_GetResult(self: *const T) HRESULT {
                return @as(*const IDWriteAsyncResult.VTable, @ptrCast(self.vtable)).GetResult(@as(*const IDWriteAsyncResult, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_FILE_FRAGMENT = extern struct {
    fileOffset: u64,
    fragmentSize: u64,
};

const IID_IDWriteRemoteFontFileStream_Value = Guid.initString("4db3757a-2c72-4ed9-b2b6-1ababe1aff9c");
pub const IID_IDWriteRemoteFontFileStream = &IID_IDWriteRemoteFontFileStream_Value;
pub const IDWriteRemoteFontFileStream = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFileStream.VTable,
        GetLocalFileSize: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRemoteFontFileStream,
                localFileSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteRemoteFontFileStream,
                localFileSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFileFragmentLocality: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRemoteFontFileStream,
                fileOffset: u64,
                fragmentSize: u64,
                isLocal: ?*BOOL,
                partialSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteRemoteFontFileStream,
                fileOffset: u64,
                fragmentSize: u64,
                isLocal: ?*BOOL,
                partialSize: ?*u64,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocality: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRemoteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
            else => *const fn (
                self: *const IDWriteRemoteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
        },
        BeginDownload: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRemoteFontFileStream,
                downloadOperationID: ?*const Guid,
                fileFragments: [*]const DWRITE_FILE_FRAGMENT,
                fragmentCount: u32,
                asyncResult: ?*?*IDWriteAsyncResult,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteRemoteFontFileStream,
                downloadOperationID: ?*const Guid,
                fileFragments: [*]const DWRITE_FILE_FRAGMENT,
                fragmentCount: u32,
                asyncResult: ?*?*IDWriteAsyncResult,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFileStream.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRemoteFontFileStream_GetLocalFileSize(self: *const T, localFileSize: ?*u64) HRESULT {
                return @as(*const IDWriteRemoteFontFileStream.VTable, @ptrCast(self.vtable)).GetLocalFileSize(@as(*const IDWriteRemoteFontFileStream, @ptrCast(self)), localFileSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRemoteFontFileStream_GetFileFragmentLocality(self: *const T, fileOffset: u64, fragmentSize: u64, isLocal: ?*BOOL, partialSize: ?*u64) HRESULT {
                return @as(*const IDWriteRemoteFontFileStream.VTable, @ptrCast(self.vtable)).GetFileFragmentLocality(@as(*const IDWriteRemoteFontFileStream, @ptrCast(self)), fileOffset, fragmentSize, isLocal, partialSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRemoteFontFileStream_GetLocality(self: *const T) DWRITE_LOCALITY {
                return @as(*const IDWriteRemoteFontFileStream.VTable, @ptrCast(self.vtable)).GetLocality(@as(*const IDWriteRemoteFontFileStream, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRemoteFontFileStream_BeginDownload(self: *const T, downloadOperationID: ?*const Guid, fileFragments: [*]const DWRITE_FILE_FRAGMENT, fragmentCount: u32, asyncResult: ?*?*IDWriteAsyncResult) HRESULT {
                return @as(*const IDWriteRemoteFontFileStream.VTable, @ptrCast(self.vtable)).BeginDownload(@as(*const IDWriteRemoteFontFileStream, @ptrCast(self)), downloadOperationID, fileFragments, fragmentCount, asyncResult);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_CONTAINER_TYPE = enum(i32) {
    UNKNOWN = 0,
    WOFF = 1,
    WOFF2 = 2,
};
pub const DWRITE_CONTAINER_TYPE_UNKNOWN = DWRITE_CONTAINER_TYPE.UNKNOWN;
pub const DWRITE_CONTAINER_TYPE_WOFF = DWRITE_CONTAINER_TYPE.WOFF;
pub const DWRITE_CONTAINER_TYPE_WOFF2 = DWRITE_CONTAINER_TYPE.WOFF2;

const IID_IDWriteRemoteFontFileLoader_Value = Guid.initString("68648c83-6ede-46c0-ab46-20083a887fde");
pub const IID_IDWriteRemoteFontFileLoader = &IID_IDWriteRemoteFontFileLoader_Value;
pub const IDWriteRemoteFontFileLoader = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFileLoader.VTable,
        CreateRemoteStreamFromKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRemoteFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                fontFileStream: ?*?*IDWriteRemoteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteRemoteFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                fontFileStream: ?*?*IDWriteRemoteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetLocalityFromKey: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRemoteFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                locality: ?*DWRITE_LOCALITY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteRemoteFontFileLoader,
                // TODO: what to do with BytesParamIndex 1?
                fontFileReferenceKey: ?*const anyopaque,
                fontFileReferenceKeySize: u32,
                locality: ?*DWRITE_LOCALITY,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFileReferenceFromUrl: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteRemoteFontFileLoader,
                factory: ?*IDWriteFactory,
                baseUrl: ?[*:0]const u16,
                fontFileUrl: ?[*:0]const u16,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteRemoteFontFileLoader,
                factory: ?*IDWriteFactory,
                baseUrl: ?[*:0]const u16,
                fontFileUrl: ?[*:0]const u16,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFileLoader.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRemoteFontFileLoader_CreateRemoteStreamFromKey(self: *const T, fontFileReferenceKey: ?*const anyopaque, fontFileReferenceKeySize: u32, fontFileStream: ?*?*IDWriteRemoteFontFileStream) HRESULT {
                return @as(*const IDWriteRemoteFontFileLoader.VTable, @ptrCast(self.vtable)).CreateRemoteStreamFromKey(@as(*const IDWriteRemoteFontFileLoader, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize, fontFileStream);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRemoteFontFileLoader_GetLocalityFromKey(self: *const T, fontFileReferenceKey: ?*const anyopaque, fontFileReferenceKeySize: u32, locality: ?*DWRITE_LOCALITY) HRESULT {
                return @as(*const IDWriteRemoteFontFileLoader.VTable, @ptrCast(self.vtable)).GetLocalityFromKey(@as(*const IDWriteRemoteFontFileLoader, @ptrCast(self)), fontFileReferenceKey, fontFileReferenceKeySize, locality);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteRemoteFontFileLoader_CreateFontFileReferenceFromUrl(self: *const T, factory: ?*IDWriteFactory, baseUrl: ?[*:0]const u16, fontFileUrl: ?[*:0]const u16, fontFile: ?*?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteRemoteFontFileLoader.VTable, @ptrCast(self.vtable)).CreateFontFileReferenceFromUrl(@as(*const IDWriteRemoteFontFileLoader, @ptrCast(self)), factory, baseUrl, fontFileUrl, fontFile);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteInMemoryFontFileLoader_Value = Guid.initString("dc102f47-a12d-4b1c-822d-9e117e33043f");
pub const IID_IDWriteInMemoryFontFileLoader = &IID_IDWriteInMemoryFontFileLoader_Value;
pub const IDWriteInMemoryFontFileLoader = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFileLoader.VTable,
        CreateInMemoryFontFileReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteInMemoryFontFileLoader,
                factory: ?*IDWriteFactory,
                // TODO: what to do with BytesParamIndex 2?
                fontData: ?*const anyopaque,
                fontDataSize: u32,
                ownerObject: ?*IUnknown,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteInMemoryFontFileLoader,
                factory: ?*IDWriteFactory,
                // TODO: what to do with BytesParamIndex 2?
                fontData: ?*const anyopaque,
                fontDataSize: u32,
                ownerObject: ?*IUnknown,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFileCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteInMemoryFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteInMemoryFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFileLoader.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteInMemoryFontFileLoader_CreateInMemoryFontFileReference(self: *const T, factory: ?*IDWriteFactory, fontData: ?*const anyopaque, fontDataSize: u32, ownerObject: ?*IUnknown, fontFile: ?*?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteInMemoryFontFileLoader.VTable, @ptrCast(self.vtable)).CreateInMemoryFontFileReference(@as(*const IDWriteInMemoryFontFileLoader, @ptrCast(self)), factory, fontData, fontDataSize, ownerObject, fontFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteInMemoryFontFileLoader_GetFileCount(self: *const T) u32 {
                return @as(*const IDWriteInMemoryFontFileLoader.VTable, @ptrCast(self.vtable)).GetFileCount(@as(*const IDWriteInMemoryFontFileLoader, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFactory5_Value = Guid.initString("958db99a-be2a-4f09-af7d-65189803d1d3");
pub const IID_IDWriteFactory5 = &IID_IDWriteFactory5_Value;
pub const IDWriteFactory5 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFactory4.VTable,
        CreateFontSetBuilder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory5,
                fontSetBuilder: ?*?*IDWriteFontSetBuilder1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory5,
                fontSetBuilder: ?*?*IDWriteFontSetBuilder1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateInMemoryFontFileLoader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory5,
                newLoader: ?*?*IDWriteInMemoryFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory5,
                newLoader: ?*?*IDWriteInMemoryFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateHttpFontFileLoader: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory5,
                referrerUrl: ?[*:0]const u16,
                extraHeaders: ?[*:0]const u16,
                newLoader: ?*?*IDWriteRemoteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory5,
                referrerUrl: ?[*:0]const u16,
                extraHeaders: ?[*:0]const u16,
                newLoader: ?*?*IDWriteRemoteFontFileLoader,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AnalyzeContainerType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory5,
                // TODO: what to do with BytesParamIndex 1?
                fileData: ?*const anyopaque,
                fileDataSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_CONTAINER_TYPE,
            else => *const fn (
                self: *const IDWriteFactory5,
                // TODO: what to do with BytesParamIndex 1?
                fileData: ?*const anyopaque,
                fileDataSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_CONTAINER_TYPE,
        },
        UnpackFontFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory5,
                containerType: DWRITE_CONTAINER_TYPE,
                // TODO: what to do with BytesParamIndex 2?
                fileData: ?*const anyopaque,
                fileDataSize: u32,
                unpackedFontStream: ?*?*IDWriteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory5,
                containerType: DWRITE_CONTAINER_TYPE,
                // TODO: what to do with BytesParamIndex 2?
                fileData: ?*const anyopaque,
                fileDataSize: u32,
                unpackedFontStream: ?*?*IDWriteFontFileStream,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFactory4.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory5_CreateFontSetBuilder(self: *const T, fontSetBuilder: ?*?*IDWriteFontSetBuilder1) HRESULT {
                return @as(*const IDWriteFactory5.VTable, @ptrCast(self.vtable)).CreateFontSetBuilder(@as(*const IDWriteFactory5, @ptrCast(self)), fontSetBuilder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory5_CreateInMemoryFontFileLoader(self: *const T, newLoader: ?*?*IDWriteInMemoryFontFileLoader) HRESULT {
                return @as(*const IDWriteFactory5.VTable, @ptrCast(self.vtable)).CreateInMemoryFontFileLoader(@as(*const IDWriteFactory5, @ptrCast(self)), newLoader);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory5_CreateHttpFontFileLoader(self: *const T, referrerUrl: ?[*:0]const u16, extraHeaders: ?[*:0]const u16, newLoader: ?*?*IDWriteRemoteFontFileLoader) HRESULT {
                return @as(*const IDWriteFactory5.VTable, @ptrCast(self.vtable)).CreateHttpFontFileLoader(@as(*const IDWriteFactory5, @ptrCast(self)), referrerUrl, extraHeaders, newLoader);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory5_AnalyzeContainerType(self: *const T, fileData: ?*const anyopaque, fileDataSize: u32) DWRITE_CONTAINER_TYPE {
                return @as(*const IDWriteFactory5.VTable, @ptrCast(self.vtable)).AnalyzeContainerType(@as(*const IDWriteFactory5, @ptrCast(self)), fileData, fileDataSize);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory5_UnpackFontFile(self: *const T, containerType: DWRITE_CONTAINER_TYPE, fileData: ?*const anyopaque, fileDataSize: u32, unpackedFontStream: ?*?*IDWriteFontFileStream) HRESULT {
                return @as(*const IDWriteFactory5.VTable, @ptrCast(self.vtable)).UnpackFontFile(@as(*const IDWriteFactory5, @ptrCast(self)), containerType, fileData, fileDataSize, unpackedFontStream);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_FONT_AXIS_VALUE = extern struct {
    axisTag: DWRITE_FONT_AXIS_TAG,
    value: f32,
};

pub const DWRITE_FONT_AXIS_RANGE = extern struct {
    axisTag: DWRITE_FONT_AXIS_TAG,
    minValue: f32,
    maxValue: f32,
};

pub const DWRITE_FONT_FAMILY_MODEL = enum(i32) {
    TYPOGRAPHIC = 0,
    WEIGHT_STRETCH_STYLE = 1,
};
pub const DWRITE_FONT_FAMILY_MODEL_TYPOGRAPHIC = DWRITE_FONT_FAMILY_MODEL.TYPOGRAPHIC;
pub const DWRITE_FONT_FAMILY_MODEL_WEIGHT_STRETCH_STYLE = DWRITE_FONT_FAMILY_MODEL.WEIGHT_STRETCH_STYLE;

pub const DWRITE_AUTOMATIC_FONT_AXES = enum(u32) {
    NONE = 0,
    OPTICAL_SIZE = 1,
    _,
    pub fn initFlags(o: struct {
        NONE: u1 = 0,
        OPTICAL_SIZE: u1 = 0,
    }) DWRITE_AUTOMATIC_FONT_AXES {
        return @as(DWRITE_AUTOMATIC_FONT_AXES, @enumFromInt((if (o.NONE == 1) @intFromEnum(DWRITE_AUTOMATIC_FONT_AXES.NONE) else 0) | (if (o.OPTICAL_SIZE == 1) @intFromEnum(DWRITE_AUTOMATIC_FONT_AXES.OPTICAL_SIZE) else 0)));
    }
};
pub const DWRITE_AUTOMATIC_FONT_AXES_NONE = DWRITE_AUTOMATIC_FONT_AXES.NONE;
pub const DWRITE_AUTOMATIC_FONT_AXES_OPTICAL_SIZE = DWRITE_AUTOMATIC_FONT_AXES.OPTICAL_SIZE;

pub const DWRITE_FONT_AXIS_ATTRIBUTES = enum(u32) {
    NONE = 0,
    VARIABLE = 1,
    HIDDEN = 2,
    _,
    pub fn initFlags(o: struct {
        NONE: u1 = 0,
        VARIABLE: u1 = 0,
        HIDDEN: u1 = 0,
    }) DWRITE_FONT_AXIS_ATTRIBUTES {
        return @as(DWRITE_FONT_AXIS_ATTRIBUTES, @enumFromInt((if (o.NONE == 1) @intFromEnum(DWRITE_FONT_AXIS_ATTRIBUTES.NONE) else 0) | (if (o.VARIABLE == 1) @intFromEnum(DWRITE_FONT_AXIS_ATTRIBUTES.VARIABLE) else 0) | (if (o.HIDDEN == 1) @intFromEnum(DWRITE_FONT_AXIS_ATTRIBUTES.HIDDEN) else 0)));
    }
};
pub const DWRITE_FONT_AXIS_ATTRIBUTES_NONE = DWRITE_FONT_AXIS_ATTRIBUTES.NONE;
pub const DWRITE_FONT_AXIS_ATTRIBUTES_VARIABLE = DWRITE_FONT_AXIS_ATTRIBUTES.VARIABLE;
pub const DWRITE_FONT_AXIS_ATTRIBUTES_HIDDEN = DWRITE_FONT_AXIS_ATTRIBUTES.HIDDEN;

const IID_IDWriteFactory6_Value = Guid.initString("f3744d80-21f7-42eb-b35d-995bc72fc223");
pub const IID_IDWriteFactory6 = &IID_IDWriteFactory6_Value;
pub const IDWriteFactory6 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFactory5.VTable,
        CreateFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory6,
                fontFile: ?*IDWriteFontFile,
                faceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory6,
                fontFile: ?*IDWriteFontFile,
                faceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontResource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory6,
                fontFile: ?*IDWriteFontFile,
                faceIndex: u32,
                fontResource: ?*?*IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory6,
                fontFile: ?*IDWriteFontFile,
                faceIndex: u32,
                fontResource: ?*?*IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSystemFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory6,
                includeDownloadableFonts: BOOL,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory6,
                includeDownloadableFonts: BOOL,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSystemFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory6,
                includeDownloadableFonts: BOOL,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                fontCollection: ?*?*IDWriteFontCollection2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory6,
                includeDownloadableFonts: BOOL,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                fontCollection: ?*?*IDWriteFontCollection2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontCollectionFromFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory6,
                fontSet: ?*IDWriteFontSet,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                fontCollection: ?*?*IDWriteFontCollection2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory6,
                fontSet: ?*IDWriteFontSet,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                fontCollection: ?*?*IDWriteFontCollection2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontSetBuilder: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory6,
                fontSetBuilder: ?*?*IDWriteFontSetBuilder2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory6,
                fontSetBuilder: ?*?*IDWriteFontSetBuilder2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateTextFormat: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory6,
                fontFamilyName: ?[*:0]const u16,
                fontCollection: ?*IDWriteFontCollection,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontSize: f32,
                localeName: ?[*:0]const u16,
                textFormat: ?*?*IDWriteTextFormat3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory6,
                fontFamilyName: ?[*:0]const u16,
                fontCollection: ?*IDWriteFontCollection,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontSize: f32,
                localeName: ?[*:0]const u16,
                textFormat: ?*?*IDWriteTextFormat3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFactory5.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory6_CreateFontFaceReference(self: *const T, fontFile: ?*IDWriteFontFile, faceIndex: u32, fontSimulations: DWRITE_FONT_SIMULATIONS, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, fontFaceReference: ?*?*IDWriteFontFaceReference1) HRESULT {
                return @as(*const IDWriteFactory6.VTable, @ptrCast(self.vtable)).CreateFontFaceReference(@as(*const IDWriteFactory6, @ptrCast(self)), fontFile, faceIndex, fontSimulations, fontAxisValues, fontAxisValueCount, fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory6_CreateFontResource(self: *const T, fontFile: ?*IDWriteFontFile, faceIndex: u32, fontResource: ?*?*IDWriteFontResource) HRESULT {
                return @as(*const IDWriteFactory6.VTable, @ptrCast(self.vtable)).CreateFontResource(@as(*const IDWriteFactory6, @ptrCast(self)), fontFile, faceIndex, fontResource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory6_GetSystemFontSet(self: *const T, includeDownloadableFonts: BOOL, fontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFactory6.VTable, @ptrCast(self.vtable)).GetSystemFontSet(@as(*const IDWriteFactory6, @ptrCast(self)), includeDownloadableFonts, fontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory6_GetSystemFontCollection(self: *const T, includeDownloadableFonts: BOOL, fontFamilyModel: DWRITE_FONT_FAMILY_MODEL, fontCollection: ?*?*IDWriteFontCollection2) HRESULT {
                return @as(*const IDWriteFactory6.VTable, @ptrCast(self.vtable)).GetSystemFontCollection(@as(*const IDWriteFactory6, @ptrCast(self)), includeDownloadableFonts, fontFamilyModel, fontCollection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory6_CreateFontCollectionFromFontSet(self: *const T, fontSet: ?*IDWriteFontSet, fontFamilyModel: DWRITE_FONT_FAMILY_MODEL, fontCollection: ?*?*IDWriteFontCollection2) HRESULT {
                return @as(*const IDWriteFactory6.VTable, @ptrCast(self.vtable)).CreateFontCollectionFromFontSet(@as(*const IDWriteFactory6, @ptrCast(self)), fontSet, fontFamilyModel, fontCollection);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory6_CreateFontSetBuilder(self: *const T, fontSetBuilder: ?*?*IDWriteFontSetBuilder2) HRESULT {
                return @as(*const IDWriteFactory6.VTable, @ptrCast(self.vtable)).CreateFontSetBuilder(@as(*const IDWriteFactory6, @ptrCast(self)), fontSetBuilder);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory6_CreateTextFormat(self: *const T, fontFamilyName: ?[*:0]const u16, fontCollection: ?*IDWriteFontCollection, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, fontSize: f32, localeName: ?[*:0]const u16, textFormat: ?*?*IDWriteTextFormat3) HRESULT {
                return @as(*const IDWriteFactory6.VTable, @ptrCast(self.vtable)).CreateTextFormat(@as(*const IDWriteFactory6, @ptrCast(self)), fontFamilyName, fontCollection, fontAxisValues, fontAxisValueCount, fontSize, localeName, textFormat);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontFace5_Value = Guid.initString("98eff3a5-b667-479a-b145-e2fa5b9fdc29");
pub const IID_IDWriteFontFace5 = &IID_IDWriteFontFace5_Value;
pub const IDWriteFontFace5 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFace4.VTable,
        GetFontAxisValueCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontAxisValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace5,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace5,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HasVariations: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        GetFontResource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace5,
                fontResource: ?*?*IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace5,
                fontResource: ?*?*IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        Equals: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace5,
                fontFace: ?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontFace5,
                fontFace: ?*IDWriteFontFace,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFace4.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace5_GetFontAxisValueCount(self: *const T) u32 {
                return @as(*const IDWriteFontFace5.VTable, @ptrCast(self.vtable)).GetFontAxisValueCount(@as(*const IDWriteFontFace5, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace5_GetFontAxisValues(self: *const T, fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32) HRESULT {
                return @as(*const IDWriteFontFace5.VTable, @ptrCast(self.vtable)).GetFontAxisValues(@as(*const IDWriteFontFace5, @ptrCast(self)), fontAxisValues, fontAxisValueCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace5_HasVariations(self: *const T) BOOL {
                return @as(*const IDWriteFontFace5.VTable, @ptrCast(self.vtable)).HasVariations(@as(*const IDWriteFontFace5, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace5_GetFontResource(self: *const T, fontResource: ?*?*IDWriteFontResource) HRESULT {
                return @as(*const IDWriteFontFace5.VTable, @ptrCast(self.vtable)).GetFontResource(@as(*const IDWriteFontFace5, @ptrCast(self)), fontResource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace5_Equals(self: *const T, fontFace: ?*IDWriteFontFace) BOOL {
                return @as(*const IDWriteFontFace5.VTable, @ptrCast(self.vtable)).Equals(@as(*const IDWriteFontFace5, @ptrCast(self)), fontFace);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontResource_Value = Guid.initString("1f803a76-6871-48e8-987f-b975551c50f2");
pub const IID_IDWriteFontResource = &IID_IDWriteFontResource_Value;
pub const IDWriteFontResource = extern struct {
    pub const VTable = extern struct {
        base: IUnknown.VTable,
        GetFontFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontResource,
                fontFile: ?*?*IDWriteFontFile,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFaceIndex: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontAxisCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetDefaultFontAxisValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontResource,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontAxisRanges: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontResource,
                fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontAxisAttributes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_AXIS_ATTRIBUTES,
            else => *const fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_AXIS_ATTRIBUTES,
        },
        GetAxisNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAxisValueNameCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetAxisValueNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
                axisValueIndex: u32,
                fontAxisRange: ?*DWRITE_FONT_AXIS_RANGE,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontResource,
                axisIndex: u32,
                axisValueIndex: u32,
                fontAxisRange: ?*DWRITE_FONT_AXIS_RANGE,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        HasVariations: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
            else => *const fn (
                self: *const IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) BOOL,
        },
        CreateFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontResource,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontResource,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontResource,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IUnknown.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetFontFile(self: *const T, fontFile: ?*?*IDWriteFontFile) HRESULT {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetFontFile(@as(*const IDWriteFontResource, @ptrCast(self)), fontFile);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetFontFaceIndex(self: *const T) u32 {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetFontFaceIndex(@as(*const IDWriteFontResource, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetFontAxisCount(self: *const T) u32 {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetFontAxisCount(@as(*const IDWriteFontResource, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetDefaultFontAxisValues(self: *const T, fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32) HRESULT {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetDefaultFontAxisValues(@as(*const IDWriteFontResource, @ptrCast(self)), fontAxisValues, fontAxisValueCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetFontAxisRanges(self: *const T, fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE, fontAxisRangeCount: u32) HRESULT {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetFontAxisRanges(@as(*const IDWriteFontResource, @ptrCast(self)), fontAxisRanges, fontAxisRangeCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetFontAxisAttributes(self: *const T, axisIndex: u32) DWRITE_FONT_AXIS_ATTRIBUTES {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetFontAxisAttributes(@as(*const IDWriteFontResource, @ptrCast(self)), axisIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetAxisNames(self: *const T, axisIndex: u32, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetAxisNames(@as(*const IDWriteFontResource, @ptrCast(self)), axisIndex, names);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetAxisValueNameCount(self: *const T, axisIndex: u32) u32 {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetAxisValueNameCount(@as(*const IDWriteFontResource, @ptrCast(self)), axisIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_GetAxisValueNames(self: *const T, axisIndex: u32, axisValueIndex: u32, fontAxisRange: ?*DWRITE_FONT_AXIS_RANGE, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).GetAxisValueNames(@as(*const IDWriteFontResource, @ptrCast(self)), axisIndex, axisValueIndex, fontAxisRange, names);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_HasVariations(self: *const T) BOOL {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).HasVariations(@as(*const IDWriteFontResource, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_CreateFontFace(self: *const T, fontSimulations: DWRITE_FONT_SIMULATIONS, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, fontFace: ?*?*IDWriteFontFace5) HRESULT {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).CreateFontFace(@as(*const IDWriteFontResource, @ptrCast(self)), fontSimulations, fontAxisValues, fontAxisValueCount, fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontResource_CreateFontFaceReference(self: *const T, fontSimulations: DWRITE_FONT_SIMULATIONS, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, fontFaceReference: ?*?*IDWriteFontFaceReference1) HRESULT {
                return @as(*const IDWriteFontResource.VTable, @ptrCast(self.vtable)).CreateFontFaceReference(@as(*const IDWriteFontResource, @ptrCast(self)), fontSimulations, fontAxisValues, fontAxisValueCount, fontFaceReference);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontFaceReference1_Value = Guid.initString("c081fe77-2fd1-41ac-a5a3-34983c4ba61a");
pub const IID_IDWriteFontFaceReference1 = &IID_IDWriteFontFaceReference1_Value;
pub const IDWriteFontFaceReference1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFaceReference.VTable,
        CreateFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference1,
                fontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference1,
                fontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontAxisValueCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontAxisValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFaceReference1,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFaceReference1,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFaceReference.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference1_CreateFontFace(self: *const T, fontFace: ?*?*IDWriteFontFace5) HRESULT {
                return @as(*const IDWriteFontFaceReference1.VTable, @ptrCast(self.vtable)).CreateFontFace(@as(*const IDWriteFontFaceReference1, @ptrCast(self)), fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference1_GetFontAxisValueCount(self: *const T) u32 {
                return @as(*const IDWriteFontFaceReference1.VTable, @ptrCast(self.vtable)).GetFontAxisValueCount(@as(*const IDWriteFontFaceReference1, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFaceReference1_GetFontAxisValues(self: *const T, fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32) HRESULT {
                return @as(*const IDWriteFontFaceReference1.VTable, @ptrCast(self.vtable)).GetFontAxisValues(@as(*const IDWriteFontFaceReference1, @ptrCast(self)), fontAxisValues, fontAxisValueCount);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontSetBuilder2_Value = Guid.initString("ee5ba612-b131-463c-8f4f-3189b9401e45");
pub const IID_IDWriteFontSetBuilder2 = &IID_IDWriteFontSetBuilder2_Value;
pub const IDWriteFontSetBuilder2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontSetBuilder1.VTable,
        AddFont: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSetBuilder2,
                fontFile: ?*IDWriteFontFile,
                fontFaceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSetBuilder2,
                fontFile: ?*IDWriteFontFile,
                fontFaceIndex: u32,
                fontSimulations: DWRITE_FONT_SIMULATIONS,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        AddFontFile: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSetBuilder2,
                filePath: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSetBuilder2,
                filePath: ?[*:0]const u16,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontSetBuilder1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSetBuilder2_AddFont(self: *const T, fontFile: ?*IDWriteFontFile, fontFaceIndex: u32, fontSimulations: DWRITE_FONT_SIMULATIONS, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE, fontAxisRangeCount: u32, properties: [*]const DWRITE_FONT_PROPERTY, propertyCount: u32) HRESULT {
                return @as(*const IDWriteFontSetBuilder2.VTable, @ptrCast(self.vtable)).AddFont(@as(*const IDWriteFontSetBuilder2, @ptrCast(self)), fontFile, fontFaceIndex, fontSimulations, fontAxisValues, fontAxisValueCount, fontAxisRanges, fontAxisRangeCount, properties, propertyCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSetBuilder2_AddFontFile(self: *const T, filePath: ?[*:0]const u16) HRESULT {
                return @as(*const IDWriteFontSetBuilder2.VTable, @ptrCast(self.vtable)).AddFontFile(@as(*const IDWriteFontSetBuilder2, @ptrCast(self)), filePath);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontSet1_Value = Guid.initString("7e9fda85-6c92-4053-bc47-7ae3530db4d3");
pub const IID_IDWriteFontSet1 = &IID_IDWriteFontSet1_Value;
pub const IDWriteFontSet1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontSet.VTable,
        GetMatchingFonts: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                fontProperty: ?*const DWRITE_FONT_PROPERTY,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                matchingFonts: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                fontProperty: ?*const DWRITE_FONT_PROPERTY,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                matchingFonts: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFirstFontResources: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilteredFonts: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                indices: [*]const u32,
                indexCount: u32,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                indices: [*]const u32,
                indexCount: u32,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilteredFonts1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
                selectAnyRange: BOOL,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
                selectAnyRange: BOOL,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilteredFonts2: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                properties: ?[*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
                selectAnyProperty: BOOL,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                properties: ?[*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
                selectAnyProperty: BOOL,
                filteredFontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilteredFontIndices: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
                selectAnyRange: BOOL,
                indices: [*]u32,
                maxIndexCount: u32,
                actualIndexCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE,
                fontAxisRangeCount: u32,
                selectAnyRange: BOOL,
                indices: [*]u32,
                maxIndexCount: u32,
                actualIndexCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFilteredFontIndices1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
                selectAnyProperty: BOOL,
                indices: [*]u32,
                maxIndexCount: u32,
                actualIndexCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                properties: [*]const DWRITE_FONT_PROPERTY,
                propertyCount: u32,
                selectAnyProperty: BOOL,
                indices: [*]u32,
                maxIndexCount: u32,
                actualIndexCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontAxisRanges: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE,
                maxFontAxisRangeCount: u32,
                actualFontAxisRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE,
                maxFontAxisRangeCount: u32,
                actualFontAxisRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontAxisRanges1: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE,
                maxFontAxisRangeCount: u32,
                actualFontAxisRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE,
                maxFontAxisRangeCount: u32,
                actualFontAxisRangeCount: ?*u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFaceReference: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontFaceReference: ?*?*IDWriteFontFaceReference1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontResource: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontResource: ?*?*IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontResource: ?*?*IDWriteFontResource,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        CreateFontFace: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
                fontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontLocality: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
            else => *const fn (
                self: *const IDWriteFontSet1,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_LOCALITY,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontSet.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetMatchingFonts(self: *const T, fontProperty: ?*const DWRITE_FONT_PROPERTY, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, matchingFonts: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetMatchingFonts(@as(*const IDWriteFontSet1, @ptrCast(self)), fontProperty, fontAxisValues, fontAxisValueCount, matchingFonts);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFirstFontResources(self: *const T, filteredFontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFirstFontResources(@as(*const IDWriteFontSet1, @ptrCast(self)), filteredFontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFilteredFonts(self: *const T, indices: [*]const u32, indexCount: u32, filteredFontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFilteredFonts(@as(*const IDWriteFontSet1, @ptrCast(self)), indices, indexCount, filteredFontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFilteredFonts1(self: *const T, fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE, fontAxisRangeCount: u32, selectAnyRange: BOOL, filteredFontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFilteredFonts(@as(*const IDWriteFontSet1, @ptrCast(self)), fontAxisRanges, fontAxisRangeCount, selectAnyRange, filteredFontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFilteredFonts2(self: *const T, properties: ?[*]const DWRITE_FONT_PROPERTY, propertyCount: u32, selectAnyProperty: BOOL, filteredFontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFilteredFonts(@as(*const IDWriteFontSet1, @ptrCast(self)), properties, propertyCount, selectAnyProperty, filteredFontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFilteredFontIndices(self: *const T, fontAxisRanges: [*]const DWRITE_FONT_AXIS_RANGE, fontAxisRangeCount: u32, selectAnyRange: BOOL, indices: [*]u32, maxIndexCount: u32, actualIndexCount: ?*u32) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFilteredFontIndices(@as(*const IDWriteFontSet1, @ptrCast(self)), fontAxisRanges, fontAxisRangeCount, selectAnyRange, indices, maxIndexCount, actualIndexCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFilteredFontIndices1(self: *const T, properties: [*]const DWRITE_FONT_PROPERTY, propertyCount: u32, selectAnyProperty: BOOL, indices: [*]u32, maxIndexCount: u32, actualIndexCount: ?*u32) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFilteredFontIndices(@as(*const IDWriteFontSet1, @ptrCast(self)), properties, propertyCount, selectAnyProperty, indices, maxIndexCount, actualIndexCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFontAxisRanges(self: *const T, listIndex: u32, fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE, maxFontAxisRangeCount: u32, actualFontAxisRangeCount: ?*u32) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFontAxisRanges(@as(*const IDWriteFontSet1, @ptrCast(self)), listIndex, fontAxisRanges, maxFontAxisRangeCount, actualFontAxisRangeCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFontAxisRanges1(self: *const T, fontAxisRanges: [*]DWRITE_FONT_AXIS_RANGE, maxFontAxisRangeCount: u32, actualFontAxisRangeCount: ?*u32) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFontAxisRanges(@as(*const IDWriteFontSet1, @ptrCast(self)), fontAxisRanges, maxFontAxisRangeCount, actualFontAxisRangeCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFontFaceReference(self: *const T, listIndex: u32, fontFaceReference: ?*?*IDWriteFontFaceReference1) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFontFaceReference(@as(*const IDWriteFontSet1, @ptrCast(self)), listIndex, fontFaceReference);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_CreateFontResource(self: *const T, listIndex: u32, fontResource: ?*?*IDWriteFontResource) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).CreateFontResource(@as(*const IDWriteFontSet1, @ptrCast(self)), listIndex, fontResource);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_CreateFontFace(self: *const T, listIndex: u32, fontFace: ?*?*IDWriteFontFace5) HRESULT {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).CreateFontFace(@as(*const IDWriteFontSet1, @ptrCast(self)), listIndex, fontFace);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet1_GetFontLocality(self: *const T, listIndex: u32) DWRITE_LOCALITY {
                return @as(*const IDWriteFontSet1.VTable, @ptrCast(self.vtable)).GetFontLocality(@as(*const IDWriteFontSet1, @ptrCast(self)), listIndex);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontList2_Value = Guid.initString("c0763a34-77af-445a-b735-08c37b0a5bf5");
pub const IID_IDWriteFontList2 = &IID_IDWriteFontList2_Value;
pub const IDWriteFontList2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontList1.VTable,
        GetFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontList2,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontList2,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontList1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontList2_GetFontSet(self: *const T, fontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontList2.VTable, @ptrCast(self.vtable)).GetFontSet(@as(*const IDWriteFontList2, @ptrCast(self)), fontSet);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontFamily2_Value = Guid.initString("3ed49e77-a398-4261-b9cf-c126c2131ef3");
pub const IID_IDWriteFontFamily2 = &IID_IDWriteFontFamily2_Value;
pub const IDWriteFontFamily2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFamily1.VTable,
        GetMatchingFonts: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily2,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                matchingFonts: ?*?*IDWriteFontList2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFamily2,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                matchingFonts: ?*?*IDWriteFontList2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFamily2,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFamily2,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFamily1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily2_GetMatchingFonts(self: *const T, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, matchingFonts: ?*?*IDWriteFontList2) HRESULT {
                return @as(*const IDWriteFontFamily2.VTable, @ptrCast(self.vtable)).GetMatchingFonts(@as(*const IDWriteFontFamily2, @ptrCast(self)), fontAxisValues, fontAxisValueCount, matchingFonts);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFamily2_GetFontSet(self: *const T, fontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontFamily2.VTable, @ptrCast(self.vtable)).GetFontSet(@as(*const IDWriteFontFamily2, @ptrCast(self)), fontSet);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontCollection2_Value = Guid.initString("514039c6-4617-4064-bf8b-92ea83e506e0");
pub const IID_IDWriteFontCollection2 = &IID_IDWriteFontCollection2_Value;
pub const IDWriteFontCollection2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontCollection1.VTable,
        GetFontFamily: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection2,
                index: u32,
                fontFamily: ?*?*IDWriteFontFamily2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection2,
                index: u32,
                fontFamily: ?*?*IDWriteFontFamily2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetMatchingFonts: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection2,
                familyName: ?[*:0]const u16,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontList: ?*?*IDWriteFontList2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection2,
                familyName: ?[*:0]const u16,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                fontList: ?*?*IDWriteFontList2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontFamilyModel: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_FAMILY_MODEL,
            else => *const fn (
                self: *const IDWriteFontCollection2,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_FAMILY_MODEL,
        },
        GetFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection2,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontCollection2,
                fontSet: ?*?*IDWriteFontSet1,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontCollection1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection2_GetFontFamily(self: *const T, index: u32, fontFamily: ?*?*IDWriteFontFamily2) HRESULT {
                return @as(*const IDWriteFontCollection2.VTable, @ptrCast(self.vtable)).GetFontFamily(@as(*const IDWriteFontCollection2, @ptrCast(self)), index, fontFamily);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection2_GetMatchingFonts(self: *const T, familyName: ?[*:0]const u16, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, fontList: ?*?*IDWriteFontList2) HRESULT {
                return @as(*const IDWriteFontCollection2.VTable, @ptrCast(self.vtable)).GetMatchingFonts(@as(*const IDWriteFontCollection2, @ptrCast(self)), familyName, fontAxisValues, fontAxisValueCount, fontList);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection2_GetFontFamilyModel(self: *const T) DWRITE_FONT_FAMILY_MODEL {
                return @as(*const IDWriteFontCollection2.VTable, @ptrCast(self.vtable)).GetFontFamilyModel(@as(*const IDWriteFontCollection2, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection2_GetFontSet(self: *const T, fontSet: ?*?*IDWriteFontSet1) HRESULT {
                return @as(*const IDWriteFontCollection2.VTable, @ptrCast(self.vtable)).GetFontSet(@as(*const IDWriteFontCollection2, @ptrCast(self)), fontSet);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteTextLayout4_Value = Guid.initString("05a9bf42-223f-4441-b5fb-8263685f55e9");
pub const IID_IDWriteTextLayout4 = &IID_IDWriteTextLayout4_Value;
pub const IDWriteTextLayout4 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextLayout3.VTable,
        SetFontAxisValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout4,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout4,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                textRange: DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontAxisValueCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout4,
                currentPosition: u32,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteTextLayout4,
                currentPosition: u32,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontAxisValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout4,
                currentPosition: u32,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout4,
                currentPosition: u32,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                textRange: ?*DWRITE_TEXT_RANGE,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAutomaticFontAxes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout4,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_AUTOMATIC_FONT_AXES,
            else => *const fn (
                self: *const IDWriteTextLayout4,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_AUTOMATIC_FONT_AXES,
        },
        SetAutomaticFontAxes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextLayout4,
                automaticFontAxes: DWRITE_AUTOMATIC_FONT_AXES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextLayout4,
                automaticFontAxes: DWRITE_AUTOMATIC_FONT_AXES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextLayout3.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout4_SetFontAxisValues(self: *const T, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, textRange: DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout4.VTable, @ptrCast(self.vtable)).SetFontAxisValues(@as(*const IDWriteTextLayout4, @ptrCast(self)), fontAxisValues, fontAxisValueCount, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout4_GetFontAxisValueCount(self: *const T, currentPosition: u32) u32 {
                return @as(*const IDWriteTextLayout4.VTable, @ptrCast(self.vtable)).GetFontAxisValueCount(@as(*const IDWriteTextLayout4, @ptrCast(self)), currentPosition);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout4_GetFontAxisValues(self: *const T, currentPosition: u32, fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, textRange: ?*DWRITE_TEXT_RANGE) HRESULT {
                return @as(*const IDWriteTextLayout4.VTable, @ptrCast(self.vtable)).GetFontAxisValues(@as(*const IDWriteTextLayout4, @ptrCast(self)), currentPosition, fontAxisValues, fontAxisValueCount, textRange);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout4_GetAutomaticFontAxes(self: *const T) DWRITE_AUTOMATIC_FONT_AXES {
                return @as(*const IDWriteTextLayout4.VTable, @ptrCast(self.vtable)).GetAutomaticFontAxes(@as(*const IDWriteTextLayout4, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextLayout4_SetAutomaticFontAxes(self: *const T, automaticFontAxes: DWRITE_AUTOMATIC_FONT_AXES) HRESULT {
                return @as(*const IDWriteTextLayout4.VTable, @ptrCast(self.vtable)).SetAutomaticFontAxes(@as(*const IDWriteTextLayout4, @ptrCast(self)), automaticFontAxes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteTextFormat3_Value = Guid.initString("6d3b5641-e550-430d-a85b-b7bf48a93427");
pub const IID_IDWriteTextFormat3 = &IID_IDWriteTextFormat3_Value;
pub const IDWriteTextFormat3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteTextFormat2.VTable,
        SetFontAxisValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat3,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat3,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFontAxisValueCount: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat3,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteTextFormat3,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontAxisValues: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat3,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat3,
                fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetAutomaticFontAxes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_AUTOMATIC_FONT_AXES,
            else => *const fn (
                self: *const IDWriteTextFormat3,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_AUTOMATIC_FONT_AXES,
        },
        SetAutomaticFontAxes: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteTextFormat3,
                automaticFontAxes: DWRITE_AUTOMATIC_FONT_AXES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteTextFormat3,
                automaticFontAxes: DWRITE_AUTOMATIC_FONT_AXES,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteTextFormat2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat3_SetFontAxisValues(self: *const T, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32) HRESULT {
                return @as(*const IDWriteTextFormat3.VTable, @ptrCast(self.vtable)).SetFontAxisValues(@as(*const IDWriteTextFormat3, @ptrCast(self)), fontAxisValues, fontAxisValueCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat3_GetFontAxisValueCount(self: *const T) u32 {
                return @as(*const IDWriteTextFormat3.VTable, @ptrCast(self.vtable)).GetFontAxisValueCount(@as(*const IDWriteTextFormat3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat3_GetFontAxisValues(self: *const T, fontAxisValues: [*]DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32) HRESULT {
                return @as(*const IDWriteTextFormat3.VTable, @ptrCast(self.vtable)).GetFontAxisValues(@as(*const IDWriteTextFormat3, @ptrCast(self)), fontAxisValues, fontAxisValueCount);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat3_GetAutomaticFontAxes(self: *const T) DWRITE_AUTOMATIC_FONT_AXES {
                return @as(*const IDWriteTextFormat3.VTable, @ptrCast(self.vtable)).GetAutomaticFontAxes(@as(*const IDWriteTextFormat3, @ptrCast(self)));
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteTextFormat3_SetAutomaticFontAxes(self: *const T, automaticFontAxes: DWRITE_AUTOMATIC_FONT_AXES) HRESULT {
                return @as(*const IDWriteTextFormat3.VTable, @ptrCast(self.vtable)).SetAutomaticFontAxes(@as(*const IDWriteTextFormat3, @ptrCast(self)), automaticFontAxes);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontFallback1_Value = Guid.initString("2397599d-dd0d-4681-bd6a-f4f31eaade77");
pub const IID_IDWriteFontFallback1 = &IID_IDWriteFontFallback1_Value;
pub const IDWriteFontFallback1 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFallback.VTable,
        MapCharacters: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFallback1,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                baseFontCollection: ?*IDWriteFontCollection,
                baseFamilyName: ?[*:0]const u16,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                mappedLength: ?*u32,
                scale: ?*f32,
                mappedFontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFallback1,
                analysisSource: ?*IDWriteTextAnalysisSource,
                textPosition: u32,
                textLength: u32,
                baseFontCollection: ?*IDWriteFontCollection,
                baseFamilyName: ?[*:0]const u16,
                fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE,
                fontAxisValueCount: u32,
                mappedLength: ?*u32,
                scale: ?*f32,
                mappedFontFace: ?*?*IDWriteFontFace5,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFallback.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFallback1_MapCharacters(self: *const T, analysisSource: ?*IDWriteTextAnalysisSource, textPosition: u32, textLength: u32, baseFontCollection: ?*IDWriteFontCollection, baseFamilyName: ?[*:0]const u16, fontAxisValues: [*]const DWRITE_FONT_AXIS_VALUE, fontAxisValueCount: u32, mappedLength: ?*u32, scale: ?*f32, mappedFontFace: ?*?*IDWriteFontFace5) HRESULT {
                return @as(*const IDWriteFontFallback1.VTable, @ptrCast(self.vtable)).MapCharacters(@as(*const IDWriteFontFallback1, @ptrCast(self)), analysisSource, textPosition, textLength, baseFontCollection, baseFamilyName, fontAxisValues, fontAxisValueCount, mappedLength, scale, mappedFontFace);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontSet2_Value = Guid.initString("dc7ead19-e54c-43af-b2da-4e2b79ba3f7f");
pub const IID_IDWriteFontSet2 = &IID_IDWriteFontSet2_Value;
pub const IDWriteFontSet2 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontSet1.VTable,
        GetExpirationEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet2,
            ) callconv(@import("std").os.windows.WINAPI) ?HANDLE,
            else => *const fn (
                self: *const IDWriteFontSet2,
            ) callconv(@import("std").os.windows.WINAPI) ?HANDLE,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontSet1.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet2_GetExpirationEvent(self: *const T) ?HANDLE {
                return @as(*const IDWriteFontSet2.VTable, @ptrCast(self.vtable)).GetExpirationEvent(@as(*const IDWriteFontSet2, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontCollection3_Value = Guid.initString("a4d055a6-f9e3-4e25-93b7-9e309f3af8e9");
pub const IID_IDWriteFontCollection3 = &IID_IDWriteFontCollection3_Value;
pub const IDWriteFontCollection3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontCollection2.VTable,
        GetExpirationEvent: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontCollection3,
            ) callconv(@import("std").os.windows.WINAPI) ?HANDLE,
            else => *const fn (
                self: *const IDWriteFontCollection3,
            ) callconv(@import("std").os.windows.WINAPI) ?HANDLE,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontCollection2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontCollection3_GetExpirationEvent(self: *const T) ?HANDLE {
                return @as(*const IDWriteFontCollection3.VTable, @ptrCast(self.vtable)).GetExpirationEvent(@as(*const IDWriteFontCollection3, @ptrCast(self)));
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFactory7_Value = Guid.initString("35d0e0b3-9076-4d2e-a016-a91b568a06b4");
pub const IID_IDWriteFactory7 = &IID_IDWriteFactory7_Value;
pub const IDWriteFactory7 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFactory6.VTable,
        GetSystemFontSet: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory7,
                includeDownloadableFonts: BOOL,
                fontSet: ?*?*IDWriteFontSet2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory7,
                includeDownloadableFonts: BOOL,
                fontSet: ?*?*IDWriteFontSet2,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetSystemFontCollection: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFactory7,
                includeDownloadableFonts: BOOL,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                fontCollection: ?*?*IDWriteFontCollection3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFactory7,
                includeDownloadableFonts: BOOL,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                fontCollection: ?*?*IDWriteFontCollection3,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFactory6.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory7_GetSystemFontSet(self: *const T, includeDownloadableFonts: BOOL, fontSet: ?*?*IDWriteFontSet2) HRESULT {
                return @as(*const IDWriteFactory7.VTable, @ptrCast(self.vtable)).GetSystemFontSet(@as(*const IDWriteFactory7, @ptrCast(self)), includeDownloadableFonts, fontSet);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFactory7_GetSystemFontCollection(self: *const T, includeDownloadableFonts: BOOL, fontFamilyModel: DWRITE_FONT_FAMILY_MODEL, fontCollection: ?*?*IDWriteFontCollection3) HRESULT {
                return @as(*const IDWriteFactory7.VTable, @ptrCast(self.vtable)).GetSystemFontCollection(@as(*const IDWriteFactory7, @ptrCast(self)), includeDownloadableFonts, fontFamilyModel, fontCollection);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

pub const DWRITE_FONT_SOURCE_TYPE = enum(i32) {
    UNKNOWN = 0,
    PER_MACHINE = 1,
    PER_USER = 2,
    APPX_PACKAGE = 3,
    REMOTE_FONT_PROVIDER = 4,
};
pub const DWRITE_FONT_SOURCE_TYPE_UNKNOWN = DWRITE_FONT_SOURCE_TYPE.UNKNOWN;
pub const DWRITE_FONT_SOURCE_TYPE_PER_MACHINE = DWRITE_FONT_SOURCE_TYPE.PER_MACHINE;
pub const DWRITE_FONT_SOURCE_TYPE_PER_USER = DWRITE_FONT_SOURCE_TYPE.PER_USER;
pub const DWRITE_FONT_SOURCE_TYPE_APPX_PACKAGE = DWRITE_FONT_SOURCE_TYPE.APPX_PACKAGE;
pub const DWRITE_FONT_SOURCE_TYPE_REMOTE_FONT_PROVIDER = DWRITE_FONT_SOURCE_TYPE.REMOTE_FONT_PROVIDER;

const IID_IDWriteFontSet3_Value = Guid.initString("7c073ef2-a7f4-4045-8c32-8ab8ae640f90");
pub const IID_IDWriteFontSet3 = &IID_IDWriteFontSet3_Value;
pub const IDWriteFontSet3 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontSet2.VTable,
        GetFontSourceType: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet3,
                fontIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SOURCE_TYPE,
            else => *const fn (
                self: *const IDWriteFontSet3,
                fontIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) DWRITE_FONT_SOURCE_TYPE,
        },
        GetFontSourceNameLength: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet3,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) u32,
            else => *const fn (
                self: *const IDWriteFontSet3,
                listIndex: u32,
            ) callconv(@import("std").os.windows.WINAPI) u32,
        },
        GetFontSourceName: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontSet3,
                listIndex: u32,
                stringBuffer: [*:0]u16,
                stringBufferSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontSet3,
                listIndex: u32,
                stringBuffer: [*:0]u16,
                stringBufferSize: u32,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontSet2.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet3_GetFontSourceType(self: *const T, fontIndex: u32) DWRITE_FONT_SOURCE_TYPE {
                return @as(*const IDWriteFontSet3.VTable, @ptrCast(self.vtable)).GetFontSourceType(@as(*const IDWriteFontSet3, @ptrCast(self)), fontIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet3_GetFontSourceNameLength(self: *const T, listIndex: u32) u32 {
                return @as(*const IDWriteFontSet3.VTable, @ptrCast(self.vtable)).GetFontSourceNameLength(@as(*const IDWriteFontSet3, @ptrCast(self)), listIndex);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontSet3_GetFontSourceName(self: *const T, listIndex: u32, stringBuffer: [*:0]u16, stringBufferSize: u32) HRESULT {
                return @as(*const IDWriteFontSet3.VTable, @ptrCast(self.vtable)).GetFontSourceName(@as(*const IDWriteFontSet3, @ptrCast(self)), listIndex, stringBuffer, stringBufferSize);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

const IID_IDWriteFontFace6_Value = Guid.initString("c4b1fe1b-6e84-47d5-b54c-a597981b06ad");
pub const IID_IDWriteFontFace6 = &IID_IDWriteFontFace6_Value;
pub const IDWriteFontFace6 = extern struct {
    pub const VTable = extern struct {
        base: IDWriteFontFace5.VTable,
        GetFamilyNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace6,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace6,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
        GetFaceNames: switch (@import("builtin").zig_backend) {
            .stage1 => fn (
                self: *const IDWriteFontFace6,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
            else => *const fn (
                self: *const IDWriteFontFace6,
                fontFamilyModel: DWRITE_FONT_FAMILY_MODEL,
                names: ?*?*IDWriteLocalizedStrings,
            ) callconv(@import("std").os.windows.WINAPI) HRESULT,
        },
    };
    vtable: *const VTable,
    pub fn MethodMixin(comptime T: type) type {
        return struct {
            pub usingnamespace IDWriteFontFace5.MethodMixin(T);
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace6_GetFamilyNames(self: *const T, fontFamilyModel: DWRITE_FONT_FAMILY_MODEL, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontFace6.VTable, @ptrCast(self.vtable)).GetFamilyNames(@as(*const IDWriteFontFace6, @ptrCast(self)), fontFamilyModel, names);
            }
            // NOTE: method is namespaced with interface name to avoid conflicts for now
            pub inline fn IDWriteFontFace6_GetFaceNames(self: *const T, fontFamilyModel: DWRITE_FONT_FAMILY_MODEL, names: ?*?*IDWriteLocalizedStrings) HRESULT {
                return @as(*const IDWriteFontFace6.VTable, @ptrCast(self.vtable)).GetFaceNames(@as(*const IDWriteFontFace6, @ptrCast(self)), fontFamilyModel, names);
            }
        };
    }
    pub usingnamespace MethodMixin(@This());
};

//--------------------------------------------------------------------------------
// Section: Functions (1)
//--------------------------------------------------------------------------------
// TODO: this type is limited to platform 'windows6.1'
pub extern "dwrite" fn DWriteCreateFactory(
    factoryType: DWRITE_FACTORY_TYPE,
    iid: ?*const Guid,
    factory: ?*?*IUnknown,
) callconv(@import("std").os.windows.WINAPI) HRESULT;

//--------------------------------------------------------------------------------
// Section: Unicode Aliases (0)
//--------------------------------------------------------------------------------
const thismodule = @This();
pub usingnamespace switch (@import("../zig.zig").unicode_mode) {
    .ansi => struct {},
    .wide => struct {},
    .unspecified => if (@import("builtin").is_test) struct {} else struct {},
};
//--------------------------------------------------------------------------------
// Section: Imports (18)
//--------------------------------------------------------------------------------
const Guid = @import("../zig.zig").Guid;
const BOOL = @import("../foundation.zig").BOOL;
const D2D_POINT_2F = @import("../graphics/direct2d/common.zig").D2D_POINT_2F;
const D2D_SIZE_U = @import("../graphics/direct2d/common.zig").D2D_SIZE_U;
const FILETIME = @import("../foundation.zig").FILETIME;
const FONTSIGNATURE = @import("../globalization.zig").FONTSIGNATURE;
const HANDLE = @import("../foundation.zig").HANDLE;
const HDC = @import("../graphics/gdi.zig").HDC;
const HMONITOR = @import("../graphics/gdi.zig").HMONITOR;
const HRESULT = @import("../foundation.zig").HRESULT;
const ID2D1SimplifiedGeometrySink = @import("../graphics/direct2d/common.zig").ID2D1SimplifiedGeometrySink;
const IUnknown = @import("../system/com.zig").IUnknown;
const LOGFONTA = @import("../graphics/gdi.zig").LOGFONTA;
const LOGFONTW = @import("../graphics/gdi.zig").LOGFONTW;
const POINT = @import("../foundation.zig").POINT;
const PWSTR = @import("../foundation.zig").PWSTR;
const RECT = @import("../foundation.zig").RECT;
const SIZE = @import("../foundation.zig").SIZE;

test {
    @setEvalBranchQuota(comptime @import("std").meta.declarations(@This()).len * 3);

    // reference all the pub declarations
    if (!@import("builtin").is_test) return;
    inline for (comptime @import("std").meta.declarations(@This())) |decl| {
        if (decl.is_pub) {
            _ = @field(@This(), decl.name);
        }
    }
}
