pyglet 2.1.3__tar.gz → 2.1.4__tar.gz

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 (818) hide show
  1. {pyglet-2.1.3 → pyglet-2.1.4}/PKG-INFO +1 -1
  2. {pyglet-2.1.3 → pyglet-2.1.4}/RELEASE_NOTES +21 -0
  3. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/qt_sprite_preview.py +51 -45
  4. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/mouse.rst +2 -0
  5. pyglet-2.1.4/doc/programming_guide/shapes.rst +162 -0
  6. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/torus.py +4 -4
  7. {pyglet-2.1.3 → pyglet-2.1.4}/examples/text/advanced_font.py +9 -8
  8. pyglet-2.1.4/examples/text/user_bitmap_font.py +92 -0
  9. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/__init__.py +21 -9
  10. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/__init__.pyi +3 -1
  11. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/app/cocoa.py +6 -3
  12. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/win32.py +14 -15
  13. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/xlib_vidmoderestore.py +1 -1
  14. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/extlibs/earcut.py +2 -2
  15. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/__init__.py +3 -3
  16. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/base.py +118 -51
  17. pyglet-2.1.4/pyglet/font/dwrite/__init__.py +1381 -0
  18. pyglet-2.1.4/pyglet/font/dwrite/d2d1_lib.py +637 -0
  19. pyglet-2.1.4/pyglet/font/dwrite/d2d1_types_lib.py +60 -0
  20. pyglet-2.1.4/pyglet/font/dwrite/dwrite_lib.py +1577 -0
  21. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/fontconfig.py +79 -16
  22. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/freetype.py +252 -77
  23. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/freetype_lib.py +234 -125
  24. pyglet-2.1.4/pyglet/font/harfbuzz/__init__.py +275 -0
  25. pyglet-2.1.4/pyglet/font/harfbuzz/harfbuzz_lib.py +212 -0
  26. pyglet-2.1.4/pyglet/font/quartz.py +623 -0
  27. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/user.py +18 -11
  28. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/win32.py +9 -1
  29. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/wgl.py +94 -87
  30. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/wglext_arb.py +472 -218
  31. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/wglext_nv.py +410 -188
  32. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gui/widgets.py +6 -1
  33. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/bmp.py +3 -5
  34. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/gdiplus.py +28 -9
  35. pyglet-2.1.4/pyglet/image/codecs/wic.py +345 -0
  36. pyglet-2.1.3/pyglet/image/codecs/wic.py → pyglet-2.1.4/pyglet/image/codecs/wincodec_lib.py +31 -254
  37. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/base.py +3 -2
  38. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/macos/darwin_hid.py +28 -2
  39. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/win32/directinput.py +2 -1
  40. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/win32/xinput.py +10 -9
  41. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/lib.py +14 -2
  42. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/darwin/cocoapy/cocoalibs.py +74 -3
  43. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/darwin/coreaudio.py +0 -2
  44. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/__init__.py +4 -2
  45. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/com.py +65 -12
  46. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/constants.py +1 -0
  47. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/dinput.py +1 -9
  48. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/types.py +72 -8
  49. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/coreaudio.py +1 -0
  50. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/wmf.py +93 -72
  51. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/devices/win32.py +5 -4
  52. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/directsound/lib_dsound.py +4 -4
  53. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/xaudio2/interface.py +21 -17
  54. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/xaudio2/lib_xaudio2.py +42 -25
  55. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/shapes.py +1 -1
  56. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/document.py +7 -53
  57. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/formats/attributed.py +3 -1
  58. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/formats/plaintext.py +1 -1
  59. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/formats/structured.py +1 -1
  60. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/layout/base.py +76 -68
  61. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/layout/incremental.py +38 -8
  62. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/layout/scrolling.py +1 -1
  63. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/runlist.py +2 -114
  64. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/win32/__init__.py +1 -3
  65. {pyglet-2.1.3 → pyglet-2.1.4}/pyproject.toml +1 -1
  66. pyglet-2.1.4/tests/data/fonts/action_man_atlas.png +0 -0
  67. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/font/test_freetype_face.py +5 -2
  68. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_caret_color.py +2 -1
  69. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_content_valign.py +2 -1
  70. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_html.py +46 -41
  71. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_inline_elements.py +3 -1
  72. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_inline_elements_style_change.py +3 -1
  73. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_multiline_wrap.py +2 -2
  74. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_plain.py +2 -1
  75. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/test_style.py +3 -2
  76. pyglet-2.1.3/doc/programming_guide/shapes.rst +0 -88
  77. pyglet-2.1.3/pyglet/font/directwrite.py +0 -2798
  78. pyglet-2.1.3/pyglet/font/quartz.py +0 -303
  79. {pyglet-2.1.3 → pyglet-2.1.4}/.coveragerc +0 -0
  80. {pyglet-2.1.3 → pyglet-2.1.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  81. {pyglet-2.1.3 → pyglet-2.1.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  82. {pyglet-2.1.3 → pyglet-2.1.4}/.github/ISSUE_TEMPLATE/questions--or-other.md +0 -0
  83. {pyglet-2.1.3 → pyglet-2.1.4}/.github/workflows/codeql.yml +0 -0
  84. {pyglet-2.1.3 → pyglet-2.1.4}/.github/workflows/unittests.yml +0 -0
  85. {pyglet-2.1.3 → pyglet-2.1.4}/.gitignore +0 -0
  86. {pyglet-2.1.3 → pyglet-2.1.4}/.readthedocs.yml +0 -0
  87. {pyglet-2.1.3 → pyglet-2.1.4}/LICENSE +0 -0
  88. {pyglet-2.1.3 → pyglet-2.1.4}/MANIFEST.in +0 -0
  89. {pyglet-2.1.3 → pyglet-2.1.4}/README.md +0 -0
  90. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/aseprite_codec/README +0 -0
  91. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/aseprite_codec/asedemo.py +0 -0
  92. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/aseprite_codec/aseprite.py +0 -0
  93. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/aseprite_codec/running.ase +0 -0
  94. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/logo3d/logo3d.jpg +0 -0
  95. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/logo3d/logo3d.obj.zip +0 -0
  96. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/logo3d/logo3d.wings +0 -0
  97. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/scenemanager.py +0 -0
  98. {pyglet-2.1.3 → pyglet-2.1.4}/contrib/toys/follow_mouse.py +0 -0
  99. {pyglet-2.1.3 → pyglet-2.1.4}/doc/Makefile +0 -0
  100. {pyglet-2.1.3 → pyglet-2.1.4}/doc/_static/css/custom.css +0 -0
  101. {pyglet-2.1.3 → pyglet-2.1.4}/doc/_static/favicon.ico +0 -0
  102. {pyglet-2.1.3 → pyglet-2.1.4}/doc/_static/logo.png +0 -0
  103. {pyglet-2.1.3 → pyglet-2.1.4}/doc/_static/logo5.svg +0 -0
  104. {pyglet-2.1.3 → pyglet-2.1.4}/doc/_static/relatedlogo.png +0 -0
  105. {pyglet-2.1.3 → pyglet-2.1.4}/doc/conf.py +0 -0
  106. {pyglet-2.1.3 → pyglet-2.1.4}/doc/external_resources.rst +0 -0
  107. {pyglet-2.1.3 → pyglet-2.1.4}/doc/index.rst +0 -0
  108. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/contributing.rst +0 -0
  109. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/dist.rst +0 -0
  110. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/doc.rst +0 -0
  111. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/generated.rst +0 -0
  112. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/gl.rst +0 -0
  113. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/media_logging_manual.rst +0 -0
  114. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/media_manual.rst +0 -0
  115. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/testing.rst +0 -0
  116. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/virtualenv.rst +0 -0
  117. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/wraptypes-class.svg +0 -0
  118. {pyglet-2.1.3 → pyglet-2.1.4}/doc/internal/wraptypes.rst +0 -0
  119. {pyglet-2.1.3 → pyglet-2.1.4}/doc/make.bat +0 -0
  120. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/app.rst +0 -0
  121. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/clock.rst +0 -0
  122. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/customtypes.rst +0 -0
  123. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/display.rst +0 -0
  124. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/event.rst +0 -0
  125. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/font.rst +0 -0
  126. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/gl.rst +0 -0
  127. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/graphics/allocation.rst +0 -0
  128. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/graphics/index.rst +0 -0
  129. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/graphics/shader.rst +0 -0
  130. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/graphics/vertexbuffer.rst +0 -0
  131. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/graphics/vertexdomain.rst +0 -0
  132. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/gui.rst +0 -0
  133. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/image/animation.rst +0 -0
  134. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/image/atlas.rst +0 -0
  135. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/image/buffer.rst +0 -0
  136. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/image/index.rst +0 -0
  137. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/info.rst +0 -0
  138. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/input.rst +0 -0
  139. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/math.rst +0 -0
  140. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/media.rst +0 -0
  141. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/media_synthesis.rst +0 -0
  142. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/models.rst +0 -0
  143. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/pyglet.rst +0 -0
  144. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/resource.rst +0 -0
  145. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/shapes.rst +0 -0
  146. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/sprite.rst +0 -0
  147. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/text/caret.rst +0 -0
  148. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/text/document.rst +0 -0
  149. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/text/index.rst +0 -0
  150. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/text/layout.rst +0 -0
  151. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/window.rst +0 -0
  152. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/window_key.rst +0 -0
  153. {pyglet-2.1.3 → pyglet-2.1.4}/doc/modules/window_mouse.rst +0 -0
  154. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/context.rst +0 -0
  155. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/debug.rst +0 -0
  156. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/eventloop.rst +0 -0
  157. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/events.rst +0 -0
  158. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/examplegame.rst +0 -0
  159. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/gl.rst +0 -0
  160. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/gui.rst +0 -0
  161. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/image.rst +0 -0
  162. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/abstract_image.png +0 -0
  163. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/abstract_image.svg +0 -0
  164. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/buffer_image.png +0 -0
  165. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/buffer_image.svg +0 -0
  166. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/context_flow.png +0 -0
  167. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/context_flow.svg +0 -0
  168. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_crosshair.png +0 -0
  169. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_default.png +0 -0
  170. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_hand.png +0 -0
  171. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_no.png +0 -0
  172. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_size_down.png +0 -0
  173. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_size_left.png +0 -0
  174. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_size_left_right.png +0 -0
  175. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_size_right.png +0 -0
  176. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_size_up.png +0 -0
  177. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_size_up_down.png +0 -0
  178. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_text.png +0 -0
  179. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_mac_wait.png +0 -0
  180. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_crosshair.png +0 -0
  181. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_default.png +0 -0
  182. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_hand.png +0 -0
  183. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_help.png +0 -0
  184. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_no.png +0 -0
  185. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_size.png +0 -0
  186. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_size_left_right.png +0 -0
  187. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_size_nesw.png +0 -0
  188. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_size_nwse.png +0 -0
  189. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_size_up_down.png +0 -0
  190. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_text.png +0 -0
  191. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_wait.png +0 -0
  192. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/cursor_win_wait_arrow.png +0 -0
  193. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/explosion.png +0 -0
  194. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/font_metrics.png +0 -0
  195. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/font_metrics.svg +0 -0
  196. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/image_classes.png +0 -0
  197. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/image_classes.svg +0 -0
  198. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/image_grid.png +0 -0
  199. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/image_grid.svg +0 -0
  200. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/image_sequence.png +0 -0
  201. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/image_sequence.svg +0 -0
  202. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/mouse_coordinates.png +0 -0
  203. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/mouse_coordinates.svg +0 -0
  204. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/screens.png +0 -0
  205. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/screens.svg +0 -0
  206. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/text_classes.png +0 -0
  207. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/text_classes.svg +0 -0
  208. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_location.png +0 -0
  209. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_location.svg +0 -0
  210. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_osx_borderless.png +0 -0
  211. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_osx_default.png +0 -0
  212. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_osx_dialog.png +0 -0
  213. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_osx_tool.png +0 -0
  214. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_xp_default.png +0 -0
  215. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_xp_dialog.png +0 -0
  216. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_xp_overlay.png +0 -0
  217. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_xp_tool.png +0 -0
  218. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/img/window_xp_transparent.png +0 -0
  219. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/input.rst +0 -0
  220. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/installation.rst +0 -0
  221. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/keyboard.rst +0 -0
  222. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/math.rst +0 -0
  223. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/media.rst +0 -0
  224. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/migration.rst +0 -0
  225. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/models.rst +0 -0
  226. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/opengles.rst +0 -0
  227. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/options.rst +0 -0
  228. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/quickstart.rst +0 -0
  229. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/rendering.rst +0 -0
  230. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/resources.rst +0 -0
  231. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/text.rst +0 -0
  232. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/time.rst +0 -0
  233. {pyglet-2.1.3 → pyglet-2.1.4}/doc/programming_guide/windowing.rst +0 -0
  234. {pyglet-2.1.3 → pyglet-2.1.4}/doc/requirements.txt +0 -0
  235. {pyglet-2.1.3 → pyglet-2.1.4}/examples/clipboard.py +0 -0
  236. {pyglet-2.1.3 → pyglet-2.1.4}/examples/dpi_scaled_window.py +0 -0
  237. {pyglet-2.1.3 → pyglet-2.1.4}/examples/events/events_key_state_handler.py +0 -0
  238. {pyglet-2.1.3 → pyglet-2.1.4}/examples/events/register_event_type.py +0 -0
  239. {pyglet-2.1.3 → pyglet-2.1.4}/examples/events/window_events.py +0 -0
  240. {pyglet-2.1.3 → pyglet-2.1.4}/examples/events/window_platform_event.py +0 -0
  241. {pyglet-2.1.3 → pyglet-2.1.4}/examples/file_dialog.py +0 -0
  242. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/resources/asteroid.png +0 -0
  243. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/resources/bullet.png +0 -0
  244. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/resources/bullet.wav +0 -0
  245. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/resources/engine_flame.png +0 -0
  246. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/resources/player.png +0 -0
  247. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version1/asteroid.py +0 -0
  248. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version1/game/__init__.py +0 -0
  249. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version1/game/load.py +0 -0
  250. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version1/game/resources.py +0 -0
  251. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version2/asteroid.py +0 -0
  252. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version2/game/__init__.py +0 -0
  253. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version2/game/load.py +0 -0
  254. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version2/game/physicalobject.py +0 -0
  255. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version2/game/player.py +0 -0
  256. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version2/game/resources.py +0 -0
  257. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version3/asteroid.py +0 -0
  258. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version3/game/__init__.py +0 -0
  259. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version3/game/load.py +0 -0
  260. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version3/game/physicalobject.py +0 -0
  261. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version3/game/player.py +0 -0
  262. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version3/game/resources.py +0 -0
  263. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version3/game/util.py +0 -0
  264. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/asteroid.py +0 -0
  265. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/__init__.py +0 -0
  266. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/asteroid.py +0 -0
  267. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/bullet.py +0 -0
  268. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/load.py +0 -0
  269. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/physicalobject.py +0 -0
  270. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/player.py +0 -0
  271. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/resources.py +0 -0
  272. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version4/game/util.py +0 -0
  273. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/asteroid.py +0 -0
  274. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/__init__.py +0 -0
  275. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/asteroid.py +0 -0
  276. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/bullet.py +0 -0
  277. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/load.py +0 -0
  278. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/physicalobject.py +0 -0
  279. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/player.py +0 -0
  280. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/resources.py +0 -0
  281. {pyglet-2.1.3 → pyglet-2.1.4}/examples/game/version5/game/util.py +0 -0
  282. {pyglet-2.1.3 → pyglet-2.1.4}/examples/graphics/image_convert.py +0 -0
  283. {pyglet-2.1.3 → pyglet-2.1.4}/examples/graphics/image_display.py +0 -0
  284. {pyglet-2.1.3 → pyglet-2.1.4}/examples/gui/bar.png +0 -0
  285. {pyglet-2.1.3 → pyglet-2.1.4}/examples/gui/button_hover.png +0 -0
  286. {pyglet-2.1.3 → pyglet-2.1.4}/examples/gui/button_pressed.png +0 -0
  287. {pyglet-2.1.3 → pyglet-2.1.4}/examples/gui/button_unpressed.png +0 -0
  288. {pyglet-2.1.3 → pyglet-2.1.4}/examples/gui/knob.png +0 -0
  289. {pyglet-2.1.3 → pyglet-2.1.4}/examples/gui/widgets.py +0 -0
  290. {pyglet-2.1.3 → pyglet-2.1.4}/examples/hello_world.py +0 -0
  291. {pyglet-2.1.3 → pyglet-2.1.4}/examples/input/apple_remote.py +0 -0
  292. {pyglet-2.1.3 → pyglet-2.1.4}/examples/input/controller.py +0 -0
  293. {pyglet-2.1.3 → pyglet-2.1.4}/examples/input/input.py +0 -0
  294. {pyglet-2.1.3 → pyglet-2.1.4}/examples/input/joystick.py +0 -0
  295. {pyglet-2.1.3 → pyglet-2.1.4}/examples/input/tablet.py +0 -0
  296. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/media_info.py +0 -0
  297. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/media_player.py +0 -0
  298. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/noisy/README +0 -0
  299. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/noisy/ball.png +0 -0
  300. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/noisy/ball.wav +0 -0
  301. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/noisy/noisy.py +0 -0
  302. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/README +0 -0
  303. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/reader.py +0 -0
  304. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/res/bass.wav +0 -0
  305. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/res/drums.wav +0 -0
  306. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/res/guitar.wav +0 -0
  307. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/res/piano.wav +0 -0
  308. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/res/space.txt +0 -0
  309. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/soundspace/soundspace.py +0 -0
  310. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/synthesizer.py +0 -0
  311. {pyglet-2.1.3 → pyglet-2.1.4}/examples/media/video.py +0 -0
  312. {pyglet-2.1.3 → pyglet-2.1.4}/examples/model/box.mtl +0 -0
  313. {pyglet-2.1.3 → pyglet-2.1.4}/examples/model/box.obj +0 -0
  314. {pyglet-2.1.3 → pyglet-2.1.4}/examples/model/fpscamera.py +0 -0
  315. {pyglet-2.1.3 → pyglet-2.1.4}/examples/model/logo3d.mtl +0 -0
  316. {pyglet-2.1.3 → pyglet-2.1.4}/examples/model/logo3d.obj +0 -0
  317. {pyglet-2.1.3 → pyglet-2.1.4}/examples/model/model.py +0 -0
  318. {pyglet-2.1.3 → pyglet-2.1.4}/examples/model/pyglet.png +0 -0
  319. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/compute_shader.py +0 -0
  320. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/egl_context.py +0 -0
  321. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/minimal_shader.py +0 -0
  322. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/opengl_context.py +0 -0
  323. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/opengl_core.py +0 -0
  324. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/opengl_scissor.py +0 -0
  325. {pyglet-2.1.3 → pyglet-2.1.4}/examples/opengl/pyglet.png +0 -0
  326. {pyglet-2.1.3 → pyglet-2.1.4}/examples/programming_guide/animation.py +0 -0
  327. {pyglet-2.1.3 → pyglet-2.1.4}/examples/programming_guide/dinosaur.gif +0 -0
  328. {pyglet-2.1.3 → pyglet-2.1.4}/examples/programming_guide/events.py +0 -0
  329. {pyglet-2.1.3 → pyglet-2.1.4}/examples/programming_guide/hello_world.py +0 -0
  330. {pyglet-2.1.3 → pyglet-2.1.4}/examples/programming_guide/image_viewer.py +0 -0
  331. {pyglet-2.1.3 → pyglet-2.1.4}/examples/programming_guide/kitten.jpg +0 -0
  332. {pyglet-2.1.3 → pyglet-2.1.4}/examples/programming_guide/window_subclass.py +0 -0
  333. {pyglet-2.1.3 → pyglet-2.1.4}/examples/resources/Brick1Blue.png +0 -0
  334. {pyglet-2.1.3 → pyglet-2.1.4}/examples/resources/Brick1Crack3.png +0 -0
  335. {pyglet-2.1.3 → pyglet-2.1.4}/examples/resources/Brick1Gray.png +0 -0
  336. {pyglet-2.1.3 → pyglet-2.1.4}/examples/resources/kitten.jpg +0 -0
  337. {pyglet-2.1.3 → pyglet-2.1.4}/examples/resources/pyglet.png +0 -0
  338. {pyglet-2.1.3 → pyglet-2.1.4}/examples/shapes.py +0 -0
  339. {pyglet-2.1.3 → pyglet-2.1.4}/examples/sprite/depth_sprite.py +0 -0
  340. {pyglet-2.1.3 → pyglet-2.1.4}/examples/sprite/display_sprite.py +0 -0
  341. {pyglet-2.1.3 → pyglet-2.1.4}/examples/sprite/multi_texture_sprite.py +0 -0
  342. {pyglet-2.1.3 → pyglet-2.1.4}/examples/sprite/sprite_batching.py +0 -0
  343. {pyglet-2.1.3 → pyglet-2.1.4}/examples/text/html_label.py +0 -0
  344. {pyglet-2.1.3 → pyglet-2.1.4}/examples/text/pyglet.png +0 -0
  345. {pyglet-2.1.3 → pyglet-2.1.4}/examples/text/text_input.py +0 -0
  346. {pyglet-2.1.3 → pyglet-2.1.4}/examples/timer.py +0 -0
  347. {pyglet-2.1.3 → pyglet-2.1.4}/examples/window/camera.py +0 -0
  348. {pyglet-2.1.3 → pyglet-2.1.4}/examples/window/camera_group.py +0 -0
  349. {pyglet-2.1.3 → pyglet-2.1.4}/examples/window/fixed_resolution.py +0 -0
  350. {pyglet-2.1.3 → pyglet-2.1.4}/examples/window/fps_change.py +0 -0
  351. {pyglet-2.1.3 → pyglet-2.1.4}/examples/window/multiple_windows.py +0 -0
  352. {pyglet-2.1.3 → pyglet-2.1.4}/examples/window/overlay_window.py +0 -0
  353. {pyglet-2.1.3 → pyglet-2.1.4}/examples/window/transparent_window.py +0 -0
  354. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/dist_field/README +0 -0
  355. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/dist_field/genfield.py +0 -0
  356. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/dist_field/py.df.png +0 -0
  357. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/dist_field/py.png +0 -0
  358. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/dist_field/renderfield.py +0 -0
  359. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/flaccodec.py +0 -0
  360. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/hello_world.svg +0 -0
  361. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/instancing/sprite_instance.py +0 -0
  362. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/instancing/sprite_instance_object.py +0 -0
  363. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/multitexture_sprite/multitexturesprite.py +0 -0
  364. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/spritebenchmark.py +0 -0
  365. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/svg_test.py +0 -0
  366. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/wayland/gbm_egl_context.py +0 -0
  367. {pyglet-2.1.3 → pyglet-2.1.4}/experimental/win32priority.py +0 -0
  368. {pyglet-2.1.3 → pyglet-2.1.4}/make.py +0 -0
  369. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/app/__init__.py +0 -0
  370. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/app/base.py +0 -0
  371. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/app/win32.py +0 -0
  372. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/app/xlib.py +0 -0
  373. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/clock.py +0 -0
  374. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/customtypes.py +0 -0
  375. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/__init__.py +0 -0
  376. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/__init__.pyi +0 -0
  377. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/base.py +0 -0
  378. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/cocoa.py +0 -0
  379. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/headless.py +0 -0
  380. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/display/xlib.py +0 -0
  381. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/event.py +0 -0
  382. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/experimental/README.md +0 -0
  383. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/experimental/geoshader_sprite.py +0 -0
  384. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/experimental/hidraw.py +0 -0
  385. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/experimental/jobs.py +0 -0
  386. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/experimental/multitexture_sprite.py +0 -0
  387. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/experimental/net.py +0 -0
  388. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/experimental/particles.py +0 -0
  389. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/extlibs/__init__.py +0 -0
  390. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/extlibs/png.py +0 -0
  391. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/font/ttf.py +0 -0
  392. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/__init__.py +0 -0
  393. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/agl.py +0 -0
  394. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/base.py +0 -0
  395. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/cocoa.py +0 -0
  396. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/gl.py +0 -0
  397. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/gl_compat.py +0 -0
  398. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/gl_info.py +0 -0
  399. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/glx.py +0 -0
  400. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/glx_info.py +0 -0
  401. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/glxext_arb.py +0 -0
  402. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/glxext_mesa.py +0 -0
  403. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/glxext_nv.py +0 -0
  404. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/headless.py +0 -0
  405. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/lib.py +0 -0
  406. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/lib_agl.py +0 -0
  407. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/lib_glx.py +0 -0
  408. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/lib_wgl.py +0 -0
  409. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/wgl_info.py +0 -0
  410. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/win32.py +0 -0
  411. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gl/xlib.py +0 -0
  412. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/graphics/__init__.py +0 -0
  413. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/graphics/allocation.py +0 -0
  414. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/graphics/instance.py +0 -0
  415. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/graphics/shader.py +0 -0
  416. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/graphics/vertexarray.py +0 -0
  417. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/graphics/vertexbuffer.py +0 -0
  418. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/graphics/vertexdomain.py +0 -0
  419. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gui/__init__.py +0 -0
  420. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gui/frame.py +0 -0
  421. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/gui/ninepatch.py +0 -0
  422. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/__init__.py +0 -0
  423. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/animation.py +0 -0
  424. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/atlas.py +0 -0
  425. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/buffer.py +0 -0
  426. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/__init__.py +0 -0
  427. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/dds.py +0 -0
  428. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/gdkpixbuf2.py +0 -0
  429. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/gif.py +0 -0
  430. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/pil.py +0 -0
  431. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/png.py +0 -0
  432. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/quartz.py +0 -0
  433. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/image/codecs/s3tc.py +0 -0
  434. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/info.py +0 -0
  435. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/__init__.py +0 -0
  436. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/controller.py +0 -0
  437. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/controller_db.py +0 -0
  438. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/linux/__init__.py +0 -0
  439. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/linux/evdev.py +0 -0
  440. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/linux/evdev_constants.py +0 -0
  441. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/linux/x11_xinput.py +0 -0
  442. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/linux/x11_xinput_tablet.py +0 -0
  443. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/macos/__init__.py +0 -0
  444. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/win32/__init__.py +0 -0
  445. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/input/win32/wintab.py +0 -0
  446. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/__init__.py +0 -0
  447. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/darwin/__init__.py +0 -0
  448. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/darwin/cocoapy/__init__.py +0 -0
  449. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/darwin/cocoapy/cocoatypes.py +0 -0
  450. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/darwin/cocoapy/runtime.py +0 -0
  451. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/darwin/quartzkey.py +0 -0
  452. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/egl/__init__.py +0 -0
  453. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/egl/egl.py +0 -0
  454. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/egl/eglext.py +0 -0
  455. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/egl/lib.py +0 -0
  456. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/ioctl.py +0 -0
  457. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/wayland/__init__.py +0 -0
  458. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/wayland/gbm.py +0 -0
  459. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/wayland/xkbcommon.py +0 -0
  460. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/context_managers.py +0 -0
  461. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/libwintab.py +0 -0
  462. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/win32/winkey.py +0 -0
  463. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/x11/__init__.py +0 -0
  464. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/x11/cursorfont.py +0 -0
  465. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/x11/xf86vmode.py +0 -0
  466. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/x11/xinerama.py +0 -0
  467. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/x11/xinput.py +0 -0
  468. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/x11/xlib.py +0 -0
  469. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/libs/x11/xsync.py +0 -0
  470. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/math.py +0 -0
  471. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/__init__.py +0 -0
  472. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/buffered_logger.py +0 -0
  473. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/__init__.py +0 -0
  474. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/base.py +0 -0
  475. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg.py +0 -0
  476. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg_lib/__init__.py +0 -0
  477. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg_lib/compat.py +0 -0
  478. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg_lib/libavcodec.py +0 -0
  479. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg_lib/libavformat.py +0 -0
  480. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg_lib/libavutil.py +0 -0
  481. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg_lib/libswresample.py +0 -0
  482. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/ffmpeg_lib/libswscale.py +0 -0
  483. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/gstreamer.py +0 -0
  484. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/pyogg.py +0 -0
  485. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/codecs/wave.py +0 -0
  486. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/devices/__init__.py +0 -0
  487. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/devices/base.py +0 -0
  488. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/__init__.py +0 -0
  489. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/base.py +0 -0
  490. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/directsound/__init__.py +0 -0
  491. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/directsound/adaptation.py +0 -0
  492. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/directsound/exceptions.py +0 -0
  493. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/directsound/interface.py +0 -0
  494. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/listener.py +0 -0
  495. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/openal/__init__.py +0 -0
  496. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/openal/adaptation.py +0 -0
  497. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/openal/interface.py +0 -0
  498. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/openal/lib_alc.py +0 -0
  499. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/openal/lib_openal.py +0 -0
  500. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/pulse/__init__.py +0 -0
  501. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/pulse/adaptation.py +0 -0
  502. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/pulse/interface.py +0 -0
  503. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/pulse/lib_pulseaudio.py +0 -0
  504. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/silent/__init__.py +0 -0
  505. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/silent/adaptation.py +0 -0
  506. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/xaudio2/__init__.py +0 -0
  507. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/drivers/xaudio2/adaptation.py +0 -0
  508. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/exceptions.py +0 -0
  509. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/instrumentation.py +0 -0
  510. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/player.py +0 -0
  511. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/player_worker_thread.py +0 -0
  512. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/media/synthesis.py +0 -0
  513. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/model/__init__.py +0 -0
  514. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/model/codecs/__init__.py +0 -0
  515. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/model/codecs/base.py +0 -0
  516. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/model/codecs/gltf.py +0 -0
  517. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/model/codecs/obj.py +0 -0
  518. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/py.typed +0 -0
  519. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/resource.py +0 -0
  520. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/sprite.py +0 -0
  521. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/__init__.py +0 -0
  522. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/caret.py +0 -0
  523. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/formats/__init__.py +0 -0
  524. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/formats/html.py +0 -0
  525. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/text/layout/__init__.py +0 -0
  526. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/util.py +0 -0
  527. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/__init__.py +0 -0
  528. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/cocoa/__init__.py +0 -0
  529. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/cocoa/pyglet_delegate.py +0 -0
  530. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/cocoa/pyglet_textview.py +0 -0
  531. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/cocoa/pyglet_view.py +0 -0
  532. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/cocoa/pyglet_window.py +0 -0
  533. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/cocoa/systemcursor.py +0 -0
  534. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/event.py +0 -0
  535. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/headless/__init__.py +0 -0
  536. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/key.py +0 -0
  537. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/mouse.py +0 -0
  538. {pyglet-2.1.3 → pyglet-2.1.4}/pyglet/window/xlib/__init__.py +0 -0
  539. {pyglet-2.1.3 → pyglet-2.1.4}/pytest.ini +0 -0
  540. {pyglet-2.1.3 → pyglet-2.1.4}/setup.py +0 -0
  541. {pyglet-2.1.3 → pyglet-2.1.4}/tests/__init__.py +0 -0
  542. {pyglet-2.1.3 → pyglet-2.1.4}/tests/annotations.py +0 -0
  543. {pyglet-2.1.3 → pyglet-2.1.4}/tests/base/__init__.py +0 -0
  544. {pyglet-2.1.3 → pyglet-2.1.4}/tests/base/data.py +0 -0
  545. {pyglet-2.1.3 → pyglet-2.1.4}/tests/base/event_loop.py +0 -0
  546. {pyglet-2.1.3 → pyglet-2.1.4}/tests/base/interactive.py +0 -0
  547. {pyglet-2.1.3 → pyglet-2.1.4}/tests/base/performance.py +0 -0
  548. {pyglet-2.1.3 → pyglet-2.1.4}/tests/conftest.py +0 -0
  549. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/fonts/README +0 -0
  550. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/fonts/action_man.ttf +0 -0
  551. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/fonts/action_man_bold.ttf +0 -0
  552. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/fonts/action_man_bold_italic.ttf +0 -0
  553. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/fonts/action_man_italic.ttf +0 -0
  554. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/fonts/courR12-ISO8859-1.pcf +0 -0
  555. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/8bpp.gif +0 -0
  556. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/cursor.png +0 -0
  557. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/dinosaur.gif +0 -0
  558. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/gdk_close.png +0 -0
  559. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/grey_background.png +0 -0
  560. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/icon1.png +0 -0
  561. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/icon_size1.png +0 -0
  562. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/icon_size2.png +0 -0
  563. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/icon_size3.png +0 -0
  564. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/icon_size4.png +0 -0
  565. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/icon_size5.png +0 -0
  566. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/l.png +0 -0
  567. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/la.png +0 -0
  568. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/multitexture.png +0 -0
  569. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb.png +0 -0
  570. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_16bpp.bmp +0 -0
  571. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_1bpp.bmp +0 -0
  572. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_24bpp.bmp +0 -0
  573. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_32bpp.bmp +0 -0
  574. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_4bpp.bmp +0 -0
  575. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_8bpp.bmp +0 -0
  576. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_8bpp.png +0 -0
  577. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_8bpp_trans.png +0 -0
  578. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgb_dxt1.dds +0 -0
  579. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgba.png +0 -0
  580. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgba_32bpp.bmp +0 -0
  581. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgba_dxt1.dds +0 -0
  582. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgba_dxt3.dds +0 -0
  583. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/rgba_dxt5.dds +0 -0
  584. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/images/tests.interactive.test_interactive_test_base._Test.test_1.001.png +0 -0
  585. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/README +0 -0
  586. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/alert.wav +0 -0
  587. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/login.wav +0 -0
  588. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/logout.wav +0 -0
  589. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/receive.wav +0 -0
  590. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/send.wav +0 -0
  591. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_sawtooth_16_11025_1ch.wav +0 -0
  592. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_sawtooth_16_44800_1ch.wav +0 -0
  593. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_silence_16_11025_1ch.wav +0 -0
  594. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_silence_16_44800_1ch.wav +0 -0
  595. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_simplefm_16_11025_1ch.wav +0 -0
  596. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_simplefm_16_44800_1ch.wav +0 -0
  597. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_sine_16_11025_1ch.wav +0 -0
  598. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_sine_16_44800_1ch.wav +0 -0
  599. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_square_16_11025_1ch.wav +0 -0
  600. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_square_16_44800_1ch.wav +0 -0
  601. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_triangle_16_11025_1ch.wav +0 -0
  602. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/media/synthesis_triangle_16_44800_1ch.wav +0 -0
  603. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/models/logo3d.mtl +0 -0
  604. {pyglet-2.1.3 → pyglet-2.1.4}/tests/data/models/logo3d.obj +0 -0
  605. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/__init__.py +0 -0
  606. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/app/__init__.py +0 -0
  607. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/app/test_eventloop.py +0 -0
  608. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/conftest.py +0 -0
  609. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/font/test_fontconfig.py +0 -0
  610. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/graphics/__init__.py +0 -0
  611. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/graphics/test_allocation.py +0 -0
  612. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/graphics/test_batch_migration.py +0 -0
  613. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/graphics/test_shaders.py +0 -0
  614. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/image/__init__.py +0 -0
  615. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/image/test_gdkpixbuf2.py +0 -0
  616. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/image/test_imagegrid.py +0 -0
  617. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/image/test_texture3d.py +0 -0
  618. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/media/__init__.py +0 -0
  619. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/media/mock_player.py +0 -0
  620. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/media/test_directsound.py +0 -0
  621. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/media/test_driver.py +0 -0
  622. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/media/test_openal.py +0 -0
  623. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/media/test_player.py +0 -0
  624. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/media/test_pulse.py +0 -0
  625. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/model/__init__.py +0 -0
  626. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/model/test_loading.py +0 -0
  627. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/platform/__init__.py +0 -0
  628. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/platform/test_win_context_managers.py +0 -0
  629. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/platform/test_win_multicore_clock.py +0 -0
  630. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/__init__.py +0 -0
  631. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/dir1/dir1/f3.txt +0 -0
  632. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/dir1/f2.txt +0 -0
  633. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/dir1/res.zip +0 -0
  634. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/dir2/f6.txt +0 -0
  635. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/f1.txt +0 -0
  636. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/rgbm.png +0 -0
  637. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/test_resource_image_loading.py +0 -0
  638. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/resource/test_resource_loading.py +0 -0
  639. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/test_integrations.py +0 -0
  640. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/text/__init__.py +0 -0
  641. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/text/test_empty_document.py +0 -0
  642. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/text/test_label_creation.py +0 -0
  643. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/text/test_layout_creation.py +0 -0
  644. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/window/__init__.py +0 -0
  645. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/window/test_context_share.py +0 -0
  646. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/window/test_event_sequence.py +0 -0
  647. {pyglet-2.1.3 → pyglet-2.1.4}/tests/integration/window/test_window_caption.py +0 -0
  648. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/__init__.py +0 -0
  649. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/conftest.py +0 -0
  650. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/image/__init__.py +0 -0
  651. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/image/test_image.py +0 -0
  652. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/media/__init__.py +0 -0
  653. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/media/test_player.py +0 -0
  654. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/screenshots/committed/README +0 -0
  655. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/screenshots/session/README +0 -0
  656. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/shapes/test_shapes.py +0 -0
  657. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/test_interactive_test_base.py +0 -0
  658. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/text/__init__.py +0 -0
  659. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/__init__.py +0 -0
  660. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/test_window_events.py +0 -0
  661. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/test_window_fullscreen.py +0 -0
  662. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/test_window_modes.py +0 -0
  663. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/test_window_multisample.py +0 -0
  664. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/test_window_open.py +0 -0
  665. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/test_window_settings.py +0 -0
  666. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/test_window_styles.py +0 -0
  667. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/window/window_util.py +0 -0
  668. {pyglet-2.1.3 → pyglet-2.1.4}/tests/interactive/windowed_test_base.py +0 -0
  669. {pyglet-2.1.3 → pyglet-2.1.4}/tests/requirements.txt +0 -0
  670. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/__init__.py +0 -0
  671. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/conftest.py +0 -0
  672. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/math/test_mat.py +0 -0
  673. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/math/test_quat.py +0 -0
  674. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/math/test_vec2.py +0 -0
  675. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/math/test_vec3.py +0 -0
  676. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/math/test_vec4.py +0 -0
  677. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/media/__init__.py +0 -0
  678. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/media/test_listener.py +0 -0
  679. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/media/test_player.py +0 -0
  680. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/media/test_sources.py +0 -0
  681. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/media/test_synthesis.py +0 -0
  682. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/platform/__init__.py +0 -0
  683. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/platform/test_mac_objc.py +0 -0
  684. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/shader/__init__.py +0 -0
  685. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/shader/conftest.py +0 -0
  686. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/shader/test_shader.py +0 -0
  687. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/shapes/__init__.py +0 -0
  688. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/shapes/conftest.py +0 -0
  689. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/shapes/test_bordered_rectangle.py +0 -0
  690. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/shapes/test_shapes.py +0 -0
  691. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_atlas.py +0 -0
  692. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_clock.py +0 -0
  693. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_clock_freq.py +0 -0
  694. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_events.py +0 -0
  695. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_font.py +0 -0
  696. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_input.py +0 -0
  697. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_resource_path.py +0 -0
  698. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_sprite.py +0 -0
  699. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/test_text.py +0 -0
  700. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/text/__init__.py +0 -0
  701. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/text/test_caret.py +0 -0
  702. {pyglet-2.1.3 → pyglet-2.1.4}/tests/unit/text/test_layout.py +0 -0
  703. {pyglet-2.1.3 → pyglet-2.1.4}/tools/al_info.py +0 -0
  704. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/bokeh_timeline.py +0 -0
  705. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/compare.py +0 -0
  706. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/configure.py +0 -0
  707. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/extractors.py +0 -0
  708. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/fs.py +0 -0
  709. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/mp.py +0 -0
  710. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/mpexceptions.py +0 -0
  711. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/playmany.py +0 -0
  712. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/readme_ffmpeg_debbuging_branch.txt +0 -0
  713. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/readme_run_tests.txt +0 -0
  714. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/report.py +0 -0
  715. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/reports.py +0 -0
  716. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/retry_crashed.py +0 -0
  717. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/run_test_suite.py +0 -0
  718. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/summarize.py +0 -0
  719. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/test_instrumentation.py +0 -0
  720. {pyglet-2.1.3 → pyglet-2.1.4}/tools/ffmpeg/timeline.py +0 -0
  721. {pyglet-2.1.3 → pyglet-2.1.4}/tools/gencontrollerdb.py +0 -0
  722. {pyglet-2.1.3 → pyglet-2.1.4}/tools/gengl.py +0 -0
  723. {pyglet-2.1.3 → pyglet-2.1.4}/tools/genwrappers.py +0 -0
  724. {pyglet-2.1.3 → pyglet-2.1.4}/tools/gl.template +0 -0
  725. {pyglet-2.1.3 → pyglet-2.1.4}/tools/gl.xml +0 -0
  726. {pyglet-2.1.3 → pyglet-2.1.4}/tools/gl_info.py +0 -0
  727. {pyglet-2.1.3 → pyglet-2.1.4}/tools/inspect_font.py +0 -0
  728. {pyglet-2.1.3 → pyglet-2.1.4}/tools/requirements.txt +0 -0
  729. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wgl.h +0 -0
  730. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wraptypes/__init__.py +0 -0
  731. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wraptypes/cparser.py +0 -0
  732. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wraptypes/ctypesparser.py +0 -0
  733. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wraptypes/lex.py +0 -0
  734. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wraptypes/preprocessor.py +0 -0
  735. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wraptypes/wrap.py +0 -0
  736. {pyglet-2.1.3 → pyglet-2.1.4}/tools/wraptypes/yacc.py +0 -0
  737. {pyglet-2.1.3 → pyglet-2.1.4}/website/LICENSE.txt +0 -0
  738. {pyglet-2.1.3 → pyglet-2.1.4}/website/README.rst +0 -0
  739. {pyglet-2.1.3 → pyglet-2.1.4}/website/assets/favicon.ico +0 -0
  740. {pyglet-2.1.3 → pyglet-2.1.4}/website/assets/static/css/example-custom-styles.css +0 -0
  741. {pyglet-2.1.3 → pyglet-2.1.4}/website/assets/static/images/pyglet.png +0 -0
  742. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/404.html/contents.lr +0 -0
  743. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/404.html/ngc-5793.jpg +0 -0
  744. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/authors/benjamin/contents.lr +0 -0
  745. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/authors/benjamin/pyglet.png +0 -0
  746. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/authors/contents.lr +0 -0
  747. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/blog/contents.lr +0 -0
  748. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/blog/welcome-blog/contents.lr +0 -0
  749. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/contents.lr +0 -0
  750. {pyglet-2.1.3 → pyglet-2.1.4}/website/content/eclipse.jpg +0 -0
  751. {pyglet-2.1.3 → pyglet-2.1.4}/website/pyglet.lektorproject +0 -0
  752. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/AUTHORS.txt +0 -0
  753. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/CHANGELOG.md +0 -0
  754. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/CONTRIBUTING.md +0 -0
  755. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/LICENSE.txt +0 -0
  756. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/NOTICE.txt +0 -0
  757. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/README.md +0 -0
  758. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/css/bootstrap.css +0 -0
  759. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/css/icomoon.css +0 -0
  760. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/css/magnific-popup.css +0 -0
  761. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/css/style.css +0 -0
  762. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
  763. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
  764. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
  765. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.ttf +0 -0
  766. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.woff +0 -0
  767. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/images/Preloader_2.gif +0 -0
  768. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/images/placeholder_person.png +0 -0
  769. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/jquery-3.3.1.min.js +0 -0
  770. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/jquery.easing.min.js +0 -0
  771. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/jquery.magnific-popup.min.js +0 -0
  772. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/jquery.stellar.js +0 -0
  773. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/jquery.stellar.min.js +0 -0
  774. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/jquery.waypoints.min.js +0 -0
  775. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/magnific-popup-options.js +0 -0
  776. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/main-singlelayout.js +0 -0
  777. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/assets/static/js/main.js +0 -0
  778. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/content.ini +0 -0
  779. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/gallery.ini +0 -0
  780. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/gallery_item.ini +0 -0
  781. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/member.ini +0 -0
  782. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/mission.ini +0 -0
  783. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/mission_tab.ini +0 -0
  784. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/service.ini +0 -0
  785. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/services.ini +0 -0
  786. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/flowblocks/team.ini +0 -0
  787. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/images/blog-index.png +0 -0
  788. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/images/full-blog.png +0 -0
  789. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/images/full-page.png +0 -0
  790. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/images/gallery-404.png +0 -0
  791. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/images/gallery-singlepage.png +0 -0
  792. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/images/mainpage-screenshots.png +0 -0
  793. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/images/responsive-layout.png +0 -0
  794. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/models/404.ini +0 -0
  795. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/models/author.ini +0 -0
  796. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/models/authors.ini +0 -0
  797. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/models/blog-post.ini +0 -0
  798. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/models/blog.ini +0 -0
  799. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/models/page.ini +0 -0
  800. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/models/single-layout.ini +0 -0
  801. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/404.html +0 -0
  802. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/author.html +0 -0
  803. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/authors.html +0 -0
  804. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blocks/content.html +0 -0
  805. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blocks/gallery.html +0 -0
  806. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blocks/mission.html +0 -0
  807. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blocks/services.html +0 -0
  808. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blocks/team.html +0 -0
  809. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blog-layout.html +0 -0
  810. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blog-post.html +0 -0
  811. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/blog.html +0 -0
  812. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/layout.html +0 -0
  813. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/macros/blog.html +0 -0
  814. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/macros/pagination.html +0 -0
  815. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/none.html +0 -0
  816. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/page.html +0 -0
  817. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/templates/single-layout.html +0 -0
  818. {pyglet-2.1.3 → pyglet-2.1.4}/website/themes/lektor-icon/theme.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: pyglet
3
- Version: 2.1.3
3
+ Version: 2.1.4
4
4
  Summary: pyglet is a cross-platform games and multimedia package.
5
5
  Author-email: Alex Holkner & contributors <Alex.Holkner@gmail.com>
6
6
  Requires-Python: >=3.8
@@ -1,3 +1,24 @@
1
+ pyglet 2.1.4
2
+
3
+ Changes
4
+ -------
5
+ - docs: Add shape guide crossrefs (#1291)
6
+ - Updated the opengl torus example to work with the material updates in 3.1 (#1281)
7
+ - Add homebrew lib search location for Apple Silicon.
8
+ - Bump Qt example to use PySide6 and PyQt6 (#1305)
9
+
10
+ Bugfixes
11
+ --------
12
+ - shapes.earcut: Fix int casting bug for large polygons (#1282)
13
+ - Linux: Use dotclock instead of rate in xlib vidmoderestore (#1285)
14
+ - tests: Fix many interactive tests, and other test fixes
15
+ - app: Fix run(None) crashing on macOS
16
+ - docs: Correct the docstring for the start_angle of an arc to indicate it is in degrees and not radians (#1290)
17
+ - controller: Fix dpad bias for controller.min > 0 (#1296)
18
+ - controller: Only use 0x1 desktop page axis for controller indexing on macOS (#1297)
19
+ - gui: Fix the position range of the slider knob when repositioning the slider (#1299)
20
+
21
+
1
22
  pyglet 2.1.3
2
23
 
3
24
  Changes
@@ -1,44 +1,45 @@
1
1
  """An example sprite previewer using Qt and pyglet together.
2
2
 
3
3
  It allows you to edit the fragment and vertex shaders, then compile them
4
- to get a live view. Errors and success will be printed to the console.
5
- A brief feature overview is located after the license notes below.
6
-
4
+ to get a live view. Errors and success will be printed to the console. Users
5
+ running GNOME on Linux may need the --use-qt-file-dialog flag to prevent invisible
6
+ window issues. A brief feature overview is located after the license notes below.
7
7
 
8
8
  Important license notes:
9
9
 
10
10
  1. Libraries can use licenses which impose requirements beyond those of
11
11
  pyglet's BSD-style style license.
12
- 2. This example defaults to using PySide2 by default, but can also use
13
- PyQt5 due to their nearly-identical APIs.
14
- 3. PySide2 uses the LGPL license while PyQt5 uses a GPL / commercial
12
+ 2. This example defaults to using PySide6 by default, but can also use
13
+ PyQt6 due to their nearly-identical APIs.
14
+ 3. PySide6 uses the LGPL license while PyQt6 uses a GPL / commercial
15
15
  dual-license approach.
16
16
 
17
17
  To the best knowledge of the contributors, this example and derivatives
18
18
  are only obligated to meet the restrictions of the LGPL because it does
19
- not use any PyQt5-specific features. Please see the following for more
19
+ not use any PyQt6-specific features. Please see the following for more
20
20
  information:
21
21
 
22
22
  * The licenses and documentation for the libraries you plan to use
23
- * https://www.pythonguis.com/faq/pyqt5-vs-pyside2/
23
+ * This guide for prior versions of PySide and PyQt:
24
+ thttps://www.pythonguis.com/faq/pyqt5-vs-pyside2/
24
25
 
25
- If you need additional certainty, please consult a legal professional.
26
+ For additional certainty, please consult a legal professional.
26
27
 
27
28
 
28
29
  Example features:
29
30
 
30
31
  You can choose the current Qt binding in two ways:
31
32
 
32
- 1. Add PySide2 or PyQt5 as the first argument after the launch command
33
+ 1. Add PySide6 or PyQt6 as the first argument after the launch command
33
34
  when running the script in the terminal
34
- 2. Set the PYGLET_QT_BACKEND environment variable to either PySide2 or
35
- PyQt5.
35
+ 2. Set the PYGLET_QT_BACKEND environment variable to either PySide6 or
36
+ PyQt6.
36
37
 
37
38
  The priority order is:
38
39
 
39
40
  1. positional argument
40
41
  2. environment variable
41
- 3. default to PySide2
42
+ 3. default to PySide6
42
43
 
43
44
  To load images, choose File -> Open Image.
44
45
 
@@ -65,17 +66,17 @@ from typing import TYPE_CHECKING, Final, Mapping
65
66
  # Constants for choosing a Qt backend and summarizing their licensing
66
67
  ENV_VARIABLE: Final[str] = 'PYGLET_QT_BACKEND'
67
68
 
68
- PYSIDE2: Final[str] = 'PySide2'
69
- PYQT5: Final[str] = 'PyQt5'
69
+ PYSIDE6: Final[str] = 'PySide6'
70
+ PYQT6: Final[str] = 'PyQt6'
70
71
 
71
72
  valid_backends: Final[dict[str, str]] = {
72
- PYSIDE2: "LGPL; may allow releasing under non-GPL licenses",
73
- PYQT5: "Dual GPL / Commercial license; requires GPL or a fee",
73
+ PYSIDE6: "LGPL; may allow releasing under non-GPL licenses",
74
+ PYQT6: "Dual GPL / Commercial license; requires GPL or a fee",
74
75
  }
75
76
 
76
- # Default to PySide2 as part of allowing non-GPL licenses
77
+ # Default to PySide6 as part of allowing non-GPL licenses
77
78
  # This is necessary but not sufficient to allow this.
78
- DEFAULT: Final[str] = PYSIDE2
79
+ DEFAULT: Final[str] = PYSIDE6
79
80
 
80
81
 
81
82
  # Argument parser for run-time config as __main__
@@ -83,8 +84,8 @@ parser = argparse.ArgumentParser(
83
84
  description=dedent("""\
84
85
  A sprite & shader previewer using Qt and pyglet together.
85
86
 
86
- It defaults to PySide2, but can run on PyQt5. The details of how may
87
- be helpful to users who want to avoid spreading PyQt5's GPL license
87
+ It defaults to PySide6, but can run on PyQt6. The details of how may
88
+ be helpful to users who want to avoid spreading PyQt6's GPL license
88
89
  while using it as a fallback. See the docstrings and comments in the
89
90
  source to learn more.
90
91
  """),
@@ -138,19 +139,21 @@ print(f"Selected {backend} as the Qt binding from the {reason}'s value.")
138
139
  # Perform UI imports according to the detected configuration
139
140
  import pyglet
140
141
 
141
- # Use PySide2 for type checking, static analysis, tests, and linting
142
- # to help avoid infection by PyQt5's GPL license since tools will mark
143
- # uses of PyQt5-specific features as missing. For example, pyright is
142
+ # Use PySide6 for type checking, static analysis, tests, and linting
143
+ # to help avoid infection by PyQt6's GPL license since tools will mark
144
+ # uses of PyQt6-specific features as missing. For example, pyright is
144
145
  # one of the strict type checking and linting tools which can help.
145
- if TYPE_CHECKING or backend == PYSIDE2:
146
- from PySide2 import QtCore, QtWidgets
147
- from PySide2.QtGui import QWheelEvent
148
- from PySide2.QtWidgets import QFileDialog, QOpenGLWidget
149
-
150
- elif backend == PYQT5:
151
- from PyQt5 import QtCore, QtWidgets
152
- from PyQt5.QtGui import QWheelEvent
153
- from PyQt5.QtWidgets import QFileDialog, QOpenGLWidget
146
+ if TYPE_CHECKING or backend == PYSIDE6:
147
+ from PySide6 import QtCore, QtWidgets, QtGui
148
+ from PySide6.QtGui import QWheelEvent
149
+ from PySide6.QtWidgets import QFileDialog
150
+ from PySide6.QtOpenGLWidgets import QOpenGLWidget
151
+
152
+ elif backend == PYQT6:
153
+ from PyQt6 import QtCore, QtWidgets, QtGui
154
+ from PyQt6.QtGui import QWheelEvent
155
+ from PyQt6.QtWidgets import QFileDialog
156
+ from PyQt6.QtOpenGLWidgets import QOpenGLWidget
154
157
 
155
158
  else: # Handle import edge cases
156
159
  raise ValueError(
@@ -348,7 +351,7 @@ class Ui_MainWindow:
348
351
  self.sprite = None
349
352
  self.program = None
350
353
 
351
- def get_file_dialog_options(self) -> QFileDialog.Options:
354
+ def get_file_dialog_options(self) -> QFileDialog.Option:
352
355
  """Convert instance attributes to a file dialog options object.
353
356
 
354
357
  At the moment, it supports choosing which dialog to use. This is
@@ -358,9 +361,9 @@ class Ui_MainWindow:
358
361
  You may want to expand on this in your own application with
359
362
  additional options.
360
363
  """
361
- options = QFileDialog.Options()
364
+ options = QFileDialog.Option()
362
365
  if not self.use_native_file_dialog:
363
- options |= QFileDialog.DontUseNativeDialog
366
+ options |= QFileDialog.Option.DontUseNativeDialog
364
367
 
365
368
  return options
366
369
 
@@ -383,7 +386,10 @@ class Ui_MainWindow:
383
386
  self.verticalLayout = QtWidgets.QVBoxLayout()
384
387
  self.verticalLayout.setObjectName("verticalLayout")
385
388
  self.label = QtWidgets.QLabel(self.centralwidget)
386
- self.label.setAlignment(QtCore.Qt.AlignLeading | QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter)
389
+ self.label.setAlignment(
390
+ QtCore.Qt.AlignmentFlag.AlignLeading
391
+ | QtCore.Qt.AlignmentFlag.AlignLeft
392
+ | QtCore.Qt.AlignmentFlag.AlignVCenter)
387
393
  self.label.setObjectName("label")
388
394
  self.verticalLayout.addWidget(self.label)
389
395
  self.vertex_source_edit = QtWidgets.QTextEdit(self.centralwidget)
@@ -428,23 +434,23 @@ class Ui_MainWindow:
428
434
  MainWindow.setStatusBar(self.statusbar)
429
435
 
430
436
  # Add menu bar menus, entries, and hotkeys
431
- self.actionOpen_Image = QtWidgets.QAction(MainWindow)
437
+ self.actionOpen_Image = QtGui.QAction(MainWindow)
432
438
  self.actionOpen_Image.setObjectName("actionOpen_Image")
433
439
  self.actionOpen_Image.triggered.connect(self.loadImages)
434
440
  self.actionOpen_Image.setShortcut("Ctrl+I")
435
441
 
436
- self.actionOpen_Shader = QtWidgets.QAction(MainWindow)
442
+ self.actionOpen_Shader = QtGui.QAction(MainWindow)
437
443
  self.actionOpen_Shader.setObjectName("actionOpen_Shader")
438
444
  self.actionOpen_Shader.triggered.connect(self.loadShaders)
439
445
  self.actionOpen_Shader.setShortcut("Ctrl+O")
440
446
 
441
- self.actionSave_Shader = QtWidgets.QAction(MainWindow)
447
+ self.actionSave_Shader = QtGui.QAction(MainWindow)
442
448
  self.actionSave_Shader.setObjectName("actionSave_Shader")
443
449
  self.actionSave_Shader.triggered.connect(self.saveShaders)
444
450
  self.actionSave_Shader.setStatusTip('Saves both Shader Files')
445
451
  self.actionSave_Shader.setShortcut("Ctrl+S")
446
452
 
447
- self.actionExit = QtWidgets.QAction(MainWindow)
453
+ self.actionExit = QtGui.QAction(MainWindow)
448
454
  self.actionExit.triggered.connect(self.closeProgram)
449
455
  self.actionExit.setObjectName("actionExit")
450
456
  self.menuFile.addAction(self.actionOpen_Image)
@@ -457,7 +463,7 @@ class Ui_MainWindow:
457
463
 
458
464
  self.imageMenu = QtWidgets.QMenu(self.menubar)
459
465
  self.imageMenu.setObjectName("imageMenu")
460
- self.noImageAction = QtWidgets.QAction(MainWindow)
466
+ self.noImageAction = QtGui.QAction(MainWindow)
461
467
  self.noImageAction.setDisabled(True)
462
468
  self.imageMenu.addAction(self.noImageAction)
463
469
 
@@ -518,7 +524,7 @@ class Ui_MainWindow:
518
524
  if not self.images:
519
525
  self.imageMenu.removeAction(self.noImageAction)
520
526
 
521
- action = QtWidgets.QAction(self._window)
527
+ action = QtGui.QAction(self._window)
522
528
  shader_name = f"sprite_texture{len(self.images)}"
523
529
  action.setText(f"{os.path.basename(fileName)} ({shader_name})")
524
530
  action.fileName = fileName
@@ -565,7 +571,7 @@ class Ui_MainWindow:
565
571
  vert_filename.write_text(self.vertex_source_edit.toPlainText())
566
572
  frag_filename.write_text(self.fragSourceEdit.toPlainText())
567
573
 
568
- def removeImage(self, actionWidget: QtWidgets.QAction) -> None:
574
+ def removeImage(self, actionWidget: QtGui.QAction) -> None:
569
575
  if self.imageMenu:
570
576
  self.imageMenu.removeAction(actionWidget)
571
577
 
@@ -775,4 +781,4 @@ if __name__ == "__main__":
775
781
  sys.excepthook = excepthook
776
782
 
777
783
  # Start the application and return its exit code
778
- sys.exit(app.exec_())
784
+ sys.exit(app.exec())
@@ -6,6 +6,8 @@ All pyglet windows can receive input from a 3 button mouse with a
6
6
  operating system, but you can override this and request either a different
7
7
  cursor shape or provide your own image or animation.
8
8
 
9
+ .. _guide_mouse_events:
10
+
9
11
  Mouse events
10
12
  ------------
11
13
 
@@ -0,0 +1,162 @@
1
+ Drawing Shapes
2
+ ==============
3
+
4
+ .. _guide_shapes:
5
+
6
+
7
+ The :py:mod:`~pyglet.shapes` module is an easy to use option for creating
8
+ and manipulating colored shapes, such as rectangles, circles, and
9
+ lines. Shapes can be resized, positioned, and rotated where applicable,
10
+ and their color and opacity can be changed. All shapes are implemented
11
+ using OpenGL primitives, so they can be drawn efficiently with :ref:`guide_batched-rendering`.
12
+ In the following examples `Batch` will be ommitted for brevity, but in
13
+ general you always want to use Batched rendering for performance.
14
+
15
+ For drawing more complex shapes, see the :ref:`guide_graphics` module.
16
+
17
+
18
+ Creating a Shape
19
+ ----------------
20
+
21
+ Various shapes can be constructed with a specific position, size, and color::
22
+
23
+ circle = shapes.Circle(x=100, y=150, radius=100, color=(50, 225, 30))
24
+ square = shapes.Rectangle(x=200, y=200, width=200, height=200, color=(55, 55, 255))
25
+
26
+ You can also change the color, or set the opacity after creation. The opacity
27
+ can be set on a scale of 0-255, for various levels of transparency::
28
+
29
+ circle.opacity = 120
30
+
31
+ The size of Shapes can also be adjusted after creation::
32
+
33
+ square.width = 200
34
+ circle.radius = 99
35
+
36
+
37
+ Anchor Points
38
+ ^^^^^^^^^^^^^
39
+
40
+ Similar to images in pyglet, the "anchor point" of a Shape can be set.
41
+ This relates to the center of the shape on the x and y axis. For Circles,
42
+ the default anchor point is the center of the circle. For Rectangles,
43
+ it is the bottom left corner. Depending on how you need to position your
44
+ Shapes, this can be changed. For Rectangles this is especially useful if
45
+ you will rotate it, since Shapes will rotate around the anchor point. In
46
+ this example, a Rectangle is created, and the anchor point is then set to
47
+ the center::
48
+
49
+ rectangle = shapes.Rectangle(x=400, y=400, width=100, height=50)
50
+ rectangle.anchor_x = 50
51
+ rectangle.anchor_y = 25
52
+ # or, set at the same time:
53
+ rectangle.anchor_position = 50, 25
54
+
55
+ # The rectangle is then rotated around its anchor point:
56
+ rectangle.rotation = 45
57
+
58
+ If you plan to create a large number of shapes, you can optionally set the
59
+ default anchor points::
60
+
61
+ shapes.Rectangle._anchor_x = 100
62
+ shapes.Rectangle._anchor_y = 50
63
+
64
+ Advanced Operation
65
+ ------------------
66
+
67
+ .. _guide_shapes-bounding:
68
+
69
+ Shape Bounding Checks
70
+ ^^^^^^^^^^^^^^^^^^^^^
71
+
72
+ Some shapes can check whether an instance contains a 2D point via Python's ``in`` operator.
73
+
74
+ The point can be any :py:class:`tuple` of two numbers:
75
+
76
+ .. code-block:: python
77
+
78
+ from pyglet.shapes import Circle
79
+
80
+ # Create a circle
81
+ circle = shapes.Circle(x=100, y=100, radius=50)
82
+
83
+ # Turn the circle red if (200, 200) is inside it
84
+ if (200, 200) in circle:
85
+ circle.color = (255, 0, 0)
86
+
87
+
88
+ Bounding Checks Are In World Space
89
+ """"""""""""""""""""""""""""""""""
90
+
91
+ If you move or alter your viewport, you must account for this when
92
+ checking coordinates from :ref:`mouse events <guide_mouse_events>`.
93
+ You may find :py:class:`~pyglet.math.Vec2` helpful for this since
94
+ it is a subclass of :py:class:`tuple`.
95
+
96
+ .. _guide_shapes-bounding-supported:
97
+
98
+ Which Shapes Support Bounding Checks?
99
+ """""""""""""""""""""""""""""""""""""
100
+
101
+ Instances of the following shape classes support the ``in`` operator:
102
+
103
+ - :py:class:`~pyglet.shapes.Circle`
104
+ - :py:class:`~pyglet.shapes.Ellipse`
105
+ - :py:class:`~pyglet.shapes.Sector`
106
+ - :py:class:`~pyglet.shapes.Line`
107
+ - :py:class:`~pyglet.shapes.Rectangle`
108
+ - :py:class:`~pyglet.shapes.BorderedRectangle`
109
+ - :py:class:`~pyglet.shapes.Triangle`
110
+ - :py:class:`~pyglet.shapes.Polygon`
111
+ - :py:class:`~pyglet.shapes.Star`
112
+ (acts like a :py:class:`~pyglet.shapes.Circle`
113
+ with a radius of ``(outer_radius + inner_radius) / 2``).
114
+
115
+
116
+ .. _guide_shapes-bounding-details:
117
+
118
+ How Does It Work?
119
+ """""""""""""""""
120
+
121
+ Each of these classes implements a :py:meth:`~object.__contains__` method which
122
+ accounts for an instance's:
123
+
124
+ * :py:attr:`~pyglet.shapes.ShapeBase.rotation` angle
125
+ * :py:attr:`~pyglet.shapes.ShapeBase.anchor_position`
126
+
127
+
128
+ .. _guide_shapes-custom:
129
+
130
+ Custom Shapes
131
+ ^^^^^^^^^^^^^
132
+
133
+ .. tip:: For complex features and performance, please see :ref:`guide_graphics`.
134
+
135
+ You can import and subclass :py:class:`~pyglet.shapes.ShapeBase` to create
136
+ custom shapes:
137
+
138
+ .. code-block:: python
139
+
140
+ from pyglet.shapes import ShapeBase
141
+
142
+
143
+ class MyCustomShape(ShapeBase):
144
+ """A custom shape class. Implementation details omitted."""
145
+ ...
146
+
147
+
148
+ This is the base class for shapes in the :py:mod:`~pyglet.shapes` module,
149
+ which means you can use the other shapes in the module as reference. Please
150
+ note that this class has the following caveats:
151
+
152
+ * The ``in`` operator requires you to add a :py:meth:`~object.__contains__` method which:
153
+
154
+ * accounts for the following values on an instance:
155
+
156
+ * :py:attr:`~pyglet.shapes.ShapeBase.rotation` angle
157
+ * :py:attr:`~pyglet.shapes.ShapeBase.anchor_position`
158
+
159
+ * returns a :py:class:`bool`
160
+
161
+ * It will conflict with other metaclass-based helpers due to using :py:class:`abc.ABC`
162
+
@@ -114,13 +114,13 @@ def create_torus(radius, inner_radius, slices, inner_slices, shader, batch):
114
114
  emission = [0.0, 0.0, 0.0, 1.0]
115
115
  shininess = 50
116
116
 
117
- material = pyglet.model.Material("custom", diffuse, ambient, specular, emission, shininess)
117
+ material = pyglet.model.SimpleMaterial("custom", diffuse, ambient, specular, emission, shininess)
118
118
  group = pyglet.model.MaterialGroup(material=material, program=shader)
119
119
 
120
120
  vertex_list = shader.vertex_list_indexed(len(vertices) // 3, GL_TRIANGLES, indices, batch, group,
121
- position=('f', vertices),
122
- normals=('f', normals),
123
- colors=('f', material.diffuse * (len(vertices) // 3)))
121
+ POSITION=('f', vertices),
122
+ NORMAL=('f', normals),
123
+ COLOR_0=('f', material.diffuse * (len(vertices) // 3)))
124
124
 
125
125
  return pyglet.model.Model([vertex_list], [group], batch)
126
126
 
@@ -9,7 +9,8 @@ if os.name == "nt":
9
9
  # On Windows, it's possible to change the font anti-aliasing mode.
10
10
  # Uncomment the below lines to set the options:
11
11
  #
12
- from pyglet.font.directwrite import DirectWriteGlyphRenderer
12
+ from pyglet.font.dwrite import DirectWriteGlyphRenderer
13
+
13
14
  D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0
14
15
  D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1 # not working?
15
16
  D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2 # same as default
@@ -25,15 +26,15 @@ batch = pyglet.graphics.Batch()
25
26
  float_font_size = pyglet.text.Label("Hello World on size 15.1", font_name="Arial", font_size=15.1, x=30, y=500, batch=batch)
26
27
  float_font_size_1 = pyglet.text.Label("Hello World on size 15", font_name="Arial", font_size=15, x=270, y=500, batch=batch)
27
28
 
28
- arial_bold = pyglet.text.Label("Hello World 👽", font_name="Arial", bold=True, font_size=25, x=50, y=400, batch=batch)
29
- arial_black = pyglet.text.Label("Hello World 👾", font_name="Arial", bold="black", font_size=25, x=50, y=350, batch=batch)
30
- arial_narrow = pyglet.text.Label("Hello World 🤖", font_name="Arial", bold=False, stretch="condensed", font_size=25, x=50, y=300, batch=batch)
29
+ arial_bold = pyglet.text.Label("Hello World 👽", font_name="Arial", weight="normal", font_size=25, x=50, y=400, batch=batch)
30
+ arial_black = pyglet.text.Label("Hello World 👾", font_name="Arial", weight="black", font_size=25, x=50, y=350, batch=batch)
31
+ arial_narrow = pyglet.text.Label("Hello World 🤖", font_name="Arial", weight="normal", stretch="condensed", font_size=25, x=50, y=300, batch=batch)
31
32
  arial = pyglet.text.Label("Hello World 👀", font_name="Arial", font_size=25, x=50, y=250, batch=batch)
32
33
 
33
- segoe_ui_black = pyglet.text.Label("Hello World ☂️", font_name="Segoe UI", bold="black", font_size=25, x=50, y=200, batch=batch)
34
- segoe_ui_semilbold = pyglet.text.Label("Hello World ⚽️", font_name="Segoe UI", bold="semibold", font_size=25, x=50, y=150, batch=batch)
35
- segoe_ui_semilight = pyglet.text.Label("Hello World 🎱", font_name="Segoe UI", bold="semilight", font_size=25, x=50, y=100, batch=batch)
36
- segoe_ui_light = pyglet.text.Label("Hello World 🥳👍", font_name="Segoe UI", bold="light", font_size=25, x=50, y=50, batch=batch)
34
+ segoe_ui_black = pyglet.text.Label("Hello World ☂️", font_name="Segoe UI", weight="black", font_size=25, x=50, y=200, batch=batch)
35
+ segoe_ui_semilbold = pyglet.text.Label("Hello World ⚽️", font_name="Segoe UI", weight="semibold", font_size=25, x=50, y=150, batch=batch)
36
+ segoe_ui_semilight = pyglet.text.Label("Hello World 🎱", font_name="Segoe UI", weight="semilight", font_size=25, x=50, y=100, batch=batch)
37
+ segoe_ui_light = pyglet.text.Label("Hello World 🥳👍", font_name="Segoe UI", weight="light", font_size=25, x=50, y=50, batch=batch)
37
38
  segoe_ui = pyglet.text.Label("Hello World 😀✌", font_name="Segoe UI", font_size=25, x=50, y=10, batch=batch)
38
39
 
39
40
  if os.name == "nt":
@@ -0,0 +1,92 @@
1
+ """This example demonstrates how to create a compatible font with Pyglets layout system using images."""
2
+ from __future__ import annotations
3
+
4
+ import pyglet
5
+ from pyglet.font.user import UserDefinedMappingFont, get_scaled_user_font
6
+
7
+ # Add our resource path that includes the font atlas.
8
+ pyglet.resource.path.append('../../tests/data/fonts')
9
+ pyglet.resource.reindex()
10
+
11
+ # Create Window
12
+ window = pyglet.window.Window()
13
+
14
+ # Create a graphics batch to batch render our objects.
15
+ batch = pyglet.graphics.Batch()
16
+
17
+ atlas_image = pyglet.resource.image("action_man_atlas.png")
18
+
19
+ # You can use whatever method you want, but you just need to map your ImageData instances to the character
20
+ atlas_characters = """ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.: '"/?!@#$%^&*()"""
21
+ rows = 5
22
+ columns = 16
23
+
24
+ # Ensure the data is image data, as it is needed to blit into a Texture.
25
+ image_data = atlas_image.get_image_data()
26
+
27
+ # Create image grid based on how many glyphs.
28
+ grid = pyglet.image.ImageGrid(image_data, rows=rows, columns=columns)
29
+
30
+ # Map characters to image data. A -> ImageData
31
+ # The mapping can be a dictionary lookup, or it can be an object that behaves like a dictionary.
32
+ mapping = {}
33
+ char = 0
34
+ for row in range(rows):
35
+ for column in range(columns):
36
+ y_prime = (rows - 1) - row
37
+ new_index = column + y_prime * columns
38
+ # This chooses values based on the top left. Pyglet uses bottom left indexing.
39
+ glyph = grid[new_index]
40
+ mapping[atlas_characters[char]] = glyph
41
+ char += 1
42
+
43
+ class ActionManMappedFont(UserDefinedMappingFont):
44
+ glyph_fit = len(atlas_characters)
45
+
46
+
47
+ # Create your font instance.
48
+ action_man_font = ActionManMappedFont("custom_action_man1", # Custom unique name to not clash with others.
49
+ default_char=" ", # Default character to use if a character is not mapped.
50
+ size=13, # The size you want your font to be considered at base size.
51
+ mappings=mapping) # The mapping object containing your character -> glyphs.
52
+
53
+ # Add the font to usable fonts.
54
+ pyglet.font.add_user_font(action_man_font)
55
+
56
+ # Create a label like normal!
57
+ label = pyglet.text.Label("Hello World!",
58
+ font_size=13,
59
+ font_name="custom_action_man1",
60
+ x=window.width // 2,
61
+ y=window.height // 2,
62
+ anchor_x="center",
63
+ anchor_y="center",
64
+ batch=batch)
65
+
66
+ # As an optional dependency with Pillow installed, you can scale your bitmap font.
67
+ try:
68
+ # Create the size you want it to be scaled to.
69
+ # Only create new font sizes from the original user font object.
70
+ # !! Note that the size will be calculated in relation to your original size.
71
+ action_scaled_32 = get_scaled_user_font(action_man_font, 32)
72
+ pyglet.font.add_user_font(action_scaled_32)
73
+
74
+ scaled_label = pyglet.text.Label("Scaled Hello World!",
75
+ font_size=32,
76
+ font_name="custom_action_man1",
77
+ x=window.width // 2,
78
+ y=window.height // 3,
79
+ anchor_x="center",
80
+ anchor_y="center",
81
+ batch=batch)
82
+ except ImportError:
83
+ print("Warning: PIL was not detected, scaled font will not be shown.")
84
+
85
+
86
+ @window.event
87
+ def on_draw():
88
+ window.clear()
89
+ batch.draw()
90
+
91
+
92
+ pyglet.app.run()
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
15
15
  from typing import Any, Callable, ItemsView, Sized
16
16
 
17
17
  #: The release version
18
- version = '2.1.3'
18
+ version = '2.1.4'
19
19
  __version__ = version
20
20
 
21
21
  MIN_PYTHON_VERSION = 3, 8
@@ -110,6 +110,10 @@ class Options:
110
110
  debug_trace_depth: int = 1
111
111
  debug_trace_flush: bool = True
112
112
 
113
+ debug_com: bool = False
114
+ """If ``True``, prints information on COM calls. This can potentially help narrow down issues with certain libraries
115
+ that utilize COM calls. Only applies to the Windows platform."""
116
+
113
117
  debug_win32: bool = False
114
118
  """If ``True``, prints error messages related to Windows library calls. Usually get's information from
115
119
  ``Kernel32.GetLastError``. This information is output to a file called ``debug_win32.log``."""
@@ -175,6 +179,11 @@ class Options:
175
179
  .. versionadded:: 2.0
176
180
  """
177
181
 
182
+ text_antialiasing: bool = True
183
+ """If ``True``, font renderers will improve text quality by adding antialiasing to the rendered characters. If
184
+ ``False``, text quality will appear pixelated.
185
+ """
186
+
178
187
  headless: bool = False
179
188
  """If ``True``, visible Windows are not created and a running desktop environment is not required. This option
180
189
  is useful when running pyglet on a headless server, or compute cluster. OpenGL drivers with ``EGL`` support are
@@ -186,14 +195,17 @@ class Options:
186
195
  GPU to use. This is only useful on multi-GPU systems.
187
196
  """
188
197
 
189
- win32_disable_shaping: bool = False
190
- """If ``True``, will disable the shaping process for the default Windows font renderer to offer a performance
191
- speed up. If your font is simple, monospaced, or you require no advanced OpenType features, this option may be
192
- useful. You can try enabling this to see if there is any impact on clarity for your font. The advance will be
193
- determined by the glyph width.
198
+ text_shaping: Literal["platform", "harfbuzz", False] = 'platform'
199
+ """Determines how text is processed and displayed based on features of the font.
194
200
 
195
- .. note:: Shaping is the process of determining which character glyphs to use and specific placements of those
196
- glyphs when given a full string of characters.
201
+ Valid option names are:
202
+
203
+ * ``False``, Disables the shaping process for text. This may increase performance as it reduces the amount
204
+ of calls during rendering. If your font is simple, monospaced, or you require no advanced OpenType features,
205
+ this option may be useful.
206
+ * ``'platform'``, Uses platform's font system for shaping. Supported by Windows (DirectWrite) and Mac (CoreText).
207
+ * ``'harfbuzz'``, Utilize the harfbuzz library for font shaping. This requires an optional dependency, if not
208
+ found, it will fallback to platform shaping.
197
209
 
198
210
  .. versionadded:: 2.0
199
211
  """
@@ -270,7 +282,7 @@ class Options:
270
282
  rescaling and repositioning of content will be necessary, but at the cost of blurry content depending on the extent
271
283
  of the stretch. For example, 800x600 at 150% DPI will be 800x600 for `window.get_size()` and 1200x900 for
272
284
  `window.get_framebuffer_size()`.
273
-
285
+
274
286
  `'platform'`: A DPI aware window is created, however window sizing and framebuffer sizing is not interfered with
275
287
  by Pyglet. Final sizes are dictated by the platform the window was created on. It is up to the user to make any
276
288
  platform adjustments themselves such as sizing on a platform, mouse coordinate adjustments, or framebuffer size
@@ -49,15 +49,17 @@ class Options:
49
49
  debug_win32: bool
50
50
  debug_input: bool
51
51
  debug_x11: bool
52
+ debug_com: bool
52
53
  shadow_window: bool
53
54
  vsync: bool | None
54
55
  xsync: bool
55
56
  xlib_fullscreen_override_redirect: bool
56
57
  search_local_libs: bool
57
58
  win32_gdi_font: bool
59
+ text_antialiasing: bool
58
60
  headless: bool
59
61
  headless_device: int
60
- win32_disable_shaping: bool
62
+ text_shaping: Literal["platform", "harfbuzz", False]
61
63
  dw_legacy_naming: bool
62
64
  win32_disable_xinput: bool
63
65
  com_mta: bool