pyglet 2.1.9__py3-none-any.whl → 2.1.11__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 CHANGED
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
15
15
  from typing import Any, Callable, ItemsView, Sized
16
16
 
17
17
  #: The release version
18
- version = '2.1.9'
18
+ version = '2.1.11'
19
19
  __version__ = version
20
20
 
21
21
  MIN_PYTHON_VERSION = 3, 8
@@ -255,8 +255,8 @@ class Options:
255
255
 
256
256
  .. versionadded:: 2.0.5"""
257
257
 
258
- dpi_scaling: Literal["real", "scaled", "stretch", "platform"] = "real"
259
- """For 'HiDPI' displays, Window behavior can differ between operating systems. Defaults to `'real'`.
258
+ dpi_scaling: Literal["real", "scaled", "stretch", "platform"] = "platform"
259
+ """For 'HiDPI' displays, Window behavior can differ between operating systems. Defaults to `'platform'`.
260
260
 
261
261
  The current options are an attempt to create consistent behavior across all of the operating systems.
262
262
 
pyglet/app/cocoa.py CHANGED
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  import signal
2
4
  import time
3
5
 
@@ -646,7 +646,7 @@ def _get_font_file(font_face: IDWriteFontFace) -> IDWriteFontFile:
646
646
  font_files = (IDWriteFontFile * file_ct.value)()
647
647
  font_face.GetFiles(byref(file_ct), font_files)
648
648
 
649
- return font_files[font_face.GetIndex()]
649
+ return font_files[0]
650
650
 
651
651
  def _get_font_ref(font_file: IDWriteFontFile, release_file: bool=True) -> tuple[c_void_p, int]:
652
652
  """Get a unique font reference for the font face.
pyglet/graphics/shader.py CHANGED
@@ -159,7 +159,7 @@ _uniform_setters: dict[int, tuple[GLDataType, GLFunc, GLFunc, int]] = {
159
159
  gl.GL_UNSIGNED_INT_SAMPLER_3D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
160
160
 
161
161
  gl.GL_FLOAT_MAT2: (gl.GLfloat, gl.glUniformMatrix2fv, gl.glProgramUniformMatrix2fv, 4),
162
- gl.GL_FLOAT_MAT3: (gl.GLfloat, gl.glUniformMatrix3fv, gl.glProgramUniformMatrix3fv, 6),
162
+ gl.GL_FLOAT_MAT3: (gl.GLfloat, gl.glUniformMatrix3fv, gl.glProgramUniformMatrix3fv, 9),
163
163
  gl.GL_FLOAT_MAT4: (gl.GLfloat, gl.glUniformMatrix4fv, gl.glProgramUniformMatrix4fv, 16),
164
164
 
165
165
  # TODO: test/implement these:
@@ -174,16 +174,37 @@ _uniform_setters: dict[int, tuple[GLDataType, GLFunc, GLFunc, int]] = {
174
174
  gl.GL_IMAGE_2D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
175
175
  gl.GL_IMAGE_2D_RECT: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
176
176
  gl.GL_IMAGE_3D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
177
-
178
177
  gl.GL_IMAGE_1D_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
179
178
  gl.GL_IMAGE_2D_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
180
-
181
179
  gl.GL_IMAGE_2D_MULTISAMPLE: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
182
180
  gl.GL_IMAGE_2D_MULTISAMPLE_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
183
-
184
181
  gl.GL_IMAGE_BUFFER: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
185
182
  gl.GL_IMAGE_CUBE: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
186
183
  gl.GL_IMAGE_CUBE_MAP_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
184
+
185
+ gl.GL_INT_IMAGE_1D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
186
+ gl.GL_INT_IMAGE_2D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
187
+ gl.GL_INT_IMAGE_3D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
188
+ gl.GL_INT_IMAGE_2D_RECT: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
189
+ gl.GL_INT_IMAGE_CUBE: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
190
+ gl.GL_INT_IMAGE_BUFFER: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
191
+ gl.GL_INT_IMAGE_1D_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
192
+ gl.GL_INT_IMAGE_2D_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
193
+ gl.GL_INT_IMAGE_CUBE_MAP_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
194
+ gl.GL_INT_IMAGE_2D_MULTISAMPLE: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
195
+ gl.GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
196
+
197
+ gl.GL_UNSIGNED_INT_IMAGE_1D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
198
+ gl.GL_UNSIGNED_INT_IMAGE_2D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
199
+ gl.GL_UNSIGNED_INT_IMAGE_3D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
200
+ gl.GL_UNSIGNED_INT_IMAGE_2D_RECT: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
201
+ gl.GL_UNSIGNED_INT_IMAGE_CUBE: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
202
+ gl.GL_UNSIGNED_INT_IMAGE_BUFFER: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
203
+ gl.GL_UNSIGNED_INT_IMAGE_1D_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
204
+ gl.GL_UNSIGNED_INT_IMAGE_2D_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
205
+ gl.GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
206
+ gl.GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
207
+ gl.GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
187
208
  }
188
209
 
189
210
  _attribute_types: dict[int, tuple[int, str]] = {
@@ -33,22 +33,24 @@ except ImportError:
33
33
  return c.read(fd, buffers, 3072)
34
34
 
35
35
 
36
- KeyMaxArray = _c_byte * ((KEY_MAX // 8) + 1)
36
+ KeyMaxArray = _c_byte * (KEY_MAX // 8 + 1)
37
37
 
38
38
 
39
- class EvdevButton(Button):
39
+ class _EvdevInfo:
40
40
  event_type: int
41
41
  event_code: int
42
42
 
43
43
 
44
- class EvdevAbsoluteAxis(AbsoluteAxis):
45
- event_type: int
46
- event_code: int
44
+ class EvdevButton(Button, _EvdevInfo):
45
+ pass
47
46
 
48
47
 
49
- class EvdevRelativeAxis(RelativeAxis):
50
- event_type: int
51
- event_code: int
48
+ class EvdevAbsoluteAxis(AbsoluteAxis, _EvdevInfo):
49
+ pass
50
+
51
+
52
+ class EvdevRelativeAxis(RelativeAxis, _EvdevInfo):
53
+ pass
52
54
 
53
55
 
54
56
  # Structures from /linux/blob/master/include/uapi/linux/input.h
@@ -193,7 +195,6 @@ def EVIOCGBIT(fileno, ev, buffer):
193
195
 
194
196
 
195
197
  def EVIOCGABS(fileno, ev, buffer=InputABSInfo()):
196
- print("absbuffer instance:", buffer)
197
198
  return _IOR_len('E', 0x40 + ev)(fileno, buffer)
198
199
 
199
200
 
@@ -540,10 +541,9 @@ class EvdevControllerManager(ControllerManager, XlibSelectDevice):
540
541
  else:
541
542
  return # No device could be created
542
543
 
543
- # Reuse existing controller instance if it exists, or create a new one:
544
- if controller := self._controllers.get(name, _create_controller(device)):
544
+ if controller := _create_controller(device):
545
545
  self._controllers[name] = controller
546
- # Dispatch event in main thread:
546
+ # Post the event in the main thread:
547
547
  self.post_event('on_connect', controller)
548
548
 
549
549
  def select(self):
@@ -559,6 +559,7 @@ class EvdevControllerManager(ControllerManager, XlibSelectDevice):
559
559
 
560
560
  for name in disappeared:
561
561
  if controller := self._controllers.get(name):
562
+ del self._controllers[name]
562
563
  self.dispatch_event('on_disconnect', controller)
563
564
 
564
565
  def get_controllers(self) -> list[Controller]:
@@ -1,9 +1,11 @@
1
+ from __future__ import annotations
2
+
1
3
  import ctypes
2
4
  import io
5
+ from dataclasses import dataclass
3
6
  from typing import TYPE_CHECKING, BinaryIO, List, Optional, Union
4
7
 
5
- from pyglet.media.exceptions import MediaException, CannotSeekException
6
- from pyglet.util import next_or_equal_power_of_two
8
+ from pyglet.media.exceptions import CannotSeekException, MediaException
7
9
 
8
10
  if TYPE_CHECKING:
9
11
  from pyglet.image import AbstractImage
@@ -77,7 +79,7 @@ class AudioFormat:
77
79
  self.__class__.__name__, self.channels, self.sample_size,
78
80
  self.sample_rate)
79
81
 
80
-
82
+ @dataclass
81
83
  class VideoFormat:
82
84
  """Video details.
83
85
 
@@ -98,20 +100,10 @@ class VideoFormat:
98
100
 
99
101
  .. versionadded:: 1.2
100
102
  """
101
-
102
- def __init__(self, width: int, height: int, sample_aspect: float = 1.0) -> None:
103
- self.width = width
104
- self.height = height
105
- self.sample_aspect = sample_aspect
106
- self.frame_rate = None
107
-
108
- def __eq__(self, other) -> bool:
109
- if isinstance(other, VideoFormat):
110
- return (self.width == other.width and
111
- self.height == other.height and
112
- self.sample_aspect == other.sample_aspect and
113
- self.frame_rate == other.frame_rate)
114
- return False
103
+ width: int
104
+ height: int
105
+ sample_aspect: float = 0.0
106
+ frame_rate: float | None = None
115
107
 
116
108
 
117
109
  class AudioData:
@@ -132,14 +124,14 @@ class AudioData:
132
124
  `timestamp` and `duration` are unused and will be removed eventually.
133
125
  """
134
126
 
135
- __slots__ = 'data', 'length', 'timestamp', 'duration', 'events', 'pointer'
127
+ __slots__ = 'data', 'duration', 'events', 'length', 'pointer', 'timestamp'
136
128
 
137
129
  def __init__(self,
138
- data: Union[bytes, ctypes.Array],
130
+ data: bytes | ctypes.Array,
139
131
  length: int,
140
132
  timestamp: float = 0.0,
141
133
  duration: float = 0.0,
142
- events: Optional[List['MediaEvent']] = None) -> None:
134
+ events: list[MediaEvent] | None = None) -> None:
143
135
 
144
136
  if isinstance(data, bytes):
145
137
  # bytes are treated specially by ctypes and can be cast to a void pointer, get
@@ -163,6 +155,7 @@ class AudioData:
163
155
  self.events = [] if events is None else events
164
156
 
165
157
 
158
+ @dataclass
166
159
  class SourceInfo:
167
160
  """Source metadata information.
168
161
 
@@ -180,15 +173,14 @@ class SourceInfo:
180
173
 
181
174
  .. versionadded:: 1.2
182
175
  """
183
-
184
- title = ''
185
- author = ''
186
- copyright = ''
187
- comment = ''
188
- album = ''
189
- year = 0
190
- track = 0
191
- genre = ''
176
+ title: str = ''
177
+ author: str = ''
178
+ copyright: str = ''
179
+ comment: str = ''
180
+ album: str = ''
181
+ year: int = 0
182
+ track: int = 0
183
+ genre: str = ''
192
184
 
193
185
 
194
186
  class Source:
@@ -255,9 +247,8 @@ class Source:
255
247
  player.on_player_eos = _on_player_eos
256
248
  return player
257
249
 
258
- def get_animation(self) -> 'Animation':
259
- """
260
- Import all video frames into memory.
250
+ def get_animation(self) -> Animation:
251
+ """Import all video frames into memory.
261
252
 
262
253
  An empty animation will be returned if the source has no video.
263
254
  Otherwise, the animation will contain all unplayed video frames (the
@@ -7,6 +7,7 @@ from ctypes import (
7
7
  POINTER,
8
8
  Array,
9
9
  Structure,
10
+ _Pointer,
10
11
  addressof,
11
12
  byref,
12
13
  c_char_p,
@@ -18,20 +19,20 @@ from ctypes import (
18
19
  memmove,
19
20
  )
20
21
  from dataclasses import dataclass
21
- from typing import BinaryIO, TYPE_CHECKING, Iterator, Sequence
22
-
23
- from _ctypes import _Pointer
22
+ from typing import TYPE_CHECKING, BinaryIO, Iterator, Sequence
24
23
 
25
24
  import pyglet
26
25
  import pyglet.lib
27
26
  from pyglet import image
27
+ from pyglet.media.exceptions import MediaFormatException
28
28
  from pyglet.util import asbytes, asstr
29
+
29
30
  from . import MediaDecoder
30
31
  from .base import AudioData, AudioFormat, SourceInfo, StaticSource, StreamingSource, VideoFormat
31
32
  from .ffmpeg_lib import (
32
33
  AV_CODEC_ID_VP8,
33
34
  AV_CODEC_ID_VP9,
34
- FF_INPUT_BUFFER_PADDING_SIZE,
35
+ AV_INPUT_BUFFER_PADDING_SIZE,
35
36
  SWS_FAST_BILINEAR,
36
37
  AVPacket,
37
38
  SwrContext,
@@ -63,7 +64,6 @@ from .ffmpeg_lib.libavutil import (
63
64
  avutil,
64
65
  )
65
66
  from .ffmpeg_lib.libswresample import swresample, swresample_version
66
- from ..exceptions import MediaFormatException
67
67
 
68
68
  if TYPE_CHECKING:
69
69
  from .ffmpeg_lib.libavformat import AVStream
@@ -128,7 +128,7 @@ def ffmpeg_get_audio_buffer_size(audio_format):
128
128
 
129
129
  Buffer size can accommodate 1 sec of audio data.
130
130
  """
131
- return audio_format.bytes_per_second + FF_INPUT_BUFFER_PADDING_SIZE
131
+ return audio_format.bytes_per_second + AV_INPUT_BUFFER_PADDING_SIZE
132
132
 
133
133
 
134
134
  def ffmpeg_init():
@@ -489,10 +489,7 @@ def ffmpeg_get_packet_pts(file: FFmpegFile, packet: _Pointer[AVPacket]) -> float
489
489
 
490
490
  def ffmpeg_get_frame_ts(stream: FFmpegStream) -> float:
491
491
  ts = stream.frame.contents.best_effort_timestamp
492
- timestamp = avutil.av_rescale_q(ts,
493
- stream.time_base,
494
- AV_TIME_BASE_Q)
495
- return timestamp
492
+ return avutil.av_rescale_q(ts, stream.time_base, AV_TIME_BASE_Q)
496
493
 
497
494
 
498
495
  def ffmpeg_init_packet() -> _Pointer[AVPacket]:
@@ -847,7 +844,7 @@ class FFmpegSource(StreamingSource):
847
844
  # more packets are in stream.
848
845
  return ffmpeg_read(self._file, self._packet)
849
846
 
850
- def _process_packet(self) -> AudioPacket | VideoPacket:
847
+ def _process_packet(self) -> AudioPacket | VideoPacket | None:
851
848
  """Process the packet that has been just read.
852
849
 
853
850
  Determines whether it's a video or audio packet and queue it in the
@@ -859,18 +856,18 @@ class FFmpegSource(StreamingSource):
859
856
 
860
857
  if self._packet.contents.stream_index == self._video_stream_index:
861
858
  video_packet = VideoPacket(self._packet, timestamp)
862
-
863
859
  if _debug:
864
860
  print('Created and queued packet %d (%f)' % (video_packet.id, video_packet.timestamp))
865
861
 
866
862
  self.videoq.append(video_packet)
867
863
  return video_packet
868
864
 
869
- elif self.audio_format and self._packet.contents.stream_index == self._audio_stream_index:
865
+ if self.audio_format and self._packet.contents.stream_index == self._audio_stream_index:
870
866
  audio_packet = AudioPacket(self._packet, timestamp)
871
867
 
872
868
  self.audioq.append(audio_packet)
873
869
  return audio_packet
870
+ return None
874
871
 
875
872
  def get_audio_data(self, num_bytes: int, compensation_time: float=0.0) -> AudioData | None:
876
873
  data = b''
@@ -1040,9 +1037,8 @@ class FFmpegSource(StreamingSource):
1040
1037
  width = self.video_format.width
1041
1038
  height = self.video_format.height
1042
1039
  pitch = width * 4
1043
- # https://ffmpeg.org/doxygen/3.3/group__lavc__decoding.html#ga8f5b632a03ce83ac8e025894b1fc307a
1044
- nbytes = (pitch * height + FF_INPUT_BUFFER_PADDING_SIZE)
1045
- buffer = (c_uint8 * nbytes)()
1040
+ buf_size = avutil.av_image_get_buffer_size(AV_PIX_FMT_RGBA, width, height, 1) + AV_INPUT_BUFFER_PADDING_SIZE
1041
+ buffer = (c_uint8 * buf_size)()
1046
1042
  try:
1047
1043
  result = self._ffmpeg_decode_video(video_packet.packet, buffer)
1048
1044
  except FFmpegException:
@@ -1070,11 +1066,8 @@ class FFmpegSource(StreamingSource):
1070
1066
  stream = self._video_stream
1071
1067
  rgba_ptrs = (POINTER(c_uint8) * 4)()
1072
1068
  rgba_stride = (c_int * 4)()
1073
- width = stream.codec_context.contents.width
1074
- height = stream.codec_context.contents.height
1075
1069
  if stream.type != AVMEDIA_TYPE_VIDEO:
1076
1070
  raise FFmpegException('Trying to decode video on a non-video stream.')
1077
-
1078
1071
  sent_result = avcodec.avcodec_send_packet(
1079
1072
  stream.codec_context,
1080
1073
  packet,
@@ -1097,6 +1090,9 @@ class FFmpegSource(StreamingSource):
1097
1090
  descr = buf.value
1098
1091
  raise FFmpegException(f'Video: Error occurred receiving frame. {descr.decode()}')
1099
1092
 
1093
+ width = stream.frame.contents.width
1094
+ height = stream.frame.contents.height
1095
+
1100
1096
  avutil.av_image_fill_arrays(rgba_ptrs, rgba_stride, data_out,
1101
1097
  AV_PIX_FMT_RGBA, width, height, 1)
1102
1098
 
@@ -1141,7 +1137,7 @@ class FFmpegSource(StreamingSource):
1141
1137
  ts = None
1142
1138
 
1143
1139
  if _debug:
1144
- print('Next video timestamp is', ts)
1140
+ print(f'Next video packet timestamp is: {ts}')
1145
1141
  return ts
1146
1142
 
1147
1143
  def get_next_video_frame(self, skip_empty_frame: bool=True) -> int | None:
@@ -18,6 +18,7 @@ release_versions = {
18
18
  5: {'avcodec': 59, 'avformat': 59, 'avutil': 57, 'swresample': 4, 'swscale': 6}, # 5.x
19
19
  6: {'avcodec': 60, 'avformat': 60, 'avutil': 58, 'swresample': 4, 'swscale': 7}, # 6.x
20
20
  7: {'avcodec': 61, 'avformat': 61, 'avutil': 59, 'swresample': 5, 'swscale': 8}, # 7.x
21
+ 8: {'avcodec': 62, 'avformat': 62, 'avutil': 60, 'swresample': 6, 'swscale': 9}, # 8.x
21
22
  }
22
23
 
23
24
  # Removals done per library and version.
@@ -1,7 +1,7 @@
1
1
  """Wrapper for include/libavcodec/avcodec.h
2
2
  """
3
3
 
4
- from ctypes import c_int, c_uint16, c_int64, c_uint32, c_uint64, c_size_t
4
+ from ctypes import c_int, c_uint16, c_int64, c_uint32, c_uint64, c_size_t, c_char
5
5
  from ctypes import c_uint8, c_uint, c_float, c_char_p
6
6
  from ctypes import c_void_p, POINTER, CFUNCTYPE, Structure
7
7
 
@@ -15,8 +15,8 @@ _debug = debug_print('debug_media')
15
15
 
16
16
  avcodec = pyglet.lib.load_library(
17
17
  'avcodec',
18
- win32=('avcodec-61', 'avcodec-60', 'avcodec-59', 'avcodec-58'),
19
- darwin=('avcodec.61', 'avcodec.60', 'avcodec.59', 'avcodec.58')
18
+ win32=('avcodec-62', 'avcodec-61', 'avcodec-60', 'avcodec-59', 'avcodec-58'),
19
+ darwin=('avcodec.62', 'avcodec.61', 'avcodec.60', 'avcodec.59', 'avcodec.58')
20
20
  )
21
21
 
22
22
  avcodec.avcodec_version.restype = c_int
@@ -25,8 +25,8 @@ avcodec_version = avcodec.avcodec_version() >> 16
25
25
 
26
26
  compat.set_version('avcodec', avcodec_version)
27
27
 
28
-
29
- FF_INPUT_BUFFER_PADDING_SIZE = 32
28
+ # Since version 4.0 this is 64
29
+ AV_INPUT_BUFFER_PADDING_SIZE = 64
30
30
 
31
31
 
32
32
  class AVPacketSideData(Structure):
@@ -67,7 +67,7 @@ AVPacket_Fields = [
67
67
  compat.add_version_changes('avcodec', 58, AVPacket, AVPacket_Fields,
68
68
  removals=('opaque', 'opaque_ref', 'time_base'))
69
69
 
70
- for compat_ver in (59, 60, 61):
70
+ for compat_ver in (59, 60, 61, 62):
71
71
  compat.add_version_changes('avcodec', compat_ver, AVPacket, AVPacket_Fields,
72
72
  removals=('convergence_duration',))
73
73
 
@@ -118,8 +118,9 @@ for compat_ver in (58, 59, 60):
118
118
  compat.add_version_changes('avcodec', compat_ver, AVCodecParameters, AVCodecParameters_Fields,
119
119
  removals=('coded_side_data', 'nb_coded_side_data', 'ch_layout', 'framerate'))
120
120
 
121
- compat.add_version_changes('avcodec', 61, AVCodecParameters, AVCodecParameters_Fields,
122
- removals=('channel_layout', 'channels'))
121
+ for compat_ver in (61, 62):
122
+ compat.add_version_changes('avcodec', compat_ver, AVCodecParameters, AVCodecParameters_Fields,
123
+ removals=('channel_layout', 'channels'))
123
124
 
124
125
 
125
126
  class AVProfile(Structure):
@@ -188,7 +189,7 @@ AVClass = libavutil.AVClass
188
189
  AVFrame = libavutil.AVFrame
189
190
  AV_NUM_DATA_POINTERS = libavutil.AV_NUM_DATA_POINTERS
190
191
 
191
- # Significant deprecation and re-ordering of the entire structure makes it unmanagable to
192
+ # Significant deprecation and re-ordering of the entire structure makes it unmanageable to
192
193
  # track of all the changes via compat module. Re-define the structure and compat the new one going forward.
193
194
  if avcodec_version >= 61:
194
195
  AVCodecContext_Fields = [
@@ -217,7 +218,7 @@ if avcodec_version >= 61:
217
218
  ("framerate", AVRational),
218
219
 
219
220
  # Video fields
220
- ("ticks_per_frame", c_int), # Deprecated in 61.
221
+ ("ticks_per_frame", c_int), # Deprecated in 61. (removed in 62)
221
222
  ("delay", c_int),
222
223
  ("width", c_int),
223
224
  ("height", c_int),
@@ -334,7 +335,7 @@ if avcodec_version >= 61:
334
335
  POINTER(c_int), c_int)),
335
336
  ("profile", c_int),
336
337
  ("level", c_int),
337
- ("properties", c_uint),
338
+ ("properties", c_uint), # deprecated in 62
338
339
  ("skip_loop_filter", c_int), # enum AVDiscard
339
340
  ("skip_idct", c_int), # enum AVDiscard
340
341
  ("skip_frame", c_int), # enum AVDiscard
@@ -364,8 +365,11 @@ if avcodec_version >= 61:
364
365
  ("nb_decoded_side_data", c_int),
365
366
  ]
366
367
 
367
- compat.add_version_changes('avcodec', 61, AVCodecContext, AVCodecContext_Fields, removals=None)
368
+ compat.add_version_changes('avcodec', 61, AVCodecContext, AVCodecContext_Fields,
369
+ removals=None)
368
370
 
371
+ compat.add_version_changes('avcodec', 62, AVCodecContext, AVCodecContext_Fields,
372
+ removals=("ticks_per_frame",))
369
373
  else:
370
374
  AVCodecContext_Fields = [
371
375
  ('av_class', POINTER(AVClass)),
@@ -621,10 +625,10 @@ avcodec.avcodec_find_decoder_by_name.restype = POINTER(AVCodec)
621
625
  avcodec.avcodec_find_decoder_by_name.argtypes = [c_char_p]
622
626
 
623
627
  __all__ = [
624
- 'avcodec',
625
- 'FF_INPUT_BUFFER_PADDING_SIZE',
626
- 'AVPacket',
627
- 'AVCodecContext',
628
628
  'AV_CODEC_ID_VP8',
629
629
  'AV_CODEC_ID_VP9',
630
+ 'AV_INPUT_BUFFER_PADDING_SIZE',
631
+ 'AVCodecContext',
632
+ 'AVPacket',
633
+ 'avcodec',
630
634
  ]
@@ -14,8 +14,8 @@ _debug = debug_print('debug_media')
14
14
 
15
15
  avformat = pyglet.lib.load_library(
16
16
  'avformat',
17
- win32=('avformat-61', 'avformat-60', 'avformat-59', 'avformat-58'),
18
- darwin=('avformat.61', 'avformat.60', 'avformat.59', 'avformat.58')
17
+ win32=('avformat-62', 'avformat-61', 'avformat-60', 'avformat-59', 'avformat-58'),
18
+ darwin=('avformat.62', 'avformat.61', 'avformat.60', 'avformat.59', 'avformat.58')
19
19
  )
20
20
 
21
21
  avformat.avformat_version.restype = c_int
@@ -132,8 +132,8 @@ AVStream_Fields = [
132
132
  ('metadata', POINTER(AVDictionary)),
133
133
  ('avg_frame_rate', AVRational),
134
134
  ('attached_pic', AVPacket),
135
- ('side_data', POINTER(AVPacketSideData)),
136
- ('nb_side_data', c_int),
135
+ ('side_data', POINTER(AVPacketSideData)), # Deprecated in 60. Removed in 62.
136
+ ('nb_side_data', c_int), # Deprecated in 60. Removed in 62.
137
137
  ('event_flags', c_int),
138
138
  ('r_frame_rate', AVRational),
139
139
  ('recommended_encoder_configuration', c_char_p), # Deprecated. Removed in 59.
@@ -152,6 +152,11 @@ for compat_ver in (60, 61):
152
152
  removals=('codec', 'recommended_encoder_configuration', 'info'),
153
153
  repositions=(compat.Reposition("codecpar", "id"),))
154
154
 
155
+ compat.add_version_changes('avformat', 62, AVStream, AVStream_Fields,
156
+ removals=('codec', 'recommended_encoder_configuration', 'info', 'side_data',
157
+ 'nb_side_data'),
158
+ repositions=(compat.Reposition("codecpar", "id"),))
159
+
155
160
 
156
161
  class AVProgram(Structure):
157
162
  pass
@@ -318,8 +323,8 @@ if avformat_version >= 61:
318
323
  ('io_close2', CFUNCTYPE(c_int, POINTER(AVFormatContext), POINTER(AVIOContext))) # Added in 59.
319
324
  ]
320
325
 
321
- compat.add_version_changes('avformat', 61, AVFormatContext, AVFormatContext_Fields, removals=None)
322
-
326
+ for compat_ver in (61, 62):
327
+ compat.add_version_changes('avformat', compat_ver, AVFormatContext, AVFormatContext_Fields, removals=None)
323
328
 
324
329
  else:
325
330
  AVFormatContext_Fields = [
@@ -410,7 +415,7 @@ else:
410
415
  compat.add_version_changes('avformat', 58, AVFormatContext, AVFormatContext_Fields,
411
416
  removals=('skip_estimate_duration_from_pts', 'max_probe_packets', 'io_close2'))
412
417
 
413
- for compat_ver in (59, 60):
418
+ for compat_ver in (59, 60, 61, 62):
414
419
  compat.add_version_changes('avformat', compat_ver, AVFormatContext, AVFormatContext_Fields,
415
420
  removals=('filename', 'internal'))
416
421
 
@@ -12,8 +12,8 @@ _debug = debug_print('debug_media')
12
12
 
13
13
  avutil = pyglet.lib.load_library(
14
14
  'avutil',
15
- win32=('avutil-59', 'avutil-58', 'avutil-57', 'avutil-56'),
16
- darwin=('avutil.59', 'avutil.58', 'avutil.57', 'avutil.56')
15
+ win32=('avutil-60', 'avutil-59', 'avutil-58', 'avutil-57', 'avutil-56'),
16
+ darwin=('avutil.60', 'avutil.59', 'avutil.58', 'avutil.57', 'avutil.56')
17
17
  )
18
18
 
19
19
  avutil.avutil_version.restype = c_int
@@ -148,9 +148,9 @@ AVFrame_Fields = [
148
148
  ('opaque', c_void_p),
149
149
  ('error', c_uint64 * AV_NUM_DATA_POINTERS), # Deprecated. Removed in 57.
150
150
  ('repeat_pict', c_int),
151
- ('interlaced_frame', c_int), # deprecated in 59. Targeted for removal. Use AV_FRAME_FLAG_INTERLACED
152
- ('top_field_first', c_int), # deprecated in 59. Targeted for removal. Use AV_FRAME_FLAG_TOP_FIELD_FIRST
153
- ('palette_has_changed', c_int), # deprecated in 59. Targeted for removal.
151
+ ('interlaced_frame', c_int), # deprecated in 59. Targeted for removal. Use AV_FRAME_FLAG_INTERLACED (removed in 60)
152
+ ('top_field_first', c_int), # deprecated in 59. Targeted for removal. Use AV_FRAME_FLAG_TOP_FIELD_FIRST (removed in 60)
153
+ ('palette_has_changed', c_int), # deprecated in 59. Targeted for removal. (removed in 60)
154
154
  ('reordered_opaque', c_int64), # removed in 59.
155
155
  ('sample_rate', c_int),
156
156
  ('channel_layout', c_uint64), # removed in 59.
@@ -170,7 +170,7 @@ AVFrame_Fields = [
170
170
  ('pkt_duration', c_int64), # removed in 59?
171
171
  ('metadata', POINTER(AVDictionary)),
172
172
  ('decode_error_flags', c_int),
173
- ('channels', c_int),
173
+ ('channels', c_int), # removed in 59.
174
174
  ('pkt_size', c_int), # deprecated in 59. use AV_CODEC_FLAG_COPY_OPAQUE to pass through arbitrary user data from packets to frames
175
175
  ('qscale_table', POINTER(c_int8)), # Deprecated. Removed in 57.
176
176
  ('qstride', c_int), # Deprecated. Removed in 57.
@@ -198,9 +198,18 @@ for compat_ver in (57, 58):
198
198
  compat.add_version_changes('avutil', 59, AVFrame, AVFrame_Fields,
199
199
  removals=('pkt_pts', 'error', 'qscale_table', 'qstride', 'qscale_type', 'qp_table_buf',
200
200
  'channels', 'channel_layout',
201
- 'coded_picture_number', 'display_picture_number', 'reordered_opaque', 'pkt_duration'
201
+ 'coded_picture_number', 'display_picture_number', 'reordered_opaque',
202
+ 'pkt_duration',
202
203
  ))
203
204
 
205
+ compat.add_version_changes('avutil', 60, AVFrame, AVFrame_Fields,
206
+ removals=('pkt_pts', 'error', 'qscale_table', 'qstride', 'qscale_type', 'qp_table_buf',
207
+ 'channels', 'channel_layout',
208
+ 'coded_picture_number', 'display_picture_number', 'reordered_opaque',
209
+ 'pkt_duration',
210
+ 'interlaced_frame', 'top_field_first', 'palette_has_changed', 'pkt_pos',
211
+ 'pkt_size',
212
+ ))
204
213
 
205
214
  AV_NOPTS_VALUE = -0x8000000000000000
206
215
  AV_TIME_BASE = 1000000
@@ -250,6 +259,12 @@ avutil.av_get_bytes_per_sample.argtypes = [c_int]
250
259
  avutil.av_strerror.restype = c_int
251
260
  avutil.av_strerror.argtypes = [c_int, c_char_p, c_size_t]
252
261
 
262
+ avutil.av_get_pix_fmt_name.restype = c_char_p
263
+ avutil.av_get_pix_fmt_name.argtypes = [c_int]
264
+
265
+ avutil.av_image_get_buffer_size.restype = c_int
266
+ avutil.av_image_get_buffer_size.argtypes = [c_int, c_int, c_int, c_int]
267
+
253
268
  avutil.av_image_fill_arrays.restype = c_int
254
269
  avutil.av_image_fill_arrays.argtypes = [POINTER(c_uint8) * 4, c_int * 4,
255
270
  POINTER(c_uint8), c_int, c_int, c_int, c_int]
@@ -13,8 +13,8 @@ _debug = debug_print('debug_media')
13
13
 
14
14
  swresample = pyglet.lib.load_library(
15
15
  'swresample',
16
- win32=('swresample-5', 'swresample-4', 'swresample-3'),
17
- darwin=('swresample.5', 'swresample.4', 'swresample.3')
16
+ win32=('swresample-6', 'swresample-5', 'swresample-4', 'swresample-3'),
17
+ darwin=('swresample.6', 'swresample.5', 'swresample.4', 'swresample.3')
18
18
  )
19
19
 
20
20
  swresample.swresample_version.restype = c_int
@@ -13,8 +13,8 @@ _debug = debug_print('debug_media')
13
13
 
14
14
  swscale = pyglet.lib.load_library(
15
15
  'swscale',
16
- win32=('swscale-8', 'swscale-7', 'swscale-6', 'swscale-5'),
17
- darwin=('swscale.8', 'swscale.7', 'swscale.6', 'swscale.5')
16
+ win32=('swscale-9', 'swscale-8', 'swscale-7', 'swscale-6', 'swscale-5'),
17
+ darwin=('swscale.9', 'swscale.8', 'swscale.7', 'swscale.6', 'swscale.5')
18
18
  )
19
19
 
20
20
  swscale.swscale_version.restype = c_int
pyglet/text/__init__.py CHANGED
@@ -49,7 +49,7 @@ from pyglet.text import caret, document, layout # noqa: F401
49
49
 
50
50
 
51
51
  if TYPE_CHECKING:
52
- from pyglet.customtypes import AnchorX, AnchorY, ContentVAlign
52
+ from pyglet.customtypes import AnchorX, AnchorY, HorizontalAlign
53
53
  from pyglet.graphics import Batch, Group
54
54
  from pyglet.graphics.shader import ShaderProgram
55
55
  from pyglet.resource import Location
@@ -401,7 +401,7 @@ class Label(DocumentLabel):
401
401
  font_name: str | None = None, font_size: float | None = None,
402
402
  weight: str = "normal", italic: bool | str = False, stretch: bool | str = False,
403
403
  color: tuple[int, int, int, int] | tuple[int, int, int] = (255, 255, 255, 255),
404
- align: ContentVAlign = "left",
404
+ align: HorizontalAlign = "left",
405
405
  batch: Batch | None = None, group: Group | None = None,
406
406
  program: ShaderProgram | None = None,
407
407
  ) -> None:
pyglet/text/document.py CHANGED
@@ -678,13 +678,13 @@ class _FontStyleRunsRangeIterator(runlist.RunIterator):
678
678
  from pyglet import font
679
679
  for start_, end_, styles in self.zip_iter.ranges(start, end):
680
680
  font_name, font_size, weight, italic, stretch = styles
681
- ft = font.load(font_name, font_size, weight=weight, italic=bool(italic), stretch=stretch, dpi=self.dpi)
681
+ ft = font.load(font_name, font_size, weight=weight or "normal", italic=bool(italic), stretch=stretch or False, dpi=self.dpi)
682
682
  yield start_, end_, ft
683
683
 
684
684
  def __getitem__(self, index: int) -> Font:
685
685
  from pyglet import font
686
686
  font_name, font_size, weight, italic, stretch = self.zip_iter[index]
687
- return font.load(font_name, font_size, weight=weight, italic=bool(italic), stretch=stretch, dpi=self.dpi)
687
+ return font.load(font_name, font_size, weight=weight or "normal", italic=bool(italic), stretch=stretch or False, dpi=self.dpi)
688
688
 
689
689
 
690
690
  class _NoStyleRangeIterator(runlist.RunIterator):
@@ -603,7 +603,7 @@ class _GlyphBox(_AbstractBox):
603
603
  def update_rotation(self, rotation: float) -> None:
604
604
  rot = (rotation,)
605
605
  for _vertex_list in self.vertex_lists:
606
- _vertex_list.rotation[:] = (rot * _vertex_list.count)
606
+ _vertex_list.rotation[:] = rot * _vertex_list.count
607
607
 
608
608
  def update_visibility(self, visible: bool) -> None:
609
609
  visible_tuple = (visible,)
@@ -939,6 +939,7 @@ class TextLayout:
939
939
  # Boxes are all existing _AbstractBoxes, these are used to gather line information.
940
940
  # Note that this is only relevant to layouts that do not store directly on lines.
941
941
  self._boxes = []
942
+ self._lines = []
942
943
 
943
944
  #: :meta private:
944
945
  self.group_cache = {}
@@ -1139,10 +1140,11 @@ class TextLayout:
1139
1140
 
1140
1141
  anchor_y = self._get_top_anchor()
1141
1142
 
1142
- acc_anchor_x = self._anchor_left
1143
- for box in self._boxes:
1144
- box.update_anchor(acc_anchor_x, anchor_y)
1145
- acc_anchor_x += box.advance
1143
+ for line in self._lines:
1144
+ acc_anchor_x = self._anchor_left
1145
+ for box in line.boxes:
1146
+ box.update_anchor(acc_anchor_x, anchor_y)
1147
+ acc_anchor_x += box.advance
1146
1148
 
1147
1149
  @property
1148
1150
  def visible(self) -> bool:
@@ -1453,6 +1455,7 @@ class TextLayout:
1453
1455
 
1454
1456
  self._vertex_lists.clear()
1455
1457
  self._boxes.clear()
1458
+ self._lines.clear()
1456
1459
  self.group_cache.clear()
1457
1460
 
1458
1461
  if not self._document or not self._document.text:
@@ -1462,9 +1465,9 @@ class TextLayout:
1462
1465
  self._anchor_bottom = 0
1463
1466
  return
1464
1467
 
1465
- lines = self._get_lines()
1466
- self._ascent = lines[0].ascent
1467
- self._descent = lines[0].descent
1468
+ self._lines = self._get_lines()
1469
+ self._ascent = self._lines[0].ascent
1470
+ self._descent = self._lines[0].descent
1468
1471
 
1469
1472
  colors_iter = self._document.get_style_runs("color")
1470
1473
 
@@ -1476,7 +1479,7 @@ class TextLayout:
1476
1479
 
1477
1480
  context = _StaticLayoutContext(self, self._document, colors_iter, background_iter)
1478
1481
 
1479
- for line in lines:
1482
+ for line in self._lines:
1480
1483
  self._boxes.extend(line.boxes)
1481
1484
  self._create_vertex_lists(line.x, line.y, self._anchor_left, anchor_top, line.start, line.boxes, context)
1482
1485
 
pyglet/window/__init__.py CHANGED
@@ -91,6 +91,7 @@ from __future__ import annotations
91
91
 
92
92
  import sys
93
93
  from abc import abstractmethod
94
+ from collections import deque
94
95
  from typing import TYPE_CHECKING, Any, Callable, Sequence
95
96
 
96
97
  import pyglet
@@ -502,7 +503,7 @@ class BaseWindow(EventDispatcher, metaclass=_WindowMetaclass):
502
503
 
503
504
  """
504
505
  EventDispatcher.__init__(self)
505
- self._event_queue = []
506
+ self._event_queue = deque()
506
507
 
507
508
  if not display:
508
509
  display = pyglet.display.get_display()
@@ -677,7 +678,7 @@ class BaseWindow(EventDispatcher, metaclass=_WindowMetaclass):
677
678
  self._context = None
678
679
  if app.event_loop:
679
680
  app.event_loop.dispatch_event('on_window_close', self)
680
- self._event_queue = []
681
+ self._event_queue = deque()
681
682
 
682
683
  def dispatch_event(self, *args: Any) -> None:
683
684
  if not self._enable_event_queue or self._allow_dispatch_event:
@@ -167,15 +167,15 @@ class CocoaWindow(BaseWindow):
167
167
  self._nsview = PygletView.alloc().initWithFrame_cocoaWindow_(content_rect, self)
168
168
  self._nsview.setWantsBestResolutionOpenGLSurface_(True)
169
169
 
170
- if not self._fullscreen:
171
- if self._style in ("transparent", "overlay"):
172
- self._nswindow.setOpaque_(False)
173
- self._nswindow.setBackgroundColor_(NSColor.clearColor())
174
- self._nswindow.setHasShadow_(False)
170
+ if not self._fullscreen:
171
+ if self._style in ("transparent", "overlay"):
172
+ self._nswindow.setOpaque_(False)
173
+ self._nswindow.setBackgroundColor_(NSColor.clearColor())
174
+ self._nswindow.setHasShadow_(False)
175
175
 
176
- if self._style == "overlay":
177
- self.set_mouse_passthrough(True)
178
- self._nswindow.setLevel_(cocoapy.NSStatusWindowLevel)
176
+ if self._style == "overlay":
177
+ self.set_mouse_passthrough(True)
178
+ self._nswindow.setLevel_(cocoapy.NSStatusWindowLevel)
179
179
 
180
180
  self._nswindow.setContentView_(self._nsview)
181
181
  self._nswindow.makeFirstResponder_(self._nsview)
@@ -362,7 +362,7 @@ class CocoaWindow(BaseWindow):
362
362
 
363
363
  def dispatch_pending_events(self) -> None:
364
364
  while self._event_queue:
365
- event = self._event_queue.pop(0)
365
+ event = self._event_queue.popleft()
366
366
  EventDispatcher.dispatch_event(self, *event)
367
367
 
368
368
  def set_caption(self, caption: str) -> None:
@@ -90,7 +90,7 @@ class HeadlessWindow(BaseWindow):
90
90
 
91
91
  def dispatch_events(self) -> None:
92
92
  while self._event_queue:
93
- EventDispatcher.dispatch_event(self, *self._event_queue.pop(0))
93
+ EventDispatcher.dispatch_event(self, *self._event_queue.popleft())
94
94
 
95
95
  def dispatch_pending_events(self) -> None:
96
96
  pass
@@ -106,6 +106,16 @@ Win32EventHandler = _PlatformEventHandler
106
106
  ViewEventHandler = _ViewEventHandler
107
107
 
108
108
 
109
+ # Some events should not be queued, especially those with pointers or structures.
110
+ # Data is only guaranteed to be available for the duration of the initial function call.
111
+ _priority_events = [
112
+ constants.WM_GETMINMAXINFO,
113
+ constants.WM_GETDPISCALEDSIZE,
114
+ constants.WM_DPICHANGED,
115
+ constants.WM_INPUT,
116
+ ]
117
+
118
+
109
119
  class Win32Window(BaseWindow):
110
120
  _window_class = None
111
121
  _hwnd = None
@@ -427,8 +437,6 @@ class Win32Window(BaseWindow):
427
437
  if state:
428
438
  _user32.SetLayeredWindowAttributes(self._hwnd, color_ref.value, alpha.value, flags.value)
429
439
 
430
-
431
-
432
440
  def set_location(self, x: int, y: int) -> None:
433
441
  x, y = self._client_to_window_pos(x, y)
434
442
  _user32.SetWindowPos(self._hwnd, 0, x, y, 0, 0,
@@ -846,7 +854,7 @@ class Win32Window(BaseWindow):
846
854
  def dispatch_pending_events(self) -> None:
847
855
  """Legacy or manual dispatch."""
848
856
  while self._event_queue:
849
- event = self._event_queue.pop(0)
857
+ event = self._event_queue.popleft()
850
858
  if isinstance(event[0], str):
851
859
  # pyglet event
852
860
  EventDispatcher.dispatch_event(self, *event)
@@ -859,7 +867,7 @@ class Win32Window(BaseWindow):
859
867
  event_handler = event_handlers.get(msg)
860
868
  result = None
861
869
  if event_handler:
862
- if self._allow_dispatch_event or not self._enable_event_queue:
870
+ if self._allow_dispatch_event or not self._enable_event_queue or msg in _priority_events:
863
871
  result = event_handler(msg, wParam, lParam)
864
872
  else:
865
873
  result = 0
@@ -1036,7 +1036,7 @@ class XlibWindow(BaseWindow):
1036
1036
 
1037
1037
  def dispatch_pending_events(self) -> None:
1038
1038
  while self._event_queue:
1039
- EventDispatcher.dispatch_event(self, *self._event_queue.pop(0))
1039
+ EventDispatcher.dispatch_event(self, *self._event_queue.popleft())
1040
1040
 
1041
1041
  # Dispatch any context-related events
1042
1042
  if self._lost_context:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyglet
3
- Version: 2.1.9
3
+ Version: 2.1.11
4
4
  Summary: pyglet is a cross-platform games and multimedia package.
5
5
  Author-email: Alex Holkner & contributors <Alex.Holkner@gmail.com>
6
6
  Requires-Python: >=3.8
@@ -1,4 +1,4 @@
1
- pyglet/__init__.py,sha256=8hn6a9j2PHmj1dJjM3pmdw8gCqudjYKiICfMazwc9HQ,21146
1
+ pyglet/__init__.py,sha256=pHRsEVzn0TCFUSfSRPeMkpAqhbsOkiz9f2Zb5QXMGpc,21155
2
2
  pyglet/__init__.pyi,sha256=g-eSsTUa4WDTqTULiN7cRqagvW58NGCPLj9sabXRFjo,2005
3
3
  pyglet/clock.py,sha256=ZiYHckYRIUKuN1XmywQc3Dastd7O40Lw2XeMjC3iMtk,21892
4
4
  pyglet/customtypes.py,sha256=e9AB-8WPPhhZXqfDEf4r2Lv0vAQUBjwig5EBejBDz0k,608
@@ -13,7 +13,7 @@ pyglet/sprite.py,sha256=DWMiCG1wO5ySEe_Wn7pPzgCOWiG1NceodtViD4nBbLg,28701
13
13
  pyglet/util.py,sha256=OPu-Lw5Rxu1NMcsXBSM3Y-_3r2J09OjmdfUUAqSWvfg,8647
14
14
  pyglet/app/__init__.py,sha256=Cc21DTHddyf-YaTvwiZ5y6iKmrnEgyyVAdjVBAbiw5Y,2879
15
15
  pyglet/app/base.py,sha256=-rs9nvLoizNvbQfKQ0OGAnbDShpjnt6pAW0EFHLY9c4,11596
16
- pyglet/app/cocoa.py,sha256=BDwwbjXyqqU0uzMfRI8YqgtkELcSCobU0Wb3h3TagPs,10814
16
+ pyglet/app/cocoa.py,sha256=NUy06NCLppmM9F0NX7kmKEL5sMMeq-Ia6f00lCAIxiE,10850
17
17
  pyglet/app/win32.py,sha256=252RfeIBB9TtytMf1bd6Zc1FDF0W3bukCJAlqfP4ioM,4340
18
18
  pyglet/app/xlib.py,sha256=7gBureT60LHaROH9ah1jC62FwqsOZqNESPu1HpilLAs,2524
19
19
  pyglet/display/__init__.py,sha256=qz5Zy1S8XfapRys08uapOZK4N8Iian68yPCla505dcg,3313
@@ -43,7 +43,7 @@ pyglet/font/quartz.py,sha256=3MYuPH_PWaGY4I2Zp_rFZl2g5GwFxyisMTMdGF1oDPs,25849
43
43
  pyglet/font/ttf.py,sha256=xrTxY02uGcc3s9xG60iu4x4HzDfxuTwAyT8KFfJ8GS0,24225
44
44
  pyglet/font/user.py,sha256=0Aizb4EFq--kgxVn9K-uznKxzDSBBgLC8Sj3hC4f-V0,12429
45
45
  pyglet/font/win32.py,sha256=lZpmzFgZJvit2PK15SwpFtP__M_qgrc-laEna7pQP48,16460
46
- pyglet/font/dwrite/__init__.py,sha256=YhGwf8-2GCPL-euBYwf_ccWCMC0PRMrC_tiSaJTmlog,53796
46
+ pyglet/font/dwrite/__init__.py,sha256=Qz371CtDjeWZ4h0M8gTBPKCpAF89nLdf6vgpNTWDQS8,53777
47
47
  pyglet/font/dwrite/d2d1_lib.py,sha256=dqLJo33Xt5WiUWaXnrTPQKGQFclzcMV8ysRNtEHGrqY,19563
48
48
  pyglet/font/dwrite/d2d1_types_lib.py,sha256=-vzx6qyHfdFQ6n8Sf38LxYRNWFDnz_zJR_AvnxFPEDU,1201
49
49
  pyglet/font/dwrite/dwrite_lib.py,sha256=Rbq9020ERYO9ZpVWrCGK3prXev61lo_-6JQ5RM69da8,51437
@@ -77,7 +77,7 @@ pyglet/gl/xlib.py,sha256=q6BNLJ9lujt3P-0xh3CAvJHCFERAuLSUnXOgeS4jZhY,11357
77
77
  pyglet/graphics/__init__.py,sha256=O4O7fCQBI7qPReI8tUwLwArJHTWcoE1c_SotlHyUb2A,27940
78
78
  pyglet/graphics/allocation.py,sha256=0MTwkK7-00UDs2xl6Te7cf0ljC2mmsOQMbx0zKZCJOU,12430
79
79
  pyglet/graphics/instance.py,sha256=pzIaxO0EZCeoQDMR-qzjo4ahwfcbt3dDZm9UinYpZo0,2202
80
- pyglet/graphics/shader.py,sha256=VypoIX5bmP_R2ae_6_23cD06dpyCJTj_slQloQGYxTA,64263
80
+ pyglet/graphics/shader.py,sha256=kKJj6qkM8hMte6raCXlWcxKg8Zw6efcj9RZnPaLYU2g,66251
81
81
  pyglet/graphics/vertexarray.py,sha256=BWJFvP79JHpKwY91mrkjjhlbK3g87nIpMbCsc4FCcEg,1371
82
82
  pyglet/graphics/vertexbuffer.py,sha256=SbtT2cNSXwPMlQRGf2DxTxZCEyj0AjEEDLLdho-ojG8,15284
83
83
  pyglet/graphics/vertexdomain.py,sha256=Y4tAi26ABf5kLBGJ0QDvTVeWEL2vSN4HuIeS5svZjsg,32764
@@ -106,7 +106,7 @@ pyglet/input/base.py,sha256=QO9c_cMo-qPT5fTcxR4GGTxHbwx_nX8_7rSDDJ62YLs,39326
106
106
  pyglet/input/controller.py,sha256=kkLXJHyVePSlwagV9D7MN2QPjX9qjSk_avPI6G5Zud0,5548
107
107
  pyglet/input/controller_db.py,sha256=KFgHVcwDKO6nC6qw_JDT-fE7BsgsYh76aKupc6fOKJY,196312
108
108
  pyglet/input/linux/__init__.py,sha256=fd8rAts7soFEND4l5rUtLmEwK4rRpfFZ7Ibj9EOcrrA,391
109
- pyglet/input/linux/evdev.py,sha256=79c5k4CkEO3isv07bQ6y9QhxKmOCWgRgkkicCUpOo_Q,21255
109
+ pyglet/input/linux/evdev.py,sha256=a8DowSKwqYW6QW3ZwMv0_nI_RQ0tLfTudaPy_qfvRBk,21154
110
110
  pyglet/input/linux/evdev_constants.py,sha256=647CtG6a8782mmfdr20yzwC4JeuW702emszR_WSuj44,9816
111
111
  pyglet/input/linux/x11_xinput.py,sha256=eezRkEM_Xl8MJcvHpGXUjliz4E-DBVEUNNooWr-LT_k,10939
112
112
  pyglet/input/linux/x11_xinput_tablet.py,sha256=wnLrTQLwtAOrOPac3BJPXqBP_nygwRJtnHmdzJoCFjE,2959
@@ -157,20 +157,20 @@ pyglet/media/player.py,sha256=TtAJvZ1dwqtHy-keSWk8rK3zjICrhdintT42s8uqSEE,22532
157
157
  pyglet/media/player_worker_thread.py,sha256=88AL-pArZMCjSnjxU-nCSfUNi_GXg1u_WYdRhAyCbjk,4297
158
158
  pyglet/media/synthesis.py,sha256=ToaL2Y9y8cIjHHjlGHxpiBZqpfpBcsYFFgtutw_N1cE,13158
159
159
  pyglet/media/codecs/__init__.py,sha256=K7zxWvfJog9DLhRJ25diBD3pxn6u7ZwKU0T2NKuq90Q,3428
160
- pyglet/media/codecs/base.py,sha256=66qizZ5_6qaSBJXI7s3JpZMKM2iQzpX8NzxpIT9hYIc,21324
160
+ pyglet/media/codecs/base.py,sha256=31oNAFwU1mUcShqCBtoiQruQ1KOCt0_Ug2H8rOib5vU,20936
161
161
  pyglet/media/codecs/coreaudio.py,sha256=pPhbUkzVNhKnhKaD2hiyuo8kkgTKA26L0WKGB742Rv8,6838
162
- pyglet/media/codecs/ffmpeg.py,sha256=aSxtzRBh1wL-VNUrZtYcW91Do9Re0QAhE9Q9iLoMk4A,43816
162
+ pyglet/media/codecs/ffmpeg.py,sha256=sfWn_Dp0lZtQmoMqGi_6qRctsQ61xG2g-xWm7J1YLio,43683
163
163
  pyglet/media/codecs/gstreamer.py,sha256=kzg4k7aBJdIq0SubUuXc9p3dHP4gtGfP24dQcR28wOg,9250
164
164
  pyglet/media/codecs/pyogg.py,sha256=eTUI5Kty1HpMyWsVWQeXchl03l7I0HSo3j2VJbhftE4,17728
165
165
  pyglet/media/codecs/wave.py,sha256=zYA4z52BHE-q5Gl4YHL1ujdtC69lmkUsJ6o69OnStUY,3801
166
166
  pyglet/media/codecs/wmf.py,sha256=CpBuhvb8U1N11sLrxAVEao_37VAHBS-yMk8ZIQaQzWQ,35263
167
167
  pyglet/media/codecs/ffmpeg_lib/__init__.py,sha256=MzdctEH9MnPm-ML5rJRvVmpe5EEKAD-9lBsqLNztx1g,201
168
- pyglet/media/codecs/ffmpeg_lib/compat.py,sha256=Ltol01bPPL0GEpwTI5A2TnZGwbRAAQR7UNDjHBVDuX0,3406
169
- pyglet/media/codecs/ffmpeg_lib/libavcodec.py,sha256=whqIumoRKqKczy522DGxs6qv6nrRIUtzHRF3kUvNa04,23543
170
- pyglet/media/codecs/ffmpeg_lib/libavformat.py,sha256=i8ANmUWOrTrFdfM_AySJbc7I1T_JoKNCFHmZ6CxLElk,15678
171
- pyglet/media/codecs/ffmpeg_lib/libavutil.py,sha256=DPeyKqwEFizzrWlHkzIYe0f7UW9CZYB0UIigauLOQyU,9516
172
- pyglet/media/codecs/ffmpeg_lib/libswresample.py,sha256=PewYX9cs5XxgttBpQ95xyqs_Tq7eGwEXaH_y-bPIeAM,2388
173
- pyglet/media/codecs/ffmpeg_lib/libswscale.py,sha256=1LwIfnufNOBsCMVOzDz13vdUKv966rsrw8kDeblQSXE,1527
168
+ pyglet/media/codecs/ffmpeg_lib/compat.py,sha256=FPbwoEBcA3EIssDc1sastvcw0yy1erLyK62wHQ0vDJo,3498
169
+ pyglet/media/codecs/ffmpeg_lib/libavcodec.py,sha256=OfFCMK3KKFueje_dzav3BQw74ysalff12gHWh9Vpko0,23872
170
+ pyglet/media/codecs/ffmpeg_lib/libavformat.py,sha256=kSPPG1z5kixCQV2Omkv1H3MEIecjjsmIgRKrGSNtOVk,16139
171
+ pyglet/media/codecs/ffmpeg_lib/libavutil.py,sha256=zWKL__B-KNhMlUxtS9jNKj6m-j8G__EHYGwQGQUSMZM,10467
172
+ pyglet/media/codecs/ffmpeg_lib/libswresample.py,sha256=Jaa6zG6yAab9uxg1r3BVUiDhc2FM0PhswwkUKJq5szw,2420
173
+ pyglet/media/codecs/ffmpeg_lib/libswscale.py,sha256=qthAjgfjqTM8EDFGMJenTUC6_a5YxWBmEWg-0yjRUKE,1553
174
174
  pyglet/media/devices/__init__.py,sha256=X6cc8vMKg_HsVCmjqzamCgvNKqXiyLrjXpz-vnVxm-A,773
175
175
  pyglet/media/devices/base.py,sha256=n3RxJD0_yc50juY0nuZ2eGLH0xG0pyn5giMZ9_RSBO8,3218
176
176
  pyglet/media/devices/win32.py,sha256=a1wxD90RAsOQIe1FAu9q3DHGTqElZSZk83JxFHY4M58,12481
@@ -202,9 +202,9 @@ pyglet/model/codecs/__init__.py,sha256=7ezyORi1RBfH-KAmcrfHjNxe4LSTKJDpG4BXHJ-gh
202
202
  pyglet/model/codecs/base.py,sha256=887X8f3ZeePihCI4GSbhjY4oqsaVP0qMtqCaMLSZd94,4380
203
203
  pyglet/model/codecs/gltf.py,sha256=aD6eo7VdFNwpvoquDhjBoN_JL4A2GyXoDl5mQeecwyg,14109
204
204
  pyglet/model/codecs/obj.py,sha256=3fdd-KOymJ21xzxNueDUGEmjuAJAXHyGIDdGIqCGnLE,7984
205
- pyglet/text/__init__.py,sha256=126ecTwSkbrVlkzPgP6MLPrROVF1aMSmZEdpKfXdayc,20463
205
+ pyglet/text/__init__.py,sha256=J2QiN0sWu3qsNj5U2hw6kE94IK1RUuUBsKufDGnCwU8,20467
206
206
  pyglet/text/caret.py,sha256=BQ4QdMinhNKt7lFULJw__mbVIEyZ7FABTHlcOBSdKSY,23356
207
- pyglet/text/document.py,sha256=M5mpfWfg9OIdSGeE92DNjZi7I16i3Q8LH66SYTayV6o,26426
207
+ pyglet/text/document.py,sha256=G7rRW6gZKSC_rt3N1I4Zp6nJ3rjCXr5Z9Bke1ThIojU,26468
208
208
  pyglet/text/runlist.py,sha256=mgHXjKOenggrw930LuaQ0694grAq9VCDyWo7Jm_tnTk,13601
209
209
  pyglet/text/formats/__init__.py,sha256=hZVwM1nciPptXpawu9GplNI_XtUpWH3-AmCZLf2m_kI,24
210
210
  pyglet/text/formats/attributed.py,sha256=VZ9jelMyFr1LJ2M-sgE5IeQJonHBPnaf749TEDC8uqM,2937
@@ -212,23 +212,23 @@ pyglet/text/formats/html.py,sha256=9DE0-Q8clXzlbBxAEPLmwThaHrfBbFRHwNDeMGW86LQ,1
212
212
  pyglet/text/formats/plaintext.py,sha256=xsh6fMs9FQZelPUiLu_pPp-K07r4jUJw0pYRskHeZQM,515
213
213
  pyglet/text/formats/structured.py,sha256=Zkk8uxAr1pxLe7eAtQ-4tabKjp-Ygz9a1ECecOAAsFI,11400
214
214
  pyglet/text/layout/__init__.py,sha256=40UfnGLx-JczJqL46kLomLB1dPKXR3aqEo3aW9alJi8,6148
215
- pyglet/text/layout/base.py,sha256=52dl05tkpaekEshRZLTZ63_SM_R8_HQpTAPVn9jm87k,75910
215
+ pyglet/text/layout/base.py,sha256=pdQsjolFxyhN33etjnm_Wh6Z8wzteBOsDWr1lADitcU,76033
216
216
  pyglet/text/layout/incremental.py,sha256=sdcQEbhFIOTEbDQQWgqsORjXvpu4Rt0e5rKoHICI-Po,36120
217
217
  pyglet/text/layout/scrolling.py,sha256=UcsEyQTnwENze0FP_nKa4sLY8XwdWV1UIRy5Pp9PU_g,9593
218
- pyglet/window/__init__.py,sha256=BYAP_Tnu5Pbr4bhYrHFDjsjFhOLbMY2r5SBp-04V2-M,71039
218
+ pyglet/window/__init__.py,sha256=ue4EfPpzNqjAgjrdTvP1f6WgnEsLHKfDWlk3gnXeEwE,71079
219
219
  pyglet/window/event.py,sha256=Be4We1jfM_q5uMIqTXQjT9UFMMXE-QTo_KDV_M020ZI,4265
220
220
  pyglet/window/key.py,sha256=Q29wUkA3stzTGGD0lTNJ-pIRsi61wrlUPuAVhB9ZKZY,9560
221
221
  pyglet/window/mouse.py,sha256=FjCOhnn30fI5CBcOkPXlJbyGEPBKTeEjrRSNHUBoWp8,3185
222
- pyglet/window/cocoa/__init__.py,sha256=8ngZtlHpeq2Ww2y-QgpHJO657fazPUtoqQcrztWEjTY,29117
222
+ pyglet/window/cocoa/__init__.py,sha256=6t5EH8yM8UqDtXQaHKZJzQjNFBLULFW2_naRkZCttSE,29152
223
223
  pyglet/window/cocoa/pyglet_delegate.py,sha256=8pugvWAI6pZ2y6VGF3Pvrhhgq4Pv0bLJr2h2K51ZOqE,7776
224
224
  pyglet/window/cocoa/pyglet_textview.py,sha256=DbBZO2uaahx7NucGXY4YDIpvuDP6JOs3Z0l3ZZKCcLY,7983
225
225
  pyglet/window/cocoa/pyglet_view.py,sha256=ZiWmWhjI4KWt1Gm2vlD1G2HrN0hBE-hWmFV8o70M1Os,15775
226
226
  pyglet/window/cocoa/pyglet_window.py,sha256=ttcI6ox5ijDu-f1JJMAzdqK31kBv22iOQHbfBwu76nA,3627
227
227
  pyglet/window/cocoa/systemcursor.py,sha256=-rMhvPH3DWl4gsSTCUbkn-yUnbyKM7JdQLfb5RKb8xM,775
228
- pyglet/window/headless/__init__.py,sha256=BLmawFLSJqV_ZjwePGT8DxFSc2ZWuVMDbxATvu1qFX4,3251
229
- pyglet/window/win32/__init__.py,sha256=2Kl5IM4e4nfZOTfSGTwjq9MVFBus0rFeLAKWeRR2W9Q,55563
230
- pyglet/window/xlib/__init__.py,sha256=BsxLzjoWof46BLve8LfhAKZD6eYa1-z3vApXcqHeb_M,70722
231
- pyglet-2.1.9.dist-info/LICENSE,sha256=V-fuy2c8jUDPMZJjPEgH-6jIFoUymjfht2PhVW1d7TQ,1546
232
- pyglet-2.1.9.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
233
- pyglet-2.1.9.dist-info/METADATA,sha256=SJWYnw8zzpA-hj45FMCDoBRNE-fRNDWSOczO7LbP5VU,7650
234
- pyglet-2.1.9.dist-info/RECORD,,
228
+ pyglet/window/headless/__init__.py,sha256=QT3vdaa8qIJVm9B8u17c9-agIG_wrbAIPExNdIFuNjI,3254
229
+ pyglet/window/win32/__init__.py,sha256=xKwhvZA0KEMVo3ytgaTh30GvIAlLCXF4N8plp7nRFJk,55907
230
+ pyglet/window/xlib/__init__.py,sha256=_SmSwQlhiYx37P-jMR3WVZDDQV9A3O6qFNvPrzSDfwE,70725
231
+ pyglet-2.1.11.dist-info/LICENSE,sha256=V-fuy2c8jUDPMZJjPEgH-6jIFoUymjfht2PhVW1d7TQ,1546
232
+ pyglet-2.1.11.dist-info/WHEEL,sha256=CpUCUxeHQbRN5UGRQHYRJorO5Af-Qy_fHMctcQ8DSGI,82
233
+ pyglet-2.1.11.dist-info/METADATA,sha256=AnFcUdJIQxNtv8ZBlowD52UR1bWSCEK7H4nzp_-8Sdo,7651
234
+ pyglet-2.1.11.dist-info/RECORD,,