ReactOS 0.4.17-dev-1137-g7772194
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 285 of file gdiinterop.c.

286{
287 return (src * alpha + dst * (255 - alpha) + 127) / 255;
288}
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 297 of file gdiinterop.c.

298{
299 return blend_color(r, text >> 16, alpha) << 16 |
300 blend_color(g, text >> 8, alpha) << 8 |
302}
const WCHAR * text
Definition: package.c:1826
static BYTE blend_color(BYTE dst, BYTE src, BYTE alpha)
Definition: gdiinterop.c:285
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 290 of file gdiinterop.c.

291{
292 return blend_color(r, text >> 16, alpha[0]) << 16 |
293 blend_color(g, text >> 8, alpha[1]) << 8 |
294 blend_color(b, text, alpha[2]);
295}

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 304 of file gdiinterop.c.

305{
306 DWORD *dst_ptr = get_pixel_ptr_32(dib, rect->left, rect->top);
307 int x, y, src_width = rect->right - rect->left;
308
309 for (y = rect->top; y < rect->bottom; y++) {
310 for (x = 0; x < src_width; x++) {
311 if (!src[x]) continue;
312 if (src[x] == DWRITE_ALPHA_MAX)
313 dst_ptr[x] = text_pixel;
314 else
315 dst_ptr[x] = blend_pixel(dst_ptr[x] >> 16, dst_ptr[x] >> 8, dst_ptr[x], text_pixel, src[x]);
316 }
317
318 src += src_width;
319 dst_ptr += dib->stride / 4;
320 }
321}
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:297
static DWORD * get_pixel_ptr_32(struct dib_data *dib, int x, int y)
Definition: gdiinterop.c:280
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 323 of file gdiinterop.c.

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

Referenced by rendertarget_DrawGlyphRun().

◆ colorref_to_pixel_888()

static DWORD colorref_to_pixel_888 ( COLORREF  color)
inlinestatic

Definition at line 339 of file gdiinterop.c.

340{
341 return (((color >> 16) & 0xff) | (color & 0xff00) | ((color << 16) & 0xff0000));
342}
GLuint color
Definition: glext.h:6243

Referenced by rendertarget_DrawGlyphRun().

◆ create_gdiinterop()

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

Definition at line 1114 of file gdiinterop.c.

1115{
1116 struct gdiinterop *interop;
1117
1118 *ret = NULL;
1119
1120 if (!(interop = malloc(sizeof(*interop))))
1121 return E_OUTOFMEMORY;
1122
1123 interop->IDWriteGdiInterop1_iface.lpVtbl = &gdiinteropvtbl;
1125 interop->refcount = 1;
1126 interop->factory = factory;
1127 IDWriteFactory7_AddRef(interop->factory);
1128 IDWriteFactory7_RegisterFontFileLoader(factory, &interop->IDWriteFontFileLoader_iface);
1129
1130 *ret = &interop->IDWriteGdiInterop1_iface;
1131 return S_OK;
1132}
#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:1106
static const IDWriteGdiInterop1Vtbl gdiinteropvtbl
Definition: gdiinterop.c:934
#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 609 of file gdiinterop.c.

611{
612 struct rendertarget *target;
613 HRESULT hr;
614
615 *ret = NULL;
616
617 if (!(target = malloc(sizeof(*target))))
618 return E_OUTOFMEMORY;
619
620 target->IDWriteBitmapRenderTarget1_iface.lpVtbl = &rendertargetvtbl;
621 target->ID2D1SimplifiedGeometrySink_iface.lpVtbl = &rendertargetsinkvtbl;
622 target->refcount = 1;
623
627 if (FAILED(hr)) {
628 IDWriteBitmapRenderTarget1_Release(&target->IDWriteBitmapRenderTarget1_iface);
629 return hr;
630 }
631
632 target->m = identity;
633 target->ppdip = GetDeviceCaps(target->hdc, LOGPIXELSX) / 96.0f;
634 target->antialiasmode = DWRITE_TEXT_ANTIALIAS_MODE_CLEARTYPE;
635 target->factory = factory;
636 IDWriteFactory7_AddRef(factory);
637
638 *ret = (IDWriteBitmapRenderTarget*)&target->IDWriteBitmapRenderTarget1_iface;
639
640 return S_OK;
641}
HRESULT hr
Definition: delayimp.cpp:582
static const IDWriteBitmapRenderTarget1Vtbl rendertargetvtbl
Definition: gdiinterop.c:592
static HRESULT create_target_dibsection(struct rendertarget *target, UINT32 width, UINT32 height)
Definition: gdiinterop.c:76
static const ID2D1SimplifiedGeometrySinkVtbl rendertargetsinkvtbl
Definition: gdiinterop.c:219
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#ifdef _MSC_VER
79 char bmibuf[FIELD_OFFSET(BITMAPINFO, bmiColors) + 256 * sizeof(RGBQUAD)];
80#else
81 char bmibuf[FIELD_OFFSET(BITMAPINFO, bmiColors[256])];
82#endif
83 BITMAPINFO *bmi = (BITMAPINFO*)bmibuf;
85
86 target->size.cx = width;
87 target->size.cy = height;
88
89 memset(bmi, 0, sizeof(bmibuf));
90 bmi->bmiHeader.biSize = sizeof(bmi->bmiHeader);
92 bmi->bmiHeader.biWidth = width;
93 bmi->bmiHeader.biBitCount = 32;
94 bmi->bmiHeader.biPlanes = 1;
96
97 hbm = CreateDIBSection(target->hdc, bmi, DIB_RGB_COLORS, (void**)&target->dib.ptr, NULL, 0);
98 if (!hbm) {
99 hbm = CreateBitmap(1, 1, 1, 1, NULL);
100 target->dib.ptr = NULL;
101 target->dib.stride = 0;
102 target->dib.width = 0;
103 }
104 else {
105 target->dib.stride = get_dib_stride(width, 32);
106 target->dib.width = width;
107 }
108
110 return S_OK;
111}
ULONG RGBQUAD
Definition: precomp.h:49
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:2804
#define memset(x, y, z)
Definition: compat.h:39
USHORT biBitCount
Definition: precomp.h:36
ULONG biCompression
Definition: precomp.h:37
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 851 of file gdiinterop.c.

853{
854 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
855 IDWriteFontFamily *family;
857 BOOL exists = FALSE;
859 HRESULT hr;
860
861 TRACE("%p, %p, %p, %p.\n", iface, logfont, collection, font);
862
863 *font = NULL;
864
865 if (!logfont) return E_INVALIDARG;
866
867 if (collection)
868 IDWriteFontCollection_AddRef(collection);
869 else {
870 hr = IDWriteFactory5_GetSystemFontCollection((IDWriteFactory5 *)interop->factory, FALSE, (IDWriteFontCollection1 **)&collection, FALSE);
871 if (FAILED(hr)) {
872 ERR("failed to get system font collection: 0x%08lx.\n", hr);
873 return hr;
874 }
875 }
876
877 hr = IDWriteFontCollection_FindFamilyName(collection, logfont->lfFaceName, &index, &exists);
878 if (FAILED(hr))
879 goto done;
880
881 if (!exists) {
883 goto done;
884 }
885
886 hr = IDWriteFontCollection_GetFontFamily(collection, index, &family);
887 if (FAILED(hr))
888 goto done;
889
891 hr = IDWriteFontFamily_GetFirstMatchingFont(family, logfont->lfWeight, DWRITE_FONT_STRETCH_NORMAL, style, font);
892 IDWriteFontFamily_Release(family);
893
894done:
895 IDWriteFontCollection_Release(collection);
896 return hr;
897}
#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:123
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 907 of file gdiinterop.c.

908{
909 TRACE("%p, %p, %p.\n", iface, font, fontsig);
910
911 if (!font)
912 return E_INVALIDARG;
913
914 return get_fontsig_from_font(font, fontsig);
915}
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 899 of file gdiinterop.c.

901{
902 TRACE("%p, %p, %p.\n", iface, fontface, fontsig);
903
904 return get_fontsig_from_fontface(fontface, fontsig);
905}
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 917 of file gdiinterop.c.

919{
921
922 TRACE("%p, %p, %p, %p.\n", iface, logfont, fontset, subset);
923
924 if (!logfont || !fontset)
925 return E_INVALIDARG;
926
927 property.propertyId = DWRITE_FONT_PROPERTY_ID_WIN32_FAMILY_NAME;
928 property.propertyValue = logfont->lfFaceName;
929 property.localeName = L"";
930
931 return IDWriteFontSet_GetMatchingFonts(fontset, &property, 1, subset);
932}
#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 662 of file gdiinterop.c.

663{
664 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
666
667 TRACE("%p, refcount %lu.\n", iface, refcount);
668
669 return refcount;
670}
#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 732 of file gdiinterop.c.

734{
735 TRACE("%p, %p, %p.\n", iface, fontface, logfont);
736
737 memset(logfont, 0, sizeof(*logfont));
738
739 if (!fontface)
740 return E_INVALIDARG;
741
742 get_logfont_from_fontface(fontface, logfont);
743 logfont->lfCharSet = DEFAULT_CHARSET;
745
746 return S_OK;
747}
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 697 of file gdiinterop.c.

699{
701 IDWriteFontFamily *family;
702 HRESULT hr;
703
704 TRACE("%p, %p, %p, %p.\n", iface, font, logfont, is_systemfont);
705
706 *is_systemfont = FALSE;
707
708 memset(logfont, 0, sizeof(*logfont));
709
710 if (!font)
711 return E_INVALIDARG;
712
713 hr = IDWriteFont_GetFontFamily(font, &family);
714 if (FAILED(hr))
715 return hr;
716
717 hr = IDWriteFontFamily_GetFontCollection(family, &collection);
718 IDWriteFontFamily_Release(family);
719 if (FAILED(hr))
720 return hr;
721
722 *is_systemfont = is_system_collection(collection);
723 IDWriteFontCollection_Release(collection);
724
725 get_logfont_from_font(font, logfont);
726 logfont->lfCharSet = DEFAULT_CHARSET;
728
729 return hr;
730}
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 841 of file gdiinterop.c.

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

◆ gdiinterop_CreateFontFaceFromHdc()

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

Definition at line 772 of file gdiinterop.c.

774{
775 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
777 struct font_fileinfo *fileinfo;
779 DWRITE_FONT_FACE_TYPE facetype;
781 BOOL is_supported;
782 UINT32 facenum;
783 SIZE_T needed;
784 HRESULT hr;
785
786 TRACE("%p, %p, %p.\n", iface, hdc, fontface);
787
788 *fontface = NULL;
789
790 if (!hdc)
791 return E_INVALIDARG;
792
793 /* get selected font id */
794 info.size = sizeof(info);
796 WARN("failed to get selected font id\n");
797 return E_FAIL;
798 }
799
800 needed = 0;
801 GetFontFileInfo(info.instance_id, 0, NULL, 0, &needed);
802 if (needed == 0) {
803 WARN("failed to get font file info size\n");
804 return E_FAIL;
805 }
806
807 if (!(fileinfo = malloc(needed)))
808 return E_OUTOFMEMORY;
809
810 if (!GetFontFileInfo(info.instance_id, 0, fileinfo, needed, &needed))
811 {
812 free(fileinfo);
813 return E_FAIL;
814 }
815
816 if (*fileinfo->path)
817 hr = IDWriteFactory7_CreateFontFileReference(interop->factory, fileinfo->path, &fileinfo->writetime, &file);
818 else
819 hr = IDWriteFactory7_CreateCustomFontFileReference(interop->factory, &info.instance_id,
820 sizeof(info.instance_id), &interop->IDWriteFontFileLoader_iface, &file);
821
822 free(fileinfo);
823 if (FAILED(hr))
824 return hr;
825
826 is_supported = FALSE;
827 hr = IDWriteFontFile_Analyze(file, &is_supported, &filetype, &facetype, &facenum);
828 if (SUCCEEDED(hr)) {
829 if (is_supported)
830 /* Simulations flags values match DWRITE_FONT_SIMULATIONS */
831 hr = IDWriteFactory7_CreateFontFace(interop->factory, facetype, 1, &file, info.face_index,
832 info.simulations, fontface);
833 else
835 }
836
837 IDWriteFontFile_Release(file);
838 return hr;
839}
#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 689 of file gdiinterop.c.

691{
692 TRACE("%p, %p, %p.\n", iface, logfont, font);
693
694 return IDWriteGdiInterop1_CreateFontFromLOGFONT(iface, logfont, NULL, font);
695}

◆ gdiinterop_QueryInterface()

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

Definition at line 643 of file gdiinterop.c.

644{
645 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), obj);
646
647 if (IsEqualIID(riid, &IID_IDWriteGdiInterop1) ||
648 IsEqualIID(riid, &IID_IDWriteGdiInterop) ||
650 {
651 *obj = iface;
652 IDWriteGdiInterop1_AddRef(iface);
653 return S_OK;
654 }
655
656 WARN("%s not implemented.\n", debugstr_guid(riid));
657
658 *obj = NULL;
659 return E_NOINTERFACE;
660}
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 672 of file gdiinterop.c.

673{
674 struct gdiinterop *interop = impl_from_IDWriteGdiInterop1(iface);
676
677 TRACE("%p, refcount %lu.\n", iface, refcount);
678
679 if (!refcount)
680 {
681 IDWriteFactory7_UnregisterFontFileLoader(interop->factory, &interop->IDWriteFontFileLoader_iface);
682 factory_detach_gdiinterop(interop->factory, iface);
683 free(interop);
684 }
685
686 return refcount;
687}
#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 280 of file gdiinterop.c.

281{
282 return (DWORD *)((BYTE*)dib->ptr + y * dib->stride + x * 4);
283}
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 118 of file gdiinterop.c.

119{
120 return CONTAINING_RECORD(iface, struct rendertarget, ID2D1SimplifiedGeometrySink_iface);
121}
#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 128 of file gdiinterop.c.

129{
130 return CONTAINING_RECORD(iface, struct memresource_stream, IDWriteFontFileStream_iface);
131}

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 1072 of file gdiinterop.c.

1073{
1074 return 2;
1075}

◆ memresourceloader_CreateStreamFromKey()

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

Definition at line 1082 of file gdiinterop.c.

1084{
1085 struct memresource_stream *stream;
1086
1087 TRACE("%p, %p, %u, %p.\n", iface, key, key_size, ret);
1088
1089 *ret = NULL;
1090
1091 if (!key || key_size != sizeof(DWORD))
1092 return E_INVALIDARG;
1093
1094 if (!(stream = malloc(sizeof(*stream))))
1095 return E_OUTOFMEMORY;
1096
1097 stream->IDWriteFontFileStream_iface.lpVtbl = &memresourcestreamvtbl;
1098 stream->refcount = 1;
1099 memcpy(&stream->key, key, sizeof(stream->key));
1100
1101 *ret = &stream->IDWriteFontFileStream_iface;
1102
1103 return S_OK;
1104}
static const IDWriteFontFileStreamVtbl memresourcestreamvtbl
Definition: gdiinterop.c:1046
#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 1057 of file gdiinterop.c.

1058{
1059 TRACE("%p, %s, %p.\n", iface, debugstr_guid(riid), out);
1060
1061 if (IsEqualIID(&IID_IDWriteFontFileLoader, riid) || IsEqualIID(&IID_IUnknown, riid)) {
1062 *out = iface;
1063 IDWriteFontFileLoader_AddRef(iface);
1064 return S_OK;
1065 }
1066
1067 *out = NULL;
1068 WARN("Unsupported interface %s.\n", debugstr_guid(riid));
1069 return E_NOINTERFACE;
1070}
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 1077 of file gdiinterop.c.

1078{
1079 return 1;
1080}

◆ memresourcestream_AddRef()

static ULONG WINAPI memresourcestream_AddRef ( IDWriteFontFileStream *  iface)
static

Definition at line 965 of file gdiinterop.c.

966{
969
970 TRACE("%p, refcount %ld.\n", iface, refcount);
971
972 return refcount;
973}
static struct memresource_stream * impl_from_IDWriteFontFileStream(IDWriteFontFileStream *iface)
Definition: gdiinterop.c:128
uint32_t ULONG
Definition: typedefs.h:59

◆ memresourcestream_GetFileSize()

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

Definition at line 1024 of file gdiinterop.c.

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

◆ memresourcestream_GetLastWriteTime()

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

Definition at line 1039 of file gdiinterop.c.

1040{
1041 TRACE("%p, %p.\n", iface, last_writetime);
1042
1043 return E_NOTIMPL;
1044}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ memresourcestream_QueryInterface()

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

Definition at line 950 of file gdiinterop.c.

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

◆ 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 988 of file gdiinterop.c.

990{
992 struct font_fileinfo fileinfo;
993 void *fragment;
994
995 TRACE("%p, %p, %s, %s, %p.\n", iface, fragment_start, wine_dbgstr_longlong(offset),
996 wine_dbgstr_longlong(fragment_size), fragment_context);
997
998 *fragment_context = NULL;
999 *fragment_start = NULL;
1000
1001 if (!GetFontFileInfo(stream->key, 0, &fileinfo, sizeof(fileinfo), NULL))
1002 return E_INVALIDARG;
1003
1004 if ((offset >= fileinfo.size.QuadPart - 1) || (fragment_size > fileinfo.size.QuadPart - offset))
1005 return E_INVALIDARG;
1006
1007 if (!(fragment = malloc(fragment_size)))
1008 return E_OUTOFMEMORY;
1009
1010 if (!GetFontFileData(stream->key, 0, offset, fragment, fragment_size))
1011 return E_FAIL;
1012
1013 *fragment_start = *fragment_context = fragment;
1014 return S_OK;
1015}
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 975 of file gdiinterop.c.

976{
979
980 TRACE("%p, refcount %ld.\n", iface, refcount);
981
982 if (!refcount)
983 free(stream);
984
985 return refcount;
986}

◆ memresourcestream_ReleaseFileFragment()

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

Definition at line 1017 of file gdiinterop.c.

1018{
1019 TRACE("%p, %p.\n", iface, fragment_context);
1020
1021 free(fragment_context);
1022}

◆ rendertarget_AddRef()

static ULONG WINAPI rendertarget_AddRef ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 253 of file gdiinterop.c.

254{
257
258 TRACE("%p, refcount %lu.\n", iface, refcount);
259
260 return refcount;
261}
static struct rendertarget * impl_from_IDWriteBitmapRenderTarget1(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:113
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 344 of file gdiinterop.c.

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

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

◆ rendertarget_GetMemoryDC()

static HDC WINAPI rendertarget_GetMemoryDC ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 497 of file gdiinterop.c.

498{
500
501 TRACE("%p.\n", iface);
502
503 return target->hdc;
504}

◆ rendertarget_GetPixelsPerDip()

static float WINAPI rendertarget_GetPixelsPerDip ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 506 of file gdiinterop.c.

507{
509
510 TRACE("%p.\n", iface);
511
512 return target->ppdip;
513}

◆ rendertarget_GetSize()

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

Definition at line 548 of file gdiinterop.c.

549{
551
552 TRACE("%p, %p.\n", iface, size);
553
554 *size = target->size;
555 return S_OK;
556}

◆ rendertarget_GetTextAntialiasMode()

static DWRITE_TEXT_ANTIALIAS_MODE WINAPI rendertarget_GetTextAntialiasMode ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 570 of file gdiinterop.c.

571{
573
574 TRACE("%p.\n", iface);
575
576 return target->antialiasmode;
577}

◆ rendertarget_QueryInterface()

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

Definition at line 233 of file gdiinterop.c.

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

◆ rendertarget_Release()

static ULONG WINAPI rendertarget_Release ( IDWriteBitmapRenderTarget1 *  iface)
static

Definition at line 263 of file gdiinterop.c.

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

◆ rendertarget_Resize()

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

Definition at line 558 of file gdiinterop.c.

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

◆ rendertarget_SetCurrentTransform()

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

Definition at line 538 of file gdiinterop.c.

539{
541
542 TRACE("%p, %p.\n", iface, transform);
543
545 return S_OK;
546}

◆ rendertarget_SetPixelsPerDip()

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

Definition at line 515 of file gdiinterop.c.

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

◆ rendertarget_SetTextAntialiasMode()

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

Definition at line 579 of file gdiinterop.c.

580{
582
583 TRACE("%p, %d.\n", iface, mode);
584
585 if ((DWORD)mode > DWRITE_TEXT_ANTIALIAS_MODE_GRAYSCALE)
586 return E_INVALIDARG;
587
588 target->antialiasmode = mode;
589 return S_OK;
590}
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 189 of file gdiinterop.c.

190{
192 POINT points[3];
193
194 while (count--)
195 {
196 points[0].x = beziers->point1.x;
197 points[0].y = beziers->point1.y;
198 points[1].x = beziers->point2.x;
199 points[1].y = beziers->point2.y;
200 points[2].x = beziers->point3.x;
201 points[2].y = beziers->point3.y;
202
203 PolyBezierTo(target->hdc, points, 3);
204 beziers++;
205 }
206}
static struct rendertarget * impl_from_ID2D1SimplifiedGeometrySink(ID2D1SimplifiedGeometrySink *iface)
Definition: gdiinterop.c:118
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 178 of file gdiinterop.c.

179{
181
182 while (count--)
183 {
184 LineTo(target->hdc, points->x, points->y);
185 points++;
186 }
187}
BOOL WINAPI LineTo(_In_ HDC, _In_ int, _In_ int)

◆ rendertarget_sink_AddRef()

static ULONG WINAPI rendertarget_sink_AddRef ( ID2D1SimplifiedGeometrySink *  iface)
static

Definition at line 150 of file gdiinterop.c.

151{
153 return IDWriteBitmapRenderTarget1_AddRef(&target->IDWriteBitmapRenderTarget1_iface);
154}

◆ rendertarget_sink_BeginFigure()

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

Definition at line 172 of file gdiinterop.c.

173{
175 MoveToEx(target->hdc, startPoint.x, startPoint.y, NULL);
176}
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 214 of file gdiinterop.c.

215{
216 return S_OK;
217}

◆ rendertarget_sink_EndFigure()

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

Definition at line 208 of file gdiinterop.c.

209{
211 CloseFigure(target->hdc);
212}
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 133 of file gdiinterop.c.

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

◆ rendertarget_sink_Release()

static ULONG WINAPI rendertarget_sink_Release ( ID2D1SimplifiedGeometrySink *  iface)
static

Definition at line 156 of file gdiinterop.c.

157{
159 return IDWriteBitmapRenderTarget1_Release(&target->IDWriteBitmapRenderTarget1_iface);
160}

◆ rendertarget_sink_SetFillMode()

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

Definition at line 162 of file gdiinterop.c.

163{
166}
#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 168 of file gdiinterop.c.

169{
170}

◆ 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:697
static HRESULT WINAPI gdiinterop1_GetFontSignature_(IDWriteGdiInterop1 *iface, IDWriteFontFace *fontface, FONTSIGNATURE *fontsig)
Definition: gdiinterop.c:899
static HRESULT WINAPI gdiinterop1_CreateFontFromLOGFONT(IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFontCollection *collection, IDWriteFont **font)
Definition: gdiinterop.c:851
static HRESULT WINAPI gdiinterop_CreateFontFromLOGFONT(IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFont **font)
Definition: gdiinterop.c:689
static HRESULT WINAPI gdiinterop1_GetFontSignature(IDWriteGdiInterop1 *iface, IDWriteFont *font, FONTSIGNATURE *fontsig)
Definition: gdiinterop.c:907
static HRESULT WINAPI gdiinterop_CreateBitmapRenderTarget(IDWriteGdiInterop1 *iface, HDC hdc, UINT32 width, UINT32 height, IDWriteBitmapRenderTarget **target)
Definition: gdiinterop.c:841
static HRESULT WINAPI gdiinterop_ConvertFontFaceToLOGFONT(IDWriteGdiInterop1 *iface, IDWriteFontFace *fontface, LOGFONTW *logfont)
Definition: gdiinterop.c:732
static HRESULT WINAPI gdiinterop1_GetMatchingFontsByLOGFONT(IDWriteGdiInterop1 *iface, LOGFONTW const *logfont, IDWriteFontSet *fontset, IDWriteFontSet **subset)
Definition: gdiinterop.c:917
static HRESULT WINAPI gdiinterop_CreateFontFaceFromHdc(IDWriteGdiInterop1 *iface, HDC hdc, IDWriteFontFace **fontface)
Definition: gdiinterop.c:772
static ULONG WINAPI gdiinterop_AddRef(IDWriteGdiInterop1 *iface)
Definition: gdiinterop.c:662
static ULONG WINAPI gdiinterop_Release(IDWriteGdiInterop1 *iface)
Definition: gdiinterop.c:672
static HRESULT WINAPI gdiinterop_QueryInterface(IDWriteGdiInterop1 *iface, REFIID riid, void **obj)
Definition: gdiinterop.c:643

Definition at line 934 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:1057
static ULONG WINAPI memresourceloader_Release(IDWriteFontFileLoader *iface)
Definition: gdiinterop.c:1077
static HRESULT WINAPI memresourceloader_CreateStreamFromKey(IDWriteFontFileLoader *iface, void const *key, UINT32 key_size, IDWriteFontFileStream **ret)
Definition: gdiinterop.c:1082
static ULONG WINAPI memresourceloader_AddRef(IDWriteFontFileLoader *iface)
Definition: gdiinterop.c:1072

Definition at line 1106 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:1039
static HRESULT WINAPI memresourcestream_GetFileSize(IDWriteFontFileStream *iface, UINT64 *size)
Definition: gdiinterop.c:1024
static HRESULT WINAPI memresourcestream_QueryInterface(IDWriteFontFileStream *iface, REFIID riid, void **out)
Definition: gdiinterop.c:950
static void WINAPI memresourcestream_ReleaseFileFragment(IDWriteFontFileStream *iface, void *fragment_context)
Definition: gdiinterop.c:1017
static ULONG WINAPI memresourcestream_Release(IDWriteFontFileStream *iface)
Definition: gdiinterop.c:975
static ULONG WINAPI memresourcestream_AddRef(IDWriteFontFileStream *iface)
Definition: gdiinterop.c:965
static HRESULT WINAPI memresourcestream_ReadFileFragment(IDWriteFontFileStream *iface, void const **fragment_start, UINT64 offset, UINT64 fragment_size, void **fragment_context)
Definition: gdiinterop.c:988

Definition at line 1046 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:156
static void WINAPI rendertarget_sink_EndFigure(ID2D1SimplifiedGeometrySink *iface, D2D1_FIGURE_END figureEnd)
Definition: gdiinterop.c:208
static void WINAPI rendertarget_sink_BeginFigure(ID2D1SimplifiedGeometrySink *iface, D2D1_POINT_2F startPoint, D2D1_FIGURE_BEGIN figureBegin)
Definition: gdiinterop.c:172
static ULONG WINAPI rendertarget_sink_AddRef(ID2D1SimplifiedGeometrySink *iface)
Definition: gdiinterop.c:150
static HRESULT WINAPI rendertarget_sink_QueryInterface(ID2D1SimplifiedGeometrySink *iface, REFIID riid, void **obj)
Definition: gdiinterop.c:133
static void WINAPI rendertarget_sink_AddBeziers(ID2D1SimplifiedGeometrySink *iface, const D2D1_BEZIER_SEGMENT *beziers, UINT32 count)
Definition: gdiinterop.c:189
static void WINAPI rendertarget_sink_SetFillMode(ID2D1SimplifiedGeometrySink *iface, D2D1_FILL_MODE mode)
Definition: gdiinterop.c:162
static HRESULT WINAPI rendertarget_sink_Close(ID2D1SimplifiedGeometrySink *iface)
Definition: gdiinterop.c:214
static void WINAPI rendertarget_sink_AddLines(ID2D1SimplifiedGeometrySink *iface, const D2D1_POINT_2F *points, UINT32 count)
Definition: gdiinterop.c:178
static void WINAPI rendertarget_sink_SetSegmentFlags(ID2D1SimplifiedGeometrySink *iface, D2D1_PATH_SEGMENT vertexFlags)
Definition: gdiinterop.c:168

Definition at line 219 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:515
static ULONG WINAPI rendertarget_Release(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:263
static ULONG WINAPI rendertarget_AddRef(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:253
static HDC WINAPI rendertarget_GetMemoryDC(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:497
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:344
static DWRITE_TEXT_ANTIALIAS_MODE WINAPI rendertarget_GetTextAntialiasMode(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:570
static HRESULT WINAPI rendertarget_GetSize(IDWriteBitmapRenderTarget1 *iface, SIZE *size)
Definition: gdiinterop.c:548
static HRESULT WINAPI rendertarget_SetCurrentTransform(IDWriteBitmapRenderTarget1 *iface, DWRITE_MATRIX const *transform)
Definition: gdiinterop.c:538
static HRESULT WINAPI rendertarget_GetCurrentTransform(IDWriteBitmapRenderTarget1 *iface, DWRITE_MATRIX *transform)
Definition: gdiinterop.c:528
static HRESULT WINAPI rendertarget_SetTextAntialiasMode(IDWriteBitmapRenderTarget1 *iface, DWRITE_TEXT_ANTIALIAS_MODE mode)
Definition: gdiinterop.c:579
static HRESULT WINAPI rendertarget_QueryInterface(IDWriteBitmapRenderTarget1 *iface, REFIID riid, void **obj)
Definition: gdiinterop.c:233
static float WINAPI rendertarget_GetPixelsPerDip(IDWriteBitmapRenderTarget1 *iface)
Definition: gdiinterop.c:506
static HRESULT WINAPI rendertarget_Resize(IDWriteBitmapRenderTarget1 *iface, UINT32 width, UINT32 height)
Definition: gdiinterop.c:558

Definition at line 592 of file gdiinterop.c.

Referenced by create_rendertarget().