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