pyglet 2.1.3__py3-none-any.whl → 2.1.4__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. pyglet/__init__.py +21 -9
  2. pyglet/__init__.pyi +3 -1
  3. pyglet/app/cocoa.py +6 -3
  4. pyglet/display/win32.py +14 -15
  5. pyglet/display/xlib_vidmoderestore.py +1 -1
  6. pyglet/extlibs/earcut.py +2 -2
  7. pyglet/font/__init__.py +3 -3
  8. pyglet/font/base.py +118 -51
  9. pyglet/font/dwrite/__init__.py +1381 -0
  10. pyglet/font/dwrite/d2d1_lib.py +637 -0
  11. pyglet/font/dwrite/d2d1_types_lib.py +60 -0
  12. pyglet/font/dwrite/dwrite_lib.py +1577 -0
  13. pyglet/font/fontconfig.py +79 -16
  14. pyglet/font/freetype.py +252 -77
  15. pyglet/font/freetype_lib.py +234 -125
  16. pyglet/font/harfbuzz/__init__.py +275 -0
  17. pyglet/font/harfbuzz/harfbuzz_lib.py +212 -0
  18. pyglet/font/quartz.py +432 -112
  19. pyglet/font/user.py +18 -11
  20. pyglet/font/win32.py +9 -1
  21. pyglet/gl/wgl.py +94 -87
  22. pyglet/gl/wglext_arb.py +472 -218
  23. pyglet/gl/wglext_nv.py +410 -188
  24. pyglet/gui/widgets.py +6 -1
  25. pyglet/image/codecs/bmp.py +3 -5
  26. pyglet/image/codecs/gdiplus.py +28 -9
  27. pyglet/image/codecs/wic.py +198 -489
  28. pyglet/image/codecs/wincodec_lib.py +413 -0
  29. pyglet/input/base.py +3 -2
  30. pyglet/input/macos/darwin_hid.py +28 -2
  31. pyglet/input/win32/directinput.py +2 -1
  32. pyglet/input/win32/xinput.py +10 -9
  33. pyglet/lib.py +14 -2
  34. pyglet/libs/darwin/cocoapy/cocoalibs.py +74 -3
  35. pyglet/libs/darwin/coreaudio.py +0 -2
  36. pyglet/libs/win32/__init__.py +4 -2
  37. pyglet/libs/win32/com.py +65 -12
  38. pyglet/libs/win32/constants.py +1 -0
  39. pyglet/libs/win32/dinput.py +1 -9
  40. pyglet/libs/win32/types.py +72 -8
  41. pyglet/media/codecs/coreaudio.py +1 -0
  42. pyglet/media/codecs/wmf.py +93 -72
  43. pyglet/media/devices/win32.py +5 -4
  44. pyglet/media/drivers/directsound/lib_dsound.py +4 -4
  45. pyglet/media/drivers/xaudio2/interface.py +21 -17
  46. pyglet/media/drivers/xaudio2/lib_xaudio2.py +42 -25
  47. pyglet/shapes.py +1 -1
  48. pyglet/text/document.py +7 -53
  49. pyglet/text/formats/attributed.py +3 -1
  50. pyglet/text/formats/plaintext.py +1 -1
  51. pyglet/text/formats/structured.py +1 -1
  52. pyglet/text/layout/base.py +76 -68
  53. pyglet/text/layout/incremental.py +38 -8
  54. pyglet/text/layout/scrolling.py +1 -1
  55. pyglet/text/runlist.py +2 -114
  56. pyglet/window/win32/__init__.py +1 -3
  57. {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/METADATA +1 -1
  58. {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/RECORD +60 -54
  59. pyglet/font/directwrite.py +0 -2798
  60. {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/LICENSE +0 -0
  61. {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/WHEEL +0 -0
@@ -0,0 +1,637 @@
1
+ from __future__ import annotations
2
+
3
+ import os
4
+ import platform
5
+ from ctypes import (
6
+ HRESULT,
7
+ POINTER,
8
+ Structure,
9
+ c_void_p,
10
+ c_wchar_p,
11
+ windll,
12
+ )
13
+ from ctypes.wintypes import BOOL, FLOAT, UINT
14
+
15
+ from pyglet.font.dwrite.d2d1_types_lib import (
16
+ D2D1_COLOR_F,
17
+ D2D1_POINT_2F,
18
+ D2D1_RECT_F,
19
+ D2D1_SIZE_F,
20
+ D2D1_SIZE_U,
21
+ D2D_POINT_2F,
22
+ )
23
+ from pyglet.font.dwrite.dwrite_lib import (
24
+ DWRITE_GLYPH_IMAGE_FORMATS,
25
+ DWRITE_GLYPH_RUN,
26
+ DWRITE_GLYPH_RUN_DESCRIPTION,
27
+ DWRITE_MEASURING_MODE,
28
+ IDWriteTextFormat,
29
+ IDWriteTextLayout,
30
+ )
31
+ from pyglet.image.codecs.wincodec_lib import IWICBitmap, IWICBitmapSource
32
+ from pyglet.libs.win32 import c_void, com
33
+ from pyglet.libs.win32.types import BYTE, UINT32, UINT64
34
+
35
+ # --- Direct2D
36
+ try:
37
+ d2d1 = "d2d1"
38
+
39
+ # System32 and SysWOW64 folders are opposite perception in Windows x64.
40
+ # System32 = x64 dll's | SysWOW64 = x86 dlls
41
+ # By default ctypes only seems to look in system32 regardless of Python architecture, which has x64 dlls.
42
+ if platform.architecture()[0] == "32bit" and platform.machine().endswith("64"): # Machine is x64, Python is x86.
43
+ d2d1 = os.path.join(os.environ["WINDIR"], "SysWOW64", "d2d1.dll")
44
+
45
+ d2d_lib = windll.LoadLibrary(d2d1)
46
+ except OSError:
47
+ # Doesn't exist? Should stop import of library.
48
+ msg = "d2d1 Not Found"
49
+ raise ImportError(msg) # noqa: B904
50
+
51
+ D2D1_FACTORY_TYPE = UINT
52
+ D2D1_FACTORY_TYPE_SINGLE_THREADED = 0
53
+ D2D1_FACTORY_TYPE_MULTI_THREADED = 1
54
+
55
+ D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION = UINT
56
+ D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DEFAULT = 0
57
+ D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_DISABLE = 1
58
+ D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION_FORCE_DWORD = 0xffffffff
59
+
60
+
61
+ D2D1_TEXT_ANTIALIAS_MODE = UINT
62
+ D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0
63
+ D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1
64
+ D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2
65
+ D2D1_TEXT_ANTIALIAS_MODE_ALIASED = 3
66
+
67
+ D2D1_RENDER_TARGET_TYPE = UINT
68
+ D2D1_RENDER_TARGET_TYPE_DEFAULT = 0
69
+ D2D1_RENDER_TARGET_TYPE_SOFTWARE = 1
70
+ D2D1_RENDER_TARGET_TYPE_HARDWARE = 2
71
+
72
+ D2D1_FEATURE_LEVEL = UINT
73
+ D2D1_FEATURE_LEVEL_DEFAULT = 0
74
+
75
+ D2D1_RENDER_TARGET_USAGE = UINT
76
+ D2D1_RENDER_TARGET_USAGE_NONE = 0
77
+ D2D1_RENDER_TARGET_USAGE_FORCE_BITMAP_REMOTING = 1
78
+ D2D1_RENDER_TARGET_USAGE_GDI_COMPATIBLE = 2
79
+
80
+ DXGI_FORMAT = UINT
81
+ DXGI_FORMAT_UNKNOWN = 0
82
+
83
+ D2D1_ALPHA_MODE = UINT
84
+ D2D1_ALPHA_MODE_UNKNOWN = 0
85
+ D2D1_ALPHA_MODE_PREMULTIPLIED = 1
86
+ D2D1_ALPHA_MODE_STRAIGHT = 2
87
+ D2D1_ALPHA_MODE_IGNORE = 3
88
+
89
+ D2D1_DRAW_TEXT_OPTIONS = UINT
90
+ D2D1_DRAW_TEXT_OPTIONS_NO_SNAP = 0x00000001
91
+ D2D1_DRAW_TEXT_OPTIONS_CLIP = 0x00000002
92
+ D2D1_DRAW_TEXT_OPTIONS_ENABLE_COLOR_FONT = 0x00000004
93
+ D2D1_DRAW_TEXT_OPTIONS_DISABLE_COLOR_BITMAP_SNAPPING = 0x00000008
94
+ D2D1_DRAW_TEXT_OPTIONS_NONE = 0x00000000
95
+ D2D1_DRAW_TEXT_OPTIONS_FORCE_DWORD = 0xffffffff
96
+
97
+ DXGI_FORMAT_B8G8R8A8_UNORM = 87
98
+
99
+ D2D1_BITMAP_INTERPOLATION_MODE = UINT
100
+ D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR = 0
101
+ D2D1_BITMAP_INTERPOLATION_MODE_LINEAR = 1
102
+ D2D1_BITMAP_INTERPOLATION_MODE_FORCE_DWORD = 0xffffffff
103
+
104
+ D2D1_BITMAP_OPTIONS = UINT
105
+ D2D1_BITMAP_OPTIONS_NONE = 0x00000000
106
+ D2D1_BITMAP_OPTIONS_TARGET = 0x00000001
107
+ D2D1_BITMAP_OPTIONS_CANNOT_DRAW = 0x00000002
108
+ D2D1_BITMAP_OPTIONS_CPU_READ = 0x00000004
109
+ D2D1_BITMAP_OPTIONS_GDI_COMPATIBLE = 0x00000008
110
+
111
+
112
+ D2D1CreateFactory = d2d_lib.D2D1CreateFactory
113
+ D2D1CreateFactory.restype = HRESULT
114
+ D2D1CreateFactory.argtypes = [D2D1_FACTORY_TYPE, com.REFIID, c_void_p, c_void_p]
115
+
116
+
117
+
118
+
119
+ class D2D1_PIXEL_FORMAT(Structure):
120
+ _fields_ = (
121
+ ("format", DXGI_FORMAT),
122
+ ("alphaMode", D2D1_ALPHA_MODE),
123
+ )
124
+
125
+
126
+ class D2D1_RENDER_TARGET_PROPERTIES(Structure):
127
+ _fields_ = (
128
+ ("type", D2D1_RENDER_TARGET_TYPE),
129
+ ("pixelFormat", D2D1_PIXEL_FORMAT),
130
+ ("dpiX", FLOAT),
131
+ ("dpiY", FLOAT),
132
+ ("usage", D2D1_RENDER_TARGET_USAGE),
133
+ ("minLevel", D2D1_FEATURE_LEVEL),
134
+ )
135
+
136
+ class D2D1_BITMAP_PROPERTIES(Structure):
137
+ _fields_ = (
138
+ ("pixelFormat", D2D1_PIXEL_FORMAT),
139
+ ("dpiX", FLOAT),
140
+ ("dpiY", FLOAT),
141
+ )
142
+
143
+ ID2D1ColorContext = c_void_p
144
+ class D2D1_BITMAP_PROPERTIES1(Structure):
145
+ _fields_ = (
146
+ ("pixelFormat", D2D1_PIXEL_FORMAT),
147
+ ("dpiX", FLOAT),
148
+ ("dpiY", FLOAT),
149
+ ("bitmapOptions", D2D1_BITMAP_OPTIONS),
150
+ ("colorContext", ID2D1ColorContext),
151
+ )
152
+
153
+ class ID2D1Resource(com.pIUnknown):
154
+ _methods_ = [
155
+ ("GetFactory",
156
+ com.STDMETHOD()),
157
+ ]
158
+
159
+
160
+ class ID2D1Brush(ID2D1Resource):
161
+ _methods_ = [
162
+ ("SetOpacity",
163
+ com.STDMETHOD()),
164
+ ("SetTransform",
165
+ com.STDMETHOD()),
166
+ ("GetOpacity",
167
+ com.STDMETHOD()),
168
+ ("GetTransform",
169
+ com.STDMETHOD()),
170
+ ]
171
+
172
+
173
+ class ID2D1SolidColorBrush(ID2D1Brush):
174
+ _methods_ = [
175
+ ("SetColor",
176
+ com.METHOD(None, POINTER(D2D1_COLOR_F))),
177
+ ("GetColor",
178
+ com.STDMETHOD()),
179
+ ]
180
+
181
+ D2D1_DEVICE_CONTEXT_OPTIONS = UINT
182
+ D2D1_DEVICE_CONTEXT_OPTIONS_NONE = 0
183
+ D2D1_DEVICE_CONTEXT_OPTIONS_ENABLE_MULTITHREADED_OPTIMIZATIONS = 1
184
+ D2D1_DEVICE_CONTEXT_OPTIONS_FORCE_DWORD = 0xffffffff
185
+
186
+ D2D1_TAG = UINT64
187
+
188
+ D2D1_MAP_OPTIONS = UINT
189
+ D2D1_MAP_OPTIONS_NONE = 0
190
+ D2D1_MAP_OPTIONS_READ = 1
191
+ D2D1_MAP_OPTIONS_WRITE = 2
192
+ D2D1_MAP_OPTIONS_DISCARD = 4
193
+
194
+ class D2D1_MAPPED_RECT(Structure):
195
+ _fields_ = [
196
+ ("pitch", UINT32),
197
+ ("bits", POINTER(BYTE)),
198
+ ]
199
+
200
+ class ID2D1Image(ID2D1Resource):
201
+ _methods_ = []
202
+
203
+ class ID2D1Bitmap(ID2D1Image):
204
+ _methods_ = [
205
+ ("GetSize",
206
+ com.METHOD(D2D1_SIZE_F)),
207
+ ("GetPixelSize",
208
+ com.METHOD(D2D1_SIZE_U)),
209
+ ("GetPixelFormat",
210
+ com.METHOD(D2D1_PIXEL_FORMAT)),
211
+ ("GetDpi",
212
+ com.METHOD(c_void, POINTER(FLOAT), POINTER(FLOAT))),
213
+ ("CopyFromBitmap",
214
+ com.STDMETHOD()),
215
+ ("CopyFromRenderTarget",
216
+ com.STDMETHOD()),
217
+ ("CopyFromMemory",
218
+ com.STDMETHOD()),
219
+ ]
220
+
221
+ class ID2D1Bitmap1(ID2D1Bitmap):
222
+ _methods_ = [
223
+ ("GetColorContext",
224
+ com.STDMETHOD()),
225
+ ("GetOptions",
226
+ com.METHOD(D2D1_BITMAP_OPTIONS)),
227
+ ("GetSurface",
228
+ com.STDMETHOD()),
229
+ ("Map",
230
+ com.STDMETHOD(D2D1_MAP_OPTIONS, POINTER(D2D1_MAPPED_RECT))),
231
+ ("Unmap",
232
+ com.STDMETHOD()),
233
+ ]
234
+
235
+
236
+ class IDXGISurface(com.pIUnknown):
237
+ ...
238
+
239
+ class ID2D1RenderTarget(ID2D1Resource):
240
+ _methods_ = [
241
+ ("CreateBitmap",
242
+ com.STDMETHOD(D2D1_SIZE_U, c_void_p, UINT32, POINTER(D2D1_BITMAP_PROPERTIES), POINTER(ID2D1Bitmap))),
243
+ ("CreateBitmapFromWicBitmap",
244
+ com.STDMETHOD(IWICBitmapSource, POINTER(D2D1_BITMAP_PROPERTIES), POINTER(ID2D1Bitmap))),
245
+ ("CreateSharedBitmap",
246
+ com.STDMETHOD()),
247
+ ("CreateBitmapBrush",
248
+ com.STDMETHOD()),
249
+ ("CreateSolidColorBrush",
250
+ com.STDMETHOD(POINTER(D2D1_COLOR_F), c_void_p, POINTER(ID2D1SolidColorBrush))),
251
+ ("CreateGradientStopCollection",
252
+ com.STDMETHOD()),
253
+ ("CreateLinearGradientBrush",
254
+ com.STDMETHOD()),
255
+ ("CreateRadialGradientBrush",
256
+ com.STDMETHOD()),
257
+ ("CreateCompatibleRenderTarget",
258
+ com.STDMETHOD()),
259
+ ("CreateLayer",
260
+ com.STDMETHOD()),
261
+ ("CreateMesh",
262
+ com.STDMETHOD()),
263
+ ("DrawLine",
264
+ com.STDMETHOD()),
265
+ ("DrawRectangle",
266
+ com.STDMETHOD()),
267
+ ("FillRectangle",
268
+ com.STDMETHOD()),
269
+ ("DrawRoundedRectangle",
270
+ com.STDMETHOD()),
271
+ ("FillRoundedRectangle",
272
+ com.STDMETHOD()),
273
+ ("DrawEllipse",
274
+ com.STDMETHOD()),
275
+ ("FillEllipse",
276
+ com.STDMETHOD()),
277
+ ("DrawGeometry",
278
+ com.STDMETHOD()),
279
+ ("FillGeometry",
280
+ com.STDMETHOD()),
281
+ ("FillMesh",
282
+ com.STDMETHOD()),
283
+ ("FillOpacityMask",
284
+ com.METHOD(None, ID2D1Bitmap, ID2D1Brush, UINT, POINTER(D2D1_RECT_F), POINTER(D2D1_RECT_F))),
285
+ ("DrawBitmap",
286
+ com.STDMETHOD(ID2D1Bitmap, POINTER(D2D1_RECT_F), FLOAT, D2D1_BITMAP_INTERPOLATION_MODE, POINTER(D2D1_RECT_F))),
287
+ ("DrawText",
288
+ com.STDMETHOD()),
289
+ ("DrawTextLayout",
290
+ com.METHOD(c_void, D2D_POINT_2F, IDWriteTextLayout, ID2D1Brush, UINT32)),
291
+ ("DrawGlyphRun",
292
+ com.METHOD(c_void, D2D_POINT_2F, POINTER(DWRITE_GLYPH_RUN), ID2D1Brush, UINT32)),
293
+ ("SetTransform",
294
+ com.METHOD(c_void)),
295
+ ("GetTransform",
296
+ com.STDMETHOD()),
297
+ ("SetAntialiasMode",
298
+ com.METHOD(c_void, D2D1_TEXT_ANTIALIAS_MODE)),
299
+ ("GetAntialiasMode",
300
+ com.STDMETHOD()),
301
+ ("SetTextAntialiasMode",
302
+ com.METHOD(c_void, D2D1_TEXT_ANTIALIAS_MODE)),
303
+ ("GetTextAntialiasMode",
304
+ com.STDMETHOD()),
305
+ ("SetTextRenderingParams",
306
+ com.STDMETHOD()),
307
+ ("GetTextRenderingParams",
308
+ com.STDMETHOD()),
309
+ ("SetTags",
310
+ com.STDMETHOD()),
311
+ ("GetTags",
312
+ com.STDMETHOD()),
313
+ ("PushLayer",
314
+ com.STDMETHOD()),
315
+ ("PopLayer",
316
+ com.STDMETHOD()),
317
+ ("Flush",
318
+ com.STDMETHOD(POINTER(D2D1_TAG), POINTER(D2D1_TAG))),
319
+ ("SaveDrawingState",
320
+ com.STDMETHOD()),
321
+ ("RestoreDrawingState",
322
+ com.STDMETHOD()),
323
+ ("PushAxisAlignedClip",
324
+ com.STDMETHOD()),
325
+ ("PopAxisAlignedClip",
326
+ com.STDMETHOD()),
327
+ ("Clear",
328
+ com.METHOD(c_void, POINTER(D2D1_COLOR_F))),
329
+ ("BeginDraw",
330
+ com.METHOD(c_void)),
331
+ ("EndDraw",
332
+ com.STDMETHOD(POINTER(D2D1_TAG), POINTER(D2D1_TAG))),
333
+ ("GetPixelFormat",
334
+ com.STDMETHOD()),
335
+ ("SetDpi",
336
+ com.STDMETHOD(FLOAT, FLOAT)),
337
+ ("GetDpi",
338
+ com.STDMETHOD()),
339
+ ("GetSize",
340
+ com.STDMETHOD()),
341
+ ("GetPixelSize",
342
+ com.STDMETHOD()),
343
+ ("GetMaximumBitmapSize",
344
+ com.STDMETHOD()),
345
+ ("IsSupported",
346
+ com.METHOD(BOOL, POINTER(D2D1_RENDER_TARGET_PROPERTIES))),
347
+ ]
348
+
349
+
350
+ class ID2D1DeviceContext(ID2D1RenderTarget):
351
+ _methods_ = [
352
+ ("CreateBitmap_Context",
353
+ com.STDMETHOD(D2D1_SIZE_U, c_void_p, UINT32, POINTER(D2D1_BITMAP_PROPERTIES1), POINTER(ID2D1Bitmap1))),
354
+ ("CreateBitmapFromWicBitmap_Context",
355
+ com.STDMETHOD(IWICBitmapSource, POINTER(D2D1_BITMAP_PROPERTIES1), POINTER(ID2D1Bitmap1))),
356
+ ("CreateColorContext",
357
+ com.STDMETHOD()),
358
+ ("CreateColorContextFromFilename",
359
+ com.STDMETHOD()),
360
+ ("CreateColorContextFromWicColorContext",
361
+ com.STDMETHOD()),
362
+ ("CreateBitmapFromDxgiSurface",
363
+ com.STDMETHOD(IDXGISurface, POINTER(D2D1_BITMAP_PROPERTIES1), POINTER(ID2D1Bitmap1))),
364
+ ("CreateEffect",
365
+ com.STDMETHOD()),
366
+ ("CreateGradientStopCollection_Context",
367
+ com.STDMETHOD()),
368
+ ("CreateImageBrush",
369
+ com.STDMETHOD()),
370
+ ("CreateBitmapBrush_Context",
371
+ com.STDMETHOD()),
372
+ ("CreateCommandList",
373
+ com.STDMETHOD()),
374
+ ("IsDxgiFormatSupported",
375
+ com.STDMETHOD()),
376
+ ("IsBufferPrecisionSupported",
377
+ com.STDMETHOD()),
378
+ ("GetImageLocalBounds",
379
+ com.STDMETHOD()),
380
+ ("GetImageWorldBounds",
381
+ com.STDMETHOD()),
382
+ ("GetGlyphRunWorldBounds",
383
+ com.STDMETHOD()),
384
+ ("GetDevice",
385
+ com.STDMETHOD()),
386
+ ("SetTarget",
387
+ com.STDMETHOD(c_void_p)),
388
+ ("GetTarget",
389
+ com.METHOD(c_void, POINTER(c_void_p))),
390
+ ("SetRenderingControls",
391
+ com.STDMETHOD()),
392
+ ("GetRenderingControls",
393
+ com.STDMETHOD()),
394
+ ("SetPrimitiveBlend",
395
+ com.STDMETHOD()),
396
+ ("GetPrimitiveBlend",
397
+ com.STDMETHOD()),
398
+ ("SetUnitMode",
399
+ com.STDMETHOD()),
400
+ ("GetUnitMode",
401
+ com.STDMETHOD()),
402
+ ("DrawGlyphRun_Context",
403
+ com.METHOD(c_void, D2D_POINT_2F, POINTER(DWRITE_GLYPH_RUN), POINTER(DWRITE_GLYPH_RUN_DESCRIPTION), ID2D1Brush, UINT32)),
404
+ ("DrawImage",
405
+ com.STDMETHOD()),
406
+ ("DrawGdiMetafile",
407
+ com.STDMETHOD()),
408
+ ("DrawBitmap_Context",
409
+ com.STDMETHOD()),
410
+ ("PushLayer_Context",
411
+ com.STDMETHOD()),
412
+ ("InvalidateEffectInputRectangle",
413
+ com.STDMETHOD()),
414
+ ("GetEffectInvalidRectangleCount",
415
+ com.STDMETHOD()),
416
+ ("GetEffectInvalidRectangles",
417
+ com.STDMETHOD()),
418
+ ("GetEffectRequiredInputRectangles",
419
+ com.STDMETHOD()),
420
+ ("FillOpacityMask_Context",
421
+ com.METHOD(None, ID2D1Bitmap, ID2D1Brush, POINTER(D2D1_RECT_F), POINTER(D2D1_RECT_F))),
422
+ ]
423
+
424
+ class ID2D1DeviceContext1(ID2D1DeviceContext):
425
+ _methods_ = [
426
+ ("CreateFilledGeometryRealization",
427
+ com.STDMETHOD()),
428
+ ("CreateStrokedGeometryRealization",
429
+ com.STDMETHOD()),
430
+ ("DrawGeometryRealization",
431
+ com.STDMETHOD()),
432
+ ]
433
+
434
+ class ID2D1DeviceContext2(ID2D1DeviceContext1):
435
+ _methods_ = [
436
+ ("CreateInk",
437
+ com.STDMETHOD()),
438
+ ("CreateInkStyle",
439
+ com.STDMETHOD()),
440
+ ("CreateGradientMesh",
441
+ com.STDMETHOD()),
442
+ ("CreateImageSourceFromWic",
443
+ com.STDMETHOD()),
444
+ ("CreateLookupTable3D",
445
+ com.STDMETHOD()),
446
+ ("CreateImageSourceFromDxgi",
447
+ com.STDMETHOD()),
448
+ ("GetGradientMeshWorldBounds",
449
+ com.STDMETHOD()),
450
+ ("DrawInk",
451
+ com.STDMETHOD()),
452
+ ("DrawGradientMesh",
453
+ com.STDMETHOD()),
454
+ ("DrawGdiMetafile2",
455
+ com.STDMETHOD()),
456
+ ("CreateTransformedImageSource",
457
+ com.STDMETHOD()),
458
+ ]
459
+
460
+ class ID2D1DeviceContext3(ID2D1DeviceContext2):
461
+ _methods_ = [
462
+ ("CreateSpriteBatch",
463
+ com.STDMETHOD()),
464
+ ("DrawSpriteBatch",
465
+ com.STDMETHOD()),
466
+ ]
467
+
468
+ ID2D1SvgGlyphStyle = c_void_p
469
+ class ID2D1DeviceContext4(ID2D1DeviceContext3):
470
+ _methods_ = [
471
+ ("CreateSvgGlyphStyle",
472
+ com.STDMETHOD()),
473
+ ("DrawText4",
474
+ com.STDMETHOD(c_wchar_p, UINT32, IDWriteTextFormat, D2D1_RECT_F, ID2D1Brush, ID2D1SvgGlyphStyle, UINT32, D2D1_DRAW_TEXT_OPTIONS, DWRITE_MEASURING_MODE)),
475
+ ("DrawTextLayout4",
476
+ com.STDMETHOD(D2D1_POINT_2F, IDWriteTextLayout, ID2D1Brush, ID2D1SvgGlyphStyle, UINT32, D2D1_DRAW_TEXT_OPTIONS)),
477
+ ("DrawColorBitmapGlyphRun",
478
+ com.METHOD(c_void, DWRITE_GLYPH_IMAGE_FORMATS, D2D1_POINT_2F, POINTER(DWRITE_GLYPH_RUN), DWRITE_MEASURING_MODE, D2D1_COLOR_BITMAP_GLYPH_SNAP_OPTION)),
479
+ ("DrawSvgGlyphRun",
480
+ com.METHOD(c_void, D2D_POINT_2F, POINTER(DWRITE_GLYPH_RUN), ID2D1Brush, ID2D1SvgGlyphStyle, UINT32, DWRITE_MEASURING_MODE)),
481
+ ("GetColorBitmapGlyphImage",
482
+ com.STDMETHOD()),
483
+ ("GetSvgGlyphImage",
484
+ com.STDMETHOD()),
485
+ ]
486
+
487
+
488
+
489
+
490
+
491
+ class ID2D1Device(ID2D1Resource):
492
+ _methods_ = [
493
+ ("CreateDeviceContext", com.STDMETHOD(D2D1_DEVICE_CONTEXT_OPTIONS, POINTER(ID2D1DeviceContext))),
494
+ ("CreatePrintControl", com.STDMETHOD()),
495
+ ("SetMaximumTextureMemory", com.STDMETHOD()),
496
+ ("GetMaximumTextureMemory", com.STDMETHOD()),
497
+ ("ClearResources", com.STDMETHOD()),
498
+ ]
499
+
500
+ class ID2D1Device1(ID2D1Device):
501
+ _methods_ = [
502
+ ("GetRenderingPriority", com.STDMETHOD()), # D2D1_RENDERING_PRIORITY GetRenderingPriority()
503
+ ("SetRenderingPriority", com.STDMETHOD()),
504
+ ("CreateDeviceContext1", com.STDMETHOD(D2D1_DEVICE_CONTEXT_OPTIONS, POINTER(ID2D1DeviceContext1))),
505
+ ]
506
+
507
+ class ID2D1Device2(ID2D1Device1):
508
+ _methods_ = [
509
+ ("CreateDeviceContext2", com.STDMETHOD()),
510
+ ("FlushDeviceContexts", com.STDMETHOD()),
511
+ ("GetDxgiDevice", com.STDMETHOD()),
512
+ ]
513
+
514
+ class ID2D1Device3(ID2D1Device2):
515
+ _methods_ = [
516
+ ("CreateDeviceContext3", com.STDMETHOD()),
517
+ ]
518
+
519
+ class ID2D1Device4(ID2D1Device3):
520
+ _methods_ = [
521
+ ("CreateDeviceContext4", com.STDMETHOD(D2D1_DEVICE_CONTEXT_OPTIONS, POINTER(ID2D1DeviceContext4))),
522
+ ("SetMaximumColorGlyphCacheMemory", com.METHOD(c_void, UINT64)),
523
+ ("GetMaximumColorGlyphCacheMemory", com.METHOD(UINT64)),
524
+ ]
525
+
526
+
527
+
528
+ class ID2D1Factory(com.pIUnknown):
529
+ _methods_ = [
530
+ ("ReloadSystemMetrics",
531
+ com.STDMETHOD()),
532
+ ("GetDesktopDpi",
533
+ com.STDMETHOD()),
534
+ ("CreateRectangleGeometry",
535
+ com.STDMETHOD()),
536
+ ("CreateRoundedRectangleGeometry",
537
+ com.STDMETHOD()),
538
+ ("CreateEllipseGeometry",
539
+ com.STDMETHOD()),
540
+ ("CreateGeometryGroup",
541
+ com.STDMETHOD()),
542
+ ("CreateTransformedGeometry",
543
+ com.STDMETHOD()),
544
+ ("CreatePathGeometry",
545
+ com.STDMETHOD()),
546
+ ("CreateStrokeStyle",
547
+ com.STDMETHOD()),
548
+ ("CreateDrawingStateBlock",
549
+ com.STDMETHOD()),
550
+ ("CreateWicBitmapRenderTarget",
551
+ com.STDMETHOD(IWICBitmap, POINTER(D2D1_RENDER_TARGET_PROPERTIES), POINTER(ID2D1RenderTarget))),
552
+ ("CreateHwndRenderTarget",
553
+ com.STDMETHOD()),
554
+ ("CreateDxgiSurfaceRenderTarget",
555
+ com.STDMETHOD()),
556
+ ("CreateDCRenderTarget",
557
+ com.STDMETHOD()),
558
+ ]
559
+
560
+
561
+ class ID2D1Factory1(ID2D1Factory):
562
+ _methods_ = [
563
+ ("CreateDevice", com.STDMETHOD(c_void_p, POINTER(ID2D1Device))),
564
+ ("CreateStrokeStyle1", com.STDMETHOD()),
565
+ ("CreatePathGeometry1", com.STDMETHOD()),
566
+ ("CreateDrawingStateBlock1", com.STDMETHOD()),
567
+ ("CreateGdiMetafile", com.STDMETHOD()),
568
+ ("RegisterEffectFromStream", com.STDMETHOD()),
569
+ ("RegisterEffectFromString", com.STDMETHOD()),
570
+ ("UnregisterEffect", com.STDMETHOD()),
571
+ ("GetRegisteredEffects", com.STDMETHOD()),
572
+ ("GetEffectProperties", com.STDMETHOD()),
573
+ ]
574
+
575
+ class ID2D1Factory2(ID2D1Factory1):
576
+ _methods_ = [
577
+ ("CreateDevice2", com.STDMETHOD()),
578
+ ]
579
+
580
+ class ID2D1Factory3(ID2D1Factory2):
581
+ _methods_ = [
582
+ ("CreateDevice3", com.STDMETHOD()),
583
+ ]
584
+
585
+
586
+ class ID2D1Factory4(ID2D1Factory3):
587
+ _methods_ = [
588
+ ("CreateDevice4", com.STDMETHOD()),
589
+ ]
590
+
591
+ class ID2D1Factory5(ID2D1Factory4):
592
+ _methods_ = [
593
+ ("CreateDevice5",
594
+ com.STDMETHOD(c_void_p, POINTER(ID2D1Device4))),
595
+ ]
596
+
597
+
598
+ IID_ID2D1Factory = com.GUID(0x06152247, 0x6f50, 0x465a, 0x92, 0x45, 0x11, 0x8b, 0xfd, 0x3b, 0x60, 0x07)
599
+ IID_ID2D1Factory1 = com.GUID(0xbb12d362,0xdaee,0x4b9a,0xaa,0x1d,0x14,0xba,0x40,0x1c,0xfa,0x1f)
600
+ #IID_ID2D1Factory2 = com.GUID.from_string("94f81a73-9212-4376-9c58-b16a3a0d3992")
601
+ IID_ID2D1Factory4 = com.GUID.from_string("bd4ec2d2-0662-4bee-ba8e-6f29f032e096")
602
+ IID_ID2D1Factory5 = com.GUID.from_string("c4349994-838e-4b0f-8cab-44997d9eeacc")
603
+
604
+ # Default render parameters for D2D.
605
+ default_target_properties = D2D1_RENDER_TARGET_PROPERTIES(
606
+ type=D2D1_RENDER_TARGET_TYPE_DEFAULT,
607
+ pixelFormat=D2D1_PIXEL_FORMAT(
608
+ format=DXGI_FORMAT_UNKNOWN,
609
+ alphaMode=D2D1_ALPHA_MODE_UNKNOWN,
610
+ ),
611
+ dpiX=0.0,
612
+ dpiY=0.0,
613
+ usage=D2D1_RENDER_TARGET_USAGE_NONE,
614
+ min_level=D2D1_FEATURE_LEVEL_DEFAULT,
615
+ )
616
+
617
+ default_bitmap_properties = D2D1_BITMAP_PROPERTIES1(
618
+ pixelFormat=D2D1_PIXEL_FORMAT(
619
+ format=DXGI_FORMAT_B8G8R8A8_UNORM,
620
+ alphaMode=D2D1_ALPHA_MODE_PREMULTIPLIED,
621
+ ),
622
+ dpiX=0.0,
623
+ dpiY=0.0,
624
+ bitmapOptions=D2D1_BITMAP_OPTIONS_TARGET | D2D1_BITMAP_OPTIONS_CANNOT_DRAW,
625
+ )
626
+
627
+ default_bitmap_properties0 = D2D1_BITMAP_PROPERTIES(
628
+ pixelFormat=D2D1_PIXEL_FORMAT(
629
+ format=DXGI_FORMAT_B8G8R8A8_UNORM,
630
+ alphaMode=D2D1_ALPHA_MODE_PREMULTIPLIED,
631
+ ),
632
+ dpiX=0.0,
633
+ dpiY=0.0,
634
+ )
635
+
636
+ IID_ID2D1DeviceContext = com.GUID(0xe8f7fe7a, 0x191c, 0x466d, 0xad, 0x95, 0x97, 0x56, 0x78, 0xbd, 0xa9, 0x98)
637
+ IID_ID2D1DeviceContext4 = com.GUID.from_string("8c427831-3d90-4476-b647-c4fae349e4db")
@@ -0,0 +1,60 @@
1
+ # Separate some structure types from the lib to prevent circular imports, as dwrite/d2d render targets use these too.
2
+ from __future__ import annotations
3
+
4
+ from ctypes import Structure
5
+ from ctypes.wintypes import FLOAT, LONG
6
+
7
+ from pyglet.libs.win32 import UINT32
8
+
9
+
10
+ class D2D1_SIZE_F(Structure):
11
+ _fields_ = [
12
+ ("width", FLOAT),
13
+ ("height", FLOAT),
14
+ ]
15
+
16
+
17
+ class D2D1_SIZE_U(Structure):
18
+ _fields_ = [
19
+ ("width", UINT32),
20
+ ("height", UINT32),
21
+ ]
22
+
23
+ class D2D1_POINT_2L(Structure):
24
+ _fields_ = [
25
+ ("x", LONG),
26
+ ("y", LONG),
27
+ ]
28
+
29
+ class D2D1_POINT_2F(Structure):
30
+ _fields_ = [
31
+ ("x", FLOAT),
32
+ ("y", FLOAT),
33
+ ]
34
+
35
+ class D2D1_COLOR_F(Structure):
36
+ _fields_ = (
37
+ ("r", FLOAT),
38
+ ("g", FLOAT),
39
+ ("b", FLOAT),
40
+ ("a", FLOAT),
41
+ )
42
+
43
+ def __repr__(self) -> str:
44
+ return f"{self.__class__.__name__}(r={self.r}, g={self.g}, b={self.b}, a={self.a})"
45
+
46
+
47
+ class D2D_POINT_2F(Structure):
48
+ _fields_ = (
49
+ ("x", FLOAT),
50
+ ("y", FLOAT),
51
+ )
52
+
53
+
54
+ class D2D1_RECT_F(Structure):
55
+ _fields_ = (
56
+ ("left", FLOAT),
57
+ ("top", FLOAT),
58
+ ("right", FLOAT),
59
+ ("bottom", FLOAT),
60
+ )