pyglet 2.0.8__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 (876) hide show
  1. {pyglet-2.0.8 → pyglet-2.0.10}/.github/workflows/unittests.yml +1 -5
  2. {pyglet-2.0.8 → pyglet-2.0.10}/.gitignore +3 -0
  3. {pyglet-2.0.8 → pyglet-2.0.10}/.readthedocs.yml +5 -1
  4. {pyglet-2.0.8 → pyglet-2.0.10}/PKG-INFO +3 -2
  5. {pyglet-2.0.8 → pyglet-2.0.10}/README.md +2 -1
  6. {pyglet-2.0.8 → pyglet-2.0.10}/RELEASE_NOTES +55 -0
  7. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/qt_sprite_preview.py +774 -586
  8. {pyglet-2.0.8 → pyglet-2.0.10}/doc/conf.py +6 -0
  9. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/shapes.rst +8 -8
  10. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/window_key.rst +9 -1
  11. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/eventloop.rst +57 -53
  12. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/keyboard.rst +194 -67
  13. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/media.rst +297 -67
  14. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/quickstart.rst +1 -0
  15. pyglet-2.0.10/examples/clipboard.py +18 -0
  16. {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/controller.py +4 -0
  17. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/media_info.py +1 -9
  18. pyglet-2.0.10/examples/media/soundspace/README +38 -0
  19. pyglet-2.0.10/examples/media/soundspace/reader.py +117 -0
  20. pyglet-2.0.10/examples/media/soundspace/res/bass.wav +0 -0
  21. pyglet-2.0.10/examples/media/soundspace/res/drums.wav +0 -0
  22. pyglet-2.0.10/examples/media/soundspace/res/guitar.wav +0 -0
  23. pyglet-2.0.10/examples/media/soundspace/res/piano.wav +0 -0
  24. pyglet-2.0.10/examples/media/soundspace/res/space.txt +24 -0
  25. pyglet-2.0.10/examples/media/soundspace/soundspace.py +660 -0
  26. {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/fpscamera.py +50 -38
  27. pyglet-2.0.10/examples/net/client.py +18 -0
  28. pyglet-2.0.10/examples/net/server.py +25 -0
  29. pyglet-2.0.10/examples/opengl/compute_shader.py +39 -0
  30. {pyglet-2.0.8/examples/graphics → pyglet-2.0.10/examples}/shapes.py +3 -0
  31. {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/fixed_resolution.py +37 -34
  32. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/__init__.py +21 -10
  33. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/base.py +13 -1
  34. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/cocoa.py +6 -0
  35. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/clock.py +47 -116
  36. pyglet-2.0.10/pyglet/customtypes.py +12 -0
  37. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/event.py +16 -16
  38. pyglet-2.0.10/pyglet/experimental/README.md +6 -0
  39. pyglet-2.0.10/pyglet/experimental/geoshader_sprite.py +792 -0
  40. pyglet-2.0.10/pyglet/experimental/net.py +247 -0
  41. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/directwrite.py +33 -59
  42. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/win32.py +85 -25
  43. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/base.py +195 -46
  44. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/gl_info.py +4 -2
  45. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib.py +1 -2
  46. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/win32.py +30 -30
  47. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/__init__.py +9 -21
  48. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/shader.py +53 -50
  49. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/vertexarray.py +8 -9
  50. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/vertexbuffer.py +50 -74
  51. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/vertexdomain.py +54 -97
  52. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gui/frame.py +2 -2
  53. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gui/widgets.py +31 -3
  54. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/__init__.py +35 -14
  55. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/atlas.py +9 -9
  56. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/buffer.py +19 -16
  57. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/wic.py +8 -10
  58. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/controller_db.py +19 -23
  59. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/evdev.py +3 -2
  60. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/xinput.py +2 -2
  61. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/cocoalibs.py +1 -0
  62. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/__init__.py +12 -1
  63. pyglet-2.0.10/pyglet/libs/win32/com.py +397 -0
  64. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/types.py +9 -1
  65. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/math.py +18 -43
  66. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/wmf.py +16 -22
  67. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/devices/base.py +28 -24
  68. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/devices/win32.py +93 -47
  69. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/base.py +6 -4
  70. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/adaptation.py +13 -8
  71. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/lib_dsound.py +0 -1
  72. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/listener.py +1 -3
  73. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/adaptation.py +17 -7
  74. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/adaptation.py +2 -1
  75. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/interface.py +12 -9
  76. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/lib_xaudio2.py +16 -34
  77. pyglet-2.0.10/pyglet/media/mediathreads.py +129 -0
  78. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/player.py +8 -3
  79. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/__init__.py +4 -17
  80. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/codecs/obj.py +1 -0
  81. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/shapes.py +194 -143
  82. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/sprite.py +4 -17
  83. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/__init__.py +2 -0
  84. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/caret.py +2 -1
  85. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/layout.py +171 -189
  86. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/util.py +6 -35
  87. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/__init__.py +75 -35
  88. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/__init__.py +28 -0
  89. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_textview.py +11 -4
  90. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/key.py +10 -1
  91. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/win32/__init__.py +37 -0
  92. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/xlib/__init__.py +142 -5
  93. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/PKG-INFO +3 -2
  94. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/SOURCES.txt +68 -2
  95. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/app/test_eventloop.py +1 -2
  96. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/test_imagegrid.py +3 -0
  97. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/test_texture3d.py +3 -0
  98. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_driver.py +15 -12
  99. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png +0 -0
  100. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png +0 -0
  101. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
  102. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
  103. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
  104. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
  105. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
  106. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_buffer_copy.001.png +0 -0
  107. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_buffer_saving.001.png +0 -0
  108. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
  109. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
  110. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
  111. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
  112. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
  113. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_depth_buffer_saving.001.png +0 -0
  114. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
  115. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
  116. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
  117. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
  118. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
  119. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
  120. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
  121. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
  122. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[l.png].001.png +0 -0
  123. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pil_saving[la.png].001.png +0 -0
  124. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
  125. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb.png].001.png +0 -0
  126. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp.png].001.png +0 -0
  127. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp_trans.png].001.png +0 -0
  128. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
  129. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[l.png].001.png +0 -0
  130. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[la.png].001.png +0 -0
  131. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[rgb.png].001.png +0 -0
  132. pyglet-2.0.10/tests/interactive/screenshots/committed/tests.interactive.image.test_image.test_pypng_saving[rgba.png].001.png +0 -0
  133. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_16bpp.bmp].001.png +0 -0
  134. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_1bpp.bmp].001.png +0 -0
  135. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
  136. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
  137. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
  138. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
  139. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
  140. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_buffer_copy.001.png +0 -0
  141. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_buffer_saving.001.png +0 -0
  142. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
  143. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
  144. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
  145. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
  146. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
  147. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_depth_buffer_saving.001.png +0 -0
  148. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
  149. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
  150. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
  151. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
  152. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
  153. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
  154. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
  155. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
  156. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[l.png].001.png +0 -0
  157. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[la.png].001.png +0 -0
  158. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[rgb.png].001.png +0 -0
  159. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_saving[rgba.png].001.png +0 -0
  160. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
  161. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb.png].001.png +0 -0
  162. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp.png].001.png +0 -0
  163. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgb_8bpp_trans.png].001.png +0 -0
  164. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
  165. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[l.png].001.png +0 -0
  166. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[la.png].001.png +0 -0
  167. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[rgb.png].001.png +0 -0
  168. pyglet-2.0.10/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_saving[rgba.png].001.png +0 -0
  169. pyglet-2.0.10/tests/interactive/shapes/test_shapes.py +179 -0
  170. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_inline_elements.py +20 -17
  171. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_inline_elements_style_change.py +15 -14
  172. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_multiline_wrap.py +18 -18
  173. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_plain.py +5 -5
  174. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_style.py +5 -5
  175. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/conftest.py +5 -0
  176. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/test_shapes.py +24 -2
  177. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_events.py +31 -21
  178. {pyglet-2.0.8 → pyglet-2.0.10}/tools/gencontrollerdb.py +3 -3
  179. pyglet-2.0.8/experimental/geoshader_sprite.py +0 -367
  180. pyglet-2.0.8/pyglet/libs/win32/com.py +0 -340
  181. pyglet-2.0.8/pyglet/media/mediathreads.py +0 -152
  182. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_24bpp.bmp].001.png +0 -0
  183. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_32bpp.bmp].001.png +0 -0
  184. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_4bpp.bmp].001.png +0 -0
  185. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgb_8bpp.bmp].001.png +0 -0
  186. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_bmp_loading[rgba_32bpp.bmp].001.png +0 -0
  187. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_checkerboard.001.png +0 -0
  188. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgb_dxt1.dds].001.png +0 -0
  189. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt1.dds].001.png +0 -0
  190. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt3.dds].001.png +0 -0
  191. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_dds_loading[rgba_dxt5.dds].001.png +0 -0
  192. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[8bpp.gif].001.png +0 -0
  193. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[l.png].001.png +0 -0
  194. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[la.png].001.png +0 -0
  195. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgb.png].001.png +0 -0
  196. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_gdkpixbuf2_loading[rgba.png].001.png +0 -0
  197. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[la.png].001.png +0 -0
  198. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgb.png].001.png +0 -0
  199. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[rgba.png].001.png +0 -0
  200. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[la.png].001.png +0 -0
  201. pyglet-2.0.8/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[rgba.png].001.png +0 -0
  202. {pyglet-2.0.8 → pyglet-2.0.10}/.coveragerc +0 -0
  203. {pyglet-2.0.8 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  204. {pyglet-2.0.8 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  205. {pyglet-2.0.8 → pyglet-2.0.10}/.github/ISSUE_TEMPLATE/questions--or-other.md +0 -0
  206. {pyglet-2.0.8 → pyglet-2.0.10}/.github/workflows/codeql.yml +0 -0
  207. {pyglet-2.0.8 → pyglet-2.0.10}/LICENSE +0 -0
  208. {pyglet-2.0.8 → pyglet-2.0.10}/MANIFEST.in +0 -0
  209. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/README +0 -0
  210. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/asedemo.py +0 -0
  211. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/aseprite.py +0 -0
  212. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/aseprite_codec/running.ase +0 -0
  213. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/logo3d/logo3d.jpg +0 -0
  214. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/logo3d/logo3d.obj.zip +0 -0
  215. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/logo3d/logo3d.wings +0 -0
  216. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/scenemanager.py +0 -0
  217. {pyglet-2.0.8 → pyglet-2.0.10}/contrib/toys/follow_mouse.py +0 -0
  218. {pyglet-2.0.8 → pyglet-2.0.10}/doc/Makefile +0 -0
  219. {pyglet-2.0.8 → pyglet-2.0.10}/doc/README.md +0 -0
  220. {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/favicon.ico +0 -0
  221. {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/logo.png +0 -0
  222. {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/logo5.svg +0 -0
  223. {pyglet-2.0.8 → pyglet-2.0.10}/doc/_static/relatedlogo.png +0 -0
  224. {pyglet-2.0.8 → pyglet-2.0.10}/doc/external_resources.rst +0 -0
  225. {pyglet-2.0.8 → pyglet-2.0.10}/doc/index.rst +0 -0
  226. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/contributing.rst +0 -0
  227. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/dist.rst +0 -0
  228. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/doc.rst +0 -0
  229. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/generated.rst +0 -0
  230. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/gl.rst +0 -0
  231. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/media_logging_manual.rst +0 -0
  232. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/media_manual.rst +0 -0
  233. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/testing.rst +0 -0
  234. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/virtualenv.rst +0 -0
  235. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/wraptypes-class.svg +0 -0
  236. {pyglet-2.0.8 → pyglet-2.0.10}/doc/internal/wraptypes.rst +0 -0
  237. {pyglet-2.0.8 → pyglet-2.0.10}/doc/make.bat +0 -0
  238. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/app.rst +0 -0
  239. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/canvas.rst +0 -0
  240. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/clock.rst +0 -0
  241. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/event.rst +0 -0
  242. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/font.rst +0 -0
  243. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/gl.rst +0 -0
  244. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/allocation.rst +0 -0
  245. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/index.rst +0 -0
  246. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/shader.rst +0 -0
  247. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/vertexbuffer.rst +0 -0
  248. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/graphics/vertexdomain.rst +0 -0
  249. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/gui.rst +0 -0
  250. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/image/animation.rst +0 -0
  251. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/image/atlas.rst +0 -0
  252. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/image/index.rst +0 -0
  253. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/info.rst +0 -0
  254. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/input.rst +0 -0
  255. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/math.rst +0 -0
  256. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/media.rst +0 -0
  257. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/media_synthesis.rst +0 -0
  258. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/pyglet.rst +0 -0
  259. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/resource.rst +0 -0
  260. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/sprite.rst +0 -0
  261. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/caret.rst +0 -0
  262. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/document.rst +0 -0
  263. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/index.rst +0 -0
  264. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/text/layout.rst +0 -0
  265. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/window.rst +0 -0
  266. {pyglet-2.0.8 → pyglet-2.0.10}/doc/modules/window_mouse.rst +0 -0
  267. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/context.rst +0 -0
  268. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/debug.rst +0 -0
  269. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/events.rst +0 -0
  270. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/examplegame.rst +0 -0
  271. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/gl.rst +0 -0
  272. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/graphics.rst +0 -0
  273. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/image.rst +0 -0
  274. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/abstract_image.png +0 -0
  275. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/abstract_image.svg +0 -0
  276. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/buffer_image.png +0 -0
  277. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/buffer_image.svg +0 -0
  278. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/context_flow.png +0 -0
  279. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/context_flow.svg +0 -0
  280. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_crosshair.png +0 -0
  281. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_default.png +0 -0
  282. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_hand.png +0 -0
  283. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_no.png +0 -0
  284. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_down.png +0 -0
  285. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_left.png +0 -0
  286. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_left_right.png +0 -0
  287. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_right.png +0 -0
  288. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_up.png +0 -0
  289. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_size_up_down.png +0 -0
  290. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_text.png +0 -0
  291. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_mac_wait.png +0 -0
  292. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_crosshair.png +0 -0
  293. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_default.png +0 -0
  294. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_hand.png +0 -0
  295. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_help.png +0 -0
  296. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_no.png +0 -0
  297. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size.png +0 -0
  298. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_left_right.png +0 -0
  299. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_nesw.png +0 -0
  300. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_nwse.png +0 -0
  301. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_size_up_down.png +0 -0
  302. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_text.png +0 -0
  303. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_wait.png +0 -0
  304. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/cursor_win_wait_arrow.png +0 -0
  305. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/explosion.png +0 -0
  306. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/font_metrics.png +0 -0
  307. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/font_metrics.svg +0 -0
  308. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_classes.png +0 -0
  309. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_classes.svg +0 -0
  310. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_grid.png +0 -0
  311. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_grid.svg +0 -0
  312. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_sequence.png +0 -0
  313. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/image_sequence.svg +0 -0
  314. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/mouse_coordinates.png +0 -0
  315. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/mouse_coordinates.svg +0 -0
  316. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/screens.png +0 -0
  317. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/screens.svg +0 -0
  318. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/text_classes.png +0 -0
  319. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/text_classes.svg +0 -0
  320. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_location.png +0 -0
  321. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_location.svg +0 -0
  322. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_borderless.png +0 -0
  323. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_default.png +0 -0
  324. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_dialog.png +0 -0
  325. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_osx_tool.png +0 -0
  326. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_default.png +0 -0
  327. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_dialog.png +0 -0
  328. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_overlay.png +0 -0
  329. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_tool.png +0 -0
  330. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/img/window_xp_transparent.png +0 -0
  331. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/input.rst +0 -0
  332. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/installation.rst +0 -0
  333. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/math.rst +0 -0
  334. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/migration.rst +0 -0
  335. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/mouse.rst +0 -0
  336. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/options.rst +0 -0
  337. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/resources.rst +0 -0
  338. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/shapes.rst +0 -0
  339. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/text.rst +0 -0
  340. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/time.rst +0 -0
  341. {pyglet-2.0.8 → pyglet-2.0.10}/doc/programming_guide/windowing.rst +0 -0
  342. {pyglet-2.0.8 → pyglet-2.0.10}/doc/requirements.txt +0 -0
  343. {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/events_key_state_handler.py +0 -0
  344. {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/register_event_type.py +0 -0
  345. {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/window_events.py +0 -0
  346. {pyglet-2.0.8 → pyglet-2.0.10}/examples/events/window_platform_event.py +0 -0
  347. {pyglet-2.0.8 → pyglet-2.0.10}/examples/file_dialog.py +0 -0
  348. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/asteroid.png +0 -0
  349. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/bullet.png +0 -0
  350. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/bullet.wav +0 -0
  351. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/engine_flame.png +0 -0
  352. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/resources/player.png +0 -0
  353. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/asteroid.py +0 -0
  354. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/game/__init__.py +0 -0
  355. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/game/load.py +0 -0
  356. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version1/game/resources.py +0 -0
  357. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/asteroid.py +0 -0
  358. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/__init__.py +0 -0
  359. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/load.py +0 -0
  360. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/physicalobject.py +0 -0
  361. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/player.py +0 -0
  362. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version2/game/resources.py +0 -0
  363. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/asteroid.py +0 -0
  364. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/__init__.py +0 -0
  365. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/load.py +0 -0
  366. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/physicalobject.py +0 -0
  367. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/player.py +0 -0
  368. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/resources.py +0 -0
  369. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version3/game/util.py +0 -0
  370. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/asteroid.py +0 -0
  371. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/__init__.py +0 -0
  372. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/asteroid.py +0 -0
  373. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/bullet.py +0 -0
  374. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/load.py +0 -0
  375. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/physicalobject.py +0 -0
  376. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/player.py +0 -0
  377. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/resources.py +0 -0
  378. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version4/game/util.py +0 -0
  379. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/asteroid.py +0 -0
  380. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/__init__.py +0 -0
  381. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/asteroid.py +0 -0
  382. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/bullet.py +0 -0
  383. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/load.py +0 -0
  384. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/physicalobject.py +0 -0
  385. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/player.py +0 -0
  386. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/resources.py +0 -0
  387. {pyglet-2.0.8 → pyglet-2.0.10}/examples/game/version5/game/util.py +0 -0
  388. {pyglet-2.0.8 → pyglet-2.0.10}/examples/graphics/image_convert.py +0 -0
  389. {pyglet-2.0.8 → pyglet-2.0.10}/examples/graphics/image_display.py +0 -0
  390. {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/bar.png +0 -0
  391. {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/button_down.png +0 -0
  392. {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/button_hover.png +0 -0
  393. {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/button_up.png +0 -0
  394. {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/knob.png +0 -0
  395. {pyglet-2.0.8 → pyglet-2.0.10}/examples/gui/widgets.py +0 -0
  396. {pyglet-2.0.8 → pyglet-2.0.10}/examples/hello_world.py +0 -0
  397. {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/apple_remote.py +0 -0
  398. {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/input.py +0 -0
  399. {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/joystick.py +0 -0
  400. {pyglet-2.0.8 → pyglet-2.0.10}/examples/input/tablet.py +0 -0
  401. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/media_player.py +0 -0
  402. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/README +0 -0
  403. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/ball.png +0 -0
  404. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/ball.wav +0 -0
  405. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/noisy/noisy.py +0 -0
  406. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/synthesizer.py +0 -0
  407. {pyglet-2.0.8 → pyglet-2.0.10}/examples/media/video.py +0 -0
  408. {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/box.mtl +0 -0
  409. {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/box.obj +0 -0
  410. {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/logo3d.mtl +0 -0
  411. {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/logo3d.obj +0 -0
  412. {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/model.py +0 -0
  413. {pyglet-2.0.8 → pyglet-2.0.10}/examples/model/pyglet.png +0 -0
  414. {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/egl_context.py +0 -0
  415. {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl.py +0 -0
  416. {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_context.py +0 -0
  417. {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_core.py +0 -0
  418. {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_scissor.py +0 -0
  419. {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/opengl_shader.py +0 -0
  420. {pyglet-2.0.8 → pyglet-2.0.10}/examples/opengl/pyglet.png +0 -0
  421. {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/animation.py +0 -0
  422. {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/dinosaur.gif +0 -0
  423. {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/events.py +0 -0
  424. {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/hello_world.py +0 -0
  425. {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/image_viewer.py +0 -0
  426. {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/kitten.jpg +0 -0
  427. {pyglet-2.0.8 → pyglet-2.0.10}/examples/programming_guide/window_subclass.py +0 -0
  428. {pyglet-2.0.8 → pyglet-2.0.10}/examples/resources/kitten.jpg +0 -0
  429. {pyglet-2.0.8 → pyglet-2.0.10}/examples/resources/pyglet.png +0 -0
  430. {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/depth_sprite.py +0 -0
  431. {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/display_sprite.py +0 -0
  432. {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/multi_texture_sprite.py +0 -0
  433. {pyglet-2.0.8 → pyglet-2.0.10}/examples/sprite/sprite_batching.py +0 -0
  434. {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/advanced_font.py +0 -0
  435. {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/font_comparison.py +0 -0
  436. {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/html_label.py +0 -0
  437. {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/pyglet.png +0 -0
  438. {pyglet-2.0.8 → pyglet-2.0.10}/examples/text/text_input.py +0 -0
  439. {pyglet-2.0.8 → pyglet-2.0.10}/examples/timer.py +0 -0
  440. {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/camera.py +0 -0
  441. {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/camera_group.py +0 -0
  442. {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/multiple_windows.py +0 -0
  443. {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/overlay_window.py +0 -0
  444. {pyglet-2.0.8 → pyglet-2.0.10}/examples/window/transparent_window.py +0 -0
  445. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/README +0 -0
  446. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/genfield.py +0 -0
  447. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/py.df.png +0 -0
  448. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/py.png +0 -0
  449. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/dist_field/renderfield.py +0 -0
  450. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/flaccodec.py +0 -0
  451. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/hello_world.svg +0 -0
  452. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/spritebenchmark.py +0 -0
  453. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/svg_test.py +0 -0
  454. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/wayland/gbm_egl_context.py +0 -0
  455. {pyglet-2.0.8 → pyglet-2.0.10}/experimental/win32priority.py +0 -0
  456. {pyglet-2.0.8 → pyglet-2.0.10}/make.py +0 -0
  457. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/__init__.py +0 -0
  458. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/cocoa.py +0 -0
  459. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/win32.py +0 -0
  460. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/app/xlib.py +0 -0
  461. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/__init__.py +0 -0
  462. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/base.py +0 -0
  463. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/headless.py +0 -0
  464. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/win32.py +0 -0
  465. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/xlib.py +0 -0
  466. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/canvas/xlib_vidmoderestore.py +0 -0
  467. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/extlibs/__init__.py +0 -0
  468. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/extlibs/png.py +0 -0
  469. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/__init__.py +0 -0
  470. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/base.py +0 -0
  471. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/fontconfig.py +0 -0
  472. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/freetype.py +0 -0
  473. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/freetype_lib.py +0 -0
  474. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/quartz.py +0 -0
  475. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/ttf.py +0 -0
  476. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/user.py +0 -0
  477. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/font/win32query.py +0 -0
  478. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/__init__.py +0 -0
  479. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/agl.py +0 -0
  480. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/cocoa.py +0 -0
  481. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/gl.py +0 -0
  482. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/gl_compat.py +0 -0
  483. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glx.py +0 -0
  484. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glx_info.py +0 -0
  485. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glxext_arb.py +0 -0
  486. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glxext_mesa.py +0 -0
  487. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/glxext_nv.py +0 -0
  488. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/headless.py +0 -0
  489. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib_agl.py +0 -0
  490. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib_glx.py +0 -0
  491. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/lib_wgl.py +0 -0
  492. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wgl.py +0 -0
  493. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wgl_info.py +0 -0
  494. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wglext_arb.py +0 -0
  495. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/wglext_nv.py +0 -0
  496. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gl/xlib.py +0 -0
  497. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/graphics/allocation.py +0 -0
  498. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/gui/__init__.py +0 -0
  499. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/animation.py +0 -0
  500. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/__init__.py +0 -0
  501. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/bmp.py +0 -0
  502. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/dds.py +0 -0
  503. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/gdiplus.py +0 -0
  504. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/gdkpixbuf2.py +0 -0
  505. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/gif.py +0 -0
  506. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/pil.py +0 -0
  507. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/png.py +0 -0
  508. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/quartz.py +0 -0
  509. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/image/codecs/s3tc.py +0 -0
  510. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/info.py +0 -0
  511. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/__init__.py +0 -0
  512. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/base.py +0 -0
  513. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/controller.py +0 -0
  514. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/__init__.py +0 -0
  515. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/evdev_constants.py +0 -0
  516. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/x11_xinput.py +0 -0
  517. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/linux/x11_xinput_tablet.py +0 -0
  518. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/macos/__init__.py +0 -0
  519. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/macos/darwin_hid.py +0 -0
  520. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/__init__.py +0 -0
  521. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/directinput.py +0 -0
  522. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/input/win32/wintab.py +0 -0
  523. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/lib.py +0 -0
  524. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/__init__.py +0 -0
  525. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/__init__.py +0 -0
  526. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/__init__.py +0 -0
  527. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/cocoatypes.py +0 -0
  528. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/cocoapy/runtime.py +0 -0
  529. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/coreaudio.py +0 -0
  530. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/darwin/quartzkey.py +0 -0
  531. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/__init__.py +0 -0
  532. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/egl.py +0 -0
  533. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/eglext.py +0 -0
  534. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/egl/lib.py +0 -0
  535. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/wayland/__init__.py +0 -0
  536. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/wayland/gbm.py +0 -0
  537. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/wayland/xkbcommon.py +0 -0
  538. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/constants.py +0 -0
  539. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/context_managers.py +0 -0
  540. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/dinput.py +0 -0
  541. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/libwintab.py +0 -0
  542. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/win32/winkey.py +0 -0
  543. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/__init__.py +0 -0
  544. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/cursorfont.py +0 -0
  545. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xf86vmode.py +0 -0
  546. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xinerama.py +0 -0
  547. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xinput.py +0 -0
  548. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xlib.py +0 -0
  549. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/libs/x11/xsync.py +0 -0
  550. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/__init__.py +0 -0
  551. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/buffered_logger.py +0 -0
  552. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/__init__.py +0 -0
  553. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/base.py +0 -0
  554. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/coreaudio.py +0 -0
  555. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg.py +0 -0
  556. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/__init__.py +0 -0
  557. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/compat.py +0 -0
  558. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavcodec.py +0 -0
  559. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavformat.py +0 -0
  560. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libavutil.py +0 -0
  561. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libswresample.py +0 -0
  562. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/ffmpeg_lib/libswscale.py +0 -0
  563. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/gstreamer.py +0 -0
  564. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/pyogg.py +0 -0
  565. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/codecs/wave.py +0 -0
  566. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/devices/__init__.py +0 -0
  567. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/__init__.py +0 -0
  568. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/__init__.py +0 -0
  569. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/exceptions.py +0 -0
  570. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/directsound/interface.py +0 -0
  571. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/__init__.py +0 -0
  572. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/interface.py +0 -0
  573. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/lib_alc.py +0 -0
  574. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/openal/lib_openal.py +0 -0
  575. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/__init__.py +0 -0
  576. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/adaptation.py +0 -0
  577. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/interface.py +0 -0
  578. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/pulse/lib_pulseaudio.py +0 -0
  579. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/silent/__init__.py +0 -0
  580. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/silent/adaptation.py +0 -0
  581. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/drivers/xaudio2/__init__.py +0 -0
  582. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/exceptions.py +0 -0
  583. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/instrumentation.py +0 -0
  584. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/media/synthesis.py +0 -0
  585. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/codecs/__init__.py +0 -0
  586. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/model/codecs/gltf.py +0 -0
  587. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/resource.py +0 -0
  588. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/document.py +0 -0
  589. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/__init__.py +0 -0
  590. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/attributed.py +0 -0
  591. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/html.py +0 -0
  592. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/plaintext.py +0 -0
  593. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/formats/structured.py +0 -0
  594. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/text/runlist.py +0 -0
  595. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_delegate.py +0 -0
  596. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_view.py +0 -0
  597. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/pyglet_window.py +0 -0
  598. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/cocoa/systemcursor.py +0 -0
  599. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/event.py +0 -0
  600. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/headless/__init__.py +0 -0
  601. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet/window/mouse.py +0 -0
  602. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/dependency_links.txt +0 -0
  603. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/top_level.txt +0 -0
  604. {pyglet-2.0.8 → pyglet-2.0.10}/pyglet.egg-info/zip-safe +0 -0
  605. {pyglet-2.0.8 → pyglet-2.0.10}/pyproject.toml +0 -0
  606. {pyglet-2.0.8 → pyglet-2.0.10}/pytest.ini +0 -0
  607. {pyglet-2.0.8 → pyglet-2.0.10}/setup.cfg +0 -0
  608. {pyglet-2.0.8 → pyglet-2.0.10}/setup.py +0 -0
  609. {pyglet-2.0.8 → pyglet-2.0.10}/tests/__init__.py +0 -0
  610. {pyglet-2.0.8 → pyglet-2.0.10}/tests/annotations.py +0 -0
  611. {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/__init__.py +0 -0
  612. {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/data.py +0 -0
  613. {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/event_loop.py +0 -0
  614. {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/interactive.py +0 -0
  615. {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/performance.py +0 -0
  616. {pyglet-2.0.8 → pyglet-2.0.10}/tests/base/test_interactive_test_base.py +0 -0
  617. {pyglet-2.0.8 → pyglet-2.0.10}/tests/conftest.py +0 -0
  618. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/README +0 -0
  619. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man.ttf +0 -0
  620. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man_bold.ttf +0 -0
  621. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man_bold_italic.ttf +0 -0
  622. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/action_man_italic.ttf +0 -0
  623. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/fonts/courR12-ISO8859-1.pcf +0 -0
  624. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/8bpp.gif +0 -0
  625. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/cursor.png +0 -0
  626. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/dinosaur.gif +0 -0
  627. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/gdk_close.png +0 -0
  628. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/grey_background.png +0 -0
  629. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon1.png +0 -0
  630. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size1.png +0 -0
  631. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size2.png +0 -0
  632. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size3.png +0 -0
  633. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size4.png +0 -0
  634. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/icon_size5.png +0 -0
  635. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/l.png +0 -0
  636. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/la.png +0 -0
  637. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/multitexture.png +0 -0
  638. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb.png +0 -0
  639. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_16bpp.bmp +0 -0
  640. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_1bpp.bmp +0 -0
  641. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_24bpp.bmp +0 -0
  642. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_32bpp.bmp +0 -0
  643. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_4bpp.bmp +0 -0
  644. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_8bpp.bmp +0 -0
  645. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_8bpp.png +0 -0
  646. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_8bpp_trans.png +0 -0
  647. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgb_dxt1.dds +0 -0
  648. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba.png +0 -0
  649. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_32bpp.bmp +0 -0
  650. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_dxt1.dds +0 -0
  651. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_dxt3.dds +0 -0
  652. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/rgba_dxt5.dds +0 -0
  653. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/images/tests.interactive.test_interactive_test_base._Test.test_1.001.png +0 -0
  654. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/README +0 -0
  655. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/alert.wav +0 -0
  656. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/login.wav +0 -0
  657. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/logout.wav +0 -0
  658. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/receive.wav +0 -0
  659. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/send.wav +0 -0
  660. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sawtooth_16_11025_1ch.wav +0 -0
  661. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sawtooth_16_44800_1ch.wav +0 -0
  662. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_silence_16_11025_1ch.wav +0 -0
  663. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_silence_16_44800_1ch.wav +0 -0
  664. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_simplefm_16_11025_1ch.wav +0 -0
  665. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_simplefm_16_44800_1ch.wav +0 -0
  666. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sine_16_11025_1ch.wav +0 -0
  667. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_sine_16_44800_1ch.wav +0 -0
  668. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_square_16_11025_1ch.wav +0 -0
  669. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_square_16_44800_1ch.wav +0 -0
  670. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_triangle_16_11025_1ch.wav +0 -0
  671. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/media/synthesis_triangle_16_44800_1ch.wav +0 -0
  672. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/models/logo3d.mtl +0 -0
  673. {pyglet-2.0.8 → pyglet-2.0.10}/tests/data/models/logo3d.obj +0 -0
  674. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/__init__.py +0 -0
  675. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/app/__init__.py +0 -0
  676. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/font/test_fontconfig.py +0 -0
  677. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/font/test_freetype_face.py +0 -0
  678. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/graphics/__init__.py +0 -0
  679. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/graphics/test_allocation.py +0 -0
  680. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/__init__.py +0 -0
  681. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/image/test_gdkpixbuf2.py +0 -0
  682. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/__init__.py +0 -0
  683. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/mock_player.py +0 -0
  684. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_directsound.py +0 -0
  685. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_openal.py +0 -0
  686. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_player.py +0 -0
  687. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/media/test_pulse.py +0 -0
  688. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/model/__init__.py +0 -0
  689. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/model/test_loading.py +0 -0
  690. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/__init__.py +0 -0
  691. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/test_linux_fontconfig.py +0 -0
  692. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/test_win_context_managers.py +0 -0
  693. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/platform/test_win_multicore_clock.py +0 -0
  694. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/__init__.py +0 -0
  695. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir1/dir1/f3.txt +0 -0
  696. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir1/f2.txt +0 -0
  697. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir1/res.zip +0 -0
  698. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/dir2/f6.txt +0 -0
  699. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/f1.txt +0 -0
  700. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/rgbm.png +0 -0
  701. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/test_resource_image_loading.py +0 -0
  702. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/resource/test_resource_loading.py +0 -0
  703. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/text/__init__.py +0 -0
  704. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/text/test_empty_document.py +0 -0
  705. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/__init__.py +0 -0
  706. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/test_context_share.py +0 -0
  707. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/test_event_sequence.py +0 -0
  708. {pyglet-2.0.8 → pyglet-2.0.10}/tests/integration/window/test_window_caption.py +0 -0
  709. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/__init__.py +0 -0
  710. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/conftest.py +0 -0
  711. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/graphics/__init__.py +0 -0
  712. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/graphics/test_multitexture.py +0 -0
  713. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/image/__init__.py +0 -0
  714. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/image/test_image.py +0 -0
  715. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/media/__init__.py +0 -0
  716. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/media/test_player.py +0 -0
  717. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/committed/README +0 -0
  718. /pyglet-2.0.8/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
  719. /pyglet-2.0.8/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
  720. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/session/README +0 -0
  721. /pyglet-2.0.8/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
  722. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pil_loading[l.png].001.png +0 -0
  723. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/screenshots/session/tests.interactive.image.test_image.test_pypng_loading[l.png].001.png +0 -0
  724. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/__init__.py +0 -0
  725. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_caret_color.py +0 -0
  726. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_content_valign.py +0 -0
  727. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/text/test_html.py +0 -0
  728. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/__init__.py +0 -0
  729. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_events.py +0 -0
  730. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_fullscreen.py +0 -0
  731. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_modes.py +0 -0
  732. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_multisample.py +0 -0
  733. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_open.py +0 -0
  734. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_settings.py +0 -0
  735. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/test_window_styles.py +0 -0
  736. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/window/window_util.py +0 -0
  737. {pyglet-2.0.8 → pyglet-2.0.10}/tests/interactive/windowed_test_base.py +0 -0
  738. {pyglet-2.0.8 → pyglet-2.0.10}/tests/requirements.txt +0 -0
  739. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/__init__.py +0 -0
  740. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/__init__.py +0 -0
  741. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_listener.py +0 -0
  742. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_player.py +0 -0
  743. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_sources.py +0 -0
  744. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/media/test_synthesis.py +0 -0
  745. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/__init__.py +0 -0
  746. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/conftest.py +0 -0
  747. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/shapes/test_bordered_rectangle.py +0 -0
  748. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_atlas.py +0 -0
  749. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_clock.py +0 -0
  750. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_clock_freq.py +0 -0
  751. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_font.py +0 -0
  752. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_input.py +0 -0
  753. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_math.py +0 -0
  754. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_resource_path.py +0 -0
  755. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_sprite.py +0 -0
  756. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/test_text.py +0 -0
  757. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/text/__init__.py +0 -0
  758. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/text/test_caret.py +0 -0
  759. {pyglet-2.0.8 → pyglet-2.0.10}/tests/unit/text/test_layout.py +0 -0
  760. {pyglet-2.0.8 → pyglet-2.0.10}/tools/al_info.py +0 -0
  761. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/bokeh_timeline.py +0 -0
  762. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/compare.py +0 -0
  763. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/configure.py +0 -0
  764. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/extractors.py +0 -0
  765. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/fs.py +0 -0
  766. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/mp.py +0 -0
  767. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/mpexceptions.py +0 -0
  768. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/playmany.py +0 -0
  769. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/readme_ffmpeg_debbuging_branch.txt +0 -0
  770. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/readme_run_tests.txt +0 -0
  771. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/report.py +0 -0
  772. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/reports.py +0 -0
  773. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/retry_crashed.py +0 -0
  774. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/run_test_suite.py +0 -0
  775. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/summarize.py +0 -0
  776. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/test_instrumentation.py +0 -0
  777. {pyglet-2.0.8 → pyglet-2.0.10}/tools/ffmpeg/timeline.py +0 -0
  778. {pyglet-2.0.8 → pyglet-2.0.10}/tools/gendist.sh +0 -0
  779. {pyglet-2.0.8 → pyglet-2.0.10}/tools/gengl.py +0 -0
  780. {pyglet-2.0.8 → pyglet-2.0.10}/tools/gengl_old.py +0 -0
  781. {pyglet-2.0.8 → pyglet-2.0.10}/tools/genwrappers.py +0 -0
  782. {pyglet-2.0.8 → pyglet-2.0.10}/tools/gl.template +0 -0
  783. {pyglet-2.0.8 → pyglet-2.0.10}/tools/gl.xml +0 -0
  784. {pyglet-2.0.8 → pyglet-2.0.10}/tools/gl_info.py +0 -0
  785. {pyglet-2.0.8 → pyglet-2.0.10}/tools/inspect_font.py +0 -0
  786. {pyglet-2.0.8 → pyglet-2.0.10}/tools/requirements.txt +0 -0
  787. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wgl.h +0 -0
  788. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/__init__.py +0 -0
  789. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/cparser.py +0 -0
  790. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/ctypesparser.py +0 -0
  791. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/lex.py +0 -0
  792. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/preprocessor.py +0 -0
  793. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/wrap.py +0 -0
  794. {pyglet-2.0.8 → pyglet-2.0.10}/tools/wraptypes/yacc.py +0 -0
  795. {pyglet-2.0.8 → pyglet-2.0.10}/website/LICENSE.txt +0 -0
  796. {pyglet-2.0.8 → pyglet-2.0.10}/website/README.rst +0 -0
  797. {pyglet-2.0.8 → pyglet-2.0.10}/website/assets/favicon.ico +0 -0
  798. {pyglet-2.0.8 → pyglet-2.0.10}/website/assets/static/css/example-custom-styles.css +0 -0
  799. {pyglet-2.0.8 → pyglet-2.0.10}/website/assets/static/images/pyglet.png +0 -0
  800. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/404.html/contents.lr +0 -0
  801. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/404.html/ngc-5793.jpg +0 -0
  802. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/authors/benjamin/contents.lr +0 -0
  803. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/authors/benjamin/pyglet.png +0 -0
  804. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/authors/contents.lr +0 -0
  805. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/blog/contents.lr +0 -0
  806. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/blog/welcome-blog/contents.lr +0 -0
  807. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/contents.lr +0 -0
  808. {pyglet-2.0.8 → pyglet-2.0.10}/website/content/eclipse.jpg +0 -0
  809. {pyglet-2.0.8 → pyglet-2.0.10}/website/pyglet.lektorproject +0 -0
  810. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/AUTHORS.txt +0 -0
  811. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/CHANGELOG.md +0 -0
  812. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/CONTRIBUTING.md +0 -0
  813. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/LICENSE.txt +0 -0
  814. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/NOTICE.txt +0 -0
  815. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/README.md +0 -0
  816. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/bootstrap.css +0 -0
  817. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/icomoon.css +0 -0
  818. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/magnific-popup.css +0 -0
  819. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/css/style.css +0 -0
  820. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  821. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  822. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  823. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.ttf +0 -0
  824. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.woff +0 -0
  825. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/images/Preloader_2.gif +0 -0
  826. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/images/placeholder_person.png +0 -0
  827. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery-3.3.1.min.js +0 -0
  828. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.easing.min.js +0 -0
  829. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.magnific-popup.min.js +0 -0
  830. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.js +0 -0
  831. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.min.js +0 -0
  832. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/jquery.waypoints.min.js +0 -0
  833. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/magnific-popup-options.js +0 -0
  834. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/main-singlelayout.js +0 -0
  835. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/assets/static/js/main.js +0 -0
  836. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/content.ini +0 -0
  837. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/gallery.ini +0 -0
  838. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/gallery_item.ini +0 -0
  839. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/member.ini +0 -0
  840. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/mission.ini +0 -0
  841. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/mission_tab.ini +0 -0
  842. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/service.ini +0 -0
  843. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/services.ini +0 -0
  844. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/flowblocks/team.ini +0 -0
  845. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/blog-index.png +0 -0
  846. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/full-blog.png +0 -0
  847. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/full-page.png +0 -0
  848. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/gallery-404.png +0 -0
  849. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/gallery-singlepage.png +0 -0
  850. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/mainpage-screenshots.png +0 -0
  851. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/images/responsive-layout.png +0 -0
  852. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/404.ini +0 -0
  853. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/author.ini +0 -0
  854. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/authors.ini +0 -0
  855. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/blog-post.ini +0 -0
  856. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/blog.ini +0 -0
  857. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/page.ini +0 -0
  858. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/models/single-layout.ini +0 -0
  859. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/404.html +0 -0
  860. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/author.html +0 -0
  861. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/authors.html +0 -0
  862. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/content.html +0 -0
  863. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/gallery.html +0 -0
  864. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/mission.html +0 -0
  865. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/services.html +0 -0
  866. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blocks/team.html +0 -0
  867. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog-layout.html +0 -0
  868. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog-post.html +0 -0
  869. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/blog.html +0 -0
  870. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/layout.html +0 -0
  871. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/macros/blog.html +0 -0
  872. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/macros/pagination.html +0 -0
  873. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/none.html +0 -0
  874. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/page.html +0 -0
  875. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/templates/single-layout.html +0 -0
  876. {pyglet-2.0.8 → pyglet-2.0.10}/website/themes/lektor-icon/theme.ini +0 -0
@@ -4,6 +4,8 @@ import math
4
4
  import warnings
5
5
 
6
6
  from sys import byteorder
7
+ from typing import Optional
8
+
7
9
  import pyglet
8
10
  from pyglet.font import base
9
11
  from pyglet.font import win32query
@@ -25,7 +27,10 @@ def str_ucs2(text):
25
27
  text = text.encode('utf_16_le') # explicit endian avoids BOM
26
28
  return create_string_buffer(text + '\0')
27
29
 
30
+
28
31
  _debug_dir = 'debug_font'
32
+
33
+
29
34
  def _debug_filename(base, extension):
30
35
  import os
31
36
  if not os.path.exists(_debug_dir):
@@ -36,20 +41,24 @@ def _debug_filename(base, extension):
36
41
  num += 1
37
42
  return name.format(num, extension)
38
43
 
44
+
39
45
  def _debug_image(image, name):
40
46
  filename = _debug_filename(name, 'png')
41
47
  image.save(filename)
42
48
  _debug(f'Saved image {image} to {filename}')
43
49
 
50
+
44
51
  _debug_logfile = None
52
+
53
+
45
54
  def _debug(msg):
46
55
  global _debug_logfile
47
56
  if not _debug_logfile:
48
57
  _debug_logfile = open(_debug_filename('log', 'txt'), 'wt')
49
58
  _debug_logfile.write(msg + '\n')
50
59
 
51
- class Win32GlyphRenderer(base.GlyphRenderer):
52
60
 
61
+ class Win32GlyphRenderer(base.GlyphRenderer):
53
62
 
54
63
  def __init__(self, font):
55
64
  self._bitmap = None
@@ -67,13 +76,15 @@ class Win32GlyphRenderer(base.GlyphRenderer):
67
76
 
68
77
  gdi32.SelectObject(self._dc, self.font.hfont)
69
78
 
70
- def _create_bitmap(self, width, height):
79
+ def _create_bitmap(self, width, height) -> None:
71
80
  pass
72
81
 
73
- def render(self, text):
82
+ def render(self, text: str) -> pyglet.font.base.Glyph:
74
83
  raise NotImplementedError('abstract')
75
84
 
85
+
76
86
  class GDIGlyphRenderer(Win32GlyphRenderer):
87
+
77
88
  def __del__(self):
78
89
  try:
79
90
  if self._dc:
@@ -83,18 +94,22 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
83
94
  except:
84
95
  pass
85
96
 
86
- def render(self, text):
97
+ def render(self, text: str) -> pyglet.font.base.Glyph:
87
98
  # Attempt to get ABC widths (only for TrueType)
88
99
  abc = ABC()
89
- if gdi32.GetCharABCWidthsW(self._dc,
90
- ord(text), ord(text), byref(abc)):
100
+ if gdi32.GetCharABCWidthsW(
101
+ self._dc,
102
+ ord(text), ord(text), byref(abc)
103
+ ):
91
104
  width = abc.abcB
92
105
  lsb = abc.abcA
93
106
  advance = abc.abcA + abc.abcB + abc.abcC
107
+
94
108
  else:
95
109
  width_buf = c_int()
96
- gdi32.GetCharWidth32W(self._dc,
97
- ord(text), ord(text), byref(width_buf))
110
+ gdi32.GetCharWidth32W(
111
+ self._dc, ord(text), ord(text), byref(width_buf))
112
+
98
113
  width = width_buf.value
99
114
  lsb = 0
100
115
  advance = width
@@ -120,7 +135,7 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
120
135
 
121
136
  return glyph
122
137
 
123
- def _get_image(self, text, width, height, lsb):
138
+ def _get_image(self, text: str, width: int, height: int, lsb: int) -> pyglet.image.ImageData:
124
139
  # There's no such thing as a greyscale bitmap format in GDI. We can
125
140
  # create an 8-bit palette bitmap with 256 shades of grey, but
126
141
  # unfortunately antialiasing will not work on such a bitmap. So, we
@@ -134,16 +149,20 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
134
149
 
135
150
  # Draw to DC
136
151
  user32.FillRect(self._dc, byref(self._bitmap_rect), self._black)
137
- gdi32.ExtTextOutA(self._dc, -lsb, 0, 0, None, text,
152
+ gdi32.ExtTextOutA(
153
+ self._dc, -lsb, 0, 0, None, text,
138
154
  len(text), None)
155
+
139
156
  gdi32.GdiFlush()
140
157
 
141
158
  # Create glyph object and copy bitmap data to texture
142
- image = pyglet.image.ImageData(width, height,
159
+ image = pyglet.image.ImageData(
160
+ width, height,
143
161
  'AXXX', self._bitmap_data, self._bitmap_rect.right * 4)
162
+
144
163
  return image
145
164
 
146
- def _create_bitmap(self, width, height):
165
+ def _create_bitmap(self, width: int, height: int) -> None:
147
166
  self._black = gdi32.GetStockObject(BLACK_BRUSH)
148
167
  self._white = gdi32.GetStockObject(WHITE_BRUSH)
149
168
 
@@ -163,7 +182,8 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
163
182
  info.bmiHeader.biCompression = BI_RGB
164
183
 
165
184
  self._dc = gdi32.CreateCompatibleDC(None)
166
- self._bitmap = gdi32.CreateDIBSection(None,
185
+ self._bitmap = gdi32.CreateDIBSection(
186
+ None,
167
187
  byref(info), DIB_RGB_COLORS, byref(data), None,
168
188
  0)
169
189
  # Spookiness: the above line causes a "not enough storage" error,
@@ -186,10 +206,17 @@ class GDIGlyphRenderer(Win32GlyphRenderer):
186
206
  _debug(f'pitch = {pitch}')
187
207
  _debug(f'info.bmiHeader.biSize = {info.bmiHeader.biSize}')
188
208
 
209
+
189
210
  class Win32Font(base.Font):
211
+
190
212
  glyph_renderer_class = GDIGlyphRenderer
191
213
 
192
- def __init__(self, name, size, bold=False, italic=False, stretch=False, dpi=None):
214
+ def __init__(
215
+ self,
216
+ name: str, size: int,
217
+ bold: bool = False, italic: bool = False, stretch: bool = False,
218
+ dpi: Optional[float] = None
219
+ ):
193
220
  super(Win32Font, self).__init__()
194
221
 
195
222
  self.logfont = self.get_logfont(name, size, bold, italic, dpi)
@@ -208,16 +235,35 @@ class Win32Font(base.Font):
208
235
  gdi32.DeleteObject(self.hfont)
209
236
 
210
237
  @staticmethod
211
- def get_logfont(name, size, bold, italic, dpi):
238
+ def get_logfont(name: str, size: float, bold: bool, italic: bool, dpi: Optional[float] = None) -> LOGFONTW:
239
+ """Get a raw Win32 :py:class:`.LOGFONTW` struct for the given arguments.
240
+
241
+ Args:
242
+ name: The name of the font
243
+ size: The font size in points
244
+ bold: Whether to request the font as bold
245
+ italic: Whether to request the font as italic
246
+ dpi: The screen dpi
247
+
248
+ Returns:
249
+ LOGFONTW: a ctypes binding of a Win32 LOGFONTW struct
250
+ """
251
+
212
252
  # Create a dummy DC for coordinate mapping
213
253
  with device_context(None) as dc:
254
+
255
+ # Default to 96 DPI unless otherwise specified
214
256
  if dpi is None:
215
257
  dpi = 96
216
- logpixelsy = dpi
258
+ log_pixels_y = dpi
217
259
 
260
+ # Create LOGFONTW font description struct
218
261
  logfont = LOGFONTW()
219
- # Conversion of point size to device pixels
220
- logfont.lfHeight = int(-size * logpixelsy // 72)
262
+
263
+ # Convert point size to actual device pixels
264
+ logfont.lfHeight = int(-size * log_pixels_y // 72)
265
+
266
+ # Configure the LOGFONTW's font properties
221
267
  if bold:
222
268
  logfont.lfWeight = FW_BOLD
223
269
  else:
@@ -229,7 +275,7 @@ class Win32Font(base.Font):
229
275
  return logfont
230
276
 
231
277
  @classmethod
232
- def have_font(cls, name):
278
+ def have_font(cls, name) -> bool:
233
279
  # [ ] add support for loading raster fonts
234
280
  return win32query.have_font(name)
235
281
 
@@ -243,8 +289,8 @@ class Win32Font(base.Font):
243
289
  raise ctypes.WinError()
244
290
 
245
291
 
246
- # --- GDI+ font rendering ---
247
292
 
293
+ # --- GDI+ font rendering ---
248
294
  from pyglet.image.codecs.gdiplus import PixelFormat32bppARGB, gdiplus, Rect
249
295
  from pyglet.image.codecs.gdiplus import ImageLockModeRead, BitmapData
250
296
 
@@ -263,6 +309,7 @@ StringFormatFlagsNoWrap = 0x00001000
263
309
  StringFormatFlagsLineLimit = 0x00002000
264
310
  StringFormatFlagsNoClip = 0x00004000
265
311
 
312
+
266
313
  class Rectf(ctypes.Structure):
267
314
  _fields_ = [
268
315
  ('x', ctypes.c_float),
@@ -271,6 +318,7 @@ class Rectf(ctypes.Structure):
271
318
  ('height', ctypes.c_float),
272
319
  ]
273
320
 
321
+
274
322
  class GDIPlusGlyphRenderer(Win32GlyphRenderer):
275
323
  def __del__(self):
276
324
  try:
@@ -288,7 +336,7 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
288
336
  pass
289
337
 
290
338
  def _create_bitmap(self, width, height):
291
- self._data = (ctypes.c_byte * (4 * width * height))()
339
+ self._data = (BYTE * (4 * width * height))()
292
340
  self._bitmap = ctypes.c_void_p()
293
341
  self._format = PixelFormat32bppARGB
294
342
  gdiplus.GdipCreateBitmapFromScan0(width, height, width * 4,
@@ -305,11 +353,9 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
305
353
  gdiplus.GdipSetTextRenderingHint(self._graphics,
306
354
  TextRenderingHintAntiAliasGridFit)
307
355
 
308
-
309
356
  self._brush = ctypes.c_void_p()
310
357
  gdiplus.GdipCreateSolidFill(0xffffffff, ctypes.byref(self._brush))
311
358
 
312
-
313
359
  self._matrix = ctypes.c_void_p()
314
360
  gdiplus.GdipCreateMatrix(ctypes.byref(self._matrix))
315
361
 
@@ -429,11 +475,13 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
429
475
  ctypes.byref(rect),
430
476
  fmt,
431
477
  self._brush)
478
+
432
479
  gdiplus.GdipFlush(self._graphics, 1)
433
480
  gdiplus.GdipDeleteStringFormat(fmt)
434
481
 
435
482
  bitmap_data = BitmapData()
436
- gdiplus.GdipBitmapLockBits(self._bitmap,
483
+ gdiplus.GdipBitmapLockBits(
484
+ self._bitmap,
437
485
  byref(self._rect), ImageLockModeRead, self._format,
438
486
  byref(bitmap_data))
439
487
 
@@ -445,7 +493,8 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
445
493
  # Unlock data
446
494
  gdiplus.GdipBitmapUnlockBits(self._bitmap, byref(bitmap_data))
447
495
 
448
- image = pyglet.image.ImageData(width, height,
496
+ image = pyglet.image.ImageData(
497
+ width, height,
449
498
  'BGRA', buffer, -bitmap_data.Stride)
450
499
 
451
500
  glyph = self.font.create_glyph(image)
@@ -454,11 +503,13 @@ class GDIPlusGlyphRenderer(Win32GlyphRenderer):
454
503
  glyph.set_bearings(-self.font.descent, lsb, advance)
455
504
  return glyph
456
505
 
506
+
457
507
  FontStyleBold = 1
458
508
  FontStyleItalic = 2
459
509
  UnitPixel = 2
460
510
  UnitPoint = 3
461
511
 
512
+
462
513
  class GDIPlusFont(Win32Font):
463
514
  glyph_renderer_class = GDIPlusGlyphRenderer
464
515
 
@@ -481,6 +532,12 @@ class GDIPlusFont(Win32Font):
481
532
  self._name = name
482
533
 
483
534
  family = ctypes.c_void_p()
535
+
536
+ # GDI will add @ in front of a localized font for some Asian languages. However, GDI will also not find it
537
+ # based on that name (???). Here we remove it before checking font collections.
538
+ if name[0] == "@":
539
+ name = name[1:]
540
+
484
541
  name = ctypes.c_wchar_p(name)
485
542
 
486
543
  # Look in private collection first:
@@ -489,6 +546,9 @@ class GDIPlusFont(Win32Font):
489
546
 
490
547
  # Then in system collection:
491
548
  if not family:
549
+ if _debug_font:
550
+ print(f"Warning: Font '{name}' was not found. Defaulting to: {self._default_name}")
551
+
492
552
  gdiplus.GdipCreateFontFamilyFromName(name, None, ctypes.byref(family))
493
553
 
494
554
  # Nothing found, use default font.
@@ -1,4 +1,10 @@
1
+ import weakref
2
+
1
3
  from enum import Enum
4
+ import threading
5
+ from typing import Tuple
6
+
7
+ import pyglet
2
8
 
3
9
  from pyglet import gl
4
10
  from pyglet.gl import gl_info
@@ -162,7 +168,7 @@ class Config:
162
168
 
163
169
 
164
170
  class CanvasConfig(Config):
165
- """OpenGL configuration for a particular canvas.
171
+ """An OpenGL configuration for a particular canvas.
166
172
 
167
173
  Use `Config.match` to obtain an instance of this class.
168
174
 
@@ -204,16 +210,16 @@ class CanvasConfig(Config):
204
210
 
205
211
  class ObjectSpace:
206
212
  def __init__(self):
207
- # Textures and buffers scheduled for deletion
208
- # the next time this object space is active.
213
+ # Objects scheduled for deletion the next time this object space is active.
209
214
  self.doomed_textures = []
210
215
  self.doomed_buffers = []
211
- self.doomed_vaos = []
212
216
  self.doomed_shader_programs = []
217
+ self.doomed_shaders = []
218
+ self.doomed_renderbuffers = []
213
219
 
214
220
 
215
221
  class Context:
216
- """OpenGL context for drawing.
222
+ """An OpenGL context for drawing.
217
223
 
218
224
  Use `CanvasConfig.create_context` to create a context.
219
225
 
@@ -231,14 +237,25 @@ class Context:
231
237
  self.context_share = context_share
232
238
  self.canvas = None
233
239
 
240
+ self.doomed_vaos = []
241
+ self.doomed_framebuffers = []
242
+
234
243
  if context_share:
235
244
  self.object_space = context_share.object_space
236
245
  else:
237
246
  self.object_space = ObjectSpace()
238
247
 
248
+ self._cached_programs = weakref.WeakValueDictionary()
249
+
239
250
  def __repr__(self):
240
251
  return f"{self.__class__.__name__}(id={id(self)}, share={self.context_share})"
241
252
 
253
+ def __enter__(self):
254
+ self.set_current()
255
+
256
+ def __exit__(self, exc_type, exc_val, exc_tb):
257
+ return
258
+
242
259
  def attach(self, canvas):
243
260
  if self.canvas is not None:
244
261
  self.detach()
@@ -263,28 +280,49 @@ class Context:
263
280
  self._info = gl_info.GLInfo()
264
281
  self._info.set_active_context()
265
282
 
266
- # Release Textures, Buffers, and VAOs on this context scheduled for
267
- # deletion. Note that the garbage collector may introduce a race
268
- # condition, so operate on a copy, and clear the list afterwards.
269
283
  if self.object_space.doomed_textures:
270
- textures = self.object_space.doomed_textures[:]
271
- textures = (gl.GLuint * len(textures))(*textures)
272
- gl.glDeleteTextures(len(textures), textures)
273
- self.object_space.doomed_textures.clear()
284
+ self._delete_objects(self.object_space.doomed_textures, gl.glDeleteTextures)
274
285
  if self.object_space.doomed_buffers:
275
- buffers = self.object_space.doomed_buffers[:]
276
- buffers = (gl.GLuint * len(buffers))(*buffers)
277
- gl.glDeleteBuffers(len(buffers), buffers)
278
- self.object_space.doomed_buffers.clear()
279
- if self.object_space.doomed_vaos:
280
- vaos = self.object_space.doomed_vaos[:]
281
- vaos = (gl.GLuint * len(vaos))(*vaos)
282
- gl.glDeleteVertexArrays(len(vaos), vaos)
283
- self.object_space.doomed_vaos.clear()
286
+ self._delete_objects(self.object_space.doomed_buffers, gl.glDeleteBuffers)
284
287
  if self.object_space.doomed_shader_programs:
285
- for program_id in self.object_space.doomed_shader_programs:
286
- gl.glDeleteProgram(program_id)
287
- self.object_space.doomed_shader_programs.clear()
288
+ self._delete_objects_one_by_one(self.object_space.doomed_shader_programs,
289
+ gl.glDeleteProgram)
290
+ if self.object_space.doomed_shaders:
291
+ self._delete_objects_one_by_one(self.object_space.doomed_shaders, gl.glDeleteShader)
292
+ if self.object_space.doomed_renderbuffers:
293
+ self._delete_objects(self.object_space.doomed_renderbuffers, gl.glDeleteRenderbuffers)
294
+
295
+ if self.doomed_vaos:
296
+ self._delete_objects(self.doomed_vaos, gl.glDeleteVertexArrays)
297
+ if self.doomed_framebuffers:
298
+ self._delete_objects(self.doomed_framebuffers, gl.glDeleteFramebuffers)
299
+
300
+ # For the functions below:
301
+ # The garbage collector introduces a race condition.
302
+ # The provided list might be appended to (and only appended to) while this
303
+ # method runs, as it's a `doomed_*` list either on the context or its
304
+ # object space. If `count` wasn't stored in a local, this method might
305
+ # leak objects.
306
+ def _delete_objects(self, list_, deletion_func):
307
+ """Release all OpenGL objects in the given list using the supplied
308
+ deletion function with the signature ``(GLuint count, GLuint *names)``.
309
+ """
310
+ count = len(list_)
311
+ to_delete = list_[:count]
312
+ del list_[:count]
313
+
314
+ deletion_func(count, (gl.GLuint * count)(*to_delete))
315
+
316
+ def _delete_objects_one_by_one(self, list_, deletion_func):
317
+ """Similar to ``_delete_objects``, but assumes the deletion functions's
318
+ signature to be ``(GLuint name)``, calling it once for each object.
319
+ """
320
+ count = len(list_)
321
+ to_delete = list_[:count]
322
+ del list_[:count]
323
+
324
+ for name in to_delete:
325
+ deletion_func(gl.GLuint(name))
288
326
 
289
327
  def destroy(self):
290
328
  """Release the context.
@@ -304,26 +342,80 @@ class Context:
304
342
  if gl._shadow_window is not None:
305
343
  gl._shadow_window.switch_to()
306
344
 
345
+ def _safe_to_operate_on_object_space(self):
346
+ """Return whether it is safe to interact with this context's object
347
+ space.
348
+
349
+ This is considered to be the case if the currently active context's
350
+ object space is the same as this context's object space and this
351
+ method is called from the main thread.
352
+ """
353
+ return (
354
+ self.object_space is gl.current_context.object_space and
355
+ threading.current_thread() is threading.main_thread()
356
+ )
357
+
358
+ def _safe_to_operate_on(self):
359
+ """Return whether it is safe to interact with this context.
360
+
361
+ This is considered to be the case if it's the current context and this
362
+ method is called from the main thread.
363
+ """
364
+ return gl.current_context is self and threading.current_thread() is threading.main_thread()
365
+
366
+ def create_program(self, *sources: Tuple[str, str], program_class=None):
367
+ """Create a ShaderProgram from OpenGL GLSL source.
368
+
369
+ This is a convenience method that takes one or more tuples of
370
+ (source_string, shader_type), and returns a
371
+ :py:class:`~pyglet.graphics.shader.ShaderProgram` instance.
372
+
373
+ `source_string` is OpenGL GLSL source code as a str, and `shader_type`
374
+ is the OpenGL shader type, such as "vertex" or "fragment". See
375
+ :py:class:`~pyglet.graphics.shader.Shader` for more information.
376
+
377
+ .. note:: This method is cached. Given the same shader sources, the
378
+ same ShaderProgram instance will be returned. For more
379
+ control over the ShaderProgram lifecycle, it is recommended
380
+ to manually create Shaders and link ShaderPrograms.
381
+
382
+ .. versionadded:: 2.0.10
383
+ """
384
+ if program := self._cached_programs.get(str(sources)):
385
+ return program
386
+
387
+ program_class = program_class or pyglet.graphics.shader.ShaderProgram
388
+ shaders = (pyglet.graphics.shader.Shader(src, srctype) for (src, srctype) in sources)
389
+ program = program_class(*shaders)
390
+ self._cached_programs[str(sources)] = program
391
+
392
+ return program
393
+
307
394
  def delete_texture(self, texture_id):
308
- """Safely delete a Texture belonging to this context.
395
+ """Safely delete a Texture belonging to this context's object space.
309
396
 
310
- Usually, the Texture is released immediately using
311
- ``glDeleteTextures``, however if another context that does not share
312
- this context's object space is currently active, the deletion will
313
- be deferred until an appropriate context is activated.
397
+ This method will delete the texture immediately via
398
+ ``glDeleteTextures`` if the current context's object space is the same
399
+ as this context's object space and it is called from the main thread.
400
+
401
+ Otherwise, the texture will only be marked for deletion, postponing
402
+ it until any context with the same object space becomes active again.
403
+
404
+ This makes it safe to call from anywhere, including other threads.
314
405
 
315
406
  :Parameters:
316
407
  `texture_id` : int
317
408
  The OpenGL name of the Texture to delete.
318
409
 
319
410
  """
320
- if self.object_space is gl.current_context.object_space:
411
+ if self._safe_to_operate_on_object_space():
321
412
  gl.glDeleteTextures(1, gl.GLuint(texture_id))
322
413
  else:
323
414
  self.object_space.doomed_textures.append(texture_id)
324
415
 
325
416
  def delete_buffer(self, buffer_id):
326
- """Safely delete a Buffer object belonging to this context.
417
+ """Safely delete a Buffer object belonging to this context's object
418
+ space.
327
419
 
328
420
  This method behaves similarly to `delete_texture`, though for
329
421
  ``glDeleteBuffers`` instead of ``glDeleteTextures``.
@@ -334,16 +426,73 @@ class Context:
334
426
 
335
427
  .. versionadded:: 1.1
336
428
  """
337
- if self.object_space is gl.current_context.object_space and False:
429
+ if self._safe_to_operate_on_object_space():
338
430
  gl.glDeleteBuffers(1, gl.GLuint(buffer_id))
339
431
  else:
340
432
  self.object_space.doomed_buffers.append(buffer_id)
341
433
 
434
+ def delete_shader_program(self, program_id):
435
+ """Safely delete a Shader Program belonging to this context's
436
+ object space.
437
+
438
+ This method behaves similarly to `delete_texture`, though for
439
+ ``glDeleteProgram`` instead of ``glDeleteTextures``.
440
+
441
+ :Parameters:
442
+ `program_id` : int
443
+ The OpenGL name of the Shader Program to delete.
444
+
445
+ .. versionadded:: 2.0
446
+ """
447
+ if self._safe_to_operate_on_object_space():
448
+ gl.glDeleteProgram(gl.GLuint(program_id))
449
+ else:
450
+ self.object_space.doomed_shader_programs.append(program_id)
451
+
452
+ def delete_shader(self, shader_id):
453
+ """Safely delete a Shader belonging to this context's object space.
454
+
455
+ This method behaves similarly to `delete_texture`, though for
456
+ ``glDeleteShader`` instead of ``glDeleteTextures``.
457
+
458
+ :Parameters:
459
+ `shader_id` : int
460
+ The OpenGL name of the Shader to delete.
461
+
462
+ .. versionadded:: 2.0.10
463
+ """
464
+ if self._safe_to_operate_on_object_space():
465
+ gl.glDeleteShader(gl.GLuint(shader_id))
466
+ else:
467
+ self.object_space.doomed_shaders.append(shader_id)
468
+
469
+ def delete_renderbuffer(self, rbo_id):
470
+ """Safely delete a Renderbuffer Object belonging to this context's
471
+ object space.
472
+
473
+ This method behaves similarly to `delete_texture`, though for
474
+ ``glDeleteRenderbuffers`` instead of ``glDeleteTextures``.
475
+
476
+ :Parameters:
477
+ `rbo_id` : int
478
+ The OpenGL name of the Shader Program to delete.
479
+
480
+ .. versionadded:: 2.0.10
481
+ """
482
+ if self._safe_to_operate_on_object_space():
483
+ gl.glDeleteRenderbuffers(1, gl.GLuint(rbo_id))
484
+ else:
485
+ self.object_space.doomed_renderbuffers.append(rbo_id)
486
+
342
487
  def delete_vao(self, vao_id):
343
488
  """Safely delete a Vertex Array Object belonging to this context.
344
489
 
345
- This method behaves similarly to `delete_texture`, though for
346
- ``glDeleteVertexArrays`` instead of ``glDeleteTextures``.
490
+ If this context is not the current context or this method is not
491
+ called from the main thread, its deletion will be postponed until
492
+ this context is next made active again.
493
+
494
+ Otherwise, this method will immediately delete the VAO via
495
+ ``glDeleteVertexArrays``.
347
496
 
348
497
  :Parameters:
349
498
  `vao_id` : int
@@ -351,27 +500,27 @@ class Context:
351
500
 
352
501
  .. versionadded:: 2.0
353
502
  """
354
- if gl.current_context and self.object_space is gl.current_context.object_space and False:
503
+ if self._safe_to_operate_on():
355
504
  gl.glDeleteVertexArrays(1, gl.GLuint(vao_id))
356
505
  else:
357
- self.object_space.doomed_vaos.append(vao_id)
506
+ self.doomed_vaos.append(vao_id)
358
507
 
359
- def delete_shader_program(self, program_id):
360
- """Safely delete a Shader Program belonging to this context.
508
+ def delete_framebuffer(self, fbo_id):
509
+ """Safely delete a Framebuffer Object belonging to this context.
361
510
 
362
- This method behaves similarly to `delete_texture`, though for
363
- ``glDeleteProgram`` instead of ``glDeleteTextures``.
511
+ This method behaves similarly to `delete_vao`, though for
512
+ ``glDeleteFramebuffers`` instead of ``glDeleteVertexArrays``.
364
513
 
365
514
  :Parameters:
366
- `program_id` : int
367
- The OpenGL name of the Shader Program to delete.
515
+ `fbo_id` : int
516
+ The OpenGL name of the Framebuffer Object to delete.
368
517
 
369
- .. versionadded:: 2.0
518
+ .. versionadded:: 2.0.10
370
519
  """
371
- if gl.current_context is self:
372
- gl.glDeleteProgram(program_id)
520
+ if self._safe_to_operate_on():
521
+ gl.glDeleteFramebuffers(1, gl.GLuint(fbo_id))
373
522
  else:
374
- self.object_space.doomed_shader_programs.append(program_id)
523
+ self.doomed_framebuffers.append(fbo_id)
375
524
 
376
525
  def get_info(self):
377
526
  """Get the OpenGL information for this context.
@@ -63,10 +63,12 @@ class GLInfo:
63
63
 
64
64
  This method is called automatically for the default context.
65
65
  """
66
- from pyglet.gl.gl import glGetString, glGetStringi, GL_NUM_EXTENSIONS
67
-
68
66
  self._have_context = True
67
+
69
68
  if not self._have_info:
69
+
70
+ from pyglet.gl.gl import glGetString, glGetStringi, GL_NUM_EXTENSIONS
71
+
70
72
  self.vendor = asstr(cast(glGetString(GL_VENDOR), c_char_p).value)
71
73
  self.renderer = asstr(cast(glGetString(GL_RENDERER), c_char_p).value)
72
74
  self.version = asstr(cast(glGetString(GL_VERSION), c_char_p).value)
@@ -62,8 +62,7 @@ def errcheck(result, func, arguments):
62
62
  print(name)
63
63
 
64
64
  from pyglet import gl
65
- context = gl.current_context
66
- if not context:
65
+ if not gl.current_context:
67
66
  raise GLException('No GL context; create a Window first')
68
67
  error = gl.glGetError()
69
68
  if error: