pyglet 2.1.8__tar.gz → 2.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyglet-2.1.8 → pyglet-2.1.10}/.github/workflows/unittests.yml +3 -3
- {pyglet-2.1.8 → pyglet-2.1.10}/PKG-INFO +1 -1
- {pyglet-2.1.8 → pyglet-2.1.10}/RELEASE_NOTES +32 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/dpi_scaled_window.py +5 -9
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/__init__.py +3 -3
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/app/cocoa.py +2 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/headless.py +11 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/graphics/shader.py +9 -2
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/base.py +14 -4
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/linux/evdev.py +99 -25
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/linux/evdev_constants.py +2 -1
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/win32/xinput.py +6 -3
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/ioctl.py +2 -2
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/math.py +25 -5
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/base.py +23 -32
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg.py +16 -20
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg_lib/compat.py +1 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg_lib/libavcodec.py +20 -16
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg_lib/libavformat.py +6 -6
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg_lib/libavutil.py +22 -7
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg_lib/libswresample.py +2 -2
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg_lib/libswscale.py +2 -2
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/__init__.py +2 -2
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/document.py +2 -2
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/layout/base.py +12 -9
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/__init__.py +3 -2
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/cocoa/__init__.py +9 -9
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/headless/__init__.py +1 -1
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/win32/__init__.py +1 -1
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/xlib/__init__.py +1 -1
- pyglet-2.1.10/tests/interactive/text/test_layout_anchoring.py +173 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/.coveragerc +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/.github/ISSUE_TEMPLATE/questions--or-other.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/.github/workflows/codeql.yml +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/.gitignore +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/.readthedocs.yml +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/LICENSE +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/MANIFEST.in +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/README.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/aseprite_codec/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/aseprite_codec/asedemo.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/aseprite_codec/aseprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/aseprite_codec/running.ase +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/logo3d/logo3d.jpg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/logo3d/logo3d.obj.zip +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/logo3d/logo3d.wings +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/qt_sprite_preview.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/scenemanager.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/contrib/toys/follow_mouse.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/Makefile +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/_static/css/custom.css +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/_static/favicon.ico +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/_static/logo.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/_static/logo5.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/_static/relatedlogo.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/conf.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/external_resources.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/index.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/contributing.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/dist.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/doc.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/generated.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/gl.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/media_logging_manual.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/media_manual.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/testing.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/virtualenv.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/wraptypes-class.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/internal/wraptypes.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/make.bat +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/app.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/clock.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/customtypes.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/display.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/event.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/font.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/gl.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/graphics/allocation.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/graphics/index.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/graphics/shader.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/graphics/vertexbuffer.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/graphics/vertexdomain.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/gui.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/image/animation.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/image/atlas.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/image/buffer.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/image/index.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/info.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/input.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/math.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/media.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/media_synthesis.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/models.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/pyglet.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/resource.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/shapes.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/sprite.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/text/caret.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/text/document.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/text/index.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/text/layout.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/window.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/window_key.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/modules/window_mouse.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/context.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/debug.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/eventloop.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/events.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/examplegame.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/gl.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/gui.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/image.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/abstract_image.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/abstract_image.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/buffer_image.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/buffer_image.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/context_flow.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/context_flow.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_crosshair.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_default.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_hand.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_no.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_size_down.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_size_left.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_size_left_right.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_size_right.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_size_up.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_size_up_down.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_text.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_mac_wait.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_crosshair.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_default.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_hand.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_help.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_no.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_size.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_size_left_right.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_size_nesw.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_size_nwse.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_size_up_down.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_text.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_wait.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/cursor_win_wait_arrow.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/explosion.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/font_metrics.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/font_metrics.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/image_classes.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/image_classes.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/image_grid.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/image_grid.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/image_sequence.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/image_sequence.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/mouse_coordinates.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/mouse_coordinates.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/screens.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/screens.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/text_classes.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/text_classes.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_location.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_location.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_osx_borderless.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_osx_default.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_osx_dialog.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_osx_tool.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_xp_default.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_xp_dialog.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_xp_overlay.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_xp_tool.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/img/window_xp_transparent.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/input.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/installation.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/keyboard.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/math.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/media.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/migration.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/models.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/mouse.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/opengles.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/options.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/quickstart.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/rendering.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/resources.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/shapes.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/text.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/time.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/programming_guide/windowing.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/doc/requirements.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/clipboard.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/events/events_key_state_handler.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/events/register_event_type.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/events/window_events.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/events/window_platform_event.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/file_dialog.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/resources/asteroid.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/resources/bullet.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/resources/bullet.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/resources/engine_flame.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/resources/player.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version1/asteroid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version1/game/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version1/game/load.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version1/game/resources.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version2/asteroid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version2/game/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version2/game/load.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version2/game/physicalobject.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version2/game/player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version2/game/resources.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version3/asteroid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version3/game/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version3/game/load.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version3/game/physicalobject.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version3/game/player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version3/game/resources.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version3/game/util.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/asteroid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/asteroid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/bullet.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/load.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/physicalobject.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/resources.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version4/game/util.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/asteroid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/asteroid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/bullet.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/load.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/physicalobject.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/resources.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/game/version5/game/util.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/graphics/image_convert.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/graphics/image_display.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/gui/bar.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/gui/button_hover.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/gui/button_pressed.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/gui/button_unpressed.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/gui/knob.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/gui/widgets.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/hello_world.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/input/apple_remote.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/input/controller.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/input/input.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/input/joystick.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/input/tablet.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/media_info.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/media_player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/noisy/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/noisy/ball.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/noisy/ball.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/noisy/noisy.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/reader.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/res/bass.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/res/drums.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/res/guitar.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/res/piano.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/res/space.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/soundspace/soundspace.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/synthesizer.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/media/video.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/model/box.mtl +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/model/box.obj +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/model/fpscamera.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/model/logo3d.mtl +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/model/logo3d.obj +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/model/model.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/model/pyglet.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/compute_shader.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/egl_context.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/minimal_shader.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/opengl_context.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/opengl_core.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/opengl_scissor.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/pyglet.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/opengl/torus.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/programming_guide/animation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/programming_guide/dinosaur.gif +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/programming_guide/events.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/programming_guide/hello_world.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/programming_guide/image_viewer.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/programming_guide/kitten.jpg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/programming_guide/window_subclass.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/resources/Brick1Blue.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/resources/Brick1Crack3.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/resources/Brick1Gray.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/resources/kitten.jpg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/resources/pyglet.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/shapes.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/sprite/depth_sprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/sprite/display_sprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/sprite/multi_texture_sprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/sprite/sprite_batching.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/text/advanced_font.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/text/html_label.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/text/pyglet.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/text/text_input.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/text/user_bitmap_font.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/timer.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/window/camera.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/window/camera_group.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/window/fixed_resolution.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/window/fps_change.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/window/multiple_windows.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/window/overlay_window.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/examples/window/transparent_window.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/dist_field/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/dist_field/genfield.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/dist_field/py.df.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/dist_field/py.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/dist_field/renderfield.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/flaccodec.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/hello_world.svg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/instancing/sprite_instance.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/instancing/sprite_instance_object.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/multitexture_sprite/multitexturesprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/spritebenchmark.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/svg_test.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/wayland/gbm_egl_context.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/experimental/win32priority.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/make.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/__init__.pyi +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/app/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/app/base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/app/win32.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/app/xlib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/clock.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/customtypes.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/__init__.pyi +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/cocoa.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/win32.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/xlib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/display/xlib_vidmoderestore.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/event.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/experimental/README.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/experimental/geoshader_sprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/experimental/hidraw.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/experimental/jobs.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/experimental/multitexture_sprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/experimental/net.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/experimental/particles.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/extlibs/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/extlibs/earcut.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/extlibs/png.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/dwrite/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/dwrite/d2d1_lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/dwrite/d2d1_types_lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/dwrite/dwrite_lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/fontconfig.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/freetype.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/freetype_lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/harfbuzz/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/harfbuzz/harfbuzz_lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/quartz.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/ttf.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/user.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/font/win32.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/agl.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/cocoa.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/gl.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/gl.pyi +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/gl_compat.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/gl_compat.pyi +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/gl_info.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/glx.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/glx_info.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/glxext_arb.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/glxext_mesa.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/glxext_nv.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/headless.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/lib_agl.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/lib_glx.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/lib_wgl.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/wgl.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/wgl_info.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/wglext_arb.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/wglext_nv.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/win32.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gl/xlib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/graphics/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/graphics/allocation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/graphics/instance.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/graphics/vertexarray.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/graphics/vertexbuffer.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/graphics/vertexdomain.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gui/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gui/frame.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gui/ninepatch.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/gui/widgets.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/animation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/atlas.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/buffer.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/bmp.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/dds.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/gdiplus.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/gdkpixbuf2.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/gif.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/pil.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/png.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/quartz.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/s3tc.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/wic.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/image/codecs/wincodec_lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/info.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/controller.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/controller_db.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/linux/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/linux/x11_xinput.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/linux/x11_xinput_tablet.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/macos/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/macos/darwin_hid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/win32/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/win32/directinput.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/input/win32/wintab.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/darwin/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/darwin/cocoapy/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/darwin/cocoapy/cocoalibs.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/darwin/cocoapy/cocoatypes.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/darwin/cocoapy/runtime.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/darwin/coreaudio.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/darwin/quartzkey.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/egl/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/egl/egl.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/egl/eglext.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/egl/lib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/wayland/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/wayland/gbm.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/wayland/xkbcommon.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/com.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/constants.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/context_managers.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/dinput.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/libwintab.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/types.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/win32/winkey.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/cursorfont.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/xf86vmode.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/xinerama.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/xinput.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/xlib.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/xrandr.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/xrender.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/libs/x11/xsync.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/buffered_logger.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/coreaudio.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/ffmpeg_lib/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/gstreamer.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/pyogg.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/wave.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/codecs/wmf.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/devices/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/devices/base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/devices/win32.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/directsound/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/directsound/adaptation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/directsound/exceptions.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/directsound/interface.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/directsound/lib_dsound.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/listener.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/openal/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/openal/adaptation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/openal/interface.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/openal/lib_alc.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/openal/lib_openal.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/pulse/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/pulse/adaptation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/pulse/interface.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/pulse/lib_pulseaudio.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/silent/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/silent/adaptation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/xaudio2/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/xaudio2/adaptation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/xaudio2/interface.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/drivers/xaudio2/lib_xaudio2.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/exceptions.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/instrumentation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/player_worker_thread.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/media/synthesis.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/model/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/model/codecs/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/model/codecs/base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/model/codecs/gltf.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/model/codecs/obj.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/py.typed +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/resource.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/shapes.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/sprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/caret.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/formats/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/formats/attributed.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/formats/html.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/formats/plaintext.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/formats/structured.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/layout/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/layout/incremental.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/layout/scrolling.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/text/runlist.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/util.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/cocoa/pyglet_delegate.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/cocoa/pyglet_textview.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/cocoa/pyglet_view.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/cocoa/pyglet_window.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/cocoa/systemcursor.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/event.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/key.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyglet/window/mouse.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pyproject.toml +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/pytest.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/setup.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/annotations.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/base/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/base/data.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/base/event_loop.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/base/interactive.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/base/performance.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/conftest.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/fonts/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/fonts/action_man.ttf +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/fonts/action_man_atlas.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/fonts/action_man_bold.ttf +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/fonts/action_man_bold_italic.ttf +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/fonts/action_man_italic.ttf +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/fonts/courR12-ISO8859-1.pcf +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/8bpp.gif +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/cursor.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/dinosaur.gif +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/gdk_close.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/grey_background.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/icon1.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/icon_size1.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/icon_size2.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/icon_size3.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/icon_size4.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/icon_size5.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/l.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/la.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/multitexture.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_16bpp.bmp +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_1bpp.bmp +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_24bpp.bmp +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_32bpp.bmp +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_4bpp.bmp +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_8bpp.bmp +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_8bpp.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_8bpp_trans.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgb_dxt1.dds +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgba.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgba_32bpp.bmp +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgba_dxt1.dds +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgba_dxt3.dds +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/rgba_dxt5.dds +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/images/tests.interactive.test_interactive_test_base._Test.test_1.001.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/alert.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/login.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/logout.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/receive.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/send.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_sawtooth_16_11025_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_sawtooth_16_44800_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_silence_16_11025_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_silence_16_44800_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_simplefm_16_11025_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_simplefm_16_44800_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_sine_16_11025_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_sine_16_44800_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_square_16_11025_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_square_16_44800_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_triangle_16_11025_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/media/synthesis_triangle_16_44800_1ch.wav +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/models/logo3d.mtl +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/data/models/logo3d.obj +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/app/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/app/test_eventloop.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/conftest.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/font/test_fontconfig.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/font/test_freetype_face.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/graphics/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/graphics/test_allocation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/graphics/test_batch_migration.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/graphics/test_shaders.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/image/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/image/test_gdkpixbuf2.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/image/test_imagegrid.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/image/test_texture3d.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/media/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/media/mock_player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/media/test_directsound.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/media/test_driver.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/media/test_openal.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/media/test_player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/media/test_pulse.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/model/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/model/test_loading.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/platform/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/platform/test_win_context_managers.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/platform/test_win_multicore_clock.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/dir1/dir1/f3.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/dir1/f2.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/dir1/res.zip +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/dir2/f6.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/f1.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/rgbm.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/test_resource_image_loading.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/resource/test_resource_loading.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/test_integrations.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/text/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/text/test_empty_document.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/text/test_label_creation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/text/test_layout_creation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/window/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/window/test_context_share.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/window/test_event_sequence.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/integration/window/test_window_caption.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/conftest.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/image/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/image/test_image.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/media/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/media/test_player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/screenshots/committed/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/screenshots/session/README +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/shapes/test_shapes.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/test_interactive_test_base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_caret_color.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_content_valign.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_html.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_inline_elements.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_inline_elements_style_change.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_multiline_wrap.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_plain.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/text/test_style.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/test_window_events.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/test_window_fullscreen.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/test_window_modes.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/test_window_multisample.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/test_window_open.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/test_window_settings.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/test_window_styles.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/window/window_util.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/interactive/windowed_test_base.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/requirements.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/conftest.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/math/test_mat.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/math/test_quat.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/math/test_vec2.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/math/test_vec3.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/math/test_vec4.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/media/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/media/test_listener.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/media/test_player.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/media/test_sources.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/media/test_synthesis.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/platform/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/platform/test_mac_objc.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/shader/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/shader/conftest.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/shader/test_shader.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/shapes/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/shapes/conftest.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/shapes/test_bordered_rectangle.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/shapes/test_shapes.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_atlas.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_clock.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_clock_freq.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_events.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_font.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_input.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_resource_path.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_sprite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/test_text.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/text/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/text/test_caret.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tests/unit/text/test_layout.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/al_info.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/bokeh_timeline.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/compare.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/configure.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/extractors.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/fs.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/mp.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/mpexceptions.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/playmany.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/readme_ffmpeg_debbuging_branch.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/readme_run_tests.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/report.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/reports.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/retry_crashed.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/run_test_suite.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/summarize.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/test_instrumentation.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/ffmpeg/timeline.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/gencontrollerdb.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/gengl.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/genwrappers.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/gl.template +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/gl.xml +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/gl_info.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/gl_stub.template +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/inspect_font.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/requirements.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wgl.h +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wraptypes/__init__.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wraptypes/cparser.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wraptypes/ctypesparser.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wraptypes/lex.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wraptypes/preprocessor.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wraptypes/wrap.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/tools/wraptypes/yacc.py +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/LICENSE.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/README.rst +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/assets/favicon.ico +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/assets/static/css/example-custom-styles.css +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/assets/static/images/pyglet.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/404.html/contents.lr +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/404.html/ngc-5793.jpg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/authors/benjamin/contents.lr +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/authors/benjamin/pyglet.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/authors/contents.lr +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/blog/contents.lr +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/blog/welcome-blog/contents.lr +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/contents.lr +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/content/eclipse.jpg +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/pyglet.lektorproject +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/AUTHORS.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/CHANGELOG.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/CONTRIBUTING.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/LICENSE.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/NOTICE.txt +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/README.md +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/css/bootstrap.css +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/css/icomoon.css +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/css/magnific-popup.css +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/css/style.css +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.ttf +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.woff +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/images/Preloader_2.gif +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/images/placeholder_person.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/jquery-3.3.1.min.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/jquery.easing.min.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/jquery.magnific-popup.min.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/jquery.stellar.min.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/jquery.waypoints.min.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/magnific-popup-options.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/main-singlelayout.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/assets/static/js/main.js +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/content.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/gallery.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/gallery_item.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/member.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/mission.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/mission_tab.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/service.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/services.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/flowblocks/team.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/images/blog-index.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/images/full-blog.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/images/full-page.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/images/gallery-404.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/images/gallery-singlepage.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/images/mainpage-screenshots.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/images/responsive-layout.png +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/models/404.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/models/author.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/models/authors.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/models/blog-post.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/models/blog.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/models/page.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/models/single-layout.ini +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/404.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/author.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/authors.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blocks/content.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blocks/gallery.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blocks/mission.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blocks/services.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blocks/team.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blog-layout.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blog-post.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/blog.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/layout.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/macros/blog.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/macros/pagination.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/none.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/page.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/templates/single-layout.html +0 -0
- {pyglet-2.1.8 → pyglet-2.1.10}/website/themes/lektor-icon/theme.ini +0 -0
|
@@ -7,7 +7,7 @@ jobs:
|
|
|
7
7
|
runs-on: ubuntu-latest
|
|
8
8
|
strategy:
|
|
9
9
|
matrix:
|
|
10
|
-
python-version: [ '3.
|
|
10
|
+
python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', '3.14', 'pypy-3.10' ]
|
|
11
11
|
name: Python ${{ matrix.python-version }} ubuntu-latest
|
|
12
12
|
steps:
|
|
13
13
|
- uses: actions/checkout@v4
|
|
@@ -28,7 +28,7 @@ jobs:
|
|
|
28
28
|
runs-on: macos-latest
|
|
29
29
|
strategy:
|
|
30
30
|
matrix:
|
|
31
|
-
python-version: [ '3.10', '3.11', '3.12' ]
|
|
31
|
+
python-version: [ '3.10', '3.11', '3.12', '3.13', '3.14']
|
|
32
32
|
name: Python ${{ matrix.python-version }} OSX
|
|
33
33
|
steps:
|
|
34
34
|
- uses: actions/checkout@v4
|
|
@@ -47,7 +47,7 @@ jobs:
|
|
|
47
47
|
runs-on: windows-latest
|
|
48
48
|
strategy:
|
|
49
49
|
matrix:
|
|
50
|
-
python-version: [ '3.
|
|
50
|
+
python-version: [ '3.9', '3.10', '3.11', '3.12', '3.13', '3.14']
|
|
51
51
|
name: Python ${{ matrix.python-version }} Windows
|
|
52
52
|
steps:
|
|
53
53
|
- uses: actions/checkout@v4
|
|
@@ -1,3 +1,35 @@
|
|
|
1
|
+
pyglet 2.1.10
|
|
2
|
+
|
|
3
|
+
Changes
|
|
4
|
+
-------
|
|
5
|
+
media: Add support for FFmpeg 8.0 (#1365)
|
|
6
|
+
window: Update default dpi_scaling option to "platform". (#1383)
|
|
7
|
+
window: Convert the Window event queue to a deque. (#1362)
|
|
8
|
+
input.evdev: Do not attempt to reuse Controller instances on re-connect, as naming conflicts can occur.
|
|
9
|
+
|
|
10
|
+
Bugfixes
|
|
11
|
+
--------
|
|
12
|
+
text: fix typing of Label.__init__'s align argument. (#1361)
|
|
13
|
+
text: Update the passed args for attributed text. (#1379)
|
|
14
|
+
shader: Fixed number of elements for GL_FLOAT_MAT3 (9, not 6) in pyglet.graphics.shader._uniform_setters. (#1364)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
pyglet 2.1.9
|
|
18
|
+
|
|
19
|
+
Changes
|
|
20
|
+
-------
|
|
21
|
+
docs: Improve missing or underdeveloped math doc (#1295)
|
|
22
|
+
input: Add new Controller properties for polling - Controller.dpad, Controller.leftanalog, Controller.rightanalog Vec2s.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
Bugfixes
|
|
26
|
+
-------
|
|
27
|
+
input.linux.evdev: Add support for the SYN_DROPPED event, to prevent "stuck" controls when events are lost.
|
|
28
|
+
input.linux.evdev: Implement missing EvdevDevice.poll method.
|
|
29
|
+
graphics.shaders: Fix attribute pointer issue for integers. (#1351)
|
|
30
|
+
window.headless: Add missing abstract methods to HeadlessScreen (#1350)
|
|
31
|
+
|
|
32
|
+
|
|
1
33
|
pyglet 2.1.8
|
|
2
34
|
|
|
3
35
|
Changes
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import pyglet
|
|
2
|
-
|
|
3
|
-
pyglet.options["debug_gl"] = False
|
|
4
|
-
pyglet.options.dpi_scaling = "scaled"
|
|
2
|
+
pyglet.options.debug_gl = False
|
|
5
3
|
|
|
6
4
|
window = pyglet.window.Window(800, 600, caption="DPI Test", resizable=True)
|
|
7
5
|
batch = pyglet.graphics.Batch()
|
|
@@ -31,8 +29,7 @@ labels = [hello_label, mouse_enter_label, mouse_leave_label, mouse_motion_label,
|
|
|
31
29
|
dinosaur = pyglet.resource.animation("programming_guide/dinosaur.gif")
|
|
32
30
|
|
|
33
31
|
sprite = pyglet.sprite.Sprite(dinosaur, x=100, y=140, batch=batch)
|
|
34
|
-
|
|
35
|
-
sprite.scale = window.scale
|
|
32
|
+
sprite.scale = window.scale
|
|
36
33
|
|
|
37
34
|
|
|
38
35
|
@window.event
|
|
@@ -99,10 +96,9 @@ def on_scale(scale, dpi):
|
|
|
99
96
|
print("Window Size:", window.get_size())
|
|
100
97
|
print("Window Scale Ratio:", window.scale)
|
|
101
98
|
print("Window Frame Buffer Size:", window.get_framebuffer_size())
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
sprite.scale = window.scale
|
|
99
|
+
for label in labels:
|
|
100
|
+
label.dpi = dpi
|
|
101
|
+
sprite.scale = window.scale
|
|
106
102
|
|
|
107
103
|
|
|
108
104
|
pyglet.app.run()
|
|
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
|
|
|
15
15
|
from typing import Any, Callable, ItemsView, Sized
|
|
16
16
|
|
|
17
17
|
#: The release version
|
|
18
|
-
version = '2.1.
|
|
18
|
+
version = '2.1.10'
|
|
19
19
|
__version__ = version
|
|
20
20
|
|
|
21
21
|
MIN_PYTHON_VERSION = 3, 8
|
|
@@ -255,8 +255,8 @@ class Options:
|
|
|
255
255
|
|
|
256
256
|
.. versionadded:: 2.0.5"""
|
|
257
257
|
|
|
258
|
-
dpi_scaling: Literal["real", "scaled", "stretch", "platform"] = "
|
|
259
|
-
"""For 'HiDPI' displays, Window behavior can differ between operating systems. Defaults to `'
|
|
258
|
+
dpi_scaling: Literal["real", "scaled", "stretch", "platform"] = "platform"
|
|
259
|
+
"""For 'HiDPI' displays, Window behavior can differ between operating systems. Defaults to `'platform'`.
|
|
260
260
|
|
|
261
261
|
The current options are an attempt to create consistent behavior across all of the operating systems.
|
|
262
262
|
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import Literal
|
|
4
|
+
|
|
1
5
|
import pyglet
|
|
2
6
|
import warnings
|
|
3
7
|
|
|
@@ -69,3 +73,10 @@ class HeadlessScreen(Screen):
|
|
|
69
73
|
|
|
70
74
|
def restore_mode(self):
|
|
71
75
|
pass
|
|
76
|
+
|
|
77
|
+
def get_display_id(self) -> str | int:
|
|
78
|
+
# No real unique ID is available, just hash together the properties.
|
|
79
|
+
return hash((self.x, self.y, self.width, self.height))
|
|
80
|
+
|
|
81
|
+
def get_monitor_name(self) -> str | Literal["Unknown"]:
|
|
82
|
+
return "Headless"
|
|
@@ -58,6 +58,7 @@ from pyglet.gl.gl import (
|
|
|
58
58
|
glUnmapBuffer,
|
|
59
59
|
glUseProgram,
|
|
60
60
|
glVertexAttribDivisor,
|
|
61
|
+
glVertexAttribIPointer,
|
|
61
62
|
glVertexAttribPointer,
|
|
62
63
|
)
|
|
63
64
|
from pyglet.graphics.vertexbuffer import AttributeBufferObject, BufferObject
|
|
@@ -158,7 +159,7 @@ _uniform_setters: dict[int, tuple[GLDataType, GLFunc, GLFunc, int]] = {
|
|
|
158
159
|
gl.GL_UNSIGNED_INT_SAMPLER_3D: (gl.GLint, gl.glUniform1iv, gl.glProgramUniform1iv, 1),
|
|
159
160
|
|
|
160
161
|
gl.GL_FLOAT_MAT2: (gl.GLfloat, gl.glUniformMatrix2fv, gl.glProgramUniformMatrix2fv, 4),
|
|
161
|
-
gl.GL_FLOAT_MAT3: (gl.GLfloat, gl.glUniformMatrix3fv, gl.glProgramUniformMatrix3fv,
|
|
162
|
+
gl.GL_FLOAT_MAT3: (gl.GLfloat, gl.glUniformMatrix3fv, gl.glProgramUniformMatrix3fv, 9),
|
|
162
163
|
gl.GL_FLOAT_MAT4: (gl.GLfloat, gl.glUniformMatrix4fv, gl.glProgramUniformMatrix4fv, 16),
|
|
163
164
|
|
|
164
165
|
# TODO: test/implement these:
|
|
@@ -257,6 +258,9 @@ class Attribute:
|
|
|
257
258
|
self.element_size = sizeof(self.c_type)
|
|
258
259
|
self.stride = count * self.element_size
|
|
259
260
|
|
|
261
|
+
self._is_int = gl_type in (gl.GL_INT, gl.GL_SHORT, gl.GL_BYTE, gl.GL_UNSIGNED_INT,
|
|
262
|
+
gl.GL_UNSIGNED_SHORT, gl.GL_UNSIGNED_BYTE) and self.normalize is False
|
|
263
|
+
|
|
260
264
|
def enable(self) -> None:
|
|
261
265
|
"""Enable the attribute."""
|
|
262
266
|
glEnableVertexAttribArray(self.location)
|
|
@@ -271,7 +275,10 @@ class Attribute:
|
|
|
271
275
|
Pointer offset to the currently bound buffer for this attribute.
|
|
272
276
|
|
|
273
277
|
"""
|
|
274
|
-
|
|
278
|
+
if self._is_int:
|
|
279
|
+
glVertexAttribIPointer(self.location, self.count, self.gl_type, self.stride, ptr)
|
|
280
|
+
else:
|
|
281
|
+
glVertexAttribPointer(self.location, self.count, self.gl_type, self.normalize, self.stride, ptr)
|
|
275
282
|
|
|
276
283
|
def set_divisor(self) -> None:
|
|
277
284
|
glVertexAttribDivisor(self.location, 1)
|
|
@@ -520,6 +520,7 @@ class Controller(EventDispatcher):
|
|
|
520
520
|
#: The unique guid for this Device
|
|
521
521
|
self.guid: str = mapping.get('guid')
|
|
522
522
|
|
|
523
|
+
# Pollable
|
|
523
524
|
self.a: bool = False
|
|
524
525
|
self.b: bool = False
|
|
525
526
|
self.x: bool = False
|
|
@@ -534,6 +535,10 @@ class Controller(EventDispatcher):
|
|
|
534
535
|
|
|
535
536
|
self.lefttrigger: float = 0.0
|
|
536
537
|
self.righttrigger: float = 0.0
|
|
538
|
+
self.dpad: Vec2 = Vec2()
|
|
539
|
+
self.leftanalog: Vec2 = Vec2()
|
|
540
|
+
self.rightanalog: Vec2 = Vec2()
|
|
541
|
+
|
|
537
542
|
self.leftx: float = 0.0
|
|
538
543
|
self.lefty: float = 0.0
|
|
539
544
|
self.rightx: float = 0.0
|
|
@@ -617,12 +622,14 @@ class Controller(EventDispatcher):
|
|
|
617
622
|
@control.event
|
|
618
623
|
def on_change(value):
|
|
619
624
|
self.dpady = round(value * scale + bias) * sign # normalized
|
|
625
|
+
self.dpad = Vec2(self.dpadx, self.dpady)
|
|
620
626
|
self.dispatch_event('on_dpad_motion', self, Vec2(self.dpadx, self.dpady))
|
|
621
627
|
|
|
622
628
|
elif axis_name in ("dpleft", "dpright"):
|
|
623
629
|
@control.event
|
|
624
630
|
def on_change(value):
|
|
625
631
|
self.dpadx = round(value * scale + bias) * sign # normalized
|
|
632
|
+
self.dpad = Vec2(self.dpadx, self.dpady)
|
|
626
633
|
self.dispatch_event('on_dpad_motion', self, Vec2(self.dpadx, self.dpady))
|
|
627
634
|
|
|
628
635
|
elif axis_name in ("lefttrigger", "righttrigger"):
|
|
@@ -637,14 +644,16 @@ class Controller(EventDispatcher):
|
|
|
637
644
|
def on_change(value):
|
|
638
645
|
normalized_value = value * scale + bias
|
|
639
646
|
setattr(self, axis_name, normalized_value)
|
|
640
|
-
self.
|
|
647
|
+
self.left_analog = Vec2(self.leftx, -self.lefty)
|
|
648
|
+
self.dispatch_event('on_stick_motion', self, "leftstick", self.left_analog)
|
|
641
649
|
|
|
642
650
|
elif axis_name in ("rightx", "righty"):
|
|
643
651
|
@control.event
|
|
644
652
|
def on_change(value):
|
|
645
653
|
normalized_value = value * scale + bias
|
|
646
654
|
setattr(self, axis_name, normalized_value)
|
|
647
|
-
self.
|
|
655
|
+
self.right_analog = Vec2(self.rightx, -self.righty)
|
|
656
|
+
self.dispatch_event('on_stick_motion', self, "rightstick", self.right_analog)
|
|
648
657
|
|
|
649
658
|
def _bind_button_control(self, relation: Relation, control: Button, button_name: str) -> None:
|
|
650
659
|
if button_name in ("dpleft", "dpright", "dpup", "dpdown"):
|
|
@@ -655,7 +664,8 @@ class Controller(EventDispatcher):
|
|
|
655
664
|
def on_change(value):
|
|
656
665
|
target, bias = defaults[button_name]
|
|
657
666
|
setattr(self, target, bias * value)
|
|
658
|
-
self.
|
|
667
|
+
self.dpad = Vec2(self.dpadx, self.dpady)
|
|
668
|
+
self.dispatch_event('on_dpad_motion', self, self.dpad)
|
|
659
669
|
else:
|
|
660
670
|
@control.event
|
|
661
671
|
def on_change(value):
|
|
@@ -681,7 +691,7 @@ class Controller(EventDispatcher):
|
|
|
681
691
|
@control.event
|
|
682
692
|
def on_change(value):
|
|
683
693
|
vector = _input_map.get(value // _scale, Vec2(0.0, 0.0))
|
|
684
|
-
self.
|
|
694
|
+
self.dpad = vector
|
|
685
695
|
self.dispatch_event('on_dpad_motion', self, vector)
|
|
686
696
|
|
|
687
697
|
def _initialize_controls(self) -> None:
|
|
@@ -3,6 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import os
|
|
4
4
|
import time
|
|
5
5
|
import ctypes
|
|
6
|
+
import select
|
|
6
7
|
import warnings
|
|
7
8
|
import threading
|
|
8
9
|
|
|
@@ -11,6 +12,7 @@ from ctypes import c_int16 as _s16
|
|
|
11
12
|
from ctypes import c_uint32 as _u32
|
|
12
13
|
from ctypes import c_int32 as _s32
|
|
13
14
|
from ctypes import c_int64 as _s64
|
|
15
|
+
from ctypes import c_byte as _c_byte
|
|
14
16
|
|
|
15
17
|
import pyglet
|
|
16
18
|
|
|
@@ -31,6 +33,26 @@ except ImportError:
|
|
|
31
33
|
return c.read(fd, buffers, 3072)
|
|
32
34
|
|
|
33
35
|
|
|
36
|
+
KeyMaxArray = _c_byte * (KEY_MAX // 8 + 1)
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class _EvdevInfo:
|
|
40
|
+
event_type: int
|
|
41
|
+
event_code: int
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
class EvdevButton(Button, _EvdevInfo):
|
|
45
|
+
pass
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class EvdevAbsoluteAxis(AbsoluteAxis, _EvdevInfo):
|
|
49
|
+
pass
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class EvdevRelativeAxis(RelativeAxis, _EvdevInfo):
|
|
53
|
+
pass
|
|
54
|
+
|
|
55
|
+
|
|
34
56
|
# Structures from /linux/blob/master/include/uapi/linux/input.h
|
|
35
57
|
|
|
36
58
|
class Timeval(ctypes.Structure):
|
|
@@ -158,11 +180,13 @@ class FFEvent(ctypes.Structure):
|
|
|
158
180
|
)
|
|
159
181
|
|
|
160
182
|
|
|
183
|
+
# Helper "macros" for file io:
|
|
161
184
|
EVIOCGVERSION = _IOR('E', 0x01, ctypes.c_int)
|
|
162
185
|
EVIOCGID = _IOR('E', 0x02, InputID)
|
|
163
186
|
EVIOCGNAME = _IOR_str('E', 0x06)
|
|
164
187
|
EVIOCGPHYS = _IOR_str('E', 0x07)
|
|
165
188
|
EVIOCGUNIQ = _IOR_str('E', 0x08)
|
|
189
|
+
EVIOCGKEY = _IOR_len('E', 0x18)
|
|
166
190
|
EVIOCSFF = _IOW('E', 0x80, FFEvent)
|
|
167
191
|
|
|
168
192
|
|
|
@@ -170,9 +194,13 @@ def EVIOCGBIT(fileno, ev, buffer):
|
|
|
170
194
|
return _IOR_len('E', 0x20 + ev)(fileno, buffer)
|
|
171
195
|
|
|
172
196
|
|
|
173
|
-
def EVIOCGABS(fileno,
|
|
174
|
-
|
|
175
|
-
|
|
197
|
+
def EVIOCGABS(fileno, ev, buffer=InputABSInfo()):
|
|
198
|
+
return _IOR_len('E', 0x40 + ev)(fileno, buffer)
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def get_key_state(fileno, event_code, buffer=KeyMaxArray()):
|
|
202
|
+
buffer = EVIOCGKEY(fileno, buffer)
|
|
203
|
+
return bool(buffer[event_code // 8] & (1 << (event_code % 8)))
|
|
176
204
|
|
|
177
205
|
|
|
178
206
|
def get_set_bits(bytestring):
|
|
@@ -217,18 +245,16 @@ def _create_control(fileno, event_type, event_code):
|
|
|
217
245
|
value = absinfo.value
|
|
218
246
|
minimum = absinfo.minimum
|
|
219
247
|
maximum = absinfo.maximum
|
|
220
|
-
control =
|
|
248
|
+
control = EvdevAbsoluteAxis(name, minimum, maximum, raw_name, inverted=name == 'hat_y')
|
|
221
249
|
control.value = value
|
|
222
|
-
if name == 'hat_y':
|
|
223
|
-
control.inverted = True
|
|
224
250
|
elif event_type == EV_REL:
|
|
225
251
|
raw_name = rel_raw_names.get(event_code, f'EV_REL({event_code:x})')
|
|
226
252
|
name = _rel_names.get(event_code)
|
|
227
|
-
control =
|
|
253
|
+
control = EvdevRelativeAxis(name, raw_name)
|
|
228
254
|
elif event_type == EV_KEY:
|
|
229
255
|
raw_name = key_raw_names.get(event_code, f'EV_KEY({event_code:x})')
|
|
230
256
|
name = None
|
|
231
|
-
control =
|
|
257
|
+
control = EvdevButton(name, raw_name)
|
|
232
258
|
else:
|
|
233
259
|
return None
|
|
234
260
|
control.event_type = event_type
|
|
@@ -248,7 +274,8 @@ event_types = {
|
|
|
248
274
|
|
|
249
275
|
|
|
250
276
|
class EvdevDevice(XlibSelectDevice, Device):
|
|
251
|
-
_fileno
|
|
277
|
+
_fileno: int | None
|
|
278
|
+
_poll: "select.poll | None"
|
|
252
279
|
|
|
253
280
|
def __init__(self, display, filename):
|
|
254
281
|
self._filename = filename
|
|
@@ -301,11 +328,14 @@ class EvdevDevice(XlibSelectDevice, Device):
|
|
|
301
328
|
self.control_map[(event_type, event_code)] = control
|
|
302
329
|
self.controls.append(control)
|
|
303
330
|
|
|
304
|
-
self.controls.sort(key=lambda
|
|
331
|
+
self.controls.sort(key=lambda ctrl: ctrl.event_code)
|
|
305
332
|
os.close(fileno)
|
|
306
333
|
|
|
334
|
+
self._poll = select.poll()
|
|
307
335
|
self._event_size = ctypes.sizeof(InputEvent)
|
|
308
336
|
self._event_buffer = (InputEvent * 64)()
|
|
337
|
+
self._syn_dropped = False
|
|
338
|
+
self._event_queue = []
|
|
309
339
|
|
|
310
340
|
super().__init__(display, name)
|
|
311
341
|
|
|
@@ -321,6 +351,7 @@ class EvdevDevice(XlibSelectDevice, Device):
|
|
|
321
351
|
def open(self, window=None, exclusive=False):
|
|
322
352
|
try:
|
|
323
353
|
self._fileno = os.open(self._filename, os.O_RDWR | os.O_NONBLOCK)
|
|
354
|
+
self._poll.register(self._fileno, select.POLLIN | select.POLLPRI)
|
|
324
355
|
except OSError as e:
|
|
325
356
|
raise DeviceOpenException(e)
|
|
326
357
|
|
|
@@ -333,6 +364,9 @@ class EvdevDevice(XlibSelectDevice, Device):
|
|
|
333
364
|
if not self._fileno:
|
|
334
365
|
return
|
|
335
366
|
|
|
367
|
+
if self._poll:
|
|
368
|
+
self._poll.unregister(self._fileno)
|
|
369
|
+
|
|
336
370
|
pyglet.app.platform_event_loop.select_devices.remove(self)
|
|
337
371
|
os.close(self._fileno)
|
|
338
372
|
self._fileno = None
|
|
@@ -340,6 +374,20 @@ class EvdevDevice(XlibSelectDevice, Device):
|
|
|
340
374
|
def get_controls(self):
|
|
341
375
|
return self.controls
|
|
342
376
|
|
|
377
|
+
def _resync_control_state(self):
|
|
378
|
+
"""Manually resync all Control state.
|
|
379
|
+
|
|
380
|
+
This method queries and resets the state of each Control using the appropriate
|
|
381
|
+
ioctl calls. If this causes the Control value to change, the associated events
|
|
382
|
+
will be dispatched. This is a somewhat expensive operation, but it is necessary
|
|
383
|
+
to perform in some cases (such as when a SYN_DROPPED event is received).
|
|
384
|
+
"""
|
|
385
|
+
for control in self.control_map.values():
|
|
386
|
+
if isinstance(control, EvdevButton):
|
|
387
|
+
control.value = get_key_state(self._fileno, control.event_code)
|
|
388
|
+
if isinstance(control, EvdevAbsoluteAxis):
|
|
389
|
+
control.value = EVIOCGABS(self._fileno, control.event_code).value
|
|
390
|
+
|
|
343
391
|
# Force Feedback methods
|
|
344
392
|
|
|
345
393
|
def ff_upload_effect(self, structure):
|
|
@@ -351,25 +399,51 @@ class EvdevDevice(XlibSelectDevice, Device):
|
|
|
351
399
|
return self._fileno
|
|
352
400
|
|
|
353
401
|
def poll(self):
|
|
354
|
-
return False
|
|
402
|
+
return True if self._poll.poll(0) else False
|
|
355
403
|
|
|
356
404
|
def select(self):
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
405
|
+
"""When the file descriptor is ready, read and process InputEvents.
|
|
406
|
+
|
|
407
|
+
This method has the following behavior:
|
|
408
|
+
- Read and queue all incoming input events.
|
|
409
|
+
- When a SYN_REPORT event is received, dispatch all queued events.
|
|
410
|
+
- If a SYN_DROPPED event is received, set a flag. When the next
|
|
411
|
+
SYN_REPORT event appears, drop all queued events & manually resync
|
|
412
|
+
all Control state.
|
|
413
|
+
"""
|
|
360
414
|
try:
|
|
361
415
|
bytes_read = _readv(self._fileno, self._event_buffer)
|
|
416
|
+
n_events = bytes_read // self._event_size
|
|
362
417
|
except OSError:
|
|
363
418
|
self.close()
|
|
364
419
|
return
|
|
365
420
|
|
|
366
|
-
n_events = bytes_read // self._event_size
|
|
367
|
-
|
|
368
421
|
for event in self._event_buffer[:n_events]:
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
422
|
+
|
|
423
|
+
# Mark the current chain of events as invalid and continue:
|
|
424
|
+
if (event.type, event.code) == (EV_SYN, SYN_DROPPED):
|
|
425
|
+
self._syn_dropped = True
|
|
426
|
+
continue
|
|
427
|
+
|
|
428
|
+
# Dispatch queued events when SYN_REPORT comes in:
|
|
429
|
+
if (event.type, event.code) == (EV_SYN, SYN_REPORT):
|
|
430
|
+
|
|
431
|
+
# Unless a SYN_DROPPED event has been received,
|
|
432
|
+
# in which case discard all queued events and resync:
|
|
433
|
+
if self._syn_dropped:
|
|
434
|
+
self._event_queue.clear()
|
|
435
|
+
self._syn_dropped = False
|
|
436
|
+
self._resync_control_state()
|
|
437
|
+
|
|
438
|
+
# Dispatch all queued events, then clear the queue:
|
|
439
|
+
for queued_event in self._event_queue:
|
|
440
|
+
if control := self.control_map.get((queued_event.type, queued_event.code)):
|
|
441
|
+
control.value = queued_event.value
|
|
442
|
+
self._event_queue.clear()
|
|
443
|
+
|
|
444
|
+
# This is not a SYN_REPORT or SYN_DROPPED event, so it is probably
|
|
445
|
+
# an input event. Queue it until the next SYN_REPORT event comes in:
|
|
446
|
+
self._event_queue.append(event)
|
|
373
447
|
|
|
374
448
|
|
|
375
449
|
class FFController(Controller):
|
|
@@ -467,10 +541,9 @@ class EvdevControllerManager(ControllerManager, XlibSelectDevice):
|
|
|
467
541
|
else:
|
|
468
542
|
return # No device could be created
|
|
469
543
|
|
|
470
|
-
|
|
471
|
-
if controller := self._controllers.get(name, _create_controller(device)):
|
|
544
|
+
if controller := _create_controller(device):
|
|
472
545
|
self._controllers[name] = controller
|
|
473
|
-
#
|
|
546
|
+
# Post the event in the main thread:
|
|
474
547
|
self.post_event('on_connect', controller)
|
|
475
548
|
|
|
476
549
|
def select(self):
|
|
@@ -486,6 +559,7 @@ class EvdevControllerManager(ControllerManager, XlibSelectDevice):
|
|
|
486
559
|
|
|
487
560
|
for name in disappeared:
|
|
488
561
|
if controller := self._controllers.get(name):
|
|
562
|
+
del self._controllers[name]
|
|
489
563
|
self.dispatch_event('on_disconnect', controller)
|
|
490
564
|
|
|
491
565
|
def get_controllers(self) -> list[Controller]:
|
|
@@ -551,8 +625,8 @@ def _detect_controller_mapping(device):
|
|
|
551
625
|
ABS_Z: 'lefttrigger', ABS_RZ: 'righttrigger',
|
|
552
626
|
ABS_X: 'leftx', ABS_Y: 'lefty', ABS_RX: 'rightx', ABS_RY: 'righty'}
|
|
553
627
|
|
|
554
|
-
button_controls = [control for control in device.controls if isinstance(control,
|
|
555
|
-
axis_controls = [control for control in device.controls if isinstance(control,
|
|
628
|
+
button_controls = [control for control in device.controls if isinstance(control, EvdevButton)]
|
|
629
|
+
axis_controls = [control for control in device.controls if isinstance(control, EvdevAbsoluteAxis)]
|
|
556
630
|
hat_controls = [control for control in device.controls if control.name in ('hat_x', 'hat_y')]
|
|
557
631
|
|
|
558
632
|
for i, control in enumerate(button_controls):
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Event constants from /usr/include/linux/input.h
|
|
1
|
+
"""Event constants from /usr/include/linux/input-event-codes.h"""
|
|
2
2
|
|
|
3
3
|
EV_SYN = 0x00
|
|
4
4
|
EV_KEY = 0x01
|
|
@@ -17,6 +17,7 @@ EV_MAX = 0x1f
|
|
|
17
17
|
|
|
18
18
|
SYN_REPORT = 0
|
|
19
19
|
SYN_CONFIG = 1
|
|
20
|
+
SYN_DROPPED = 3
|
|
20
21
|
|
|
21
22
|
# Keys and buttons
|
|
22
23
|
|
|
@@ -575,14 +575,16 @@ class XInputController(Controller):
|
|
|
575
575
|
def on_change(value):
|
|
576
576
|
normalized_value = value * scale + bias
|
|
577
577
|
setattr(self, name, normalized_value)
|
|
578
|
-
self.
|
|
578
|
+
self.leftanalog = Vec2(self.leftx, self.lefty)
|
|
579
|
+
self.dispatch_event('on_stick_motion', self, "leftstick", self.leftanalog)
|
|
579
580
|
|
|
580
581
|
elif name in ("rightx", "righty"):
|
|
581
582
|
@control.event
|
|
582
583
|
def on_change(value):
|
|
583
584
|
normalized_value = value * scale + bias
|
|
584
585
|
setattr(self, name, normalized_value)
|
|
585
|
-
self.
|
|
586
|
+
self.rightanalog = Vec2(self.rightx, self.righty)
|
|
587
|
+
self.dispatch_event('on_stick_motion', self, "rightstick", self.rightanalog)
|
|
586
588
|
|
|
587
589
|
def _add_button(self, control, name):
|
|
588
590
|
|
|
@@ -592,7 +594,8 @@ class XInputController(Controller):
|
|
|
592
594
|
target, bias = {'dpleft': ('dpadx', -1.0), 'dpright': ('dpadx', 1.0),
|
|
593
595
|
'dpdown': ('dpady', -1.0), 'dpup': ('dpady', 1.0)}[name]
|
|
594
596
|
setattr(self, target, bias * value)
|
|
595
|
-
self.
|
|
597
|
+
self.dpad = Vec2(self.dpadx, self.dpady)
|
|
598
|
+
self.dispatch_event('on_dpad_motion', self, self.dpad)
|
|
596
599
|
else:
|
|
597
600
|
@control.event
|
|
598
601
|
def on_change(value):
|
|
@@ -41,7 +41,7 @@ from typing import TYPE_CHECKING
|
|
|
41
41
|
if TYPE_CHECKING:
|
|
42
42
|
from ctypes import Structure, c_int, c_uint
|
|
43
43
|
from typing import Callable, Union
|
|
44
|
-
c_data =
|
|
44
|
+
c_data = type[Structure] | type[c_int] | type[c_uint]
|
|
45
45
|
|
|
46
46
|
|
|
47
47
|
_IOC_NRBITS = 8
|
|
@@ -64,7 +64,7 @@ _IOC_READ = 2
|
|
|
64
64
|
# 'code' instead of 'type' to indicate the ioctl "magic number" ('H', 'E', etc.).
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
def _IOC(io_dir: _IOC_NONE
|
|
67
|
+
def _IOC(io_dir: Union[_IOC_NONE, _IOC_READ, _IOC_WRITE], code: int, nr: int, size: int) -> int:
|
|
68
68
|
return (io_dir << _IOC_DIRSHIFT) | (code << _IOC_TYPESHIFT) | (nr << _IOC_NRSHIFT) | (size << _IOC_SIZESHIFT)
|
|
69
69
|
|
|
70
70
|
|
|
@@ -1387,7 +1387,10 @@ class Mat4(_typing.NamedTuple):
|
|
|
1387
1387
|
|
|
1388
1388
|
|
|
1389
1389
|
class Quaternion(_typing.NamedTuple):
|
|
1390
|
-
"""Quaternion.
|
|
1390
|
+
"""Quaternion.
|
|
1391
|
+
|
|
1392
|
+
Quaternions are 4-dimensional complex numbers, useful for describing 3D rotations.
|
|
1393
|
+
"""
|
|
1391
1394
|
|
|
1392
1395
|
w: float = 1.0
|
|
1393
1396
|
x: float = 0.0
|
|
@@ -1403,6 +1406,8 @@ class Quaternion(_typing.NamedTuple):
|
|
|
1403
1406
|
raise NotImplementedError
|
|
1404
1407
|
|
|
1405
1408
|
def to_mat4(self) -> Mat4:
|
|
1409
|
+
"""Calculate a 4x4 transform matrix which applies a rotation."""
|
|
1410
|
+
|
|
1406
1411
|
w = self.w
|
|
1407
1412
|
x = self.x
|
|
1408
1413
|
y = self.y
|
|
@@ -1428,6 +1433,8 @@ class Quaternion(_typing.NamedTuple):
|
|
|
1428
1433
|
return Mat4(a, b, c, 0.0, e, f, g, 0.0, i, j, k, 0.0, 0.0, 0.0, 0.0, 1.0)
|
|
1429
1434
|
|
|
1430
1435
|
def to_mat3(self) -> Mat3:
|
|
1436
|
+
"""Create a 3x3 rotation matrix."""
|
|
1437
|
+
|
|
1431
1438
|
w = self.w
|
|
1432
1439
|
x = self.x
|
|
1433
1440
|
y = self.y
|
|
@@ -1453,21 +1460,34 @@ class Quaternion(_typing.NamedTuple):
|
|
|
1453
1460
|
return Mat3(*(a, b, c, e, f, g, i, j, k))
|
|
1454
1461
|
|
|
1455
1462
|
def length(self) -> float:
|
|
1456
|
-
"""Calculate the length of the
|
|
1457
|
-
|
|
1458
|
-
The distance between the coordinates and the origin.
|
|
1459
|
-
"""
|
|
1463
|
+
"""Calculate the length of the quaternion from the origin."""
|
|
1460
1464
|
return _math.sqrt(self.w**2 + self.x**2 + self.y**2 + self.z**2)
|
|
1461
1465
|
|
|
1462
1466
|
def conjugate(self) -> Quaternion:
|
|
1467
|
+
"""Calculate the conjugate of this quaternion.
|
|
1468
|
+
|
|
1469
|
+
This operation:
|
|
1470
|
+
#. leaves the :py:attr:`.w` component alone
|
|
1471
|
+
#. inverts the sign of the :py:attr:`.x`, :py:attr:`.y`, and :py:attr:`.z` components
|
|
1472
|
+
|
|
1473
|
+
"""
|
|
1463
1474
|
return Quaternion(self.w, -self.x, -self.y, -self.z)
|
|
1464
1475
|
|
|
1465
1476
|
def dot(self, other: Quaternion) -> float:
|
|
1477
|
+
"""Calculate the dot product with another quaternion."""
|
|
1466
1478
|
a, b, c, d = self
|
|
1467
1479
|
e, f, g, h = other
|
|
1468
1480
|
return a * e + b * f + c * g + d * h
|
|
1469
1481
|
|
|
1470
1482
|
def normalize(self) -> Quaternion:
|
|
1483
|
+
"""Calculate a unit quaternion from the instance.
|
|
1484
|
+
|
|
1485
|
+
The returned quaternion will be a scaled-down version
|
|
1486
|
+
of the instance which has:
|
|
1487
|
+
|
|
1488
|
+
* a length of ``1``
|
|
1489
|
+
* the same relative of its components
|
|
1490
|
+
"""
|
|
1471
1491
|
m = self.length()
|
|
1472
1492
|
if m == 0:
|
|
1473
1493
|
return self
|