pyglet 2.0.9__zip → 2.0.10__zip

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 (874) hide show
  1. {pyglet-2.0.9 → pyglet-2.0.10}/.github/workflows/unittests.yml +1 -5
  2. {pyglet-2.0.9 → pyglet-2.0.10}/.readthedocs.yml +5 -1
  3. {pyglet-2.0.9 → pyglet-2.0.10}/PKG-INFO +3 -2
  4. {pyglet-2.0.9 → pyglet-2.0.10}/README.md +2 -1
  5. {pyglet-2.0.9 → pyglet-2.0.10}/RELEASE_NOTES +36 -0
  6. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/qt_sprite_preview.py +774 -586
  7. {pyglet-2.0.9 → pyglet-2.0.10}/doc/conf.py +6 -0
  8. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/shapes.rst +8 -8
  9. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/window_key.rst +9 -1
  10. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/eventloop.rst +27 -26
  11. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/keyboard.rst +194 -67
  12. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/media.rst +297 -67
  13. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/quickstart.rst +1 -0
  14. pyglet-2.0.10/examples/clipboard.py +18 -0
  15. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/media_info.py +1 -9
  16. pyglet-2.0.10/examples/media/soundspace/README +38 -0
  17. pyglet-2.0.10/examples/media/soundspace/reader.py +117 -0
  18. pyglet-2.0.10/examples/media/soundspace/res/bass.wav +0 -0
  19. pyglet-2.0.10/examples/media/soundspace/res/drums.wav +0 -0
  20. pyglet-2.0.10/examples/media/soundspace/res/guitar.wav +0 -0
  21. pyglet-2.0.10/examples/media/soundspace/res/piano.wav +0 -0
  22. pyglet-2.0.10/examples/media/soundspace/res/space.txt +24 -0
  23. pyglet-2.0.10/examples/media/soundspace/soundspace.py +660 -0
  24. {pyglet-2.0.9 → pyglet-2.0.10}/examples/model/fpscamera.py +50 -38
  25. pyglet-2.0.10/examples/net/client.py +18 -0
  26. pyglet-2.0.10/examples/net/server.py +25 -0
  27. {pyglet-2.0.9/examples/graphics → pyglet-2.0.10/examples}/shapes.py +3 -0
  28. {pyglet-2.0.9 → pyglet-2.0.10}/examples/window/fixed_resolution.py +37 -34
  29. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/__init__.py +19 -10
  30. pyglet-2.0.10/pyglet/experimental/README.md +6 -0
  31. {pyglet-2.0.9 → pyglet-2.0.10/pyglet}/experimental/geoshader_sprite.py +29 -33
  32. pyglet-2.0.10/pyglet/experimental/net.py +247 -0
  33. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/directwrite.py +33 -59
  34. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/win32.py +10 -1
  35. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/base.py +195 -46
  36. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/gl_info.py +4 -2
  37. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/lib.py +1 -2
  38. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/win32.py +30 -30
  39. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/graphics/__init__.py +9 -21
  40. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/graphics/shader.py +53 -50
  41. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/graphics/vertexarray.py +8 -9
  42. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/graphics/vertexbuffer.py +50 -74
  43. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/graphics/vertexdomain.py +54 -97
  44. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gui/widgets.py +28 -0
  45. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/__init__.py +19 -5
  46. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/buffer.py +19 -16
  47. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/wic.py +1 -1
  48. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/controller_db.py +19 -23
  49. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/linux/evdev.py +3 -2
  50. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/win32/xinput.py +2 -2
  51. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/cocoalibs.py +1 -0
  52. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/win32/__init__.py +12 -1
  53. pyglet-2.0.10/pyglet/libs/win32/com.py +397 -0
  54. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/win32/types.py +8 -1
  55. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/wmf.py +16 -22
  56. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/devices/base.py +1 -2
  57. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/devices/win32.py +10 -10
  58. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/base.py +2 -3
  59. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/directsound/lib_dsound.py +0 -1
  60. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/listener.py +1 -3
  61. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/lib_xaudio2.py +16 -34
  62. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/player.py +8 -3
  63. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/model/__init__.py +4 -17
  64. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/shapes.py +154 -125
  65. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/sprite.py +4 -17
  66. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/__init__.py +2 -0
  67. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/caret.py +2 -1
  68. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/layout.py +171 -189
  69. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/util.py +0 -31
  70. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/__init__.py +46 -18
  71. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/cocoa/__init__.py +28 -0
  72. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/key.py +10 -1
  73. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/win32/__init__.py +37 -0
  74. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/xlib/__init__.py +142 -5
  75. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet.egg-info/PKG-INFO +3 -2
  76. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet.egg-info/SOURCES.txt +66 -2
  77. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/app/test_eventloop.py +1 -2
  78. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/image/test_imagegrid.py +3 -0
  79. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/image/test_texture3d.py +3 -0
  80. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/media/test_driver.py +15 -12
  81. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png +0 -0
  82. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png +0 -0
  83. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
  84. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
  85. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
  86. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
  87. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
  88. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_buffer_copy.001.png +0 -0
  89. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_buffer_saving.001.png +0 -0
  90. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
  91. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
  92. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
  93. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
  94. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
  95. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_depth_buffer_saving.001.png +0 -0
  96. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
  97. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
  98. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
  99. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
  100. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
  101. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
  102. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
  103. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
  104. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[l.png].001.png +0 -0
  105. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[la.png].001.png +0 -0
  106. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
  107. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb.png].001.png +0 -0
  108. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp.png].001.png +0 -0
  109. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp_trans.png].001.png +0 -0
  110. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
  111. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[l.png].001.png +0 -0
  112. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[la.png].001.png +0 -0
  113. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[rgb.png].001.png +0 -0
  114. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[rgba.png].001.png +0 -0
  115. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png +0 -0
  116. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png +0 -0
  117. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
  118. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
  119. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
  120. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
  121. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
  122. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_buffer_copy.001.png +0 -0
  123. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_buffer_saving.001.png +0 -0
  124. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
  125. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
  126. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
  127. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
  128. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
  129. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_depth_buffer_saving.001.png +0 -0
  130. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
  131. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
  132. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
  133. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
  134. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
  135. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
  136. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
  137. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
  138. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[l.png].001.png +0 -0
  139. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[la.png].001.png +0 -0
  140. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[rgb.png].001.png +0 -0
  141. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[rgba.png].001.png +0 -0
  142. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
  143. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb.png].001.png +0 -0
  144. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp.png].001.png +0 -0
  145. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp_trans.png].001.png +0 -0
  146. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
  147. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[l.png].001.png +0 -0
  148. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[la.png].001.png +0 -0
  149. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[rgb.png].001.png +0 -0
  150. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[rgba.png].001.png +0 -0
  151. pyglet-2.0.10/tests/interactive/shapes/test_shapes.py +179 -0
  152. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_inline_elements.py +20 -17
  153. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_inline_elements_style_change.py +15 -14
  154. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_multiline_wrap.py +18 -18
  155. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_plain.py +5 -5
  156. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_style.py +5 -5
  157. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/conftest.py +5 -0
  158. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/shapes/test_shapes.py +24 -2
  159. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_events.py +31 -21
  160. {pyglet-2.0.9 → pyglet-2.0.10}/tools/gencontrollerdb.py +3 -3
  161. pyglet-2.0.9/pyglet/libs/win32/com.py +0 -340
  162. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
  163. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
  164. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
  165. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
  166. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
  167. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
  168. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
  169. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
  170. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
  171. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
  172. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
  173. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
  174. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
  175. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
  176. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
  177. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
  178. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
  179. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
  180. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
  181. pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
  182. {pyglet-2.0.9 → pyglet-2.0.10}/.coveragerc +0 -0
  183. {pyglet-2.0.9 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  184. {pyglet-2.0.9 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  185. {pyglet-2.0.9 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/questions--or-other.md +0 -0
  186. {pyglet-2.0.9 → pyglet-2.0.10}/.github/workflows/codeql.yml +0 -0
  187. {pyglet-2.0.9 → pyglet-2.0.10}/.gitignore +0 -0
  188. {pyglet-2.0.9 → pyglet-2.0.10}/LICENSE +0 -0
  189. {pyglet-2.0.9 → pyglet-2.0.10}/MANIFEST.in +0 -0
  190. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/aseprite_codec/README +0 -0
  191. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/aseprite_codec/asedemo.py +0 -0
  192. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/aseprite_codec/aseprite.py +0 -0
  193. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/aseprite_codec/running.ase +0 -0
  194. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/logo3d/logo3d.jpg +0 -0
  195. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/logo3d/logo3d.obj.zip +0 -0
  196. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/logo3d/logo3d.wings +0 -0
  197. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/scenemanager.py +0 -0
  198. {pyglet-2.0.9 → pyglet-2.0.10}/contrib/toys/follow_mouse.py +0 -0
  199. {pyglet-2.0.9 → pyglet-2.0.10}/doc/Makefile +0 -0
  200. {pyglet-2.0.9 → pyglet-2.0.10}/doc/README.md +0 -0
  201. {pyglet-2.0.9 → pyglet-2.0.10}/doc/_static/favicon.ico +0 -0
  202. {pyglet-2.0.9 → pyglet-2.0.10}/doc/_static/logo.png +0 -0
  203. {pyglet-2.0.9 → pyglet-2.0.10}/doc/_static/logo5.svg +0 -0
  204. {pyglet-2.0.9 → pyglet-2.0.10}/doc/_static/relatedlogo.png +0 -0
  205. {pyglet-2.0.9 → pyglet-2.0.10}/doc/external_resources.rst +0 -0
  206. {pyglet-2.0.9 → pyglet-2.0.10}/doc/index.rst +0 -0
  207. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/contributing.rst +0 -0
  208. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/dist.rst +0 -0
  209. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/doc.rst +0 -0
  210. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/generated.rst +0 -0
  211. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/gl.rst +0 -0
  212. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/media_logging_manual.rst +0 -0
  213. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/media_manual.rst +0 -0
  214. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/testing.rst +0 -0
  215. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/virtualenv.rst +0 -0
  216. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/wraptypes-class.svg +0 -0
  217. {pyglet-2.0.9 → pyglet-2.0.10}/doc/internal/wraptypes.rst +0 -0
  218. {pyglet-2.0.9 → pyglet-2.0.10}/doc/make.bat +0 -0
  219. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/app.rst +0 -0
  220. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/canvas.rst +0 -0
  221. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/clock.rst +0 -0
  222. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/event.rst +0 -0
  223. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/font.rst +0 -0
  224. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/gl.rst +0 -0
  225. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/graphics/allocation.rst +0 -0
  226. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/graphics/index.rst +0 -0
  227. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/graphics/shader.rst +0 -0
  228. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/graphics/vertexbuffer.rst +0 -0
  229. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/graphics/vertexdomain.rst +0 -0
  230. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/gui.rst +0 -0
  231. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/image/animation.rst +0 -0
  232. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/image/atlas.rst +0 -0
  233. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/image/index.rst +0 -0
  234. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/info.rst +0 -0
  235. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/input.rst +0 -0
  236. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/math.rst +0 -0
  237. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/media.rst +0 -0
  238. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/media_synthesis.rst +0 -0
  239. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/pyglet.rst +0 -0
  240. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/resource.rst +0 -0
  241. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/sprite.rst +0 -0
  242. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/text/caret.rst +0 -0
  243. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/text/document.rst +0 -0
  244. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/text/index.rst +0 -0
  245. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/text/layout.rst +0 -0
  246. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/window.rst +0 -0
  247. {pyglet-2.0.9 → pyglet-2.0.10}/doc/modules/window_mouse.rst +0 -0
  248. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/context.rst +0 -0
  249. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/debug.rst +0 -0
  250. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/events.rst +0 -0
  251. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/examplegame.rst +0 -0
  252. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/gl.rst +0 -0
  253. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/graphics.rst +0 -0
  254. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/image.rst +0 -0
  255. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/abstract_image.png +0 -0
  256. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/abstract_image.svg +0 -0
  257. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/buffer_image.png +0 -0
  258. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/buffer_image.svg +0 -0
  259. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/context_flow.png +0 -0
  260. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/context_flow.svg +0 -0
  261. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_crosshair.png +0 -0
  262. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_default.png +0 -0
  263. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_hand.png +0 -0
  264. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_no.png +0 -0
  265. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_down.png +0 -0
  266. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_left.png +0 -0
  267. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_left_right.png +0 -0
  268. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_right.png +0 -0
  269. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_up.png +0 -0
  270. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_up_down.png +0 -0
  271. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_text.png +0 -0
  272. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_wait.png +0 -0
  273. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_crosshair.png +0 -0
  274. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_default.png +0 -0
  275. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_hand.png +0 -0
  276. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_help.png +0 -0
  277. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_no.png +0 -0
  278. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size.png +0 -0
  279. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_left_right.png +0 -0
  280. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_nesw.png +0 -0
  281. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_nwse.png +0 -0
  282. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_up_down.png +0 -0
  283. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_text.png +0 -0
  284. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_wait.png +0 -0
  285. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_wait_arrow.png +0 -0
  286. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/explosion.png +0 -0
  287. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/font_metrics.png +0 -0
  288. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/font_metrics.svg +0 -0
  289. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/image_classes.png +0 -0
  290. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/image_classes.svg +0 -0
  291. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/image_grid.png +0 -0
  292. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/image_grid.svg +0 -0
  293. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/image_sequence.png +0 -0
  294. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/image_sequence.svg +0 -0
  295. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/mouse_coordinates.png +0 -0
  296. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/mouse_coordinates.svg +0 -0
  297. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/screens.png +0 -0
  298. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/screens.svg +0 -0
  299. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/text_classes.png +0 -0
  300. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/text_classes.svg +0 -0
  301. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_location.png +0 -0
  302. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_location.svg +0 -0
  303. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_borderless.png +0 -0
  304. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_default.png +0 -0
  305. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_dialog.png +0 -0
  306. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_tool.png +0 -0
  307. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_default.png +0 -0
  308. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_dialog.png +0 -0
  309. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_overlay.png +0 -0
  310. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_tool.png +0 -0
  311. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_transparent.png +0 -0
  312. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/input.rst +0 -0
  313. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/installation.rst +0 -0
  314. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/math.rst +0 -0
  315. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/migration.rst +0 -0
  316. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/mouse.rst +0 -0
  317. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/options.rst +0 -0
  318. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/resources.rst +0 -0
  319. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/shapes.rst +0 -0
  320. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/text.rst +0 -0
  321. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/time.rst +0 -0
  322. {pyglet-2.0.9 → pyglet-2.0.10}/doc/programming_guide/windowing.rst +0 -0
  323. {pyglet-2.0.9 → pyglet-2.0.10}/doc/requirements.txt +0 -0
  324. {pyglet-2.0.9 → pyglet-2.0.10}/examples/events/events_key_state_handler.py +0 -0
  325. {pyglet-2.0.9 → pyglet-2.0.10}/examples/events/register_event_type.py +0 -0
  326. {pyglet-2.0.9 → pyglet-2.0.10}/examples/events/window_events.py +0 -0
  327. {pyglet-2.0.9 → pyglet-2.0.10}/examples/events/window_platform_event.py +0 -0
  328. {pyglet-2.0.9 → pyglet-2.0.10}/examples/file_dialog.py +0 -0
  329. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/resources/asteroid.png +0 -0
  330. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/resources/bullet.png +0 -0
  331. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/resources/bullet.wav +0 -0
  332. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/resources/engine_flame.png +0 -0
  333. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/resources/player.png +0 -0
  334. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version1/asteroid.py +0 -0
  335. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version1/game/__init__.py +0 -0
  336. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version1/game/load.py +0 -0
  337. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version1/game/resources.py +0 -0
  338. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version2/asteroid.py +0 -0
  339. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version2/game/__init__.py +0 -0
  340. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version2/game/load.py +0 -0
  341. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version2/game/physicalobject.py +0 -0
  342. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version2/game/player.py +0 -0
  343. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version2/game/resources.py +0 -0
  344. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version3/asteroid.py +0 -0
  345. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version3/game/__init__.py +0 -0
  346. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version3/game/load.py +0 -0
  347. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version3/game/physicalobject.py +0 -0
  348. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version3/game/player.py +0 -0
  349. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version3/game/resources.py +0 -0
  350. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version3/game/util.py +0 -0
  351. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/asteroid.py +0 -0
  352. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/__init__.py +0 -0
  353. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/asteroid.py +0 -0
  354. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/bullet.py +0 -0
  355. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/load.py +0 -0
  356. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/physicalobject.py +0 -0
  357. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/player.py +0 -0
  358. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/resources.py +0 -0
  359. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version4/game/util.py +0 -0
  360. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/asteroid.py +0 -0
  361. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/__init__.py +0 -0
  362. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/asteroid.py +0 -0
  363. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/bullet.py +0 -0
  364. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/load.py +0 -0
  365. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/physicalobject.py +0 -0
  366. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/player.py +0 -0
  367. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/resources.py +0 -0
  368. {pyglet-2.0.9 → pyglet-2.0.10}/examples/game/version5/game/util.py +0 -0
  369. {pyglet-2.0.9 → pyglet-2.0.10}/examples/graphics/image_convert.py +0 -0
  370. {pyglet-2.0.9 → pyglet-2.0.10}/examples/graphics/image_display.py +0 -0
  371. {pyglet-2.0.9 → pyglet-2.0.10}/examples/gui/bar.png +0 -0
  372. {pyglet-2.0.9 → pyglet-2.0.10}/examples/gui/button_down.png +0 -0
  373. {pyglet-2.0.9 → pyglet-2.0.10}/examples/gui/button_hover.png +0 -0
  374. {pyglet-2.0.9 → pyglet-2.0.10}/examples/gui/button_up.png +0 -0
  375. {pyglet-2.0.9 → pyglet-2.0.10}/examples/gui/knob.png +0 -0
  376. {pyglet-2.0.9 → pyglet-2.0.10}/examples/gui/widgets.py +0 -0
  377. {pyglet-2.0.9 → pyglet-2.0.10}/examples/hello_world.py +0 -0
  378. {pyglet-2.0.9 → pyglet-2.0.10}/examples/input/apple_remote.py +0 -0
  379. {pyglet-2.0.9 → pyglet-2.0.10}/examples/input/controller.py +0 -0
  380. {pyglet-2.0.9 → pyglet-2.0.10}/examples/input/input.py +0 -0
  381. {pyglet-2.0.9 → pyglet-2.0.10}/examples/input/joystick.py +0 -0
  382. {pyglet-2.0.9 → pyglet-2.0.10}/examples/input/tablet.py +0 -0
  383. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/media_player.py +0 -0
  384. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/noisy/README +0 -0
  385. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/noisy/ball.png +0 -0
  386. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/noisy/ball.wav +0 -0
  387. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/noisy/noisy.py +0 -0
  388. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/synthesizer.py +0 -0
  389. {pyglet-2.0.9 → pyglet-2.0.10}/examples/media/video.py +0 -0
  390. {pyglet-2.0.9 → pyglet-2.0.10}/examples/model/box.mtl +0 -0
  391. {pyglet-2.0.9 → pyglet-2.0.10}/examples/model/box.obj +0 -0
  392. {pyglet-2.0.9 → pyglet-2.0.10}/examples/model/logo3d.mtl +0 -0
  393. {pyglet-2.0.9 → pyglet-2.0.10}/examples/model/logo3d.obj +0 -0
  394. {pyglet-2.0.9 → pyglet-2.0.10}/examples/model/model.py +0 -0
  395. {pyglet-2.0.9 → pyglet-2.0.10}/examples/model/pyglet.png +0 -0
  396. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/compute_shader.py +0 -0
  397. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/egl_context.py +0 -0
  398. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/opengl.py +0 -0
  399. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/opengl_context.py +0 -0
  400. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/opengl_core.py +0 -0
  401. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/opengl_scissor.py +0 -0
  402. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/opengl_shader.py +0 -0
  403. {pyglet-2.0.9 → pyglet-2.0.10}/examples/opengl/pyglet.png +0 -0
  404. {pyglet-2.0.9 → pyglet-2.0.10}/examples/programming_guide/animation.py +0 -0
  405. {pyglet-2.0.9 → pyglet-2.0.10}/examples/programming_guide/dinosaur.gif +0 -0
  406. {pyglet-2.0.9 → pyglet-2.0.10}/examples/programming_guide/events.py +0 -0
  407. {pyglet-2.0.9 → pyglet-2.0.10}/examples/programming_guide/hello_world.py +0 -0
  408. {pyglet-2.0.9 → pyglet-2.0.10}/examples/programming_guide/image_viewer.py +0 -0
  409. {pyglet-2.0.9 → pyglet-2.0.10}/examples/programming_guide/kitten.jpg +0 -0
  410. {pyglet-2.0.9 → pyglet-2.0.10}/examples/programming_guide/window_subclass.py +0 -0
  411. {pyglet-2.0.9 → pyglet-2.0.10}/examples/resources/kitten.jpg +0 -0
  412. {pyglet-2.0.9 → pyglet-2.0.10}/examples/resources/pyglet.png +0 -0
  413. {pyglet-2.0.9 → pyglet-2.0.10}/examples/sprite/depth_sprite.py +0 -0
  414. {pyglet-2.0.9 → pyglet-2.0.10}/examples/sprite/display_sprite.py +0 -0
  415. {pyglet-2.0.9 → pyglet-2.0.10}/examples/sprite/multi_texture_sprite.py +0 -0
  416. {pyglet-2.0.9 → pyglet-2.0.10}/examples/sprite/sprite_batching.py +0 -0
  417. {pyglet-2.0.9 → pyglet-2.0.10}/examples/text/advanced_font.py +0 -0
  418. {pyglet-2.0.9 → pyglet-2.0.10}/examples/text/font_comparison.py +0 -0
  419. {pyglet-2.0.9 → pyglet-2.0.10}/examples/text/html_label.py +0 -0
  420. {pyglet-2.0.9 → pyglet-2.0.10}/examples/text/pyglet.png +0 -0
  421. {pyglet-2.0.9 → pyglet-2.0.10}/examples/text/text_input.py +0 -0
  422. {pyglet-2.0.9 → pyglet-2.0.10}/examples/timer.py +0 -0
  423. {pyglet-2.0.9 → pyglet-2.0.10}/examples/window/camera.py +0 -0
  424. {pyglet-2.0.9 → pyglet-2.0.10}/examples/window/camera_group.py +0 -0
  425. {pyglet-2.0.9 → pyglet-2.0.10}/examples/window/multiple_windows.py +0 -0
  426. {pyglet-2.0.9 → pyglet-2.0.10}/examples/window/overlay_window.py +0 -0
  427. {pyglet-2.0.9 → pyglet-2.0.10}/examples/window/transparent_window.py +0 -0
  428. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/dist_field/README +0 -0
  429. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/dist_field/genfield.py +0 -0
  430. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/dist_field/py.df.png +0 -0
  431. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/dist_field/py.png +0 -0
  432. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/dist_field/renderfield.py +0 -0
  433. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/flaccodec.py +0 -0
  434. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/hello_world.svg +0 -0
  435. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/spritebenchmark.py +0 -0
  436. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/svg_test.py +0 -0
  437. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/wayland/gbm_egl_context.py +0 -0
  438. {pyglet-2.0.9 → pyglet-2.0.10}/experimental/win32priority.py +0 -0
  439. {pyglet-2.0.9 → pyglet-2.0.10}/make.py +0 -0
  440. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/app/__init__.py +0 -0
  441. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/app/base.py +0 -0
  442. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/app/cocoa.py +0 -0
  443. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/app/win32.py +0 -0
  444. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/app/xlib.py +0 -0
  445. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/canvas/__init__.py +0 -0
  446. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/canvas/base.py +0 -0
  447. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/canvas/cocoa.py +0 -0
  448. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/canvas/headless.py +0 -0
  449. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/canvas/win32.py +0 -0
  450. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/canvas/xlib.py +0 -0
  451. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/canvas/xlib_vidmoderestore.py +0 -0
  452. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/clock.py +0 -0
  453. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/customtypes.py +0 -0
  454. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/event.py +0 -0
  455. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/extlibs/__init__.py +0 -0
  456. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/extlibs/png.py +0 -0
  457. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/__init__.py +0 -0
  458. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/base.py +0 -0
  459. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/fontconfig.py +0 -0
  460. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/freetype.py +0 -0
  461. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/freetype_lib.py +0 -0
  462. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/quartz.py +0 -0
  463. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/ttf.py +0 -0
  464. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/user.py +0 -0
  465. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/font/win32query.py +0 -0
  466. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/__init__.py +0 -0
  467. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/agl.py +0 -0
  468. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/cocoa.py +0 -0
  469. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/gl.py +0 -0
  470. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/gl_compat.py +0 -0
  471. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/glx.py +0 -0
  472. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/glx_info.py +0 -0
  473. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/glxext_arb.py +0 -0
  474. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/glxext_mesa.py +0 -0
  475. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/glxext_nv.py +0 -0
  476. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/headless.py +0 -0
  477. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/lib_agl.py +0 -0
  478. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/lib_glx.py +0 -0
  479. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/lib_wgl.py +0 -0
  480. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/wgl.py +0 -0
  481. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/wgl_info.py +0 -0
  482. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/wglext_arb.py +0 -0
  483. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/wglext_nv.py +0 -0
  484. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gl/xlib.py +0 -0
  485. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/graphics/allocation.py +0 -0
  486. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gui/__init__.py +0 -0
  487. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/gui/frame.py +0 -0
  488. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/animation.py +0 -0
  489. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/atlas.py +0 -0
  490. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/__init__.py +0 -0
  491. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/bmp.py +0 -0
  492. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/dds.py +0 -0
  493. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/gdiplus.py +0 -0
  494. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/gdkpixbuf2.py +0 -0
  495. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/gif.py +0 -0
  496. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/pil.py +0 -0
  497. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/png.py +0 -0
  498. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/quartz.py +0 -0
  499. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/image/codecs/s3tc.py +0 -0
  500. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/info.py +0 -0
  501. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/__init__.py +0 -0
  502. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/base.py +0 -0
  503. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/controller.py +0 -0
  504. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/linux/__init__.py +0 -0
  505. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/linux/evdev_constants.py +0 -0
  506. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/linux/x11_xinput.py +0 -0
  507. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/linux/x11_xinput_tablet.py +0 -0
  508. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/macos/__init__.py +0 -0
  509. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/macos/darwin_hid.py +0 -0
  510. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/win32/__init__.py +0 -0
  511. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/win32/directinput.py +0 -0
  512. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/input/win32/wintab.py +0 -0
  513. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/lib.py +0 -0
  514. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/__init__.py +0 -0
  515. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/darwin/__init__.py +0 -0
  516. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/__init__.py +0 -0
  517. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/cocoatypes.py +0 -0
  518. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/runtime.py +0 -0
  519. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/darwin/coreaudio.py +0 -0
  520. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/darwin/quartzkey.py +0 -0
  521. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/egl/__init__.py +0 -0
  522. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/egl/egl.py +0 -0
  523. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/egl/eglext.py +0 -0
  524. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/egl/lib.py +0 -0
  525. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/wayland/__init__.py +0 -0
  526. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/wayland/gbm.py +0 -0
  527. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/wayland/xkbcommon.py +0 -0
  528. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/win32/constants.py +0 -0
  529. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/win32/context_managers.py +0 -0
  530. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/win32/dinput.py +0 -0
  531. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/win32/libwintab.py +0 -0
  532. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/win32/winkey.py +0 -0
  533. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/x11/__init__.py +0 -0
  534. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/x11/cursorfont.py +0 -0
  535. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/x11/xf86vmode.py +0 -0
  536. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/x11/xinerama.py +0 -0
  537. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/x11/xinput.py +0 -0
  538. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/x11/xlib.py +0 -0
  539. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/libs/x11/xsync.py +0 -0
  540. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/math.py +0 -0
  541. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/__init__.py +0 -0
  542. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/buffered_logger.py +0 -0
  543. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/__init__.py +0 -0
  544. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/base.py +0 -0
  545. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/coreaudio.py +0 -0
  546. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg.py +0 -0
  547. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/__init__.py +0 -0
  548. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/compat.py +0 -0
  549. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavcodec.py +0 -0
  550. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavformat.py +0 -0
  551. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavutil.py +0 -0
  552. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libswresample.py +0 -0
  553. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libswscale.py +0 -0
  554. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/gstreamer.py +0 -0
  555. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/pyogg.py +0 -0
  556. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/codecs/wave.py +0 -0
  557. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/devices/__init__.py +0 -0
  558. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/__init__.py +0 -0
  559. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/directsound/__init__.py +0 -0
  560. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/directsound/adaptation.py +0 -0
  561. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/directsound/exceptions.py +0 -0
  562. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/directsound/interface.py +0 -0
  563. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/openal/__init__.py +0 -0
  564. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/openal/adaptation.py +0 -0
  565. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/openal/interface.py +0 -0
  566. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/openal/lib_alc.py +0 -0
  567. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/openal/lib_openal.py +0 -0
  568. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/pulse/__init__.py +0 -0
  569. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/pulse/adaptation.py +0 -0
  570. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/pulse/interface.py +0 -0
  571. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/pulse/lib_pulseaudio.py +0 -0
  572. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/silent/__init__.py +0 -0
  573. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/silent/adaptation.py +0 -0
  574. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/__init__.py +0 -0
  575. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/adaptation.py +0 -0
  576. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/interface.py +0 -0
  577. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/exceptions.py +0 -0
  578. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/instrumentation.py +0 -0
  579. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/mediathreads.py +0 -0
  580. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/media/synthesis.py +0 -0
  581. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/model/codecs/__init__.py +0 -0
  582. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/model/codecs/gltf.py +0 -0
  583. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/model/codecs/obj.py +0 -0
  584. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/resource.py +0 -0
  585. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/document.py +0 -0
  586. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/formats/__init__.py +0 -0
  587. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/formats/attributed.py +0 -0
  588. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/formats/html.py +0 -0
  589. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/formats/plaintext.py +0 -0
  590. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/formats/structured.py +0 -0
  591. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/text/runlist.py +0 -0
  592. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_delegate.py +0 -0
  593. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_textview.py +0 -0
  594. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_view.py +0 -0
  595. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_window.py +0 -0
  596. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/cocoa/systemcursor.py +0 -0
  597. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/event.py +0 -0
  598. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/headless/__init__.py +0 -0
  599. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet/window/mouse.py +0 -0
  600. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet.egg-info/dependency_links.txt +0 -0
  601. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet.egg-info/top_level.txt +0 -0
  602. {pyglet-2.0.9 → pyglet-2.0.10}/pyglet.egg-info/zip-safe +0 -0
  603. {pyglet-2.0.9 → pyglet-2.0.10}/pyproject.toml +0 -0
  604. {pyglet-2.0.9 → pyglet-2.0.10}/pytest.ini +0 -0
  605. {pyglet-2.0.9 → pyglet-2.0.10}/setup.cfg +0 -0
  606. {pyglet-2.0.9 → pyglet-2.0.10}/setup.py +0 -0
  607. {pyglet-2.0.9 → pyglet-2.0.10}/tests/__init__.py +0 -0
  608. {pyglet-2.0.9 → pyglet-2.0.10}/tests/annotations.py +0 -0
  609. {pyglet-2.0.9 → pyglet-2.0.10}/tests/base/__init__.py +0 -0
  610. {pyglet-2.0.9 → pyglet-2.0.10}/tests/base/data.py +0 -0
  611. {pyglet-2.0.9 → pyglet-2.0.10}/tests/base/event_loop.py +0 -0
  612. {pyglet-2.0.9 → pyglet-2.0.10}/tests/base/interactive.py +0 -0
  613. {pyglet-2.0.9 → pyglet-2.0.10}/tests/base/performance.py +0 -0
  614. {pyglet-2.0.9 → pyglet-2.0.10}/tests/base/test_interactive_test_base.py +0 -0
  615. {pyglet-2.0.9 → pyglet-2.0.10}/tests/conftest.py +0 -0
  616. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/fonts/README +0 -0
  617. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/fonts/action_man.ttf +0 -0
  618. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/fonts/action_man_bold.ttf +0 -0
  619. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/fonts/action_man_bold_italic.ttf +0 -0
  620. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/fonts/action_man_italic.ttf +0 -0
  621. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/fonts/courR12-ISO8859-1.pcf +0 -0
  622. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/8bpp.gif +0 -0
  623. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/cursor.png +0 -0
  624. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/dinosaur.gif +0 -0
  625. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/gdk_close.png +0 -0
  626. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/grey_background.png +0 -0
  627. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/icon1.png +0 -0
  628. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/icon_size1.png +0 -0
  629. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/icon_size2.png +0 -0
  630. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/icon_size3.png +0 -0
  631. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/icon_size4.png +0 -0
  632. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/icon_size5.png +0 -0
  633. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/l.png +0 -0
  634. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/la.png +0 -0
  635. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/multitexture.png +0 -0
  636. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb.png +0 -0
  637. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_16bpp.bmp +0 -0
  638. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_1bpp.bmp +0 -0
  639. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_24bpp.bmp +0 -0
  640. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_32bpp.bmp +0 -0
  641. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_4bpp.bmp +0 -0
  642. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_8bpp.bmp +0 -0
  643. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_8bpp.png +0 -0
  644. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_8bpp_trans.png +0 -0
  645. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgb_dxt1.dds +0 -0
  646. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgba.png +0 -0
  647. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgba_32bpp.bmp +0 -0
  648. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgba_dxt1.dds +0 -0
  649. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgba_dxt3.dds +0 -0
  650. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/rgba_dxt5.dds +0 -0
  651. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/images/tests.interactive.test_interactive_test_base._Test.test_1.001.png +0 -0
  652. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/README +0 -0
  653. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/alert.wav +0 -0
  654. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/login.wav +0 -0
  655. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/logout.wav +0 -0
  656. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/receive.wav +0 -0
  657. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/send.wav +0 -0
  658. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_sawtooth_16_11025_1ch.wav +0 -0
  659. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_sawtooth_16_44800_1ch.wav +0 -0
  660. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_silence_16_11025_1ch.wav +0 -0
  661. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_silence_16_44800_1ch.wav +0 -0
  662. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_simplefm_16_11025_1ch.wav +0 -0
  663. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_simplefm_16_44800_1ch.wav +0 -0
  664. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_sine_16_11025_1ch.wav +0 -0
  665. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_sine_16_44800_1ch.wav +0 -0
  666. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_square_16_11025_1ch.wav +0 -0
  667. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_square_16_44800_1ch.wav +0 -0
  668. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_triangle_16_11025_1ch.wav +0 -0
  669. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/media/synthesis_triangle_16_44800_1ch.wav +0 -0
  670. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/models/logo3d.mtl +0 -0
  671. {pyglet-2.0.9 → pyglet-2.0.10}/tests/data/models/logo3d.obj +0 -0
  672. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/__init__.py +0 -0
  673. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/app/__init__.py +0 -0
  674. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/font/test_fontconfig.py +0 -0
  675. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/font/test_freetype_face.py +0 -0
  676. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/graphics/__init__.py +0 -0
  677. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/graphics/test_allocation.py +0 -0
  678. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/image/__init__.py +0 -0
  679. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/image/test_gdkpixbuf2.py +0 -0
  680. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/media/__init__.py +0 -0
  681. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/media/mock_player.py +0 -0
  682. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/media/test_directsound.py +0 -0
  683. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/media/test_openal.py +0 -0
  684. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/media/test_player.py +0 -0
  685. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/media/test_pulse.py +0 -0
  686. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/model/__init__.py +0 -0
  687. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/model/test_loading.py +0 -0
  688. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/platform/__init__.py +0 -0
  689. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/platform/test_linux_fontconfig.py +0 -0
  690. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/platform/test_win_context_managers.py +0 -0
  691. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/platform/test_win_multicore_clock.py +0 -0
  692. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/__init__.py +0 -0
  693. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/dir1/dir1/f3.txt +0 -0
  694. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/dir1/f2.txt +0 -0
  695. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/dir1/res.zip +0 -0
  696. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/dir2/f6.txt +0 -0
  697. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/f1.txt +0 -0
  698. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/rgbm.png +0 -0
  699. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/test_resource_image_loading.py +0 -0
  700. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/resource/test_resource_loading.py +0 -0
  701. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/text/__init__.py +0 -0
  702. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/text/test_empty_document.py +0 -0
  703. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/window/__init__.py +0 -0
  704. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/window/test_context_share.py +0 -0
  705. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/window/test_event_sequence.py +0 -0
  706. {pyglet-2.0.9 → pyglet-2.0.10}/tests/integration/window/test_window_caption.py +0 -0
  707. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/__init__.py +0 -0
  708. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/conftest.py +0 -0
  709. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/graphics/__init__.py +0 -0
  710. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/graphics/test_multitexture.py +0 -0
  711. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/image/__init__.py +0 -0
  712. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/image/test_image.py +0 -0
  713. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/media/__init__.py +0 -0
  714. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/media/test_player.py +0 -0
  715. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/screenshots/committed/README +0 -0
  716. /pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.graphics.test_multitexture.test_multitexture.001.png → /pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[rgb.png].001.png +0 -0
  717. /pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png → /pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[rgba.png].001.png +0 -0
  718. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/screenshots/session/README +0 -0
  719. /pyglet-2.0.9/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png → /pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.graphics.test_multitexture.test_multitexture.001.png +0 -0
  720. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[l.png].001.png +0 -0
  721. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[l.png].001.png +0 -0
  722. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/__init__.py +0 -0
  723. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_caret_color.py +0 -0
  724. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_content_valign.py +0 -0
  725. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/text/test_html.py +0 -0
  726. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/__init__.py +0 -0
  727. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/test_window_events.py +0 -0
  728. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/test_window_fullscreen.py +0 -0
  729. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/test_window_modes.py +0 -0
  730. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/test_window_multisample.py +0 -0
  731. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/test_window_open.py +0 -0
  732. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/test_window_settings.py +0 -0
  733. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/test_window_styles.py +0 -0
  734. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/window/window_util.py +0 -0
  735. {pyglet-2.0.9 → pyglet-2.0.10}/tests/interactive/windowed_test_base.py +0 -0
  736. {pyglet-2.0.9 → pyglet-2.0.10}/tests/requirements.txt +0 -0
  737. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/__init__.py +0 -0
  738. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/media/__init__.py +0 -0
  739. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/media/test_listener.py +0 -0
  740. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/media/test_player.py +0 -0
  741. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/media/test_sources.py +0 -0
  742. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/media/test_synthesis.py +0 -0
  743. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/shapes/__init__.py +0 -0
  744. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/shapes/conftest.py +0 -0
  745. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/shapes/test_bordered_rectangle.py +0 -0
  746. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_atlas.py +0 -0
  747. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_clock.py +0 -0
  748. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_clock_freq.py +0 -0
  749. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_font.py +0 -0
  750. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_input.py +0 -0
  751. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_math.py +0 -0
  752. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_resource_path.py +0 -0
  753. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_sprite.py +0 -0
  754. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/test_text.py +0 -0
  755. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/text/__init__.py +0 -0
  756. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/text/test_caret.py +0 -0
  757. {pyglet-2.0.9 → pyglet-2.0.10}/tests/unit/text/test_layout.py +0 -0
  758. {pyglet-2.0.9 → pyglet-2.0.10}/tools/al_info.py +0 -0
  759. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/bokeh_timeline.py +0 -0
  760. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/compare.py +0 -0
  761. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/configure.py +0 -0
  762. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/extractors.py +0 -0
  763. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/fs.py +0 -0
  764. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/mp.py +0 -0
  765. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/mpexceptions.py +0 -0
  766. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/playmany.py +0 -0
  767. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/readme_ffmpeg_debbuging_branch.txt +0 -0
  768. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/readme_run_tests.txt +0 -0
  769. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/report.py +0 -0
  770. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/reports.py +0 -0
  771. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/retry_crashed.py +0 -0
  772. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/run_test_suite.py +0 -0
  773. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/summarize.py +0 -0
  774. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/test_instrumentation.py +0 -0
  775. {pyglet-2.0.9 → pyglet-2.0.10}/tools/ffmpeg/timeline.py +0 -0
  776. {pyglet-2.0.9 → pyglet-2.0.10}/tools/gendist.sh +0 -0
  777. {pyglet-2.0.9 → pyglet-2.0.10}/tools/gengl.py +0 -0
  778. {pyglet-2.0.9 → pyglet-2.0.10}/tools/gengl_old.py +0 -0
  779. {pyglet-2.0.9 → pyglet-2.0.10}/tools/genwrappers.py +0 -0
  780. {pyglet-2.0.9 → pyglet-2.0.10}/tools/gl.template +0 -0
  781. {pyglet-2.0.9 → pyglet-2.0.10}/tools/gl.xml +0 -0
  782. {pyglet-2.0.9 → pyglet-2.0.10}/tools/gl_info.py +0 -0
  783. {pyglet-2.0.9 → pyglet-2.0.10}/tools/inspect_font.py +0 -0
  784. {pyglet-2.0.9 → pyglet-2.0.10}/tools/requirements.txt +0 -0
  785. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wgl.h +0 -0
  786. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wraptypes/__init__.py +0 -0
  787. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wraptypes/cparser.py +0 -0
  788. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wraptypes/ctypesparser.py +0 -0
  789. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wraptypes/lex.py +0 -0
  790. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wraptypes/preprocessor.py +0 -0
  791. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wraptypes/wrap.py +0 -0
  792. {pyglet-2.0.9 → pyglet-2.0.10}/tools/wraptypes/yacc.py +0 -0
  793. {pyglet-2.0.9 → pyglet-2.0.10}/website/LICENSE.txt +0 -0
  794. {pyglet-2.0.9 → pyglet-2.0.10}/website/README.rst +0 -0
  795. {pyglet-2.0.9 → pyglet-2.0.10}/website/assets/favicon.ico +0 -0
  796. {pyglet-2.0.9 → pyglet-2.0.10}/website/assets/static/css/example-custom-styles.css +0 -0
  797. {pyglet-2.0.9 → pyglet-2.0.10}/website/assets/static/images/pyglet.png +0 -0
  798. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/404.html/contents.lr +0 -0
  799. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/404.html/ngc-5793.jpg +0 -0
  800. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/authors/benjamin/contents.lr +0 -0
  801. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/authors/benjamin/pyglet.png +0 -0
  802. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/authors/contents.lr +0 -0
  803. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/blog/contents.lr +0 -0
  804. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/blog/welcome-blog/contents.lr +0 -0
  805. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/contents.lr +0 -0
  806. {pyglet-2.0.9 → pyglet-2.0.10}/website/content/eclipse.jpg +0 -0
  807. {pyglet-2.0.9 → pyglet-2.0.10}/website/pyglet.lektorproject +0 -0
  808. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/AUTHORS.txt +0 -0
  809. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/CHANGELOG.md +0 -0
  810. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/CONTRIBUTING.md +0 -0
  811. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/LICENSE.txt +0 -0
  812. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/NOTICE.txt +0 -0
  813. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/README.md +0 -0
  814. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/bootstrap.css +0 -0
  815. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/icomoon.css +0 -0
  816. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/magnific-popup.css +0 -0
  817. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/style.css +0 -0
  818. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  819. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  820. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  821. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.ttf +0 -0
  822. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.woff +0 -0
  823. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/images/Preloader_2.gif +0 -0
  824. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/images/placeholder_person.png +0 -0
  825. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery-3.3.1.min.js +0 -0
  826. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.easing.min.js +0 -0
  827. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.magnific-popup.min.js +0 -0
  828. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.js +0 -0
  829. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.min.js +0 -0
  830. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.waypoints.min.js +0 -0
  831. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/magnific-popup-options.js +0 -0
  832. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/main-singlelayout.js +0 -0
  833. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/main.js +0 -0
  834. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/content.ini +0 -0
  835. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/gallery.ini +0 -0
  836. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/gallery_item.ini +0 -0
  837. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/member.ini +0 -0
  838. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/mission.ini +0 -0
  839. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/mission_tab.ini +0 -0
  840. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/service.ini +0 -0
  841. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/services.ini +0 -0
  842. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/team.ini +0 -0
  843. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/images/blog-index.png +0 -0
  844. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/images/full-blog.png +0 -0
  845. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/images/full-page.png +0 -0
  846. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/images/gallery-404.png +0 -0
  847. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/images/gallery-singlepage.png +0 -0
  848. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/images/mainpage-screenshots.png +0 -0
  849. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/images/responsive-layout.png +0 -0
  850. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/models/404.ini +0 -0
  851. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/models/author.ini +0 -0
  852. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/models/authors.ini +0 -0
  853. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/models/blog-post.ini +0 -0
  854. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/models/blog.ini +0 -0
  855. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/models/page.ini +0 -0
  856. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/models/single-layout.ini +0 -0
  857. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/404.html +0 -0
  858. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/author.html +0 -0
  859. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/authors.html +0 -0
  860. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/content.html +0 -0
  861. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/gallery.html +0 -0
  862. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/mission.html +0 -0
  863. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/services.html +0 -0
  864. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/team.html +0 -0
  865. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog-layout.html +0 -0
  866. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog-post.html +0 -0
  867. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog.html +0 -0
  868. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/layout.html +0 -0
  869. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/macros/blog.html +0 -0
  870. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/macros/pagination.html +0 -0
  871. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/none.html +0 -0
  872. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/page.html +0 -0
  873. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/templates/single-layout.html +0 -0
  874. {pyglet-2.0.9 → pyglet-2.0.10}/website/themes/lektor-icon/theme.ini +0 -0
@@ -0,0 +1,397 @@
1
+ """Minimal Windows COM interface.
2
+
3
+ Allows pyglet to use COM interfaces on Windows without comtypes. Unlike
4
+ comtypes, this module does not provide property interfaces, read typelibs,
5
+ nice-ify return values. We don't need anything that sophisticated to work with COM's.
6
+
7
+ Interfaces should derive from pIUnknown if their implementation is returned by the COM.
8
+ The Python COM interfaces are actually pointers to the implementation (take note
9
+ when translating methods that take an interface as argument).
10
+ (example: A Double Pointer is simply POINTER(MyInterface) as pInterface is already a POINTER.)
11
+
12
+ Interfaces can define methods::
13
+
14
+ class IDirectSound8(com.pIUnknown):
15
+ _methods_ = [
16
+ ('CreateSoundBuffer', com.STDMETHOD()),
17
+ ('GetCaps', com.STDMETHOD(LPDSCAPS)),
18
+ ...
19
+ ]
20
+
21
+ Only use METHOD, STDMETHOD or VOIDMETHOD for the method types (not ordinary ctypes
22
+ function types). The 'this' pointer is bound automatically... e.g., call::
23
+
24
+ device = IDirectSound8()
25
+ DirectSoundCreate8(None, ctypes.byref(device), None)
26
+
27
+ caps = DSCAPS()
28
+ device.GetCaps(caps)
29
+
30
+ Because STDMETHODs use HRESULT as the return type, there is no need to check
31
+ the return value.
32
+
33
+ Don't forget to manually manage memory... call Release() when you're done with
34
+ an interface.
35
+ """
36
+
37
+ import sys
38
+ import ctypes
39
+
40
+ from pyglet.util import debug_print
41
+
42
+ _debug_com = debug_print('debug_com')
43
+
44
+ if sys.platform != 'win32':
45
+ raise ImportError('pyglet.libs.win32.com requires a Windows build of Python')
46
+
47
+
48
+ class GUID(ctypes.Structure):
49
+ _fields_ = [
50
+ ('Data1', ctypes.c_ulong),
51
+ ('Data2', ctypes.c_ushort),
52
+ ('Data3', ctypes.c_ushort),
53
+ ('Data4', ctypes.c_ubyte * 8),
54
+ ]
55
+
56
+ def __init__(self, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8):
57
+ self.Data1 = l
58
+ self.Data2 = w1
59
+ self.Data3 = w2
60
+ self.Data4[:] = (b1, b2, b3, b4, b5, b6, b7, b8)
61
+
62
+ def __repr__(self):
63
+ b1, b2, b3, b4, b5, b6, b7, b8 = self.Data4
64
+ return 'GUID(%x, %x, %x, %x, %x, %x, %x, %x, %x, %x, %x)' % (
65
+ self.Data1, self.Data2, self.Data3, b1, b2, b3, b4, b5, b6, b7, b8)
66
+
67
+ def __eq__(self, other):
68
+ return isinstance(other, GUID) and bytes(self) == bytes(other)
69
+
70
+ def __hash__(self):
71
+ return hash(bytes(self))
72
+
73
+
74
+ LPGUID = ctypes.POINTER(GUID)
75
+ IID = GUID
76
+ REFIID = ctypes.POINTER(IID)
77
+
78
+ S_OK = 0x00000000
79
+ E_NOTIMPL = 0x80004001
80
+ E_NOINTERFACE = 0x80004002
81
+
82
+
83
+ class METHOD:
84
+ """COM method."""
85
+
86
+ def __init__(self, restype, *args):
87
+ self.restype = restype
88
+ self.argtypes = args
89
+
90
+ self.prototype = ctypes.WINFUNCTYPE(self.restype, *self.argtypes)
91
+ self.direct_prototype = ctypes.WINFUNCTYPE(self.restype, ctypes.c_void_p, *self.argtypes)
92
+
93
+ def get_com_proxy(self, i, name):
94
+ return self.prototype(i, name)
95
+
96
+
97
+ class STDMETHOD(METHOD):
98
+ """COM method with HRESULT return value."""
99
+
100
+ def __init__(self, *args):
101
+ super().__init__(ctypes.HRESULT, *args)
102
+
103
+
104
+ class VOIDMETHOD(METHOD):
105
+ """COM method with no return value."""
106
+
107
+ def __init__(self, *args):
108
+ super().__init__(None, *args)
109
+
110
+
111
+ _DummyPointerType = ctypes.POINTER(ctypes.c_int)
112
+ _PointerMeta = type(_DummyPointerType)
113
+ _StructMeta = type(ctypes.Structure)
114
+
115
+
116
+ class _InterfaceMeta(_StructMeta):
117
+ def __new__(cls, name, bases, dct, /, create_pointer_type=True):
118
+ if len(bases) > 1:
119
+ assert _debug_com(f"Ignoring {len(bases) - 1} bases on {name}")
120
+ bases = (bases[0],)
121
+
122
+ if not '_methods_' in dct:
123
+ dct['_methods_'] = ()
124
+
125
+ inh_methods = []
126
+ if bases[0] is not ctypes.Structure: # Method does not exist for first definition below
127
+ for interface_type in (bases[0].get_interface_inheritance()):
128
+ inh_methods.extend(interface_type.__dict__['_methods_'])
129
+
130
+ inh_methods = tuple(inh_methods)
131
+ new_methods = tuple(dct['_methods_'])
132
+
133
+ vtbl_own_offset = len(inh_methods)
134
+
135
+ all_methods = tuple(inh_methods) + new_methods
136
+ for i, (method_name, mt) in enumerate(all_methods):
137
+ assert _debug_com(f"{name}[{i}]: {method_name}: "
138
+ f"{(', '.join(t.__name__ for t in mt.argtypes) or 'void')} -> "
139
+ f"{'void' if mt.restype is None else mt.restype.__name__}")
140
+
141
+ vtbl_struct_type = _StructMeta(f"Vtable_{name}",
142
+ (ctypes.Structure,),
143
+ {'_fields_': [(n, x.direct_prototype) for n, x in all_methods]})
144
+ dct['_vtbl_struct_type'] = vtbl_struct_type
145
+ dct['vtbl_own_offset'] = vtbl_own_offset
146
+
147
+ dct['_fields_'] = (('vtbl_ptr', ctypes.POINTER(vtbl_struct_type)),)
148
+
149
+ res_type = super().__new__(cls, name, bases, dct)
150
+ if create_pointer_type:
151
+ # If we're not being created from a pInterface subclass as helper Interface (so likely
152
+ # being explicitly defined from user code for later use), create the special
153
+ # pInterface pointer subclass so it registers itself into the pointer cache
154
+ _pInterfaceMeta(f"p{name}", (ctypes.POINTER(bases[0]),), {'_type_': res_type})
155
+
156
+ return res_type
157
+
158
+
159
+ class _pInterfaceMeta(_PointerMeta):
160
+ def __new__(cls, name, bases, dct):
161
+ # Interfaces can also be declared by inheritance of pInterface subclasses.
162
+ # If this happens, create the interface and then become pointer to its struct.
163
+
164
+ target = dct.get('_type_', None)
165
+ # If we weren't created due to an Interface subclass definition (don't have a _type_),
166
+ # just define that Interface subclass from our base's _type_
167
+ if target is None:
168
+ interface_base = bases[0]._type_
169
+
170
+ # Create corresponding interface type and then set it as target
171
+ target = _InterfaceMeta(f"_{name}_HelperInterface",
172
+ (interface_base,),
173
+ {'_methods_': dct.get('_methods_', ())},
174
+ create_pointer_type=False)
175
+ dct['_type_'] = target
176
+
177
+ # Create method proxies that will forward ourselves into the interface's methods
178
+ for i, (method_name, method) in enumerate(target._methods_):
179
+ m = method.get_com_proxy(i + target.vtbl_own_offset, method_name)
180
+ def pinterface_method_forward(self, *args, _m=m, _i=i):
181
+ assert _debug_com(f'Calling COM {_i} of {target.__name__} ({_m}) through '
182
+ f'pointer: ({", ".join(map(repr, (self, *args)))})')
183
+ return _m(self, *args)
184
+ dct[method_name] = pinterface_method_forward
185
+
186
+ pointer_type = super().__new__(cls, name, bases, dct)
187
+
188
+ # Hack selves into the ctypes pointer cache so all uses of `ctypes.POINTER` on the
189
+ # interface type will yield it instead of the inflexible standard pointer type.
190
+ # NOTE: This is done pretty much exclusively to help convert COMObjects.
191
+ # Some additional work from callers like
192
+ # RegisterCallback(callback_obj.as_interface(ICallback))
193
+ # instead of
194
+ # RegisterCallback(callback_obj)
195
+ # could make it obsolete.
196
+ from ctypes import _pointer_type_cache
197
+ _pointer_type_cache[target] = pointer_type
198
+
199
+ return pointer_type
200
+
201
+
202
+ class Interface(ctypes.Structure, metaclass=_InterfaceMeta, create_pointer_type=False):
203
+ @classmethod
204
+ def get_interface_inheritance(cls):
205
+ """Returns the types of all interfaces implemented by this interface, up to but not
206
+ including the base `Interface`.
207
+ `Interface` does not represent an actual interface, but merely the base concept of
208
+ them, so viewing it as part of an interface's inheritance chain is meaningless.
209
+ """
210
+ return cls.__mro__[:cls.__mro__.index(Interface)]
211
+
212
+
213
+ class pInterface(_DummyPointerType, metaclass=_pInterfaceMeta):
214
+ _type_ = Interface
215
+
216
+ @classmethod
217
+ def from_param(cls, obj):
218
+ """When dealing with a COMObject, pry a fitting interface out of it"""
219
+
220
+ if not isinstance(obj, COMObject):
221
+ return obj
222
+
223
+ return obj.as_interface(cls._type_)
224
+
225
+
226
+ class IUnknown(Interface):
227
+ _methods_ = [
228
+ ('QueryInterface', STDMETHOD(REFIID, ctypes.c_void_p)),
229
+ ('AddRef', METHOD(ctypes.c_int)),
230
+ ('Release', METHOD(ctypes.c_int)),
231
+ ]
232
+
233
+
234
+ class pIUnknown(pInterface):
235
+ _methods_ = [
236
+ ('QueryInterface', STDMETHOD(REFIID, ctypes.c_void_p)),
237
+ ('AddRef', METHOD(ctypes.c_int)),
238
+ ('Release', METHOD(ctypes.c_int)),
239
+ ]
240
+
241
+
242
+ def _missing_impl(interface_name, method_name):
243
+ """Create a callback returning E_NOTIMPL for methods not present on a COMObject."""
244
+
245
+ def missing_cb_func(*_):
246
+ assert _debug_com(f"Non-implemented method {method_name} called in {interface_name}")
247
+ return E_NOTIMPL
248
+
249
+ return missing_cb_func
250
+
251
+
252
+ def _found_impl(interface_name, method_name, method_func, self_distance):
253
+ """If a method was found in class, create a callback extracting self from the struct
254
+ pointer.
255
+ """
256
+
257
+ def self_extracting_cb_func(p, *args):
258
+ assert _debug_com(f"COMObject method {method_name} called through interface {interface_name}")
259
+ self = ctypes.cast(p + self_distance, ctypes.POINTER(ctypes.py_object)).contents.value
260
+ result = method_func(self, *args)
261
+ # Assume no return statement translates to success
262
+ return S_OK if result is None else result
263
+
264
+ return self_extracting_cb_func
265
+
266
+
267
+ def _adjust_impl(interface_name, method_name, original_method, offset):
268
+ """A method implemented in a previous interface modifies the COMOboject pointer so it
269
+ corresponds to an earlier interface and passes it on to the actual implementation.
270
+ """
271
+
272
+ def adjustor_cb_func(p, *args):
273
+ assert _debug_com(f"COMObject method {method_name} called through interface "
274
+ f"{interface_name}, adjusting pointer by {offset}")
275
+ return original_method(p + offset, *args)
276
+
277
+ return adjustor_cb_func
278
+
279
+
280
+ class COMObject:
281
+ """A COMObject for implementing C callbacks in Python.
282
+ Specify the interface types it supports in `_interfaces_`, and any methods to be implemented
283
+ by those interfaces as standard python methods. If the names match, they will be run as
284
+ callbacks with all arguments supplied as the types specified in the corresponding interface,
285
+ and `self` available as usual.
286
+ Remember to call `super().__init__()`.
287
+
288
+ COMObjects can be passed to ctypes functions directly as long as the corresponding argtype is
289
+ an `Interface` pointer, or a `pInterface` subclass.
290
+
291
+ IUnknown's methods will be autogenerated in case IUnknown is implemented.
292
+ """
293
+
294
+ def __init_subclass__(cls, /, **kwargs):
295
+ super().__init_subclass__(**kwargs)
296
+
297
+ implemented_leaf_interfaces = cls.__dict__.get('_interfaces_', ())
298
+ if not implemented_leaf_interfaces:
299
+ raise TypeError("At least one interface must be defined to use a COMObject")
300
+
301
+ for interface_type in implemented_leaf_interfaces:
302
+ for other in implemented_leaf_interfaces:
303
+ if interface_type is other:
304
+ continue
305
+ if issubclass(interface_type, other):
306
+ raise TypeError("Only specify the leaf interfaces")
307
+
308
+ # Sanity check done
309
+
310
+ _ptr_size = ctypes.sizeof(ctypes.c_void_p)
311
+
312
+ _vtbl_pointers = []
313
+ implemented_methods = {}
314
+
315
+ # Map all leaf and inherited interfaces to the offset of the vtable containing
316
+ # their implementations
317
+ _interface_to_vtbl_offset = {}
318
+ for i, interface_type in enumerate(implemented_leaf_interfaces):
319
+ bases = interface_type.get_interface_inheritance()
320
+ for base in bases:
321
+ if base not in _interface_to_vtbl_offset:
322
+ _interface_to_vtbl_offset[base] = i * _ptr_size
323
+
324
+ if IUnknown in _interface_to_vtbl_offset:
325
+ def QueryInterface(self, iid_ptr, res_ptr):
326
+ ctypes.cast(res_ptr, ctypes.POINTER(ctypes.c_void_p))[0] = 0
327
+ return E_NOINTERFACE
328
+
329
+ def AddRef(self):
330
+ self._vrefcount += 1
331
+ return self._vrefcount
332
+
333
+ def Release(self):
334
+ if self._vrefcount <= 0:
335
+ assert _debug_com(
336
+ f"COMObject {self}: Release while refcount was {self._vrefcount}"
337
+ )
338
+ self._vrefcount -= 1
339
+ return self._vrefcount
340
+
341
+ cls.QueryInterface = QueryInterface
342
+ cls.AddRef = AddRef
343
+ cls.Release = Release
344
+
345
+ for i, interface_type in enumerate(implemented_leaf_interfaces):
346
+ wrappers = []
347
+
348
+ for method_name, method_type in interface_type._vtbl_struct_type._fields_:
349
+ if method_name in implemented_methods:
350
+ # Method is already implemented on a previous interface; redirect to it
351
+ # See https://devblogs.microsoft.com/oldnewthing/20040206-00/?p=40723
352
+ # NOTE: Never tested, might be totally wrong
353
+ func, implementing_vtbl_idx = implemented_methods[method_name]
354
+ mth = _adjust_impl(interface_type.__name__,
355
+ method_name,
356
+ func,
357
+ (implementing_vtbl_idx - i) * _ptr_size)
358
+
359
+ else:
360
+ if (found_method := getattr(cls, method_name, None)) is None:
361
+ mth = _missing_impl(interface_type.__name__, method_name)
362
+ else:
363
+ mth = _found_impl(interface_type.__name__,
364
+ method_name,
365
+ found_method,
366
+ (len(implemented_leaf_interfaces) - i) * _ptr_size)
367
+
368
+ implemented_methods[method_name] = (mth, i)
369
+
370
+ wrappers.append(method_type(mth))
371
+
372
+ vtbl = interface_type._vtbl_struct_type(*wrappers)
373
+ _vtbl_pointers.append(ctypes.pointer(vtbl))
374
+
375
+ fields = []
376
+ for i, itf in enumerate(implemented_leaf_interfaces):
377
+ fields.append((f'vtbl_ptr_{i}', ctypes.POINTER(itf._vtbl_struct_type)))
378
+ fields.append(('self_', ctypes.py_object))
379
+
380
+ cls._interface_to_vtbl_offset = _interface_to_vtbl_offset
381
+ cls._vtbl_pointers = _vtbl_pointers
382
+ cls._struct_type = _StructMeta(f"{cls.__name__}_Struct", (ctypes.Structure,), {'_fields_': fields})
383
+
384
+ def __init__(self):
385
+ self._vrefcount = 1
386
+ self._struct = self._struct_type(*self._vtbl_pointers, ctypes.py_object(self))
387
+
388
+ def as_interface(self, interface_type):
389
+ # This method ignores the QueryInterface mechanism completely; no GUIDs are
390
+ # associated with Interfaces on the python side, it can't be supported.
391
+ # Still works, as so far none of the python-made COMObjects are expected to
392
+ # support it by any C code.
393
+ # (Also no need to always implement it, some COMObjects do not inherit from IUnknown.)
394
+ if (offset := self._interface_to_vtbl_offset.get(interface_type, None)) is None:
395
+ raise TypeError(f"Does not implement {interface_type}")
396
+
397
+ return ctypes.byref(self._struct, offset)
@@ -1,4 +1,5 @@
1
1
  import ctypes
2
+ import sys
2
3
 
3
4
  from ctypes import *
4
5
  from ctypes.wintypes import *
@@ -45,7 +46,6 @@ def POINTER_(obj):
45
46
 
46
47
  c_void_p = POINTER_(c_void)
47
48
  INT = c_int
48
- UBYTE = c_ubyte
49
49
  LPVOID = c_void_p
50
50
  HCURSOR = HANDLE
51
51
  LRESULT = LPARAM
@@ -62,6 +62,11 @@ HDROP = HANDLE
62
62
  LPTSTR = LPWSTR
63
63
  LPSTREAM = c_void_p
64
64
 
65
+ # Fixed in python 3.12. Is c_byte on other versions.
66
+ # Ensure it's the same across all versions.
67
+ if sys.version_info < (3, 12):
68
+ BYTE = c_ubyte
69
+
65
70
  LF_FACESIZE = 32
66
71
  CCHDEVICENAME = 32
67
72
  CCHFORMNAME = 32
@@ -572,6 +577,7 @@ class IStream(com.pIUnknown):
572
577
  com.STDMETHOD()),
573
578
  ]
574
579
 
580
+
575
581
  class DEV_BROADCAST_HDR(Structure):
576
582
  _fields_ = (
577
583
  ('dbch_size', DWORD),
@@ -579,6 +585,7 @@ class DEV_BROADCAST_HDR(Structure):
579
585
  ('dbch_reserved', DWORD),
580
586
  )
581
587
 
588
+
582
589
  class DEV_BROADCAST_DEVICEINTERFACE(Structure):
583
590
  _fields_ = (
584
591
  ('dbcc_size', DWORD),
@@ -398,8 +398,6 @@ class WMFSource(Source):
398
398
 
399
399
  def __init__(self, filename, file=None):
400
400
  assert any([self.decode_audio, self.decode_video]), "Source must decode audio, video, or both, not none."
401
- self._current_audio_sample = None
402
- self._current_audio_buffer = None
403
401
  self._current_video_sample = None
404
402
  self._current_video_buffer = None
405
403
  self._timestamp = 0
@@ -615,20 +613,13 @@ class WMFSource(Source):
615
613
  def get_audio_data(self, num_bytes, compensation_time=0.0):
616
614
  flags = DWORD()
617
615
  timestamp = ctypes.c_longlong()
618
- audio_data_length = DWORD()
619
616
 
620
- # If we have an audio sample already in use and we call this again, release the memory of buffer and sample.
621
- # Can only release after the data is played or else glitches and pops can be heard.
622
- if self._current_audio_sample:
623
- self._current_audio_buffer.Release()
624
- self._current_audio_sample.Release()
625
-
626
- self._current_audio_sample = IMFSample()
627
- self._current_audio_buffer = IMFMediaBuffer()
617
+ imf_sample = IMFSample()
618
+ imf_buffer = IMFMediaBuffer()
628
619
 
629
620
  while True:
630
621
  self._source_reader.ReadSample(self._audio_stream_index, 0, None, ctypes.byref(flags),
631
- ctypes.byref(timestamp), ctypes.byref(self._current_audio_sample))
622
+ ctypes.byref(timestamp), ctypes.byref(imf_sample))
632
623
 
633
624
  if flags.value & MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED:
634
625
  assert _debug('WMFAudioDecoder: Data is no longer valid.')
@@ -638,20 +629,23 @@ class WMFSource(Source):
638
629
  assert _debug('WMFAudioDecoder: End of data from stream source.')
639
630
  break
640
631
 
641
- if not self._current_audio_sample:
632
+ if not imf_sample:
642
633
  assert _debug('WMFAudioDecoder: No sample.')
643
634
  continue
644
635
 
645
636
  # Convert to single buffer as a sample could potentially(rarely) have multiple buffers.
646
- self._current_audio_sample.ConvertToContiguousBuffer(ctypes.byref(self._current_audio_buffer))
637
+ imf_sample.ConvertToContiguousBuffer(ctypes.byref(imf_buffer))
647
638
 
648
639
  audio_data_ptr = POINTER(BYTE)()
640
+ audio_data_length = DWORD()
641
+
642
+ imf_buffer.Lock(ctypes.byref(audio_data_ptr), None, ctypes.byref(audio_data_length))
649
643
 
650
- self._current_audio_buffer.Lock(ctypes.byref(audio_data_ptr), None, ctypes.byref(audio_data_length))
651
- self._current_audio_buffer.Unlock()
644
+ audio_data = ctypes.string_at(audio_data_ptr, audio_data_length.value)
652
645
 
653
- audio_data = create_string_buffer(audio_data_length.value)
654
- memmove(audio_data, audio_data_ptr, audio_data_length.value)
646
+ imf_buffer.Unlock()
647
+ imf_buffer.Release()
648
+ imf_sample.Release()
655
649
 
656
650
  return AudioData(audio_data,
657
651
  audio_data_length.value,
@@ -688,6 +682,7 @@ class WMFSource(Source):
688
682
  # changes if the stride is added/changed before playback?
689
683
  stride = ctypes.c_uint32()
690
684
  new.GetUINT32(MF_MT_DEFAULT_STRIDE, ctypes.byref(stride))
685
+ new.Release()
691
686
 
692
687
  self._stride = stride.value
693
688
 
@@ -773,16 +768,15 @@ class WMFSource(Source):
773
768
  assert _debug('WMFVideoDecoder: Setting configuration attributes.')
774
769
 
775
770
  def __del__(self):
771
+ if self._source_reader:
772
+ self._source_reader.Release()
773
+
776
774
  if self._stream_obj:
777
775
  self._stream_obj.Release()
778
776
 
779
777
  if self._imf_bytestream:
780
778
  self._imf_bytestream.Release()
781
779
 
782
- if self._current_audio_sample:
783
- self._current_audio_buffer.Release()
784
- self._current_audio_sample.Release()
785
-
786
780
  if self._current_video_sample:
787
781
  self._current_video_buffer.Release()
788
782
  self._current_video_sample.Release()
@@ -3,7 +3,6 @@ from enum import Enum, auto
3
3
  from typing import Dict, Optional
4
4
 
5
5
  from pyglet import event
6
- from pyglet.util import with_metaclass
7
6
 
8
7
 
9
8
  class DeviceState(Enum):
@@ -37,7 +36,7 @@ class AudioDevice:
37
36
  self.__class__.__name__, self.name, self.platform_state[self.state].name, self.platform_flow[self.flow].name)
38
37
 
39
38
 
40
- class AbstractAudioDeviceManager(with_metaclass(ABCMeta, event.EventDispatcher, object)):
39
+ class AbstractAudioDeviceManager(event.EventDispatcher, metaclass=ABCMeta):
41
40
 
42
41
  def __del__(self):
43
42
  """Required to remove handlers before exit, as it can cause problems with the event system's weakrefs."""
@@ -83,15 +83,15 @@ IID_IMMDeviceEnumerator = com.GUID(0xa95664d2, 0x9614, 0x4f35, 0xa7, 0x46, 0xde,
83
83
  class IMMNotificationClient(com.IUnknown):
84
84
  _methods_ = [
85
85
  ('OnDeviceStateChanged',
86
- com.METHOD(ctypes.c_void_p, ctypes.c_void_p, LPCWSTR, DWORD)),
86
+ com.STDMETHOD(LPCWSTR, DWORD)),
87
87
  ('OnDeviceAdded',
88
- com.METHOD(ctypes.c_void_p, ctypes.c_void_p, LPCWSTR)),
88
+ com.STDMETHOD(LPCWSTR)),
89
89
  ('OnDeviceRemoved',
90
- com.METHOD(ctypes.c_void_p, ctypes.c_void_p, LPCWSTR)),
90
+ com.STDMETHOD(LPCWSTR)),
91
91
  ('OnDefaultDeviceChanged',
92
- com.METHOD(ctypes.c_void_p, ctypes.c_void_p, EDataFlow, ERole, LPCWSTR)),
92
+ com.STDMETHOD(EDataFlow, ERole, LPCWSTR)),
93
93
  ('OnPropertyValueChanged',
94
- com.METHOD(ctypes.c_void_p, ctypes.c_void_p, LPCWSTR, PROPERTYKEY)),
94
+ com.STDMETHOD(LPCWSTR, PROPERTYKEY)),
95
95
  ]
96
96
 
97
97
 
@@ -113,7 +113,7 @@ class AudioNotificationCB(com.COMObject):
113
113
  self.audio_devices = audio_devices
114
114
  self._lost = False
115
115
 
116
- def OnDeviceStateChanged(self, this, pwstrDeviceId, dwNewState):
116
+ def OnDeviceStateChanged(self, pwstrDeviceId, dwNewState):
117
117
  device = self.audio_devices.get_cached_device(pwstrDeviceId)
118
118
 
119
119
  old_state = device.state
@@ -126,17 +126,17 @@ class AudioNotificationCB(com.COMObject):
126
126
  device.state = dwNewState
127
127
  self.audio_devices.dispatch_event('on_device_state_changed', device, pyglet_old_state, pyglet_new_state)
128
128
 
129
- def OnDeviceAdded(self, this, pwstrDeviceId):
129
+ def OnDeviceAdded(self, pwstrDeviceId):
130
130
  dev = self.audio_devices.add_device(pwstrDeviceId)
131
131
  assert _debug(f"Audio device was added {pwstrDeviceId}: {dev}")
132
132
  self.audio_devices.dispatch_event('on_device_added', dev)
133
133
 
134
- def OnDeviceRemoved(self, this, pwstrDeviceId):
134
+ def OnDeviceRemoved(self, pwstrDeviceId):
135
135
  dev = self.audio_devices.remove_device(pwstrDeviceId)
136
136
  assert _debug(f"Audio device was removed {pwstrDeviceId} : {dev}")
137
137
  self.audio_devices.dispatch_event('on_device_removed', dev)
138
138
 
139
- def OnDefaultDeviceChanged(self, this, flow, role, pwstrDeviceId):
139
+ def OnDefaultDeviceChanged(self, flow, role, pwstrDeviceId):
140
140
  # Only support eConsole role right now
141
141
  if role == 0:
142
142
  if pwstrDeviceId is None:
@@ -149,7 +149,7 @@ class AudioNotificationCB(com.COMObject):
149
149
 
150
150
  self.audio_devices.dispatch_event('on_default_changed', device, pyglet_flow)
151
151
 
152
- def OnPropertyValueChanged(self, this, pwstrDeviceId, key):
152
+ def OnPropertyValueChanged(self, pwstrDeviceId, key):
153
153
  pass
154
154
 
155
155
 
@@ -4,10 +4,9 @@ import weakref
4
4
  from abc import ABCMeta, abstractmethod
5
5
 
6
6
  import pyglet
7
- from pyglet.util import with_metaclass
8
7
 
9
8
 
10
- class AbstractAudioPlayer(with_metaclass(ABCMeta)):
9
+ class AbstractAudioPlayer(metaclass=ABCMeta):
11
10
  """Base class for driver audio players.
12
11
  """
13
12
 
@@ -176,7 +175,7 @@ class AbstractAudioPlayer(with_metaclass(ABCMeta)):
176
175
  self._source = weakref.proxy(value)
177
176
 
178
177
 
179
- class AbstractAudioDriver(with_metaclass(ABCMeta)):
178
+ class AbstractAudioDriver(metaclass=ABCMeta):
180
179
  @abstractmethod
181
180
  def create_audio_player(self, source, player):
182
181
  pass
@@ -270,7 +270,6 @@ class IDirectSound(com.pIUnknown):
270
270
  ('Initialize',
271
271
  com.STDMETHOD(com.LPGUID)),
272
272
  ]
273
- _type_ = com.COMInterface
274
273
 
275
274
  DirectSoundCreate = lib.DirectSoundCreate
276
275
  DirectSoundCreate.argtypes = \
@@ -1,9 +1,7 @@
1
1
  from abc import ABCMeta, abstractmethod
2
2
 
3
- from pyglet.util import with_metaclass
4
3
 
5
-
6
- class AbstractListener(with_metaclass(ABCMeta, object)):
4
+ class AbstractListener(metaclass=ABCMeta):
7
5
  """The listener properties for positional audio.
8
6
 
9
7
  You can obtain the singleton instance of this class by calling