mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-29 23:01:49 -07:00
move font provider directwrite backend to using martins' auto-generated dwrite c declarations, get it almost off C++ entirely
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Globals
|
||||
|
||||
@@ -169,47 +172,47 @@ fp_init(void)
|
||||
}
|
||||
|
||||
//- rjf: make dwrite factory
|
||||
error = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, __uuidof(IDWriteFactory), (IUnknown **)&fp_dwrite_state->factory);
|
||||
error = DWriteCreateFactory(DWRITE_FACTORY_TYPE_SHARED, &IID_IDWriteFactory, (void **)&fp_dwrite_state->factory);
|
||||
|
||||
//- rjf: register static data font "loader" interface
|
||||
error = fp_dwrite_state->factory->RegisterFontFileLoader((IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader);
|
||||
error = IDWriteFactory_RegisterFontFileLoader(fp_dwrite_state->factory, (IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader);
|
||||
|
||||
//- rjf: make base rendering params
|
||||
error = fp_dwrite_state->factory->CreateRenderingParams(&fp_dwrite_state->base_rendering_params);
|
||||
error = IDWriteFactory_CreateRenderingParams(fp_dwrite_state->factory, &fp_dwrite_state->base_rendering_params);
|
||||
|
||||
//- rjf: make sharp rendering params
|
||||
{
|
||||
FLOAT gamma = 1.f;
|
||||
FLOAT enhanced_contrast = fp_dwrite_state->base_rendering_params->GetEnhancedContrast();
|
||||
FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params);
|
||||
// FLOAT clear_type_level = fp_dwrite_state->base_rendering_params->GetClearTypeLevel();
|
||||
error = fp_dwrite_state->factory->CreateCustomRenderingParams(gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_GDI_NATURAL,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Sharp]);
|
||||
error = IDWriteFactory_CreateCustomRenderingParams(fp_dwrite_state->factory, gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_GDI_NATURAL,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Sharp]);
|
||||
}
|
||||
|
||||
//- rjf: make smooth rendering params
|
||||
{
|
||||
FLOAT gamma = 1.f;
|
||||
FLOAT enhanced_contrast = fp_dwrite_state->base_rendering_params->GetEnhancedContrast();
|
||||
FLOAT enhanced_contrast = IDWriteRenderingParams_GetEnhancedContrast(fp_dwrite_state->base_rendering_params);
|
||||
// FLOAT clear_type_level = fp_dwrite_state->base_rendering_params->GetClearTypeLevel();
|
||||
error = fp_dwrite_state->factory->CreateCustomRenderingParams(gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Smooth]);
|
||||
error = IDWriteFactory_CreateCustomRenderingParams(fp_dwrite_state->factory, gamma,
|
||||
enhanced_contrast,
|
||||
2.f,
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT,
|
||||
DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC,
|
||||
&fp_dwrite_state->rendering_params[FP_RasterMode_Smooth]);
|
||||
}
|
||||
|
||||
//- rjf: make dwrite gdi interop
|
||||
error = fp_dwrite_state->factory->GetGdiInterop(&fp_dwrite_state->gdi_interop);
|
||||
error = IDWriteFactory_GetGdiInterop(fp_dwrite_state->factory, &fp_dwrite_state->gdi_interop);
|
||||
|
||||
//- rjf: build render target for rasterization
|
||||
fp_dwrite_state->bitmap_render_target_dim = v2s32(2048, 256);
|
||||
error = fp_dwrite_state->gdi_interop->CreateBitmapRenderTarget(0, fp_dwrite_state->bitmap_render_target_dim.x, fp_dwrite_state->bitmap_render_target_dim.y, &fp_dwrite_state->bitmap_render_target);
|
||||
fp_dwrite_state->bitmap_render_target->SetPixelsPerDip(1.0);
|
||||
error = IDWriteGdiInterop_CreateBitmapRenderTarget(fp_dwrite_state->gdi_interop, 0, fp_dwrite_state->bitmap_render_target_dim.x, fp_dwrite_state->bitmap_render_target_dim.y, &fp_dwrite_state->bitmap_render_target);
|
||||
IDWriteBitmapRenderTarget_SetPixelsPerDip(fp_dwrite_state->bitmap_render_target, 1.0);
|
||||
ProfEnd();
|
||||
}
|
||||
|
||||
@@ -223,10 +226,10 @@ fp_font_open(String8 path)
|
||||
HRESULT error = 0;
|
||||
|
||||
//- rjf: open font file reference
|
||||
error = fp_dwrite_state->factory->CreateFontFileReference((WCHAR *)path16.str, 0, &font.file);
|
||||
error = IDWriteFactory_CreateFontFileReference(fp_dwrite_state->factory, (WCHAR *)path16.str, 0, &font.file);
|
||||
|
||||
//- rjf: open font face
|
||||
error = fp_dwrite_state->factory->CreateFontFace(DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
error = IDWriteFactory_CreateFontFace(fp_dwrite_state->factory, DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
|
||||
//- rjf: handlify & return
|
||||
FP_Handle handle = fp_dwrite_handle_from_font(font);
|
||||
@@ -244,10 +247,10 @@ fp_font_open_from_static_data_string(String8 *data_ptr)
|
||||
HRESULT error = 0;
|
||||
|
||||
//- rjf: open font file reference
|
||||
error = fp_dwrite_state->factory->CreateCustomFontFileReference(&data_ptr, sizeof(String8 *), (IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader, &font.file);
|
||||
error = IDWriteFactory_CreateCustomFontFileReference(fp_dwrite_state->factory, &data_ptr, sizeof(String8 *), (IDWriteFontFileLoader *)&fp_dwrite_static_data_font_file_loader, &font.file);
|
||||
|
||||
//- rjf: open font face
|
||||
error = fp_dwrite_state->factory->CreateFontFace(DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
error = IDWriteFactory_CreateFontFace(fp_dwrite_state->factory, DWRITE_FONT_FACE_TYPE_TRUETYPE, 1, &font.file, 0, DWRITE_FONT_SIMULATIONS_NONE, &font.face);
|
||||
|
||||
//- rjf: handlify & return
|
||||
FP_Handle handle = fp_dwrite_handle_from_font(font);
|
||||
@@ -263,11 +266,11 @@ fp_font_close(FP_Handle handle)
|
||||
FP_DWrite_Font font = fp_dwrite_font_from_handle(handle);
|
||||
if(font.face != 0)
|
||||
{
|
||||
font.face->Release();
|
||||
IDWriteFontFace_Release(font.face);
|
||||
}
|
||||
if(font.file != 0)
|
||||
{
|
||||
font.file->Release();
|
||||
IDWriteFontFile_Release(font.file);
|
||||
}
|
||||
ProfEnd();
|
||||
}
|
||||
@@ -280,7 +283,7 @@ fp_metrics_from_font(FP_Handle handle)
|
||||
DWRITE_FONT_METRICS metrics = {0};
|
||||
if(font.face != 0)
|
||||
{
|
||||
font.face->GetMetrics(&metrics);
|
||||
IDWriteFontFace_GetMetrics(font.face, &metrics);
|
||||
}
|
||||
FP_Metrics result = {0};
|
||||
{
|
||||
@@ -309,7 +312,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
DWRITE_FONT_METRICS font_metrics = {0};
|
||||
if(font.face != 0)
|
||||
{
|
||||
font.face->GetMetrics(&font_metrics);
|
||||
IDWriteFontFace_GetMetrics(font.face, &font_metrics);
|
||||
}
|
||||
F32 design_units_per_em = (F32)font_metrics.designUnitsPerEm;
|
||||
|
||||
@@ -317,7 +320,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
U16 *glyph_indices = push_array_no_zero(scratch.arena, U16, string32.size);
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = font.face->GetGlyphIndices(string32.str, string32.size, glyph_indices);
|
||||
error = IDWriteFontFace_GetGlyphIndices(font.face, string32.str, string32.size, glyph_indices);
|
||||
}
|
||||
|
||||
//- rjf: get metrics info
|
||||
@@ -325,7 +328,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
DWRITE_GLYPH_METRICS *glyphs_metrics = push_array_no_zero(scratch.arena, DWRITE_GLYPH_METRICS, glyphs_count);
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = font.face->GetGdiCompatibleGlyphMetrics((96.f/72.f)*size, 1.f, 0, 1, glyph_indices, glyphs_count, glyphs_metrics, 0);
|
||||
error = IDWriteFontFace_GetGdiCompatibleGlyphMetrics(font.face, (96.f/72.f)*size, 1.f, 0, 1, glyph_indices, glyphs_count, glyphs_metrics, 0);
|
||||
}
|
||||
|
||||
//- rjf: derive info from metrics
|
||||
@@ -352,15 +355,15 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
IDWriteBitmapRenderTarget *render_target = 0;
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = fp_dwrite_state->gdi_interop->CreateBitmapRenderTarget(0, atlas_dim.x, atlas_dim.y, &render_target);
|
||||
render_target->SetPixelsPerDip(1.0);
|
||||
error = IDWriteGdiInterop_CreateBitmapRenderTarget(fp_dwrite_state->gdi_interop, 0, atlas_dim.x, atlas_dim.y, &render_target);
|
||||
IDWriteBitmapRenderTarget_SetPixelsPerDip(render_target, 1.f);
|
||||
}
|
||||
|
||||
//- rjf: get bitmap & clear
|
||||
HDC dc = 0;
|
||||
if(font.face != 0)
|
||||
{
|
||||
dc = render_target->GetMemoryDC();
|
||||
dc = IDWriteBitmapRenderTarget_GetMemoryDC(render_target);
|
||||
HGDIOBJ original = SelectObject(dc, GetStockObject(DC_PEN));
|
||||
SetDCPenColor(dc, bg_color);
|
||||
SelectObject(dc, GetStockObject(DC_BRUSH));
|
||||
@@ -388,12 +391,12 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
RECT bounding_box = {0};
|
||||
if(font.face != 0)
|
||||
{
|
||||
error = render_target->DrawGlyphRun(draw_p.x, draw_p.y,
|
||||
DWRITE_MEASURING_MODE_NATURAL,
|
||||
&glyph_run,
|
||||
fp_dwrite_state->rendering_params[mode],
|
||||
fg_color,
|
||||
&bounding_box);
|
||||
error = IDWriteBitmapRenderTarget_DrawGlyphRun(render_target, draw_p.x, draw_p.y,
|
||||
DWRITE_MEASURING_MODE_NATURAL,
|
||||
&glyph_run,
|
||||
fp_dwrite_state->rendering_params[mode],
|
||||
fg_color,
|
||||
&bounding_box);
|
||||
}
|
||||
|
||||
//- rjf: get bitmap
|
||||
@@ -446,7 +449,7 @@ fp_raster(Arena *arena, FP_Handle font_handle, F32 size, FP_RasterMode mode, Str
|
||||
result.atlas_dim = v2s16(0, 0);
|
||||
}
|
||||
}
|
||||
render_target->Release();
|
||||
IDWriteBitmapRenderTarget_Release(render_target);
|
||||
}
|
||||
scratch_end(scratch);
|
||||
ProfEnd();
|
||||
|
||||
@@ -1,13 +1,195 @@
|
||||
/* date = November 2nd 2022 11:31 am */
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#ifndef FONT_PROVIDER_DWRITE_H
|
||||
#define FONT_PROVIDER_DWRITE_H
|
||||
|
||||
#include <dwrite.h>
|
||||
|
||||
#pragma comment(lib, "gdi32.lib")
|
||||
#pragma comment(lib, "dwrite.lib")
|
||||
|
||||
// #include <dwrite.h>
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: (C) DirectWrite Definitions
|
||||
//
|
||||
// (courtesy of mmozeiko, Martins Mozeiko, https://github.com/mmozeiko/c_d2d_dwrite)
|
||||
//
|
||||
// This is free and unencumbered software released into the public domain.
|
||||
//
|
||||
// Anyone is free to copy, modify, publish, use, compile, sell, or
|
||||
// distribute this software, either in source code form or as a compiled
|
||||
// binary, for any purpose, commercial or non-commercial, and by any
|
||||
// means.
|
||||
//
|
||||
// In jurisdictions that recognize copyright laws, the author or authors
|
||||
// of this software dedicate any and all copyright interest in the
|
||||
// software to the public domain. We make this dedication for the benefit
|
||||
// of the public at large and to the detriment of our heirs and
|
||||
// successors. We intend this dedication to be an overt act of
|
||||
// relinquishment in perpetuity of all present and future rights to this
|
||||
// software under copyright law.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
// OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
// For more information, please refer to <https://unlicense.org>
|
||||
|
||||
#include <combaseapi.h>
|
||||
#include <dcommon.h>
|
||||
#include <initguid.h>
|
||||
|
||||
//- rjf: enums
|
||||
|
||||
typedef enum DWRITE_FACTORY_TYPE {
|
||||
DWRITE_FACTORY_TYPE_SHARED = 0,
|
||||
DWRITE_FACTORY_TYPE_ISOLATED = 1,
|
||||
} DWRITE_FACTORY_TYPE;
|
||||
|
||||
typedef enum DWRITE_PIXEL_GEOMETRY {
|
||||
DWRITE_PIXEL_GEOMETRY_FLAT = 0,
|
||||
DWRITE_PIXEL_GEOMETRY_RGB = 1,
|
||||
DWRITE_PIXEL_GEOMETRY_BGR = 2,
|
||||
} DWRITE_PIXEL_GEOMETRY;
|
||||
|
||||
typedef enum DWRITE_RENDERING_MODE {
|
||||
DWRITE_RENDERING_MODE_DEFAULT = 0,
|
||||
DWRITE_RENDERING_MODE_ALIASED = 1,
|
||||
DWRITE_RENDERING_MODE_GDI_CLASSIC = 2,
|
||||
DWRITE_RENDERING_MODE_GDI_NATURAL = 3,
|
||||
DWRITE_RENDERING_MODE_NATURAL = 4,
|
||||
DWRITE_RENDERING_MODE_NATURAL_SYMMETRIC = 5,
|
||||
DWRITE_RENDERING_MODE_OUTLINE = 6,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_GDI_CLASSIC = 2,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_GDI_NATURAL = 3,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL = 4,
|
||||
DWRITE_RENDERING_MODE_CLEARTYPE_NATURAL_SYMMETRIC = 5,
|
||||
} DWRITE_RENDERING_MODE;
|
||||
|
||||
typedef enum DWRITE_FONT_SIMULATIONS {
|
||||
DWRITE_FONT_SIMULATIONS_NONE = 0,
|
||||
DWRITE_FONT_SIMULATIONS_BOLD = 1,
|
||||
DWRITE_FONT_SIMULATIONS_OBLIQUE = 2,
|
||||
} DWRITE_FONT_SIMULATIONS;
|
||||
|
||||
typedef enum DWRITE_FONT_FACE_TYPE {
|
||||
DWRITE_FONT_FACE_TYPE_CFF = 0,
|
||||
DWRITE_FONT_FACE_TYPE_TRUETYPE = 1,
|
||||
DWRITE_FONT_FACE_TYPE_OPENTYPE_COLLECTION = 2,
|
||||
DWRITE_FONT_FACE_TYPE_TYPE1 = 3,
|
||||
DWRITE_FONT_FACE_TYPE_VECTOR = 4,
|
||||
DWRITE_FONT_FACE_TYPE_BITMAP = 5,
|
||||
DWRITE_FONT_FACE_TYPE_UNKNOWN = 6,
|
||||
DWRITE_FONT_FACE_TYPE_RAW_CFF = 7,
|
||||
DWRITE_FONT_FACE_TYPE_TRUETYPE_COLLECTION = 2,
|
||||
} DWRITE_FONT_FACE_TYPE;
|
||||
|
||||
//- rjf: interfaces
|
||||
|
||||
typedef struct IDWriteFactory { struct { void* tbl[]; }* v; } IDWriteFactory;
|
||||
typedef struct IDWriteFactory1 { struct { void* tbl[]; }* v; } IDWriteFactory1;
|
||||
typedef struct IDWriteFactory2 { struct { void* tbl[]; }* v; } IDWriteFactory2;
|
||||
typedef struct IDWriteRenderingParams { struct { void* tbl[]; }* v; } IDWriteRenderingParams;
|
||||
typedef struct IDWriteRenderingParams1 { struct { void* tbl[]; }* v; } IDWriteRenderingParams1;
|
||||
typedef struct IDWriteRenderingParams2 { struct { void* tbl[]; }* v; } IDWriteRenderingParams2;
|
||||
typedef struct IDWriteFontFileLoader { struct { void* tbl[]; }* v; } IDWriteFontFileLoader;
|
||||
typedef struct IDWriteFontFileStream { struct { void* tbl[]; }* v; } IDWriteFontFileStream;
|
||||
typedef struct IDWriteFontFile { struct { void* tbl[]; }* v; } IDWriteFontFile;
|
||||
typedef struct IDWriteFontFace { struct { void* tbl[]; }* v; } IDWriteFontFace;
|
||||
typedef struct IDWriteFontFace1 { struct { void* tbl[]; }* v; } IDWriteFontFace1;
|
||||
typedef struct IDWriteFontFace2 { struct { void* tbl[]; }* v; } IDWriteFontFace2;
|
||||
typedef struct IDWriteGdiInterop { struct { void* tbl[]; }* v; } IDWriteGdiInterop;
|
||||
typedef struct IDWriteBitmapRenderTarget { struct { void* tbl[]; }* v; } IDWriteBitmapRenderTarget;
|
||||
typedef struct IDWriteBitmapRenderTarget1 { struct { void* tbl[]; }* v; } IDWriteBitmapRenderTarget1;
|
||||
|
||||
//- rjf: structs
|
||||
|
||||
typedef struct DWRITE_GLYPH_METRICS {
|
||||
INT32 leftSideBearing;
|
||||
UINT32 advanceWidth;
|
||||
INT32 rightSideBearing;
|
||||
INT32 topSideBearing;
|
||||
UINT32 advanceHeight;
|
||||
INT32 bottomSideBearing;
|
||||
INT32 verticalOriginY;
|
||||
} DWRITE_GLYPH_METRICS;
|
||||
|
||||
typedef struct DWRITE_GLYPH_OFFSET {
|
||||
FLOAT advanceOffset;
|
||||
FLOAT ascenderOffset;
|
||||
} DWRITE_GLYPH_OFFSET;
|
||||
|
||||
typedef struct DWRITE_GLYPH_RUN {
|
||||
IDWriteFontFace* fontFace;
|
||||
FLOAT fontEmSize;
|
||||
UINT32 glyphCount;
|
||||
UINT16* glyphIndices;
|
||||
FLOAT* glyphAdvances;
|
||||
DWRITE_GLYPH_OFFSET* glyphOffsets;
|
||||
BOOL isSideways;
|
||||
UINT32 bidiLevel;
|
||||
} DWRITE_GLYPH_RUN;
|
||||
|
||||
typedef struct DWRITE_FONT_METRICS {
|
||||
UINT16 designUnitsPerEm;
|
||||
UINT16 ascent;
|
||||
UINT16 descent;
|
||||
INT16 lineGap;
|
||||
UINT16 capHeight;
|
||||
UINT16 xHeight;
|
||||
INT16 underlinePosition;
|
||||
UINT16 underlineThickness;
|
||||
INT16 strikethroughPosition;
|
||||
UINT16 strikethroughThickness;
|
||||
} DWRITE_FONT_METRICS;
|
||||
|
||||
typedef struct DWRITE_MATRIX {
|
||||
FLOAT m11;
|
||||
FLOAT m12;
|
||||
FLOAT m21;
|
||||
FLOAT m22;
|
||||
FLOAT dx;
|
||||
FLOAT dy;
|
||||
} DWRITE_MATRIX;
|
||||
|
||||
//- rjf: GUIDs
|
||||
|
||||
DEFINE_GUID(IID_IDWriteFactory, 0xb859ee5a, 0xd838, 0x4b5b, 0xa2, 0xe8, 0x1a, 0xdc, 0x7d, 0x93, 0xdb, 0x48);
|
||||
DEFINE_GUID(IID_IDWriteFactory1, 0x30572f99, 0xdac6, 0x41db, 0xa1, 0x6e, 0x04, 0x86, 0x30, 0x7e, 0x60, 0x6a);
|
||||
DEFINE_GUID(IID_IDWriteFactory2, 0x0439fc60, 0xca44, 0x4994, 0x8d, 0xee, 0x3a, 0x9a, 0xf7, 0xb7, 0x32, 0xec);
|
||||
|
||||
//- rjf: functions
|
||||
|
||||
EXTERN_C HRESULT DECLSPEC_IMPORT WINAPI DWriteCreateFactory (DWRITE_FACTORY_TYPE factoryType, const GUID* iid, void** factory) WIN_NOEXCEPT;
|
||||
|
||||
//- rjf: methods
|
||||
|
||||
static inline HRESULT IDWriteFactory_RegisterFontFileLoader (IDWriteFactory* this_, IDWriteFontFileLoader* fontFileLoader) { return ((HRESULT (WINAPI*)(IDWriteFactory*, IDWriteFontFileLoader*))this_->v->tbl[13])(this_, fontFileLoader); }
|
||||
static inline HRESULT IDWriteFactory_CreateRenderingParams (IDWriteFactory* this_, IDWriteRenderingParams** renderingParams) { return ((HRESULT (WINAPI*)(IDWriteFactory*, IDWriteRenderingParams**))this_->v->tbl[10])(this_, renderingParams); }
|
||||
static inline HRESULT IDWriteFactory_CreateCustomRenderingParams (IDWriteFactory* this_, FLOAT gamma, FLOAT enhancedContrast, FLOAT clearTypeLevel, DWRITE_PIXEL_GEOMETRY pixelGeometry, DWRITE_RENDERING_MODE renderingMode, IDWriteRenderingParams** renderingParams) { return ((HRESULT (WINAPI*)(IDWriteFactory*, FLOAT, FLOAT, FLOAT, DWRITE_PIXEL_GEOMETRY, DWRITE_RENDERING_MODE, IDWriteRenderingParams**))this_->v->tbl[12])(this_, gamma, enhancedContrast, clearTypeLevel, pixelGeometry, renderingMode, renderingParams); }
|
||||
static inline HRESULT IDWriteFactory_GetGdiInterop (IDWriteFactory* this_, IDWriteGdiInterop** gdiInterop) { return ((HRESULT (WINAPI*)(IDWriteFactory*, IDWriteGdiInterop**))this_->v->tbl[17])(this_, gdiInterop); }
|
||||
static inline HRESULT IDWriteFactory_CreateCustomFontFileReference (IDWriteFactory* this_, const void* fontFileReferenceKey, UINT32 fontFileReferenceKeySize, IDWriteFontFileLoader* fontFileLoader, IDWriteFontFile** fontFile) { return ((HRESULT (WINAPI*)(IDWriteFactory*, const void*, UINT32, IDWriteFontFileLoader*, IDWriteFontFile**))this_->v->tbl[8])(this_, fontFileReferenceKey, fontFileReferenceKeySize, fontFileLoader, fontFile); }
|
||||
static inline FLOAT IDWriteRenderingParams_GetEnhancedContrast (IDWriteRenderingParams* this__) { return ((FLOAT (WINAPI*)(IDWriteRenderingParams*))this__->v->tbl[4])(this__); }
|
||||
static inline HRESULT IDWriteGdiInterop_CreateBitmapRenderTarget (IDWriteGdiInterop* this_, HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget** renderTarget) { return ((HRESULT (WINAPI*)(IDWriteGdiInterop*, HDC, UINT32, UINT32, IDWriteBitmapRenderTarget**))this_->v->tbl[7])(this_, hdc, width, height, renderTarget); }
|
||||
static inline HRESULT IDWriteBitmapRenderTarget_SetPixelsPerDip (IDWriteBitmapRenderTarget* this_, FLOAT pixelsPerDip) { return ((HRESULT (WINAPI*)(IDWriteBitmapRenderTarget*, FLOAT))this_->v->tbl[6])(this_, pixelsPerDip); }
|
||||
static inline HDC IDWriteBitmapRenderTarget_GetMemoryDC (IDWriteBitmapRenderTarget* this_) { return ((HDC (WINAPI*)(IDWriteBitmapRenderTarget*))this_->v->tbl[4])(this_); }
|
||||
static inline HRESULT IDWriteBitmapRenderTarget_DrawGlyphRun (IDWriteBitmapRenderTarget* this_, FLOAT baselineOriginX, FLOAT baselineOriginY, DWRITE_MEASURING_MODE measuringMode, const DWRITE_GLYPH_RUN* glyphRun, IDWriteRenderingParams* renderingParams, COLORREF textColor, RECT* blackBoxRect) { return ((HRESULT (WINAPI*)(IDWriteBitmapRenderTarget*, FLOAT, FLOAT, DWRITE_MEASURING_MODE, const DWRITE_GLYPH_RUN*, IDWriteRenderingParams*, COLORREF, RECT*))this_->v->tbl[3])(this_, baselineOriginX, baselineOriginY, measuringMode, glyphRun, renderingParams, textColor, blackBoxRect); }
|
||||
static inline HRESULT IDWriteFactory_CreateFontFileReference (IDWriteFactory* this_, const WCHAR* filePath, const FILETIME* lastWriteTime, IDWriteFontFile** fontFile) { return ((HRESULT (WINAPI*)(IDWriteFactory*, const WCHAR*, const FILETIME*, IDWriteFontFile**))this_->v->tbl[7])(this_, filePath, lastWriteTime, fontFile); }
|
||||
static inline HRESULT IDWriteFactory_CreateFontFace (IDWriteFactory* this_, DWRITE_FONT_FACE_TYPE fontFaceType, UINT32 numberOfFiles, IDWriteFontFile** fontFiles, UINT32 faceIndex, DWRITE_FONT_SIMULATIONS fontFaceSimulationFlags, IDWriteFontFace** fontFace) { return ((HRESULT (WINAPI*)(IDWriteFactory*, DWRITE_FONT_FACE_TYPE, UINT32, IDWriteFontFile**, UINT32, DWRITE_FONT_SIMULATIONS, IDWriteFontFace**))this_->v->tbl[9])(this_, fontFaceType, numberOfFiles, fontFiles, faceIndex, fontFaceSimulationFlags, fontFace); }
|
||||
static inline UINT32 IDWriteFontFace_Release (IDWriteFontFace* this_) { return ((UINT32 (WINAPI*)(IDWriteFontFace*))this_->v->tbl[2])(this_); }
|
||||
static inline void IDWriteFontFace_GetMetrics (IDWriteFontFace* this_, DWRITE_FONT_METRICS* fontFaceMetrics) { ((void (WINAPI*)(IDWriteFontFace*, DWRITE_FONT_METRICS*))this_->v->tbl[8])(this_, fontFaceMetrics); }
|
||||
static inline UINT32 IDWriteFontFile_Release (IDWriteFontFile* this_) { return ((UINT32 (WINAPI*)(IDWriteFontFile*))this_->v->tbl[2])(this_); }
|
||||
static inline HRESULT IDWriteFontFace_GetGlyphIndices (IDWriteFontFace* this_, const UINT32* codePoints, UINT32 codePointCount, UINT16* glyphIndices) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, const UINT32*, UINT32, UINT16*))this_->v->tbl[11])(this_, codePoints, codePointCount, glyphIndices); }
|
||||
static inline HRESULT IDWriteFontFace_GetGdiCompatibleGlyphMetrics (IDWriteFontFace* this_, FLOAT emSize, FLOAT pixelsPerDip, const DWRITE_MATRIX* transform, BOOL useGdiNatural, const UINT16* glyphIndices, UINT32 glyphCount, DWRITE_GLYPH_METRICS* glyphMetrics, BOOL isSideways) { return ((HRESULT (WINAPI*)(IDWriteFontFace*, FLOAT, FLOAT, const DWRITE_MATRIX*, BOOL, const UINT16*, UINT32, DWRITE_GLYPH_METRICS*, BOOL))this_->v->tbl[17])(this_, emSize, pixelsPerDip, transform, useGdiNatural, glyphIndices, glyphCount, glyphMetrics, isSideways); }
|
||||
static inline UINT32 IDWriteBitmapRenderTarget_Release (IDWriteBitmapRenderTarget* this_) { return ((UINT32 (WINAPI*)(IDWriteBitmapRenderTarget*))this_->v->tbl[2])(this_); }
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Font Provider Implementation Types
|
||||
|
||||
//- rjf: font file loader interface types
|
||||
|
||||
struct FP_DWrite_FontFileLoaderVTable
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
#define BUILD_SUPPLEMENTARY_UNIT 1
|
||||
|
||||
#include "base/base_inc.h"
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
// Copyright (c) 2024 Epic Games Tools
|
||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Build Options
|
||||
|
||||
|
||||
Reference in New Issue
Block a user