ReactOS 0.4.17-dev-934-g091855f
gdiinterop.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "dwrite_private.h"
#include "wine/debug.h"
Include dependency graph for gdiinterop.c:

Go to the source code of this file.

Classes

struct  dib_data
 
struct  rendertarget
 
struct  gdiinterop
 
struct  memresource_stream
 
struct  font_realization_info
 
struct  font_fileinfo
 

Macros

#define COBJMACROS
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (dwrite)
 
static int get_dib_stride (int width, int bpp)
 
static HRESULT create_target_dibsection (struct rendertarget *target, UINT32 width, UINT32 height)
 
static struct rendertarget * impl_from_IDWriteBitmapRenderTarget1 (IDWriteBitmapRenderTarget1 *iface)
 
static struct rendertarget * impl_from_ID2D1SimplifiedGeometrySink (ID2D1SimplifiedGeometrySink *iface)
 
static struct gdiinterop * impl_from_IDWriteGdiInterop1 (IDWriteGdiInterop1 *iface)
 
static struct memresource_stream * impl_from_IDWriteFontFileStream (IDWriteFontFileStream *iface)
 
static HRESULT WINAPI rendertarget_sink_QueryInterface (ID2D1SimplifiedGeometrySink *iface, REFIID riid, void **obj)
 
static ULONG WINAPI rendertarget_sink_AddRef (ID2D1SimplifiedGeometrySink *iface)
 
static ULONG WINAPI rendertarget_sink_Release (ID2D1SimplifiedGeometrySink *iface)
 
static void WINAPI rendertarget_sink_SetFillMode (ID2D1SimplifiedGeometrySink *iface, D2D1_FILL_MODE mode)
 
static void WINAPI rendertarget_sink_SetSegmentFlags (ID2D1SimplifiedGeometrySink *iface, D2D1_PATH_SEGMENT vertexFlags)
 
static void WINAPI rendertarget_sink_BeginFigure (ID2D1SimplifiedGeometrySink *iface, D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin)
 
static void WINAPI rendertarget_sink_AddLines (ID2D1SimplifiedGeometrySink *iface, const D2D1_POINT_2F *points, UINT32 count)
 
static void WINAPI rendertarget_sink_AddBeziers (ID2D1SimplifiedGeometrySink *iface, const D2D1_BEZIER_SEGMENT *beziers, UINT32 count)
 
static void WINAPI rendertarget_sink_EndFigure (ID2D1SimplifiedGeometrySink *iface, D2D1_FIGURE_END figureEnd)
 
static HRESULT WINAPI rendertarget_sink_Close (ID2D1SimplifiedGeometrySink *iface)
 
static HRESULT WINAPI rendertarget_QueryInterface (IDWriteBitmapRenderTarget1 *iface, REFIID riid, void **obj)
 
static ULONG WINAPI rendertarget_AddRef (IDWriteBitmapRenderTarget1 *iface)
 
static ULONG WINAPI rendertarget_Release (IDWriteBitmapRenderTarget1 *iface)
 
static DWORD * get_pixel_ptr_32 (struct dib_data *dib, int x, int y)
 
static BYTE blend_color (BYTE dst, BYTE src, BYTE alpha)
 
static DWORD blend_subpixel (BYTE r, BYTE g, BYTE b, DWORD text, const BYTE *alpha)
 
static DWORD blend_pixel (BYTE r, BYTE g, BYTE b, DWORD text, BYTE alpha)
 
static void blit_8 (struct dib_data *dib, const BYTE *src, const RECT *rect, DWORD text_pixel)
 
static void blit_subpixel_888 (struct dib_data *dib, int dib_width, const BYTE *src, const RECT *rect, DWORD text_pixel)
 
static DWORD colorref_to_pixel_888 (COLORREF color)
 
static HRESULT WINAPI rendertarget_DrawGlyphRun (IDWriteBitmapRenderTarget1 *iface, FLOAT originX, FLOAT originY, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GLYPH_RUN const *run, IDWriteRenderingParams *params, COLORREF color, RECT *bbox_ret)
 
static HDC WINAPI rendertarget_GetMemoryDC (IDWriteBitmapRenderTarget1 *iface)
 
static float WINAPI rendertarget_GetPixelsPerDip (IDWriteBitmapRenderTarget1 *iface)
 
static HRESULT WINAPI rendertarget_SetPixelsPerDip (IDWriteBitmapRenderTarget1 *iface, float ppdip)
 
static HRESULT WINAPI rendertarget_GetCurrentTransform (IDWriteBitmapRenderTarget1 *iface, DWRITE_MATRIX *transform)
 
static HRESULT WINAPI rendertarget_SetCurrentTransform (IDWriteBitmapRenderTarget1 *iface, DWRITE_MATRIX const *transform)
 
static HRESULT WINAPI rendertarget_GetSize (IDWriteBitmapRenderTarget1 *iface, SIZE *size)
 
static HRESULT WINAPI rendertarget_Resize (IDWriteBitmapRenderTarget1 *iface, UINT32 width, UINT32 height)
 
static DWRITE_TEXT_ANTIALIAS_MODE WINAPI rendertarget_GetTextAntialiasMode (IDWriteBitmapRenderTarget1 *iface)
 
static HRESULT WINAPI rendertarget_SetTextAntialiasMode (IDWriteBitmapRenderTarget1 *iface, DWRITE_TEXT_ANTIALIAS_MODE mode)
 
static HRESULT create_rendertarget (IDWriteFactory7 *factory, HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **ret)
 
static HRESULT WINAPI gdiinterop_QueryInterface (IDWriteGdiInterop1 *iface, REFIID riid, void **obj)
 
static ULONG WINAPI gdiinterop_AddRef (IDWriteGdiInterop1 *iface)
 
static ULONG WINAPI gdiinterop_Release (IDWriteGdiInterop1 *iface)
 
static HRESULT WINAPI gdiinterop_CreateFontFromLOGFONT (IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFont **font)
 
static HRESULT WINAPI gdiinterop_ConvertFontToLOGFONT (IDWriteGdiInterop1 *iface, IDWriteFont *font, LOGFONTW *logfont, BOOL *is_systemfont)
 
static HRESULT WINAPI gdiinterop_ConvertFontFaceToLOGFONT (IDWriteGdiInterop1 *iface, IDWriteFontFace *fontface, LOGFONTW *logfont)
 
BOOL WINAPI GetFontRealizationInfo (HDC hdc, struct font_realization_info *info)
 
BOOL WINAPI GetFontFileInfo (DWORD instance_id, DWORD file_index, struct font_fileinfo *info, SIZE_T size, SIZE_T *needed)
 
BOOL WINAPI GetFontFileData (DWORD instance_id, DWORD file_index, UINT64 offset, void *buff, SIZE_T buff_size)
 
static HRESULT WINAPI gdiinterop_CreateFontFaceFromHdc (IDWriteGdiInterop1 *iface, HDC hdc, IDWriteFontFace **fontface)
 
static HRESULT WINAPI gdiinterop_CreateBitmapRenderTarget (IDWriteGdiInterop1 *iface, HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target)
 
static HRESULT WINAPI gdiinterop1_CreateFontFromLOGFONT (IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFontCollection *collection, IDWriteFont **font)
 
static HRESULT WINAPI gdiinterop1_GetFontSignature_ (IDWriteGdiInterop1 *iface, IDWriteFontFace *fontface, FONTSIGNATURE *fontsig)
 
static HRESULT WINAPI gdiinterop1_GetFontSignature (IDWriteGdiInterop1 *iface, IDWriteFont *font, FONTSIGNATURE *fontsig)
 
static HRESULT WINAPI gdiinterop1_GetMatchingFontsByLOGFONT (IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFontSet *fontset, IDWriteFontSet **subset)
 
static HRESULT WINAPI memresourcestream_QueryInterface (IDWriteFontFileStream *iface, REFIID riid, void **out)
 
static ULONG WINAPI memresourcestream_AddRef (IDWriteFontFileStream *iface)
 
static ULONG WINAPI memresourcestream_Release (IDWriteFontFileStream *iface)
 
static HRESULT WINAPI memresourcestream_ReadFileFragment (IDWriteFontFileStream *iface, void const **fragment_start, UINT64 offset, UINT64 fragment_size, void **fragment_context)
 
static void WINAPI memresourcestream_ReleaseFileFragment (IDWriteFontFileStream *iface, void *fragment_context)
 
static HRESULT WINAPI memresourcestream_GetFileSize (IDWriteFontFileStream *iface, UINT64 *size)
 
static HRESULT WINAPI memresourcestream_GetLastWriteTime (IDWriteFontFileStream *iface, UINT64 *last_writetime)
 
static HRESULT WINAPI memresourceloader_QueryInterface (IDWriteFontFileLoader *iface, REFIID riid, void **out)
 
static ULONG WINAPI memresourceloader_AddRef (IDWriteFontFileLoader *iface)
 
static ULONG WINAPI memresourceloader_Release (IDWriteFontFileLoader *iface)
 
static HRESULT WINAPI memresourceloader_CreateStreamFromKey (IDWriteFontFileLoader *iface, void const *key, UINT32 key_size, IDWriteFontFileStream **ret)
 
HRESULT create_gdiinterop (IDWriteFactory7 *factory, IDWriteGdiInterop1 **ret)
 

Variables

static const ID2D1SimplifiedGeometrySinkVtbl rendertargetsinkvtbl
 
static const IDWriteBitmapRenderTarget1Vtbl rendertargetvtbl
 
static const IDWriteGdiInterop1Vtbl gdiinteropvtbl
 
static const IDWriteFontFileStreamVtbl memresourcestreamvtbl
 
static const IDWriteFontFileLoaderVtbl memresourceloadervtbl
 

Macro Definition Documentation

◆ COBJMACROS

#define COBJMACROS

Definition at line 22 of file gdiinterop.c.

Function Documentation

◆ blend_color()

static BYTE blend_color ( BYTE  dst,
BYTE  src,
BYTE  alpha 
)
inlinestatic

Definition at line 281 of file gdiinterop.c.

282{
283 return (src * alpha + dst * (255 - alpha) + 127) / 255;
284}
GLclampf GLclampf GLclampf alpha
Definition: gl.h:1740
GLenum src
Definition: glext.h:6340
GLenum GLenum dst
Definition: glext.h:6340

Referenced by blend_pixel(), and blend_subpixel().

◆ blend_pixel()

static DWORD blend_pixel ( BYTE  r,
BYTE  g,
BYTE  b,
DWORD  text,
BYTE  alpha 
)
inlinestatic

Definition at line 293 of file gdiinterop.c.

294{
295 return blend_color(r, text >> 16, alpha) << 16 |
296 blend_color(g, text >> 8, alpha) << 8 |
298}
const WCHAR * text
Definition: package.c:1826
static BYTE blend_color(BYTE dst, BYTE src, BYTE alpha)
Definition: gdiinterop.c:281
GLdouble GLdouble GLdouble r
Definition: gl.h:2055
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
GLboolean GLboolean g
Definition: glext.h:6204

Referenced by blit_8().

◆ blend_subpixel()

static DWORD blend_subpixel ( BYTE  r,
BYTE  g,
BYTE  b,
DWORD  text,
const BYTE *  alpha 
)
inlinestatic

Definition at line 286 of file gdiinterop.c.

287{
288 return blend_color(r, text >> 16, alpha[0]) << 16 |
289 blend_color(g, text >> 8, alpha[1]) << 8 |
290 blend_color(b, text, alpha[2]);
291}

Referenced by blit_subpixel_888().

◆ blit_8()

static void blit_8 ( struct dib_data *  dib,
const BYTE *  src,
const RECT *  rect,
DWORD  text_pixel 
)
static

Definition at line 300 of file gdiinterop.c.

301{
302 DWORD *dst_ptr = get_pixel_ptr_32(dib, rect->left, rect->top);
303 int x, y, src_width = rect->right - rect->left;
304
305 for (y = rect->top; y < rect->bottom; y++) {
306 for (x = 0; x < src_width; x++) {
307 if (!src[x]) continue;
308 if (src[x] == DWRITE_ALPHA_MAX)
309 dst_ptr[x] = text_pixel;
310 else
311 dst_ptr[x] = blend_pixel(dst_ptr[x] >> 16, dst_ptr[x] >> 8, dst_ptr[x], text_pixel, src[x]);
312 }
313
314 src += src_width;
315 dst_ptr += dib->stride / 4;
316 }
317}
RECT rect
Definition: combotst.c:67
unsigned long DWORD
Definition: ntddk_ex.h:95
static DWORD blend_pixel(BYTE r, BYTE g, BYTE b, DWORD text, BYTE alpha)
Definition: gdiinterop.c:293
static DWORD * get_pixel_ptr_32(struct dib_data *dib, int x, int y)
Definition: gdiinterop.c:276
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLint GLint bottom
Definition: glext.h:7726
long right
Definition: dcommon.idl:29
long left
Definition: dcommon.idl:29
long top
Definition: dcommon.idl:29
int stride
Definition: gdiinterop.c:37

Referenced by rendertarget_DrawGlyphRun().

◆ blit_subpixel_888()

static void blit_subpixel_888 ( struct dib_data *  dib,
int  dib_width,
const BYTE *  src,
const RECT *  rect,
DWORD  text_pixel 
)
static

Definition at line 319 of file gdiinterop.c.

321{
322 DWORD *dst_ptr = get_pixel_ptr_32(dib, rect->left, rect->top);
323 int x, y, src_width = rect->right - rect->left;
324
325 for (y = rect->top; y < rect->bottom; y++) {
326 for (x = 0; x < src_width; x++) {
327 if (src[3*x] == 0 && src[3*x+1] == 0 && src[3*x+2] == 0) continue;
328 dst_ptr[x] = blend_subpixel(dst_ptr[x] >> 16, dst_ptr[x] >> 8, dst_ptr[x], text_pixel, &src[3*x]);
329 }
330 dst_ptr += dib->stride / 4;
331 src += src_width * 3;
332 }
333}
static DWORD blend_subpixel(BYTE r, BYTE g, BYTE b, DWORD text, const BYTE *alpha)
Definition: gdiinterop.c:286

Referenced by rendertarget_DrawGlyphRun().

◆ colorref_to_pixel_888()

static DWORD colorref_to_pixel_888 ( COLORREF  color)
inlinestatic

Definition at line 335 of file gdiinterop.c.

336{
337 return (((color >> 16) & 0xff) | (color & 0xff00) | ((color << 16) & 0xff0000));
338}
GLuint color
Definition: glext.h:6243

Referenced by rendertarget_DrawGlyphRun().

◆ create_gdiinterop()

HRESULT create_gdiinterop ( IDWriteFactory7 *  factory,
IDWriteGdiInterop1 **  ret 
)

Definition at line 1110 of file gdiinterop.c.

1111{
1112 struct gdiinterop *interop;
1113
1114 *ret = NULL;
1115
1116 if (!(interop = malloc(sizeof(*interop))))
1117 return E_OUTOFMEMORY;
1118
1119 interop->IDWriteGdiInterop1_iface.lpVtbl = &gdiinteropvtbl;
1121 interop->refcount = 1;
1122 interop->factory = factory;
1123 IDWriteFactory7_AddRef(interop->factory);
1124 IDWriteFactory7_RegisterFontFileLoader(factory, &interop->IDWriteFontFileLoader_iface);
1125
1126 *ret = &interop->IDWriteGdiInterop1_iface;
1127 return S_OK;
1128}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define malloc
Definition: debug_ros.c:4
#define NULL
Definition: types.h:112
return ret
Definition: mutex.c:147
static const IDWriteFontFileLoaderVtbl memresourceloadervtbl
Definition: gdiinterop.c:1102
static const IDWriteGdiInterop1Vtbl gdiinteropvtbl
Definition: gdiinterop.c:930
#define S_OK
Definition: intsafe.h:52
Definition: main.c:439
LONG refcount
Definition: gdiinterop.c:60
IDWriteFontFileLoader IDWriteFontFileLoader_iface
Definition: gdiinterop.c:59
IDWriteFactory7 * factory
Definition: gdiinterop.c:61
IDWriteGdiInterop1 IDWriteGdiInterop1_iface
Definition: gdiinterop.c:58

Referenced by dwritefactory_GetGdiInterop().

◆ create_rendertarget()

static HRESULT create_rendertarget ( IDWriteFactory7 *  factory,
HDC  hdc,
UINT32  width,
UINT32  height,
IDWriteBitmapRenderTarget **  ret 
)
static

Definition at line 605 of file gdiinterop.c.

607{
608 struct rendertarget *target;
609 HRESULT hr;
610
611 *ret = NULL;
612
613 if (!(target = malloc(sizeof(*target))))
614 return E_OUTOFMEMORY;
615
616 target->IDWriteBitmapRenderTarget1_iface.lpVtbl = &rendertargetvtbl;
617 target->ID2D1SimplifiedGeometrySink_iface.lpVtbl = &rendertargetsinkvtbl;
618 target->refcount = 1;
619
623 if (FAILED(hr)) {
624 IDWriteBitmapRenderTarget1_Release(&target->IDWriteBitmapRenderTarget1_iface);
625 return hr;
626 }
627
628 target->m = identity;
629 target->ppdip = GetDeviceCaps(target->hdc, LOGPIXELSX) / 96.0f;
630 target->antialiasmode = DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE;
631 target->factory = factory;
632 IDWriteFactory7_AddRef(factory);
633
634 *ret = (IDWriteBitmapRenderTarget*)&target->IDWriteBitmapRenderTarget1_iface;
635
636 return S_OK;
637}
HRESULT hr
Definition: delayimp.cpp:582
static const IDWriteBitmapRenderTarget1Vtbl rendertargetvtbl
Definition: gdiinterop.c:588
static HRESULT create_target_dibsection(struct rendertarget *target, UINT32 width, UINT32 height)
Definition: gdiinterop.c:76
static const ID2D1SimplifiedGeometrySinkVtbl rendertargetsinkvtbl
Definition: gdiinterop.c:215
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GLint GLint GLsizei width
Definition: gl.h:1546
#define FAILED(hr)
Definition: intsafe.h:51
HDC hdc
Definition: main.c:9
IDWriteFactory7 * factory
Definition: gdiinterop.c:47
Definition: tools.h:99
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
int WINAPI SetGraphicsMode(_In_ HDC, _In_ int)
Definition: dc.c:1233
#define GM_ADVANCED
Definition: wingdi.h:865
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define LOGPIXELSX
Definition: wingdi.h:718

Referenced by gdiinterop_CreateBitmapRenderTarget().

◆ create_target_dibsection()

static HRESULT create_target_dibsection ( struct rendertarget *  target,
UINT32  width,
UINT32  height 
)
static

Definition at line 76 of file gdiinterop.c.

77{
78 char bmibuf[FIELD_OFFSET(BITMAPINFO, bmiColors[256])];
79 BITMAPINFO *bmi = (BITMAPINFO*)bmibuf;
81
82 target->size.cx = width;
83 target->size.cy = height;
84
85 memset(bmi, 0, sizeof(bmibuf));
86 bmi->bmiHeader.biSize = sizeof(bmi->bmiHeader);
88 bmi->bmiHeader.biWidth = width;
89 bmi->bmiHeader.biBitCount = 32;
90 bmi->bmiHeader.biPlanes = 1;
92
93 hbm = CreateDIBSection(target->hdc, bmi, DIB_RGB_COLORS, (void**)&target->dib.ptr, NULL, 0);
94 if (!hbm) {
95 hbm = CreateBitmap(1, 1, 1, 1, NULL);
96 target->dib.ptr = NULL;
97 target->dib.stride = 0;
98 target->dib.width = 0;
99 }
100 else {
101 target->dib.stride = get_dib_stride(width, 32);
102 target->dib.width = width;
103 }
104
106 return S_OK;
107}
pKey DeleteObject()
static int get_dib_stride(int width, int bpp)
Definition: gdiinterop.c:71
static HBITMAP
Definition: button.c:44
_In_ HBITMAP hbm
Definition: ntgdi.h:2776
#define memset(x, y, z)
Definition: compat.h:39
USHORT biBitCount
Definition: precomp.h:34
ULONG biCompression
Definition: precomp.h:35
BITMAPINFOHEADER bmiHeader
Definition: wingdi.h:1922
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:255
#define BI_RGB
Definition: uefivid.c:46
HBITMAP WINAPI CreateDIBSection(HDC hDC, CONST BITMAPINFO *BitmapInfo, UINT Usage, VOID **Bits, HANDLE hSection, DWORD dwOffset)
Definition: bitmap.c:245
#define DIB_RGB_COLORS
Definition: wingdi.h:367
HBITMAP WINAPI CreateBitmap(_In_ INT cx, _In_ INT cy, _In_ UINT cPlanes, _In_ UINT cBitsPerPel, _In_opt_ const VOID *pvBits)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1546

Referenced by create_rendertarget(), and rendertarget_Resize().

◆ gdiinterop1_CreateFontFromLOGFONT()

static HRESULT WINAPI gdiinterop1_CreateFontFromLOGFONT ( IDWriteGdiInterop1 *  iface,
LOGFONTW const *  logfont,
IDWriteFontCollection *  collection,
IDWriteFont **  font 
)
static

Definition at line 847 of file gdiinterop.c.

849{
850 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
851 IDWriteFontFamily *family;
853 BOOL exists = FALSE;
855 HRESULT hr;
856
857 TRACE("%p, %p, %p, %p.\n", iface, logfont, collection, font);
858
859 *font = NULL;
860
861 if (!logfont) return E_INVALIDARG;
862
863 if (collection)
864 IDWriteFontCollection_AddRef(collection);
865 else {
866 hr = IDWriteFactory5_GetSystemFontCollection((IDWriteFactory5 *)interop->factory, FALSE, (IDWriteFontCollection1 **)&collection, FALSE);
867 if (FAILED(hr)) {
868 ERR("failed to get system font collection: 0x%08lx.\n", hr);
869 return hr;
870 }
871 }
872
873 hr = IDWriteFontCollection_FindFamilyName(collection, logfont->lfFaceName, &index, &exists);
874 if (FAILED(hr))
875 goto done;
876
877 if (!exists) {
879 goto done;
880 }
881
882 hr = IDWriteFontCollection_GetFontFamily(collection, index, &family);
883 if (FAILED(hr))
884 goto done;
885
887 hr = IDWriteFontFamily_GetFirstMatchingFont(family, logfont->lfWeight, DWRITE_FONT_STRETCH_NORMAL, style, font);
888 IDWriteFontFamily_Release(family);
889
890done:
891 IDWriteFontCollection_Release(collection);
892 return hr;
893}
#define index(s, c)
Definition: various.h:29
#define ERR(fmt,...)
Definition: precomp.h:57
#define E_INVALIDARG
Definition: ddrawi.h:101
#define FALSE
Definition: types.h:117
DWRITE_FONT_STYLE
Definition: dwrite.idl:109
@ DWRITE_FONT_STYLE_NORMAL
Definition: dwrite.idl:110
@ DWRITE_FONT_STYLE_ITALIC
Definition: dwrite.idl:112
@ DWRITE_FONT_STRETCH_NORMAL
Definition: dwrite.idl:100
unsigned int BOOL
Definition: ntddk_ex.h:94
static struct gdiinterop * impl_from_IDWriteGdiInterop1(IDWriteGdiInterop1 *iface)
Definition: gdiinterop.c:119
GLuint index
Definition: glext.h:6031
Definition: mk_font.cpp:20
#define TRACE(s)
Definition: solgame.cpp:4
Definition: style.c:91
uint32_t UINT32
Definition: typedefs.h:59
#define DWRITE_E_NOFONT
Definition: winerror.h:7336

◆ gdiinterop1_GetFontSignature()

static HRESULT WINAPI gdiinterop1_GetFontSignature ( IDWriteGdiInterop1 *  iface,
IDWriteFont *  font,
FONTSIGNATURE *  fontsig 
)
static

Definition at line 903 of file gdiinterop.c.

904{
905 TRACE("%p, %p, %p.\n", iface, font, fontsig);
906
907 if (!font)
908 return E_INVALIDARG;
909
910 return get_fontsig_from_font(font, fontsig);
911}
HRESULT get_fontsig_from_font(IDWriteFont *, FONTSIGNATURE *)
Definition: font.c:2566

◆ gdiinterop1_GetFontSignature_()

static HRESULT WINAPI gdiinterop1_GetFontSignature_ ( IDWriteGdiInterop1 *  iface,
IDWriteFontFace *  fontface,
FONTSIGNATURE *  fontsig 
)
static

Definition at line 895 of file gdiinterop.c.

897{
898 TRACE("%p, %p, %p.\n", iface, fontface, fontsig);
899
900 return get_fontsig_from_fontface(fontface, fontsig);
901}
HRESULT get_fontsig_from_fontface(IDWriteFontFace *, FONTSIGNATURE *)
Definition: font.c:2573

◆ gdiinterop1_GetMatchingFontsByLOGFONT()

static HRESULT WINAPI gdiinterop1_GetMatchingFontsByLOGFONT ( IDWriteGdiInterop1 *  iface,
LOGFONTW const *  logfont,
IDWriteFontSet *  fontset,
IDWriteFontSet **  subset 
)
static

Definition at line 913 of file gdiinterop.c.

915{
917
918 TRACE("%p, %p, %p, %p.\n", iface, logfont, fontset, subset);
919
920 if (!logfont || !fontset)
921 return E_INVALIDARG;
922
923 property.propertyId = DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME;
924 property.propertyValue = logfont->lfFaceName;
925 property.localeName = L"";
926
927 return IDWriteFontSet_GetMatchingFonts(fontset, &property, 1, subset);
928}
#define L(x)
Definition: resources.c:13
@ DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME
Definition: dwrite_3.idl:95

◆ gdiinterop_AddRef()

static ULONG WINAPI gdiinterop_AddRef ( IDWriteGdiInterop1 *  iface)
static

Definition at line 658 of file gdiinterop.c.

659{
660 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
662
663 TRACE("%p, refcount %lu.\n", iface, refcount);
664
665 return refcount;
666}
#define InterlockedIncrement
Definition: armddk.h:53
long LONG
Definition: pedump.c:60

◆ gdiinterop_ConvertFontFaceToLOGFONT()

static HRESULT WINAPI gdiinterop_ConvertFontFaceToLOGFONT ( IDWriteGdiInterop1 *  iface,
IDWriteFontFace *  fontface,
LOGFONTW *  logfont 
)
static

Definition at line 728 of file gdiinterop.c.

730{
731 TRACE("%p, %p, %p.\n", iface, fontface, logfont);
732
733 memset(logfont, 0, sizeof(*logfont));
734
735 if (!fontface)
736 return E_INVALIDARG;
737
738 get_logfont_from_fontface(fontface, logfont);
739 logfont->lfCharSet = DEFAULT_CHARSET;
741
742 return S_OK;
743}
void get_logfont_from_fontface(IDWriteFontFace *, LOGFONTW *)
Definition: font.c:2560
BYTE lfOutPrecision
Definition: dimm.idl:68
BYTE lfCharSet
Definition: dimm.idl:67
#define DEFAULT_CHARSET
Definition: wingdi.h:384
#define OUT_OUTLINE_PRECIS
Definition: wingdi.h:423

◆ gdiinterop_ConvertFontToLOGFONT()

static HRESULT WINAPI gdiinterop_ConvertFontToLOGFONT ( IDWriteGdiInterop1 *  iface,
IDWriteFont *  font,
LOGFONTW *  logfont,
BOOL *  is_systemfont 
)
static

Definition at line 693 of file gdiinterop.c.

695{
697 IDWriteFontFamily *family;
698 HRESULT hr;
699
700 TRACE("%p, %p, %p, %p.\n", iface, font, logfont, is_systemfont);
701
702 *is_systemfont = FALSE;
703
704 memset(logfont, 0, sizeof(*logfont));
705
706 if (!font)
707 return E_INVALIDARG;
708
709 hr = IDWriteFont_GetFontFamily(font, &family);
710 if (FAILED(hr))
711 return hr;
712
713 hr = IDWriteFontFamily_GetFontCollection(family, &collection);
714 IDWriteFontFamily_Release(family);
715 if (FAILED(hr))
716 return hr;
717
718 *is_systemfont = is_system_collection(collection);
719 IDWriteFontCollection_Release(collection);
720
721 get_logfont_from_font(font, logfont);
722 logfont->lfCharSet = DEFAULT_CHARSET;
724
725 return hr;
726}
BOOL is_system_collection(IDWriteFontCollection *)
Definition: font.c:3201
void get_logfont_from_font(IDWriteFont *, LOGFONTW *)
Definition: font.c:2554

◆ gdiinterop_CreateBitmapRenderTarget()

static HRESULT WINAPI gdiinterop_CreateBitmapRenderTarget ( IDWriteGdiInterop1 *  iface,
HDC  hdc,
UINT32  width,
UINT32  height,
IDWriteBitmapRenderTarget **  target 
)
static

Definition at line 837 of file gdiinterop.c.

839{
840 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
841
842 TRACE("%p, %p, %u, %u, %p.\n", iface, hdc, width, height, target);
843
844 return create_rendertarget(interop->factory, hdc, width, height, target);
845}
static HRESULT create_rendertarget(IDWriteFactory7 *factory, HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **ret)
Definition: gdiinterop.c:605

◆ gdiinterop_CreateFontFaceFromHdc()

static HRESULT WINAPI gdiinterop_CreateFontFaceFromHdc ( IDWriteGdiInterop1 *  iface,
HDC  hdc,
IDWriteFontFace **  fontface 
)
static

Definition at line 768 of file gdiinterop.c.

770{
771 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
773 struct font_fileinfo *fileinfo;
775 DWRITE_FONT_FACE_TYPE facetype;
777 BOOL is_supported;
778 UINT32 facenum;
779 SIZE_T needed;
780 HRESULT hr;
781
782 TRACE("%p, %p, %p.\n", iface, hdc, fontface);
783
784 *fontface = NULL;
785
786 if (!hdc)
787 return E_INVALIDARG;
788
789 /* get selected font id */
790 info.size = sizeof(info);
792 WARN("failed to get selected font id\n");
793 return E_FAIL;
794 }
795
796 needed = 0;
797 GetFontFileInfo(info.instance_id, 0, NULL, 0, &needed);
798 if (needed == 0) {
799 WARN("failed to get font file info size\n");
800 return E_FAIL;
801 }
802
803 if (!(fileinfo = malloc(needed)))
804 return E_OUTOFMEMORY;
805
806 if (!GetFontFileInfo(info.instance_id, 0, fileinfo, needed, &needed))
807 {
808 free(fileinfo);
809 return E_FAIL;
810 }
811
812 if (*fileinfo->path)
813 hr = IDWriteFactory7_CreateFontFileReference(interop->factory, fileinfo->path, &fileinfo->writetime, &file);
814 else
815 hr = IDWriteFactory7_CreateCustomFontFileReference(interop->factory, &info.instance_id,
816 sizeof(info.instance_id), &interop->IDWriteFontFileLoader_iface, &file);
817
818 free(fileinfo);
819 if (FAILED(hr))
820 return hr;
821
822 is_supported = FALSE;
823 hr = IDWriteFontFile_Analyze(file, &is_supported, &filetype, &facetype, &facenum);
824 if (SUCCEEDED(hr)) {
825 if (is_supported)
826 /* Simulations flags values match DWRITE_FONT_SIMULATIONS */
827 hr = IDWriteFactory7_CreateFontFace(interop->factory, facetype, 1, &file, info.face_index,
828 info.simulations, fontface);
829 else
831 }
832
833 IDWriteFontFile_Release(file);
834 return hr;
835}
#define WARN(fmt,...)
Definition: precomp.h:61
#define E_FAIL
Definition: ddrawi.h:102
#define free
Definition: debug_ros.c:5
DWRITE_FONT_FILE_TYPE
Definition: dwrite.idl:47
DWRITE_FONT_FACE_TYPE
Definition: dwrite.idl:60
BOOL WINAPI GetFontRealizationInfo(HDC hdc, struct font_realization_info *info)
BOOL WINAPI GetFontFileInfo(DWORD instance_id, DWORD file_index, struct font_fileinfo *info, SIZE_T size, SIZE_T *needed)
#define SUCCEEDED(hr)
Definition: intsafe.h:50
LOCAL char * filetype(int t)
Definition: tree.c:114
Definition: fci.c:123
char path[PATH_MAX]
Definition: types.h:286
ULONG_PTR SIZE_T
Definition: typedefs.h:80
#define DWRITE_E_FILEFORMAT
Definition: winerror.h:7334

◆ gdiinterop_CreateFontFromLOGFONT()

static HRESULT WINAPI gdiinterop_CreateFontFromLOGFONT ( IDWriteGdiInterop1 *  iface,
LOGFONTW const *  logfont,
IDWriteFont **  font 
)
static

Definition at line 685 of file gdiinterop.c.

687{
688 TRACE("%p, %p, %p.\n", iface, logfont, font);
689
690 return IDWriteGdiInterop1_CreateFontFromLOGFONT(iface, logfont, NULL, font);
691}

◆ gdiinterop_QueryInterface()

static HRESULT WINAPI gdiinterop_QueryInterface ( IDWriteGdiInterop1 *  iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 639 of file gdiinterop.c.

640{
641 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
642
643 if (IsEqualIID(riid, &IID_IDWriteGdiInterop1) ||
644 IsEqualIID(riid, &IID_IDWriteGdiInterop) ||
646 {
647 *obj = iface;
648 IDWriteGdiInterop1_AddRef(iface);
649 return S_OK;
650 }
651
652 WARN("%s not implemented.\n", debugstr_guid(riid));
653
654 *obj = NULL;
655 return E_NOINTERFACE;
656}
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define debugstr_guid
Definition: kernel32.h:35
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ gdiinterop_Release()

static ULONG WINAPI gdiinterop_Release ( IDWriteGdiInterop1 *  iface)
static

Definition at line 668 of file gdiinterop.c.

669{
670 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
672
673 TRACE("%p, refcount %lu.\n", iface, refcount);
674
675 if (!refcount)
676 {
677 IDWriteFactory7_UnregisterFontFileLoader(interop->factory, &interop->IDWriteFontFileLoader_iface);
678 factory_detach_gdiinterop(interop->factory, iface);
679 free(interop);
680 }
681
682 return refcount;
683}
#define InterlockedDecrement
Definition: armddk.h:52
void factory_detach_gdiinterop(IDWriteFactory7 *factory, IDWriteGdiInterop1 *interop)
Definition: main.c:2103

◆ get_dib_stride()

static int get_dib_stride ( int  width,
int  bpp 
)
inlinestatic

Definition at line 71 of file gdiinterop.c.

72{
73 return ((width * bpp + 31) >> 3) & ~3;
74}
ULONG bpp[]
Definition: xlate.c:19

Referenced by create_target_dibsection(), EMFDRV_StretchBlt(), MFDRV_CreateBrushIndirect(), and MFDRV_StretchBlt().

◆ get_pixel_ptr_32()

static DWORD * get_pixel_ptr_32 ( struct dib_data *  dib,
int  x,
int  y 
)
inlinestatic

Definition at line 276 of file gdiinterop.c.

277{
278 return (DWORD *)((BYTE*)dib->ptr + y * dib->stride + x * 4);
279}
DWORD * ptr
Definition: gdiinterop.c:36
unsigned char BYTE
Definition: xxhash.c:193

Referenced by blit_8(), and blit_subpixel_888().

◆ GetFontFileData()

BOOL WINAPI GetFontFileData ( DWORD  instance_id,
DWORD  file_index,
UINT64  offset,
void *  buff,
SIZE_T  buff_size 
)

◆ GetFontFileInfo()

BOOL WINAPI GetFontFileInfo ( DWORD  instance_id,
DWORD  file_index,
struct font_fileinfo *  info,
SIZE_T  size,
SIZE_T *  needed 
)

◆ GetFontRealizationInfo()

BOOL WINAPI GetFontRealizationInfo ( HDC  hdc,
struct font_realization_info *  info 
)

◆ impl_from_ID2D1SimplifiedGeometrySink()

static struct rendertarget * impl_from_ID2D1SimplifiedGeometrySink ( ID2D1SimplifiedGeometrySink *  iface)
inlinestatic

Definition at line 114 of file gdiinterop.c.

115{
116 return CONTAINING_RECORD(iface, struct rendertarget, ID2D1SimplifiedGeometrySink_iface);
117}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by rendertarget_sink_AddBeziers(), rendertarget_sink_AddLines(), rendertarget_sink_AddRef(), rendertarget_sink_BeginFigure(), rendertarget_sink_EndFigure(), rendertarget_sink_Release(), and rendertarget_sink_SetFillMode().

◆ impl_from_IDWriteBitmapRenderTarget1()

◆ impl_from_IDWriteFontFileStream()

static struct memresource_stream * impl_from_IDWriteFontFileStream ( IDWriteFontFileStream *  iface)
inlinestatic

Definition at line 124 of file gdiinterop.c.

125{
126 return CONTAINING_RECORD(iface, struct memresource_stream, IDWriteFontFileStream_iface);
127}

Referenced by memresourcestream_AddRef(), memresourcestream_GetFileSize(), memresourcestream_ReadFileFragment(), and memresourcestream_Release().

◆ impl_from_IDWriteGdiInterop1()

static struct gdiinterop * impl_from_IDWriteGdiInterop1 ( IDWriteGdiInterop1 *  iface)
inlinestatic

◆ memresourceloader_AddRef()

static ULONG WINAPI memresourceloader_AddRef ( IDWriteFontFileLoader *  iface)
static

Definition at line 1068 of file gdiinterop.c.

1069{
1070 return 2;
1071}

◆ memresourceloader_CreateStreamFromKey()

static HRESULT WINAPI memresourceloader_CreateStreamFromKey ( IDWriteFontFileLoader *  iface,
void const *  key,
UINT32  key_size,
IDWriteFontFileStream **  ret 
)
static

Definition at line 1078 of file gdiinterop.c.

1080{
1081 struct memresource_stream *stream;
1082
1083 TRACE("%p, %p, %u, %p.\n", iface, key, key_size, ret);
1084
1085 *ret = NULL;
1086
1087 if (!key || key_size != sizeof(DWORD))
1088 return E_INVALIDARG;
1089
1090 if (!(stream = malloc(sizeof(*stream))))
1091 return E_OUTOFMEMORY;
1092
1093 stream->IDWriteFontFileStream_iface.lpVtbl = &memresourcestreamvtbl;
1094 stream->refcount = 1;
1095 memcpy(&stream->key, key, sizeof(stream->key));
1096
1097 *ret = &stream->IDWriteFontFileStream_iface;
1098
1099 return S_OK;
1100}
static const IDWriteFontFileStreamVtbl memresourcestreamvtbl
Definition: gdiinterop.c:1042
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Definition: copy.c:22
Definition: parse.h:23

◆ memresourceloader_QueryInterface()

static HRESULT WINAPI memresourceloader_QueryInterface ( IDWriteFontFileLoader *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 1053 of file gdiinterop.c.

1054{
1055 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), out);
1056
1057 if (IsEqualIID(&IID_IDWriteFontFileLoader, riid) || IsEqualIID(&IID_IUnknown, riid)) {
1058 *out = iface;
1059 IDWriteFontFileLoader_AddRef(iface);
1060 return S_OK;
1061 }
1062
1063 *out = NULL;
1064 WARN("Unsupported interface %s.\n", debugstr_guid(riid));
1065 return E_NOINTERFACE;
1066}
wchar_t tm const _CrtWcstime_Writes_and_advances_ptr_ count wchar_t ** out
Definition: wcsftime.cpp:383

◆ memresourceloader_Release()

static ULONG WINAPI memresourceloader_Release ( IDWriteFontFileLoader *  iface)
static

Definition at line 1073 of file gdiinterop.c.

1074{
1075 return 1;
1076}

◆ memresourcestream_AddRef()

static ULONG WINAPI memresourcestream_AddRef ( IDWriteFontFileStream *  iface)
static

Definition at line 961 of file gdiinterop.c.

962{
965
966 TRACE("%p, refcount %ld.\n", iface, refcount);
967
968 return refcount;
969}
static struct memresource_stream * impl_from_IDWriteFontFileStream(IDWriteFontFileStream *iface)
Definition: gdiinterop.c:124
uint32_t ULONG
Definition: typedefs.h:59

◆ memresourcestream_GetFileSize()

static HRESULT WINAPI memresourcestream_GetFileSize ( IDWriteFontFileStream *  iface,
UINT64 *  size 
)
static

Definition at line 1020 of file gdiinterop.c.

1021{
1023 struct font_fileinfo fileinfo;
1024
1025 TRACE("%p, %p.\n", iface, size);
1026
1027 if (!GetFontFileInfo(stream->key, 0, &fileinfo, sizeof(fileinfo), NULL))
1028 return E_INVALIDARG;
1029
1030 *size = fileinfo.size.QuadPart;
1031
1032 return S_OK;
1033}
GLsizeiptr size
Definition: glext.h:5919

◆ memresourcestream_GetLastWriteTime()

static HRESULT WINAPI memresourcestream_GetLastWriteTime ( IDWriteFontFileStream *  iface,
UINT64 *  last_writetime 
)
static

Definition at line 1035 of file gdiinterop.c.

1036{
1037 TRACE("%p, %p.\n", iface, last_writetime);
1038
1039 return E_NOTIMPL;
1040}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ memresourcestream_QueryInterface()

static HRESULT WINAPI memresourcestream_QueryInterface ( IDWriteFontFileStream *  iface,
REFIID  riid,
void **  out 
)
static

Definition at line 946 of file gdiinterop.c.

947{
948 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), out);
949
950 if (IsEqualIID(&IID_IDWriteFontFileStream, riid) || IsEqualIID(&IID_IUnknown, riid)) {
951 *out = iface;
952 IDWriteFontFileStream_AddRef(iface);
953 return S_OK;
954 }
955
956 *out = NULL;
957 WARN("Unsupported interface %s.\n", debugstr_guid(riid));
958 return E_NOINTERFACE;
959}

◆ memresourcestream_ReadFileFragment()

static HRESULT WINAPI memresourcestream_ReadFileFragment ( IDWriteFontFileStream *  iface,
void const **  fragment_start,
UINT64  offset,
UINT64  fragment_size,
void **  fragment_context 
)
static

Definition at line 984 of file gdiinterop.c.

986{
988 struct font_fileinfo fileinfo;
989 void *fragment;
990
991 TRACE("%p, %p, %s, %s, %p.\n", iface, fragment_start, wine_dbgstr_longlong(offset),
992 wine_dbgstr_longlong(fragment_size), fragment_context);
993
994 *fragment_context = NULL;
995 *fragment_start = NULL;
996
997 if (!GetFontFileInfo(stream->key, 0, &fileinfo, sizeof(fileinfo), NULL))
998 return E_INVALIDARG;
999
1000 if ((offset >= fileinfo.size.QuadPart - 1) || (fragment_size > fileinfo.size.QuadPart - offset))
1001 return E_INVALIDARG;
1002
1003 if (!(fragment = malloc(fragment_size)))
1004 return E_OUTOFMEMORY;
1005
1006 if (!GetFontFileData(stream->key, 0, offset, fragment, fragment_size))
1007 return E_FAIL;
1008
1009 *fragment_start = *fragment_context = fragment;
1010 return S_OK;
1011}
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
Definition: compat.h:49
BOOL WINAPI GetFontFileData(DWORD instance_id, DWORD file_index, UINT64 offset, void *buff, SIZE_T buff_size)
GLintptr offset
Definition: glext.h:5920

◆ memresourcestream_Release()

static ULONG WINAPI memresourcestream_Release ( IDWriteFontFileStream *  iface)
static

Definition at line 971 of file gdiinterop.c.

972{
975
976 TRACE("%p, refcount %ld.\n", iface, refcount);
977
978 if (!refcount)
979 free(stream);
980
981 return refcount;
982}

◆ memresourcestream_ReleaseFileFragment()

static void WINAPI memresourcestream_ReleaseFileFragment ( IDWriteFontFileStream *  iface,
void *  fragment_context 
)
static

Definition at line 1013 of file gdiinterop.c.

1014{
1015 TRACE("%p, %p.\n", iface, fragment_context);
1016
1017 free(fragment_context);
1018}

◆ rendertarget_AddRef()

static ULONG WINAPI rendertarget_AddRef ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 249 of file gdiinterop.c.

250{
253
254 TRACE("%p, refcount %lu.\n", iface, refcount);
255
256 return refcount;
257}
static struct rendertarget * impl_from_IDWriteBitmapRenderTarget1(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:109
LONG refcount
Definition: gdiinterop.c:45

◆ rendertarget_DrawGlyphRun()

static HRESULT WINAPI rendertarget_DrawGlyphRun ( IDWriteBitmapRenderTarget1 *  iface,
FLOAT  originX,
FLOAT  originY,
DWRITE_MEASURING_MODE  measuring_mode,
DWRITE_GLYPH_RUN const *  run,
IDWriteRenderingParams *  params,
COLORREF  color,
RECT *  bbox_ret 
)
static

Definition at line 340 of file gdiinterop.c.

344{
346 IDWriteGlyphRunAnalysis *analysis;
347 DWRITE_RENDERING_MODE1 rendermode;
348 DWRITE_GRID_FIT_MODE gridfitmode;
349 DWRITE_TEXTURE_TYPE texturetype;
350 DWRITE_MATRIX m, scale = { 0 };
351 IDWriteFontFace3 *fontface;
352 RECT target_rect, bounds;
353 HRESULT hr;
354
355 TRACE("%p, %.8e, %.8e, %d, %p, %p, 0x%08lx, %p.\n", iface, originX, originY,
356 measuring_mode, run, params, color, bbox_ret);
357
358 SetRectEmpty(bbox_ret);
359
360 if (!target->dib.ptr)
361 return S_OK;
362
363 if (!params)
364 return E_INVALIDARG;
365
366 if (FAILED(hr = IDWriteFontFace_QueryInterface(run->fontFace, &IID_IDWriteFontFace3, (void **)&fontface))) {
367 WARN("Failed to get IDWriteFontFace2 interface, hr %#lx.\n", hr);
368 return hr;
369 }
370
371 hr = IDWriteFontFace3_GetRecommendedRenderingMode(fontface, run->fontEmSize, target->ppdip * 96.0f,
372 target->ppdip * 96.0f, &target->m, run->isSideways, DWRITE_OUTLINE_THRESHOLD_ALIASED, measuring_mode,
373 params, &rendermode, &gridfitmode);
374 IDWriteFontFace3_Release(fontface);
375 if (FAILED(hr))
376 return hr;
377
378 SetRect(&target_rect, 0, 0, target->size.cx, target->size.cy);
379
380 if (rendermode == DWRITE_RENDERING_MODE1_OUTLINE)
381 {
382 static const XFORM identity = { 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f };
383 const DWRITE_MATRIX *m = &target->m;
384 XFORM xform;
385
386 /* target allows any transform to be set, filter it here */
387 if (m->m11 * m->m22 == m->m12 * m->m21) {
388 xform.eM11 = 1.0f;
389 xform.eM12 = 0.0f;
390 xform.eM21 = 0.0f;
391 xform.eM22 = 1.0f;
392 xform.eDx = originX;
393 xform.eDy = originY;
394 } else {
395 xform.eM11 = m->m11;
396 xform.eM12 = m->m12;
397 xform.eM21 = m->m21;
398 xform.eM22 = m->m22;
399 xform.eDx = m->m11 * originX + m->m21 * originY + m->dx;
400 xform.eDy = m->m12 * originX + m->m22 * originY + m->dy;
401 }
402 SetWorldTransform(target->hdc, &xform);
403
404 BeginPath(target->hdc);
405
406 hr = IDWriteFontFace_GetGlyphRunOutline(run->fontFace, run->fontEmSize * target->ppdip,
407 run->glyphIndices, run->glyphAdvances, run->glyphOffsets, run->glyphCount,
408 run->isSideways, run->bidiLevel & 1, &target->ID2D1SimplifiedGeometrySink_iface);
409
410 EndPath(target->hdc);
411
412 if (hr == S_OK)
413 {
414 HBRUSH brush = CreateSolidBrush(color);
415
416 SelectObject(target->hdc, brush);
417
418 FillPath(target->hdc);
419
420 /* FIXME: one way to get affected rectangle bounds is to use region fill */
421 if (bbox_ret)
422 *bbox_ret = target_rect;
423
424 DeleteObject(brush);
425 }
426
428
429 return hr;
430 }
431
432 m = target->m;
433 scale.m11 = scale.m22 = target->ppdip;
435 hr = IDWriteFactory7_CreateGlyphRunAnalysis(target->factory, run, &m, rendermode, measuring_mode,
436 gridfitmode, target->antialiasmode, originX, originY, &analysis);
437 if (FAILED(hr))
438 {
439 WARN("failed to create analysis instance, 0x%08lx\n", hr);
440 return hr;
441 }
442
443 SetRectEmpty(&bounds);
444 texturetype = DWRITE_TEXTURE_ALIASED_1x1;
445 hr = IDWriteGlyphRunAnalysis_GetAlphaTextureBounds(analysis, DWRITE_TEXTURE_ALIASED_1x1, &bounds);
446 if (FAILED(hr) || IsRectEmpty(&bounds)) {
447 hr = IDWriteGlyphRunAnalysis_GetAlphaTextureBounds(analysis, DWRITE_TEXTURE_CLEARTYPE_3x1, &bounds);
448 if (FAILED(hr)) {
449 WARN("GetAlphaTextureBounds() failed, 0x%08lx\n", hr);
450 IDWriteGlyphRunAnalysis_Release(analysis);
451 return hr;
452 }
453 texturetype = DWRITE_TEXTURE_CLEARTYPE_3x1;
454 }
455
456 if (IntersectRect(&target_rect, &target_rect, &bounds))
457 {
458 UINT32 size = (target_rect.right - target_rect.left) * (target_rect.bottom - target_rect.top);
459 BYTE *bitmap;
460
462 if (texturetype == DWRITE_TEXTURE_CLEARTYPE_3x1)
463 size *= 3;
464 if (!(bitmap = calloc(1, size)))
465 {
466 IDWriteGlyphRunAnalysis_Release(analysis);
467 return E_OUTOFMEMORY;
468 }
469
470 hr = IDWriteGlyphRunAnalysis_CreateAlphaTexture(analysis, texturetype, &target_rect, bitmap, size);
471 if (hr == S_OK) {
472 /* blit to target dib */
473 if (texturetype == DWRITE_TEXTURE_ALIASED_1x1)
474 blit_8(&target->dib, bitmap, &target_rect, color);
475 else
476 blit_subpixel_888(&target->dib, target->size.cx, bitmap, &target_rect, color);
477
478 if (bbox_ret) *bbox_ret = target_rect;
479 }
480
481 free(bitmap);
482 }
483 else if (bbox_ret)
484 {
485 *bbox_ret = bounds;
486 }
487
488 IDWriteGlyphRunAnalysis_Release(analysis);
489
490 return S_OK;
491}
DWRITE_TEXTURE_TYPE
Definition: dwrite.idl:346
@ DWRITE_TEXTURE_ALIASED_1x1
Definition: dwrite.idl:347
@ DWRITE_TEXTURE_CLEARTYPE_3x1
Definition: dwrite.idl:348
@ DWRITE_OUTLINE_THRESHOLD_ALIASED
Definition: dwrite_1.idl:409
DWRITE_GRID_FIT_MODE
Definition: dwrite_2.idl:28
DWRITE_RENDERING_MODE1
Definition: dwrite_3.idl:77
@ DWRITE_RENDERING_MODE1_OUTLINE
Definition: dwrite_3.idl:84
static void dwrite_matrix_multiply(DWRITE_MATRIX *a, const DWRITE_MATRIX *b)
static DWORD colorref_to_pixel_888(COLORREF color)
Definition: gdiinterop.c:335
static void blit_subpixel_888(struct dib_data *dib, int dib_width, const BYTE *src, const RECT *rect, DWORD text_pixel)
Definition: gdiinterop.c:319
static void blit_8(struct dib_data *dib, const BYTE *src, const RECT *rect, DWORD text_pixel)
Definition: gdiinterop.c:300
GLenum GLenum GLenum GLenum GLenum scale
Definition: glext.h:9032
GLenum const GLfloat * params
Definition: glext.h:5645
const GLfloat * m
Definition: glext.h:10848
BOOL WINAPI IsRectEmpty(_In_ LPCRECT)
BOOL WINAPI IntersectRect(_Out_ LPRECT, _In_ LPCRECT, _In_ LPCRECT)
BOOL WINAPI SetRectEmpty(_Out_ LPRECT)
BOOL WINAPI SetRect(_Out_ LPRECT, _In_ int, _In_ int, _In_ int, _In_ int)
#define calloc
Definition: rosglue.h:14
Definition: dcommon.idl:28
long bottom
Definition: dcommon.idl:29
FLOAT eDy
Definition: wingdi.h:2172
FLOAT eM11
Definition: wingdi.h:2167
FLOAT eM21
Definition: wingdi.h:2169
FLOAT eM22
Definition: wingdi.h:2170
FLOAT eM12
Definition: wingdi.h:2168
FLOAT eDx
Definition: wingdi.h:2171
Definition: uimain.c:89
BOOL WINAPI FillPath(_In_ HDC)
BOOL WINAPI SetWorldTransform(_In_ HDC, _In_ const XFORM *)
HBRUSH WINAPI CreateSolidBrush(_In_ COLORREF)
BOOL WINAPI EndPath(_In_ HDC)
BOOL WINAPI BeginPath(_In_ HDC hdc)

◆ rendertarget_GetCurrentTransform()

static HRESULT WINAPI rendertarget_GetCurrentTransform ( IDWriteBitmapRenderTarget1 *  iface,
DWRITE_MATRIX *  transform 
)
static

Definition at line 524 of file gdiinterop.c.

525{
527
528 TRACE("%p, %p.\n", iface, transform);
529
530 *transform = target->m;
531 return S_OK;
532}
GLuint GLenum GLenum transform
Definition: glext.h:9407

◆ rendertarget_GetMemoryDC()

static HDC WINAPI rendertarget_GetMemoryDC ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 493 of file gdiinterop.c.

494{
496
497 TRACE("%p.\n", iface);
498
499 return target->hdc;
500}

◆ rendertarget_GetPixelsPerDip()

static float WINAPI rendertarget_GetPixelsPerDip ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 502 of file gdiinterop.c.

503{
505
506 TRACE("%p.\n", iface);
507
508 return target->ppdip;
509}

◆ rendertarget_GetSize()

static HRESULT WINAPI rendertarget_GetSize ( IDWriteBitmapRenderTarget1 *  iface,
SIZE *  size 
)
static

Definition at line 544 of file gdiinterop.c.

545{
547
548 TRACE("%p, %p.\n", iface, size);
549
550 *size = target->size;
551 return S_OK;
552}

◆ rendertarget_GetTextAntialiasMode()

static DWRITE_TEXT_ANTIALIAS_MODE WINAPI rendertarget_GetTextAntialiasMode ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 566 of file gdiinterop.c.

567{
569
570 TRACE("%p.\n", iface);
571
572 return target->antialiasmode;
573}

◆ rendertarget_QueryInterface()

static HRESULT WINAPI rendertarget_QueryInterface ( IDWriteBitmapRenderTarget1 *  iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 229 of file gdiinterop.c.

230{
231 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
232
233 if (IsEqualIID(riid, &IID_IDWriteBitmapRenderTarget1) ||
234 IsEqualIID(riid, &IID_IDWriteBitmapRenderTarget) ||
236 {
237 *obj = iface;
238 IDWriteBitmapRenderTarget1_AddRef(iface);
239 return S_OK;
240 }
241
242 WARN("%s not implemented.\n", debugstr_guid(riid));
243
244 *obj = NULL;
245
246 return E_NOINTERFACE;
247}

◆ rendertarget_Release()

static ULONG WINAPI rendertarget_Release ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 259 of file gdiinterop.c.

260{
263
264 TRACE("%p, refcount %lu.\n", iface, refcount);
265
266 if (!refcount)
267 {
268 IDWriteFactory7_Release(target->factory);
269 DeleteDC(target->hdc);
270 free(target);
271 }
272
273 return refcount;
274}
BOOL WINAPI DeleteDC(_In_ HDC)

◆ rendertarget_Resize()

static HRESULT WINAPI rendertarget_Resize ( IDWriteBitmapRenderTarget1 *  iface,
UINT32  width,
UINT32  height 
)
static

Definition at line 554 of file gdiinterop.c.

555{
557
558 TRACE("%p, %u, %u.\n", iface, width, height);
559
560 if (target->size.cx == width && target->size.cy == height)
561 return S_OK;
562
564}

◆ rendertarget_SetCurrentTransform()

static HRESULT WINAPI rendertarget_SetCurrentTransform ( IDWriteBitmapRenderTarget1 *  iface,
DWRITE_MATRIX const *  transform 
)
static

Definition at line 534 of file gdiinterop.c.

535{
537
538 TRACE("%p, %p.\n", iface, transform);
539
541 return S_OK;
542}

◆ rendertarget_SetPixelsPerDip()

static HRESULT WINAPI rendertarget_SetPixelsPerDip ( IDWriteBitmapRenderTarget1 *  iface,
float  ppdip 
)
static

Definition at line 511 of file gdiinterop.c.

512{
514
515 TRACE("%p, %.2f.\n", iface, ppdip);
516
517 if (ppdip <= 0.0f)
518 return E_INVALIDARG;
519
520 target->ppdip = ppdip;
521 return S_OK;
522}
float ppdip
Definition: gdiinterop.c:49

◆ rendertarget_SetTextAntialiasMode()

static HRESULT WINAPI rendertarget_SetTextAntialiasMode ( IDWriteBitmapRenderTarget1 *  iface,
DWRITE_TEXT_ANTIALIAS_MODE  mode 
)
static

Definition at line 575 of file gdiinterop.c.

576{
578
579 TRACE("%p, %d.\n", iface, mode);
580
581 if ((DWORD)mode > DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE)
582 return E_INVALIDARG;
583
584 target->antialiasmode = mode;
585 return S_OK;
586}
GLenum mode
Definition: glext.h:6217

◆ rendertarget_sink_AddBeziers()

static void WINAPI rendertarget_sink_AddBeziers ( ID2D1SimplifiedGeometrySink *  iface,
const D2D1_BEZIER_SEGMENT *  beziers,
UINT32  count 
)
static

Definition at line 185 of file gdiinterop.c.

186{
188 POINT points[3];
189
190 while (count--)
191 {
192 points[0].x = beziers->point1.x;
193 points[0].y = beziers->point1.y;
194 points[1].x = beziers->point2.x;
195 points[1].y = beziers->point2.y;
196 points[2].x = beziers->point3.x;
197 points[2].y = beziers->point3.y;
198
199 PolyBezierTo(target->hdc, points, 3);
200 beziers++;
201 }
202}
static struct rendertarget * impl_from_ID2D1SimplifiedGeometrySink(ID2D1SimplifiedGeometrySink *iface)
Definition: gdiinterop.c:114
GLuint GLuint GLsizei count
Definition: gl.h:1545
GLsizei const GLfloat * points
Definition: glext.h:8112
D2D1_POINT_2F point1
Definition: d2d1.idl:299
D2D1_POINT_2F point3
Definition: d2d1.idl:301
D2D1_POINT_2F point2
Definition: d2d1.idl:300
long x
Definition: dcommon.idl:24
BOOL WINAPI PolyBezierTo(_In_ HDC hdc, _In_reads_(cpt) const POINT *apt, _In_ DWORD cpt)
Definition: painting.c:281

◆ rendertarget_sink_AddLines()

static void WINAPI rendertarget_sink_AddLines ( ID2D1SimplifiedGeometrySink *  iface,
const D2D1_POINT_2F *  points,
UINT32  count 
)
static

Definition at line 174 of file gdiinterop.c.

175{
177
178 while (count--)
179 {
180 LineTo(target->hdc, points->x, points->y);
181 points++;
182 }
183}
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)

◆ rendertarget_sink_AddRef()

static ULONG WINAPI rendertarget_sink_AddRef ( ID2D1SimplifiedGeometrySink *  iface)
static

Definition at line 146 of file gdiinterop.c.

147{
149 return IDWriteBitmapRenderTarget1_AddRef(&target->IDWriteBitmapRenderTarget1_iface);
150}

◆ rendertarget_sink_BeginFigure()

static void WINAPI rendertarget_sink_BeginFigure ( ID2D1SimplifiedGeometrySink *  iface,
D2D1_POINT_2F  startPoint,
D2D1_FIGURE_BEGIN  figureBegin 
)
static

Definition at line 168 of file gdiinterop.c.

169{
171 MoveToEx(target->hdc, startPoint.x, startPoint.y, NULL);
172}
BOOL WINAPI MoveToEx(_In_ HDC, _In_ int, _In_ int, _Out_opt_ LPPOINT)

◆ rendertarget_sink_Close()

static HRESULT WINAPI rendertarget_sink_Close ( ID2D1SimplifiedGeometrySink *  iface)
static

Definition at line 210 of file gdiinterop.c.

211{
212 return S_OK;
213}

◆ rendertarget_sink_EndFigure()

static void WINAPI rendertarget_sink_EndFigure ( ID2D1SimplifiedGeometrySink *  iface,
D2D1_FIGURE_END  figureEnd 
)
static

Definition at line 204 of file gdiinterop.c.

205{
207 CloseFigure(target->hdc);
208}
BOOL WINAPI CloseFigure(_In_ HDC hdc)

◆ rendertarget_sink_QueryInterface()

static HRESULT WINAPI rendertarget_sink_QueryInterface ( ID2D1SimplifiedGeometrySink *  iface,
REFIID  riid,
void **  obj 
)
static

Definition at line 129 of file gdiinterop.c.

130{
131 if (IsEqualIID(riid, &IID_ID2D1SimplifiedGeometrySink) ||
133 {
134 *obj = iface;
135 ID2D1SimplifiedGeometrySink_AddRef(iface);
136 return S_OK;
137 }
138
139 WARN("%s not implemented.\n", debugstr_guid(riid));
140
141 *obj = NULL;
142
143 return E_NOINTERFACE;
144}

◆ rendertarget_sink_Release()

static ULONG WINAPI rendertarget_sink_Release ( ID2D1SimplifiedGeometrySink *  iface)
static

Definition at line 152 of file gdiinterop.c.

153{
155 return IDWriteBitmapRenderTarget1_Release(&target->IDWriteBitmapRenderTarget1_iface);
156}

◆ rendertarget_sink_SetFillMode()

static void WINAPI rendertarget_sink_SetFillMode ( ID2D1SimplifiedGeometrySink *  iface,
D2D1_FILL_MODE  mode 
)
static

Definition at line 158 of file gdiinterop.c.

159{
162}
#define WINDING
Definition: constants.h:279
#define ALTERNATE
Definition: constants.h:278
@ D2D1_FILL_MODE_ALTERNATE
Definition: d2d1.idl:85
int WINAPI SetPolyFillMode(_In_ HDC, _In_ int)
Definition: dc.c:1174

◆ rendertarget_sink_SetSegmentFlags()

static void WINAPI rendertarget_sink_SetSegmentFlags ( ID2D1SimplifiedGeometrySink *  iface,
D2D1_PATH_SEGMENT  vertexFlags 
)
static

Definition at line 164 of file gdiinterop.c.

165{
166}

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( dwrite  )

Variable Documentation

◆ gdiinteropvtbl

const IDWriteGdiInterop1Vtbl gdiinteropvtbl
static
Initial value:
=
{
}
static HRESULT WINAPI gdiinterop_ConvertFontToLOGFONT(IDWriteGdiInterop1 *iface, IDWriteFont *font, LOGFONTW *logfont, BOOL *is_systemfont)
Definition: gdiinterop.c:693
static HRESULT WINAPI gdiinterop1_GetFontSignature_(IDWriteGdiInterop1 *iface, IDWriteFontFace *fontface, FONTSIGNATURE *fontsig)
Definition: gdiinterop.c:895
static HRESULT WINAPI gdiinterop1_CreateFontFromLOGFONT(IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFontCollection *collection, IDWriteFont **font)
Definition: gdiinterop.c:847
static HRESULT WINAPI gdiinterop_CreateFontFromLOGFONT(IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFont **font)
Definition: gdiinterop.c:685
static HRESULT WINAPI gdiinterop1_GetFontSignature(IDWriteGdiInterop1 *iface, IDWriteFont *font, FONTSIGNATURE *fontsig)
Definition: gdiinterop.c:903
static HRESULT WINAPI gdiinterop_CreateBitmapRenderTarget(IDWriteGdiInterop1 *iface, HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target)
Definition: gdiinterop.c:837
static HRESULT WINAPI gdiinterop_ConvertFontFaceToLOGFONT(IDWriteGdiInterop1 *iface, IDWriteFontFace *fontface, LOGFONTW *logfont)
Definition: gdiinterop.c:728
static HRESULT WINAPI gdiinterop1_GetMatchingFontsByLOGFONT(IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFontSet *fontset, IDWriteFontSet **subset)
Definition: gdiinterop.c:913
static HRESULT WINAPI gdiinterop_CreateFontFaceFromHdc(IDWriteGdiInterop1 *iface, HDC hdc, IDWriteFontFace **fontface)
Definition: gdiinterop.c:768
static ULONG WINAPI gdiinterop_AddRef(IDWriteGdiInterop1 *iface)
Definition: gdiinterop.c:658
static ULONG WINAPI gdiinterop_Release(IDWriteGdiInterop1 *iface)
Definition: gdiinterop.c:668
static HRESULT WINAPI gdiinterop_QueryInterface(IDWriteGdiInterop1 *iface, REFIID riid, void **obj)
Definition: gdiinterop.c:639

Definition at line 930 of file gdiinterop.c.

Referenced by create_gdiinterop().

◆ memresourceloadervtbl

const IDWriteFontFileLoaderVtbl memresourceloadervtbl
static
Initial value:
=
{
}
static HRESULT WINAPI memresourceloader_QueryInterface(IDWriteFontFileLoader *iface, REFIID riid, void **out)
Definition: gdiinterop.c:1053
static ULONG WINAPI memresourceloader_Release(IDWriteFontFileLoader *iface)
Definition: gdiinterop.c:1073
static HRESULT WINAPI memresourceloader_CreateStreamFromKey(IDWriteFontFileLoader *iface, void const *key, UINT32 key_size, IDWriteFontFileStream **ret)
Definition: gdiinterop.c:1078
static ULONG WINAPI memresourceloader_AddRef(IDWriteFontFileLoader *iface)
Definition: gdiinterop.c:1068

Definition at line 1102 of file gdiinterop.c.

Referenced by create_gdiinterop().

◆ memresourcestreamvtbl

const IDWriteFontFileStreamVtbl memresourcestreamvtbl
static
Initial value:
=
{
}
static HRESULT WINAPI memresourcestream_GetLastWriteTime(IDWriteFontFileStream *iface, UINT64 *last_writetime)
Definition: gdiinterop.c:1035
static HRESULT WINAPI memresourcestream_GetFileSize(IDWriteFontFileStream *iface, UINT64 *size)
Definition: gdiinterop.c:1020
static HRESULT WINAPI memresourcestream_QueryInterface(IDWriteFontFileStream *iface, REFIID riid, void **out)
Definition: gdiinterop.c:946
static void WINAPI memresourcestream_ReleaseFileFragment(IDWriteFontFileStream *iface, void *fragment_context)
Definition: gdiinterop.c:1013
static ULONG WINAPI memresourcestream_Release(IDWriteFontFileStream *iface)
Definition: gdiinterop.c:971
static ULONG WINAPI memresourcestream_AddRef(IDWriteFontFileStream *iface)
Definition: gdiinterop.c:961
static HRESULT WINAPI memresourcestream_ReadFileFragment(IDWriteFontFileStream *iface, void const **fragment_start, UINT64 offset, UINT64 fragment_size, void **fragment_context)
Definition: gdiinterop.c:984

Definition at line 1042 of file gdiinterop.c.

Referenced by memresourceloader_CreateStreamFromKey().

◆ rendertargetsinkvtbl

const ID2D1SimplifiedGeometrySinkVtbl rendertargetsinkvtbl
static
Initial value:
=
{
}
static ULONG WINAPI rendertarget_sink_Release(ID2D1SimplifiedGeometrySink *iface)
Definition: gdiinterop.c:152
static void WINAPI rendertarget_sink_EndFigure(ID2D1SimplifiedGeometrySink *iface, D2D1_FIGURE_END figureEnd)
Definition: gdiinterop.c:204
static void WINAPI rendertarget_sink_BeginFigure(ID2D1SimplifiedGeometrySink *iface, D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin)
Definition: gdiinterop.c:168
static ULONG WINAPI rendertarget_sink_AddRef(ID2D1SimplifiedGeometrySink *iface)
Definition: gdiinterop.c:146
static HRESULT WINAPI rendertarget_sink_QueryInterface(ID2D1SimplifiedGeometrySink *iface, REFIID riid, void **obj)
Definition: gdiinterop.c:129
static void WINAPI rendertarget_sink_AddBeziers(ID2D1SimplifiedGeometrySink *iface, const D2D1_BEZIER_SEGMENT *beziers, UINT32 count)
Definition: gdiinterop.c:185
static void WINAPI rendertarget_sink_SetFillMode(ID2D1SimplifiedGeometrySink *iface, D2D1_FILL_MODE mode)
Definition: gdiinterop.c:158
static HRESULT WINAPI rendertarget_sink_Close(ID2D1SimplifiedGeometrySink *iface)
Definition: gdiinterop.c:210
static void WINAPI rendertarget_sink_AddLines(ID2D1SimplifiedGeometrySink *iface, const D2D1_POINT_2F *points, UINT32 count)
Definition: gdiinterop.c:174
static void WINAPI rendertarget_sink_SetSegmentFlags(ID2D1SimplifiedGeometrySink *iface, D2D1_PATH_SEGMENT vertexFlags)
Definition: gdiinterop.c:164

Definition at line 215 of file gdiinterop.c.

Referenced by create_rendertarget().

◆ rendertargetvtbl

const IDWriteBitmapRenderTarget1Vtbl rendertargetvtbl
static
Initial value:
=
{
}
static HRESULT WINAPI rendertarget_SetPixelsPerDip(IDWriteBitmapRenderTarget1 *iface, float ppdip)
Definition: gdiinterop.c:511
static ULONG WINAPI rendertarget_Release(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:259
static ULONG WINAPI rendertarget_AddRef(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:249
static HDC WINAPI rendertarget_GetMemoryDC(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:493
static HRESULT WINAPI rendertarget_DrawGlyphRun(IDWriteBitmapRenderTarget1 *iface, FLOAT originX, FLOAT originY, DWRITE_MEASURING_MODE measuring_mode, DWRITE_GLYPH_RUN const *run, IDWriteRenderingParams *params, COLORREF color, RECT *bbox_ret)
Definition: gdiinterop.c:340
static DWRITE_TEXT_ANTIALIAS_MODE WINAPI rendertarget_GetTextAntialiasMode(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:566
static HRESULT WINAPI rendertarget_GetSize(IDWriteBitmapRenderTarget1 *iface, SIZE *size)
Definition: gdiinterop.c:544
static HRESULT WINAPI rendertarget_SetCurrentTransform(IDWriteBitmapRenderTarget1 *iface, DWRITE_MATRIX const *transform)
Definition: gdiinterop.c:534
static HRESULT WINAPI rendertarget_GetCurrentTransform(IDWriteBitmapRenderTarget1 *iface, DWRITE_MATRIX *transform)
Definition: gdiinterop.c:524
static HRESULT WINAPI rendertarget_SetTextAntialiasMode(IDWriteBitmapRenderTarget1 *iface, DWRITE_TEXT_ANTIALIAS_MODE mode)
Definition: gdiinterop.c:575
static HRESULT WINAPI rendertarget_QueryInterface(IDWriteBitmapRenderTarget1 *iface, REFIID riid, void **obj)
Definition: gdiinterop.c:229
static float WINAPI rendertarget_GetPixelsPerDip(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:502
static HRESULT WINAPI rendertarget_Resize(IDWriteBitmapRenderTarget1 *iface, UINT32 width, UINT32 height)
Definition: gdiinterop.c:554

Definition at line 588 of file gdiinterop.c.

Referenced by create_rendertarget().