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.
- pyglet/__init__.py +21 -9
- pyglet/__init__.pyi +3 -1
- pyglet/app/cocoa.py +6 -3
- pyglet/display/win32.py +14 -15
- pyglet/display/xlib_vidmoderestore.py +1 -1
- pyglet/extlibs/earcut.py +2 -2
- pyglet/font/__init__.py +3 -3
- pyglet/font/base.py +118 -51
- pyglet/font/dwrite/__init__.py +1381 -0
- pyglet/font/dwrite/d2d1_lib.py +637 -0
- pyglet/font/dwrite/d2d1_types_lib.py +60 -0
- pyglet/font/dwrite/dwrite_lib.py +1577 -0
- pyglet/font/fontconfig.py +79 -16
- pyglet/font/freetype.py +252 -77
- pyglet/font/freetype_lib.py +234 -125
- pyglet/font/harfbuzz/__init__.py +275 -0
- pyglet/font/harfbuzz/harfbuzz_lib.py +212 -0
- pyglet/font/quartz.py +432 -112
- pyglet/font/user.py +18 -11
- pyglet/font/win32.py +9 -1
- pyglet/gl/wgl.py +94 -87
- pyglet/gl/wglext_arb.py +472 -218
- pyglet/gl/wglext_nv.py +410 -188
- pyglet/gui/widgets.py +6 -1
- pyglet/image/codecs/bmp.py +3 -5
- pyglet/image/codecs/gdiplus.py +28 -9
- pyglet/image/codecs/wic.py +198 -489
- pyglet/image/codecs/wincodec_lib.py +413 -0
- pyglet/input/base.py +3 -2
- pyglet/input/macos/darwin_hid.py +28 -2
- pyglet/input/win32/directinput.py +2 -1
- pyglet/input/win32/xinput.py +10 -9
- pyglet/lib.py +14 -2
- pyglet/libs/darwin/cocoapy/cocoalibs.py +74 -3
- pyglet/libs/darwin/coreaudio.py +0 -2
- pyglet/libs/win32/__init__.py +4 -2
- pyglet/libs/win32/com.py +65 -12
- pyglet/libs/win32/constants.py +1 -0
- pyglet/libs/win32/dinput.py +1 -9
- pyglet/libs/win32/types.py +72 -8
- pyglet/media/codecs/coreaudio.py +1 -0
- pyglet/media/codecs/wmf.py +93 -72
- pyglet/media/devices/win32.py +5 -4
- pyglet/media/drivers/directsound/lib_dsound.py +4 -4
- pyglet/media/drivers/xaudio2/interface.py +21 -17
- pyglet/media/drivers/xaudio2/lib_xaudio2.py +42 -25
- pyglet/shapes.py +1 -1
- pyglet/text/document.py +7 -53
- pyglet/text/formats/attributed.py +3 -1
- pyglet/text/formats/plaintext.py +1 -1
- pyglet/text/formats/structured.py +1 -1
- pyglet/text/layout/base.py +76 -68
- pyglet/text/layout/incremental.py +38 -8
- pyglet/text/layout/scrolling.py +1 -1
- pyglet/text/runlist.py +2 -114
- pyglet/window/win32/__init__.py +1 -3
- {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/METADATA +1 -1
- {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/RECORD +60 -54
- pyglet/font/directwrite.py +0 -2798
- {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/LICENSE +0 -0
- {pyglet-2.1.3.dist-info → pyglet-2.1.4.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"""Windows Imaging Component library definitions for Windows OS."""
|
|
2
|
+
from ctypes import byref, c_void_p, memmove
|
|
3
|
+
|
|
4
|
+
from pyglet.image import ImageData
|
|
5
|
+
from pyglet.image.codecs import ImageDecodeException, ImageDecoder, ImageEncoder, os
|
|
6
|
+
from pyglet.libs.win32 import _kernel32 as kernel32
|
|
7
|
+
from pyglet.libs.win32 import _ole32 as ole32
|
|
8
|
+
from pyglet.libs.win32 import com
|
|
9
|
+
from pyglet.libs.win32.constants import (
|
|
10
|
+
CLSCTX_INPROC_SERVER,
|
|
11
|
+
GENERIC_WRITE,
|
|
12
|
+
GMEM_MOVEABLE,
|
|
13
|
+
STREAM_SEEK_SET,
|
|
14
|
+
WINDOWS_8_OR_GREATER,
|
|
15
|
+
)
|
|
16
|
+
from pyglet.libs.win32.types import (
|
|
17
|
+
BOOL,
|
|
18
|
+
BYTE,
|
|
19
|
+
DOUBLE,
|
|
20
|
+
DWORD,
|
|
21
|
+
LPCWSTR,
|
|
22
|
+
POINTER,
|
|
23
|
+
PROPVARIANT,
|
|
24
|
+
STATSTG,
|
|
25
|
+
UINT,
|
|
26
|
+
ULONG,
|
|
27
|
+
IStream,
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
CLSID_WICImagingFactory1 = com.GUID(0xcacaf262, 0x9370, 0x4615, 0xa1, 0x3b, 0x9f, 0x55, 0x39, 0xda, 0x4c, 0xa)
|
|
31
|
+
CLSID_WICImagingFactory2 = com.GUID(0x317d06e8, 0x5f24, 0x433d, 0xbd, 0xf7, 0x79, 0xce, 0x68, 0xd8, 0xab, 0xc2)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
WICBitmapCreateCacheOption = UINT
|
|
35
|
+
WICBitmapNoCache = 0
|
|
36
|
+
WICBitmapCacheOnDemand = 0x1
|
|
37
|
+
WICBitmapCacheOnLoad = 0x2
|
|
38
|
+
WICBITMAPCREATECACHEOPTION_FORCE_DWORD = 0x7fffffff
|
|
39
|
+
|
|
40
|
+
WICBitmapPaletteType = UINT
|
|
41
|
+
WICBitmapPaletteTypeCustom = 0
|
|
42
|
+
|
|
43
|
+
WICBitmapTransformOptions = UINT
|
|
44
|
+
WICBitmapTransformRotate0 = 0
|
|
45
|
+
WICBitmapTransformRotate90 = 0x1
|
|
46
|
+
WICBitmapTransformRotate180 = 0x2
|
|
47
|
+
WICBitmapTransformRotate270 = 0x3
|
|
48
|
+
WICBitmapTransformFlipHorizontal = 0x8
|
|
49
|
+
WICBitmapTransformFlipVertical = 0x10
|
|
50
|
+
|
|
51
|
+
WICBitmapDitherType = UINT
|
|
52
|
+
WICBitmapDitherTypeNone = 0
|
|
53
|
+
WICBitmapDitherTypeSolid = 0
|
|
54
|
+
WICBitmapDitherTypeOrdered4x4 = 0x1
|
|
55
|
+
WICBitmapDitherTypeOrdered8x8 = 0x2
|
|
56
|
+
WICBitmapDitherTypeOrdered16x16 = 0x3
|
|
57
|
+
WICBitmapDitherTypeSpiral4x4 = 0x4
|
|
58
|
+
WICBitmapDitherTypeSpiral8x8 = 0x5
|
|
59
|
+
WICBitmapDitherTypeDualSpiral4x4 = 0x6
|
|
60
|
+
WICBitmapDitherTypeDualSpiral8x8 = 0x7
|
|
61
|
+
WICBitmapDitherTypeErrorDiffusion = 0x8
|
|
62
|
+
WICBITMAPDITHERTYPE_FORCE_DWORD = 0x7fffffff
|
|
63
|
+
WICBITMAPTRANSFORMOPTIONS_FORCE_DWORD = 0x7fffffff
|
|
64
|
+
|
|
65
|
+
WICDecodeOptions = UINT
|
|
66
|
+
WICDecodeMetadataCacheOnDemand = 0
|
|
67
|
+
WICDecodeMetadataCacheOnLoad = 0x1
|
|
68
|
+
WICMETADATACACHEOPTION_FORCE_DWORD = 0x7fffffff
|
|
69
|
+
|
|
70
|
+
WICBitmapEncoderCacheOption = UINT
|
|
71
|
+
WICBitmapEncoderCacheInMemory = 0x0
|
|
72
|
+
WICBitmapEncoderCacheTempFile = 0x1
|
|
73
|
+
WICBitmapEncoderNoCache = 0x2
|
|
74
|
+
WICBITMAPENCODERCACHEOPTION_FORCE_DWORD = 0x7fffffff
|
|
75
|
+
|
|
76
|
+
# Different pixel formats.
|
|
77
|
+
REFWICPixelFormatGUID = POINTER(com.GUID)
|
|
78
|
+
GUID_WICPixelFormatDontCare = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x00)
|
|
79
|
+
GUID_WICPixelFormat1bppIndexed = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x01)
|
|
80
|
+
GUID_WICPixelFormat2bppIndexed = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x02)
|
|
81
|
+
GUID_WICPixelFormat4bppIndexed = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x03)
|
|
82
|
+
GUID_WICPixelFormat8bppIndexed = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x04)
|
|
83
|
+
GUID_WICPixelFormatBlackWhite = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x05)
|
|
84
|
+
GUID_WICPixelFormat2bppGray = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x06)
|
|
85
|
+
GUID_WICPixelFormat4bppGray = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x07)
|
|
86
|
+
GUID_WICPixelFormat8bppGray = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x08)
|
|
87
|
+
GUID_WICPixelFormat8bppAlpha = com.GUID(0xe6cd0116, 0xeeba, 0x4161, 0xaa, 0x85, 0x27, 0xdd, 0x9f, 0xb3, 0xa8, 0x95)
|
|
88
|
+
GUID_WICPixelFormat16bppBGR555 = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x09)
|
|
89
|
+
GUID_WICPixelFormat16bppBGR565 = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0a)
|
|
90
|
+
GUID_WICPixelFormat16bppBGRA5551 = com.GUID(0x05ec7c2b, 0xf1e6, 0x4961, 0xad, 0x46, 0xe1, 0xcc, 0x81, 0x0a, 0x87, 0xd2)
|
|
91
|
+
GUID_WICPixelFormat16bppGray = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0b)
|
|
92
|
+
GUID_WICPixelFormat24bppBGR = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0c)
|
|
93
|
+
GUID_WICPixelFormat24bppRGB = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0d)
|
|
94
|
+
GUID_WICPixelFormat32bppBGR = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0e)
|
|
95
|
+
GUID_WICPixelFormat32bppBGRA = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x0f)
|
|
96
|
+
GUID_WICPixelFormat32bppPBGRA = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x10)
|
|
97
|
+
GUID_WICPixelFormat32bppRGB = com.GUID(0xd98c6b95, 0x3efe, 0x47d6, 0xbb, 0x25, 0xeb, 0x17, 0x48, 0xab, 0x0c,
|
|
98
|
+
0xf1) # 7 platform update?
|
|
99
|
+
GUID_WICPixelFormat32bppRGBA = com.GUID(0xf5c7ad2d, 0x6a8d, 0x43dd, 0xa7, 0xa8, 0xa2, 0x99, 0x35, 0x26, 0x1a, 0xe9)
|
|
100
|
+
GUID_WICPixelFormat32bppPRGBA = com.GUID(0x3cc4a650, 0xa527, 0x4d37, 0xa9, 0x16, 0x31, 0x42, 0xc7, 0xeb, 0xed, 0xba)
|
|
101
|
+
GUID_WICPixelFormat48bppRGB = com.GUID(0x6fddc324, 0x4e03, 0x4bfe, 0xb1, 0x85, 0x3d, 0x77, 0x76, 0x8d, 0xc9, 0x15)
|
|
102
|
+
GUID_WICPixelFormat48bppBGR = com.GUID(0xe605a384, 0xb468, 0x46ce, 0xbb, 0x2e, 0x36, 0xf1, 0x80, 0xe6, 0x43, 0x13)
|
|
103
|
+
|
|
104
|
+
GUID_ContainerFormatBmp = com.GUID(0x0af1d87e, 0xfcfe, 0x4188, 0xbd, 0xeb, 0xa7, 0x90, 0x64, 0x71, 0xcb, 0xe3)
|
|
105
|
+
GUID_ContainerFormatPng = com.GUID(0x1b7cfaf4, 0x713f, 0x473c, 0xbb, 0xcd, 0x61, 0x37, 0x42, 0x5f, 0xae, 0xaf)
|
|
106
|
+
GUID_ContainerFormatIco = com.GUID(0xa3a860c4, 0x338f, 0x4c17, 0x91, 0x9a, 0xfb, 0xa4, 0xb5, 0x62, 0x8f, 0x21)
|
|
107
|
+
GUID_ContainerFormatJpeg = com.GUID(0x19e4a5aa, 0x5662, 0x4fc5, 0xa0, 0xc0, 0x17, 0x58, 0x02, 0x8e, 0x10, 0x57)
|
|
108
|
+
GUID_ContainerFormatTiff = com.GUID(0x163bcc30, 0xe2e9, 0x4f0b, 0x96, 0x1d, 0xa3, 0xe9, 0xfd, 0xb7, 0x88, 0xa3)
|
|
109
|
+
GUID_ContainerFormatGif = com.GUID(0x1f8a5601, 0x7d4d, 0x4cbd, 0x9c, 0x82, 0x1b, 0xc8, 0xd4, 0xee, 0xb9, 0xa5)
|
|
110
|
+
GUID_ContainerFormatWmp = com.GUID(0x57a37caa, 0x367a, 0x4540, 0x91, 0x6b, 0xf1, 0x83, 0xc5, 0x09, 0x3a, 0x4b)
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
class IPropertyBag2(com.pIUnknown):
|
|
114
|
+
_methods_ = [
|
|
115
|
+
('Read',
|
|
116
|
+
com.STDMETHOD()),
|
|
117
|
+
('Write',
|
|
118
|
+
com.STDMETHOD()),
|
|
119
|
+
('CountProperties',
|
|
120
|
+
com.STDMETHOD()),
|
|
121
|
+
('GetPropertyInfo',
|
|
122
|
+
com.STDMETHOD()),
|
|
123
|
+
('LoadObject',
|
|
124
|
+
com.STDMETHOD())
|
|
125
|
+
]
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
class IWICPalette(com.pIUnknown):
|
|
129
|
+
_methods_ = [
|
|
130
|
+
('InitializePredefined',
|
|
131
|
+
com.STDMETHOD()),
|
|
132
|
+
('InitializeCustom',
|
|
133
|
+
com.STDMETHOD()),
|
|
134
|
+
('InitializeFromBitmap',
|
|
135
|
+
com.STDMETHOD()),
|
|
136
|
+
('InitializeFromPalette',
|
|
137
|
+
com.STDMETHOD()),
|
|
138
|
+
('GetType',
|
|
139
|
+
com.STDMETHOD()),
|
|
140
|
+
('GetColorCount',
|
|
141
|
+
com.STDMETHOD()),
|
|
142
|
+
('GetColors',
|
|
143
|
+
com.STDMETHOD()),
|
|
144
|
+
('IsBlackWhite',
|
|
145
|
+
com.STDMETHOD()),
|
|
146
|
+
('IsGrayscale',
|
|
147
|
+
com.STDMETHOD()),
|
|
148
|
+
('HasAlpha',
|
|
149
|
+
com.STDMETHOD()),
|
|
150
|
+
]
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class IWICStream(IStream, com.pIUnknown):
|
|
154
|
+
_methods_ = [
|
|
155
|
+
('InitializeFromIStream',
|
|
156
|
+
com.STDMETHOD(IStream)),
|
|
157
|
+
('InitializeFromFilename',
|
|
158
|
+
com.STDMETHOD(LPCWSTR, DWORD)),
|
|
159
|
+
('InitializeFromMemory',
|
|
160
|
+
com.STDMETHOD(POINTER(BYTE), DWORD)),
|
|
161
|
+
('InitializeFromIStreamRegion',
|
|
162
|
+
com.STDMETHOD()),
|
|
163
|
+
]
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class IWICBitmapFrameEncode(com.pIUnknown):
|
|
167
|
+
_methods_ = [
|
|
168
|
+
('Initialize',
|
|
169
|
+
com.STDMETHOD(IPropertyBag2)),
|
|
170
|
+
('SetSize',
|
|
171
|
+
com.STDMETHOD(UINT, UINT)),
|
|
172
|
+
('SetResolution',
|
|
173
|
+
com.STDMETHOD()),
|
|
174
|
+
('SetPixelFormat',
|
|
175
|
+
com.STDMETHOD(REFWICPixelFormatGUID)),
|
|
176
|
+
('SetColorContexts',
|
|
177
|
+
com.STDMETHOD()),
|
|
178
|
+
('SetPalette',
|
|
179
|
+
com.STDMETHOD(IWICPalette)),
|
|
180
|
+
('SetThumbnail',
|
|
181
|
+
com.STDMETHOD()),
|
|
182
|
+
('WritePixels',
|
|
183
|
+
com.STDMETHOD(UINT, UINT, UINT, POINTER(BYTE))),
|
|
184
|
+
('WriteSource',
|
|
185
|
+
com.STDMETHOD()),
|
|
186
|
+
('Commit',
|
|
187
|
+
com.STDMETHOD()),
|
|
188
|
+
('GetMetadataQueryWriter',
|
|
189
|
+
com.STDMETHOD())
|
|
190
|
+
]
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
class IWICBitmapEncoder(com.pIUnknown):
|
|
194
|
+
_methods_ = [
|
|
195
|
+
('Initialize',
|
|
196
|
+
com.STDMETHOD(IWICStream, WICBitmapEncoderCacheOption)),
|
|
197
|
+
('GetContainerFormat',
|
|
198
|
+
com.STDMETHOD()),
|
|
199
|
+
('GetEncoderInfo',
|
|
200
|
+
com.STDMETHOD()),
|
|
201
|
+
('SetColorContexts',
|
|
202
|
+
com.STDMETHOD()),
|
|
203
|
+
('SetPalette',
|
|
204
|
+
com.STDMETHOD()),
|
|
205
|
+
('SetThumbnail',
|
|
206
|
+
com.STDMETHOD()),
|
|
207
|
+
('SetPreview',
|
|
208
|
+
com.STDMETHOD()),
|
|
209
|
+
('CreateNewFrame',
|
|
210
|
+
com.STDMETHOD(POINTER(IWICBitmapFrameEncode), POINTER(IPropertyBag2))),
|
|
211
|
+
('Commit',
|
|
212
|
+
com.STDMETHOD()),
|
|
213
|
+
('GetMetadataQueryWriter',
|
|
214
|
+
com.STDMETHOD())
|
|
215
|
+
]
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
class IWICComponentInfo(com.pIUnknown):
|
|
219
|
+
_methods_ = [
|
|
220
|
+
('GetComponentType',
|
|
221
|
+
com.STDMETHOD()),
|
|
222
|
+
('GetCLSID',
|
|
223
|
+
com.STDMETHOD()),
|
|
224
|
+
('GetSigningStatus',
|
|
225
|
+
com.STDMETHOD()),
|
|
226
|
+
('GetAuthor',
|
|
227
|
+
com.STDMETHOD()),
|
|
228
|
+
('GetVendorGUID',
|
|
229
|
+
com.STDMETHOD()),
|
|
230
|
+
('GetVersion',
|
|
231
|
+
com.STDMETHOD()),
|
|
232
|
+
('GetSpecVersion',
|
|
233
|
+
com.STDMETHOD()),
|
|
234
|
+
('GetFriendlyName',
|
|
235
|
+
com.STDMETHOD())
|
|
236
|
+
]
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
class IWICPixelFormatInfo(IWICComponentInfo, com.pIUnknown):
|
|
240
|
+
_methods_ = [
|
|
241
|
+
('GetFormatGUID',
|
|
242
|
+
com.STDMETHOD(POINTER(com.GUID))),
|
|
243
|
+
('GetColorContext',
|
|
244
|
+
com.STDMETHOD()),
|
|
245
|
+
('GetBitsPerPixel',
|
|
246
|
+
com.STDMETHOD(POINTER(UINT))),
|
|
247
|
+
('GetChannelCount',
|
|
248
|
+
com.STDMETHOD(POINTER(UINT))),
|
|
249
|
+
('GetChannelMask',
|
|
250
|
+
com.STDMETHOD())
|
|
251
|
+
]
|
|
252
|
+
|
|
253
|
+
|
|
254
|
+
class IWICBitmapSource(com.pIUnknown):
|
|
255
|
+
_methods_ = [
|
|
256
|
+
('GetSize',
|
|
257
|
+
com.STDMETHOD(POINTER(UINT), POINTER(UINT))),
|
|
258
|
+
('GetPixelFormat',
|
|
259
|
+
com.STDMETHOD(REFWICPixelFormatGUID)),
|
|
260
|
+
('GetResolution',
|
|
261
|
+
com.STDMETHOD(POINTER(DOUBLE), POINTER(DOUBLE))),
|
|
262
|
+
('CopyPalette',
|
|
263
|
+
com.STDMETHOD()),
|
|
264
|
+
('CopyPixels',
|
|
265
|
+
com.STDMETHOD(c_void_p, UINT, UINT, c_void_p)),
|
|
266
|
+
]
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
class IWICFormatConverter(IWICBitmapSource, com.pIUnknown):
|
|
270
|
+
_methods_ = [
|
|
271
|
+
('Initialize',
|
|
272
|
+
com.STDMETHOD(IWICBitmapSource, REFWICPixelFormatGUID, WICBitmapDitherType, c_void_p, DOUBLE,
|
|
273
|
+
WICBitmapPaletteType)),
|
|
274
|
+
('CanConvert',
|
|
275
|
+
com.STDMETHOD(REFWICPixelFormatGUID, REFWICPixelFormatGUID, POINTER(BOOL))),
|
|
276
|
+
]
|
|
277
|
+
|
|
278
|
+
|
|
279
|
+
class IWICMetadataQueryReader(com.pIUnknown):
|
|
280
|
+
_methods_ = [
|
|
281
|
+
('GetContainerFormat',
|
|
282
|
+
com.STDMETHOD()),
|
|
283
|
+
('GetLocation',
|
|
284
|
+
com.STDMETHOD()),
|
|
285
|
+
('GetMetadataByName',
|
|
286
|
+
com.STDMETHOD(LPCWSTR, c_void_p)),
|
|
287
|
+
('GetEnumerator',
|
|
288
|
+
com.STDMETHOD()),
|
|
289
|
+
]
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
class IWICBitmapFrameDecode(IWICBitmapSource, com.pIUnknown):
|
|
293
|
+
_methods_ = [
|
|
294
|
+
('GetMetadataQueryReader',
|
|
295
|
+
com.STDMETHOD(POINTER(IWICMetadataQueryReader))),
|
|
296
|
+
('GetColorContexts',
|
|
297
|
+
com.STDMETHOD()),
|
|
298
|
+
('GetThumbnail',
|
|
299
|
+
com.STDMETHOD(POINTER(IWICBitmapSource))),
|
|
300
|
+
]
|
|
301
|
+
|
|
302
|
+
|
|
303
|
+
class IWICBitmapFlipRotator(IWICBitmapSource, com.pIUnknown):
|
|
304
|
+
_methods_ = [
|
|
305
|
+
('Initialize',
|
|
306
|
+
com.STDMETHOD(IWICBitmapSource, WICBitmapTransformOptions)),
|
|
307
|
+
]
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
class IWICBitmap(IWICBitmapSource, com.pIUnknown):
|
|
311
|
+
_methods_ = [
|
|
312
|
+
('Lock',
|
|
313
|
+
com.STDMETHOD()),
|
|
314
|
+
('SetPalette',
|
|
315
|
+
com.STDMETHOD()),
|
|
316
|
+
('SetResolution',
|
|
317
|
+
com.STDMETHOD())
|
|
318
|
+
]
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
class IWICBitmapDecoder(com.pIUnknown):
|
|
322
|
+
_methods_ = [
|
|
323
|
+
('QueryCapability',
|
|
324
|
+
com.STDMETHOD()),
|
|
325
|
+
('Initialize',
|
|
326
|
+
com.STDMETHOD()),
|
|
327
|
+
('GetContainerFormat',
|
|
328
|
+
com.STDMETHOD()),
|
|
329
|
+
('GetDecoderInfo',
|
|
330
|
+
com.STDMETHOD()),
|
|
331
|
+
('CopyPalette',
|
|
332
|
+
com.STDMETHOD()),
|
|
333
|
+
('GetMetadataQueryReader',
|
|
334
|
+
com.STDMETHOD(POINTER(IWICMetadataQueryReader))),
|
|
335
|
+
('GetPreview',
|
|
336
|
+
com.STDMETHOD()),
|
|
337
|
+
('GetColorContexts',
|
|
338
|
+
com.STDMETHOD()),
|
|
339
|
+
('GetThumbnail',
|
|
340
|
+
com.STDMETHOD()),
|
|
341
|
+
('GetFrameCount',
|
|
342
|
+
com.STDMETHOD(POINTER(UINT))),
|
|
343
|
+
('GetFrame',
|
|
344
|
+
com.STDMETHOD(UINT, POINTER(IWICBitmapFrameDecode))),
|
|
345
|
+
]
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
IID_IWICImagingFactory1 = com.GUID(0xec5ec8a9, 0xc395, 0x4314, 0x9c, 0x77, 0x54, 0xd7, 0xa9, 0x35, 0xff, 0x70)
|
|
349
|
+
IID_IWICImagingFactory2 = com.GUID(0x7B816B45, 0x1996, 0x4476, 0xB1, 0x32, 0xDE, 0x9E, 0x24, 0x7C, 0x8A, 0xF0)
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
IID_IWICPixelFormatInfo = com.GUID(0xE8EDA601, 0x3D48, 0x431a, 0xAB, 0x44, 0x69, 0x05, 0x9B, 0xE8, 0x8B, 0xBE)
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
class IWICImagingFactory(com.pIUnknown):
|
|
356
|
+
_methods_ = [
|
|
357
|
+
('CreateDecoderFromFilename',
|
|
358
|
+
com.STDMETHOD(LPCWSTR, com.GUID, DWORD, WICDecodeOptions, POINTER(IWICBitmapDecoder))),
|
|
359
|
+
('CreateDecoderFromStream',
|
|
360
|
+
com.STDMETHOD(com.pIUnknown, c_void_p, WICDecodeOptions, POINTER(IWICBitmapDecoder))),
|
|
361
|
+
('CreateDecoderFromFileHandle',
|
|
362
|
+
com.STDMETHOD()),
|
|
363
|
+
('CreateComponentInfo',
|
|
364
|
+
com.STDMETHOD(com.GUID, POINTER(IWICComponentInfo))),
|
|
365
|
+
('CreateDecoder',
|
|
366
|
+
com.STDMETHOD()),
|
|
367
|
+
('CreateEncoder',
|
|
368
|
+
com.STDMETHOD(POINTER(com.GUID), POINTER(com.GUID), POINTER(IWICBitmapEncoder))),
|
|
369
|
+
('CreatePalette',
|
|
370
|
+
com.STDMETHOD(POINTER(IWICPalette))),
|
|
371
|
+
('CreateFormatConverter',
|
|
372
|
+
com.STDMETHOD(POINTER(IWICFormatConverter))),
|
|
373
|
+
('CreateBitmapScaler',
|
|
374
|
+
com.STDMETHOD()),
|
|
375
|
+
('CreateBitmapClipper',
|
|
376
|
+
com.STDMETHOD()),
|
|
377
|
+
('CreateBitmapFlipRotator',
|
|
378
|
+
com.STDMETHOD(POINTER(IWICBitmapFlipRotator))),
|
|
379
|
+
('CreateStream',
|
|
380
|
+
com.STDMETHOD(POINTER(IWICStream))),
|
|
381
|
+
('CreateColorContext',
|
|
382
|
+
com.STDMETHOD()),
|
|
383
|
+
('CreateColorTransformer',
|
|
384
|
+
com.STDMETHOD()),
|
|
385
|
+
('CreateBitmap',
|
|
386
|
+
com.STDMETHOD(UINT, UINT, REFWICPixelFormatGUID, WICBitmapCreateCacheOption, POINTER(IWICBitmap))),
|
|
387
|
+
('CreateBitmapFromSource',
|
|
388
|
+
com.STDMETHOD()),
|
|
389
|
+
('CreateBitmapFromSourceRect',
|
|
390
|
+
com.STDMETHOD()),
|
|
391
|
+
('CreateBitmapFromMemory',
|
|
392
|
+
com.STDMETHOD(UINT, UINT, REFWICPixelFormatGUID, UINT, UINT, POINTER(BYTE), POINTER(IWICBitmap))),
|
|
393
|
+
('CreateBitmapFromHBITMAP',
|
|
394
|
+
com.STDMETHOD()),
|
|
395
|
+
('CreateBitmapFromHICON',
|
|
396
|
+
com.STDMETHOD()),
|
|
397
|
+
('CreateComponentEnumerator',
|
|
398
|
+
com.STDMETHOD()),
|
|
399
|
+
('CreateFastMetadataEncoderFromDecoder',
|
|
400
|
+
com.STDMETHOD()),
|
|
401
|
+
('CreateFastMetadataEncoderFromFrameDecode',
|
|
402
|
+
com.STDMETHOD()),
|
|
403
|
+
('CreateQueryWriter',
|
|
404
|
+
com.STDMETHOD()),
|
|
405
|
+
('CreateQueryWriterFromReader',
|
|
406
|
+
com.STDMETHOD())
|
|
407
|
+
]
|
|
408
|
+
|
|
409
|
+
class IWICImagingFactory2(IWICImagingFactory):
|
|
410
|
+
_methods_ = [
|
|
411
|
+
('CreateImageEncoder',
|
|
412
|
+
com.STDMETHOD()),
|
|
413
|
+
]
|
pyglet/input/base.py
CHANGED
|
@@ -671,8 +671,9 @@ class Controller(EventDispatcher):
|
|
|
671
671
|
|
|
672
672
|
def _bind_dedicated_hat(self, relation: Relation, control: AbsoluteAxis) -> None:
|
|
673
673
|
# 8-directional hat encoded as a single control (Windows/Mac)
|
|
674
|
-
|
|
675
|
-
|
|
674
|
+
_vecs = (Vec2(0.0, 1.0), Vec2(1.0, 1.0), Vec2(1.0, 0.0), Vec2(1.0, -1.0), # n, ne, e, se
|
|
675
|
+
Vec2(0.0, -1.0), Vec2(-1.0, -1.0), Vec2(-1.0, 0.0), Vec2(-1.0, 1.0)) # s, sw, w, nw
|
|
676
|
+
_input_map = {key: val for key, val in zip(range(int(control.min), int(control.max + 1)), _vecs)}
|
|
676
677
|
|
|
677
678
|
# For some Directinput devices:
|
|
678
679
|
_scale = 0xfff if control.max > 8 else 1
|
pyglet/input/macos/darwin_hid.py
CHANGED
|
@@ -512,10 +512,26 @@ _button_names = {
|
|
|
512
512
|
|
|
513
513
|
|
|
514
514
|
class PygletDevice(Device):
|
|
515
|
-
|
|
515
|
+
"""
|
|
516
|
+
Represents a device in the Pyglet input system.
|
|
517
|
+
|
|
518
|
+
:param display: The display the device is attached to.
|
|
519
|
+
:param device: The HIDDevice object.
|
|
520
|
+
:param axis_filter: A list of usage_pages to include
|
|
521
|
+
(e.g. [0x1]).
|
|
522
|
+
:param button_filter: A list of usage_pages to include
|
|
523
|
+
(e.g. [0x1]).
|
|
524
|
+
"""
|
|
525
|
+
|
|
526
|
+
|
|
527
|
+
def __init__(self, display, device, axis_filter=None, button_filter=None):
|
|
516
528
|
super().__init__(display=display, name=device.product)
|
|
517
529
|
self.device = device
|
|
518
530
|
self.device.add_value_observer(self)
|
|
531
|
+
|
|
532
|
+
self._axis_filter = axis_filter
|
|
533
|
+
self._button_filter = button_filter
|
|
534
|
+
|
|
519
535
|
self._create_controls()
|
|
520
536
|
|
|
521
537
|
def open(self, window=None, exclusive=False):
|
|
@@ -544,12 +560,22 @@ class PygletDevice(Device):
|
|
|
544
560
|
for element in self.device.elements:
|
|
545
561
|
raw_name = element.name or '0x%x:%x' % (element.usagePage, element.usage)
|
|
546
562
|
if element.type in (kIOHIDElementTypeInput_Misc, kIOHIDElementTypeInput_Axis):
|
|
563
|
+
|
|
564
|
+
# apply axis filter to allow filtering for usage pages
|
|
565
|
+
if self._axis_filter is not None and element.usagePage not in self._axis_filter:
|
|
566
|
+
continue
|
|
567
|
+
|
|
547
568
|
name = _axis_names.get((element.usagePage, element.usage))
|
|
548
569
|
if element.isRelative:
|
|
549
570
|
control = RelativeAxis(name, raw_name)
|
|
550
571
|
else:
|
|
551
572
|
control = AbsoluteAxis(name, element.logicalMin, element.logicalMax, raw_name)
|
|
552
573
|
elif element.type == kIOHIDElementTypeInput_Button:
|
|
574
|
+
|
|
575
|
+
# apply button filter to allow filtering for usage pages
|
|
576
|
+
if self._button_filter is not None and element.usagePage not in self._button_filter:
|
|
577
|
+
continue
|
|
578
|
+
|
|
553
579
|
name = _button_names.get((element.usagePage, element.usage))
|
|
554
580
|
control = Button(name, raw_name)
|
|
555
581
|
else:
|
|
@@ -629,7 +655,7 @@ def _create_controller(device, display):
|
|
|
629
655
|
if device.is_joystick() or device.is_gamepad() or device.is_multi_axis():
|
|
630
656
|
|
|
631
657
|
if mapping := get_mapping(device.get_guid()):
|
|
632
|
-
return Controller(PygletDevice(display, device), mapping)
|
|
658
|
+
return Controller(PygletDevice(display, device, axis_filter=[0x1, 0x2]), mapping)
|
|
633
659
|
else:
|
|
634
660
|
warnings.warn(f"Warning: {device} (GUID: {device.get_guid()}) "
|
|
635
661
|
f"has no controller mappings. Update the mappings in the Controller DB.")
|
|
@@ -262,7 +262,8 @@ class DIDeviceManager(EventDispatcher):
|
|
|
262
262
|
return False
|
|
263
263
|
|
|
264
264
|
def _unregister_device_events(self):
|
|
265
|
-
|
|
265
|
+
if WM_DEVICECHANGE in self.window._event_handlers:
|
|
266
|
+
del self.window._event_handlers[WM_DEVICECHANGE]
|
|
266
267
|
_user32.UnregisterDeviceNotification(self._devnotify)
|
|
267
268
|
self.registered = False
|
|
268
269
|
self._devnotify = None
|
pyglet/input/win32/xinput.py
CHANGED
|
@@ -1,21 +1,22 @@
|
|
|
1
|
+
import threading
|
|
1
2
|
import time
|
|
2
3
|
import weakref
|
|
3
|
-
import
|
|
4
|
+
from ctypes import POINTER, Structure, byref, c_void_p, windll
|
|
5
|
+
from ctypes.wintypes import DWORD, LONG, LPCWSTR, SHORT, ULONG, WORD
|
|
4
6
|
|
|
5
7
|
import pyglet
|
|
6
|
-
|
|
7
|
-
from pyglet.math import Vec2
|
|
8
|
-
from pyglet.libs.win32 import com
|
|
9
8
|
from pyglet.event import EventDispatcher
|
|
10
|
-
from pyglet.
|
|
11
|
-
from pyglet.libs.win32 import _ole32 as ole32
|
|
9
|
+
from pyglet.input.base import AbsoluteAxis, Button, Controller, ControllerManager, Device
|
|
10
|
+
from pyglet.libs.win32 import _ole32 as ole32
|
|
11
|
+
from pyglet.libs.win32 import _oleaut32 as oleaut32
|
|
12
|
+
from pyglet.libs.win32 import com
|
|
12
13
|
from pyglet.libs.win32.constants import CLSCTX_INPROC_SERVER
|
|
13
|
-
from pyglet.
|
|
14
|
-
|
|
14
|
+
from pyglet.libs.win32.types import BYTE, VARIANT
|
|
15
|
+
from pyglet.math import Vec2
|
|
15
16
|
|
|
16
17
|
for library_name in ['xinput1_4', 'xinput9_1_0', 'xinput1_3']:
|
|
17
18
|
try:
|
|
18
|
-
lib =
|
|
19
|
+
lib = windll.LoadLibrary(library_name)
|
|
19
20
|
break
|
|
20
21
|
except OSError:
|
|
21
22
|
continue
|
pyglet/lib.py
CHANGED
|
@@ -146,7 +146,7 @@ class LibraryLoader: # noqa: D101
|
|
|
146
146
|
raise RuntimeError(msg)
|
|
147
147
|
|
|
148
148
|
|
|
149
|
-
class
|
|
149
|
+
class MacOSLibraryLoader(LibraryLoader): # noqa: D101
|
|
150
150
|
def __init__(self) -> None: # noqa: D107
|
|
151
151
|
if 'LD_LIBRARY_PATH' in os.environ:
|
|
152
152
|
self.ld_library_path = os.environ['LD_LIBRARY_PATH'].split(':')
|
|
@@ -168,6 +168,18 @@ class MachOLibraryLoader(LibraryLoader): # noqa: D101
|
|
|
168
168
|
else:
|
|
169
169
|
self.dyld_fallback_library_path = [os.path.expanduser('~/lib'), '/usr/local/lib', '/usr/lib']
|
|
170
170
|
|
|
171
|
+
# Homebrew path on Apple Silicon is no longer in local.
|
|
172
|
+
if 'HOMEBREW_PREFIX' in os.environ:
|
|
173
|
+
# if HOMEBREW_PREFIX is defined, add its lib directory.
|
|
174
|
+
brew_lib_path = os.path.join(os.environ['HOMEBREW_PREFIX'], 'lib')
|
|
175
|
+
if os.path.exists(brew_lib_path):
|
|
176
|
+
self.dyld_fallback_library_path.append(brew_lib_path)
|
|
177
|
+
else:
|
|
178
|
+
# Check the typical path if the environmental variable is missing.
|
|
179
|
+
if os.path.exists('/opt/homebrew/lib'):
|
|
180
|
+
self.dyld_fallback_library_path.append('/opt/homebrew/lib')
|
|
181
|
+
|
|
182
|
+
|
|
171
183
|
def find_library(self, path: str) -> str | None:
|
|
172
184
|
"""Implements the dylib search as specified in Apple documentation:
|
|
173
185
|
|
|
@@ -314,7 +326,7 @@ class LinuxLibraryLoader(LibraryLoader): # noqa: D101
|
|
|
314
326
|
|
|
315
327
|
|
|
316
328
|
if pyglet.compat_platform == 'darwin':
|
|
317
|
-
loader =
|
|
329
|
+
loader = MacOSLibraryLoader()
|
|
318
330
|
elif pyglet.compat_platform.startswith('linux'):
|
|
319
331
|
loader = LinuxLibraryLoader()
|
|
320
332
|
else:
|