pyglet 2.1.3__tar.gz → 2.1.5__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.3 → pyglet-2.1.5}/PKG-INFO +1 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/RELEASE_NOTES +21 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/qt_sprite_preview.py +51 -45
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/mouse.rst +2 -0
- pyglet-2.1.5/doc/programming_guide/shapes.rst +162 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/torus.py +4 -4
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/text/advanced_font.py +9 -8
- pyglet-2.1.5/examples/text/user_bitmap_font.py +92 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/__init__.py +21 -9
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/__init__.pyi +3 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/app/cocoa.py +6 -3
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/win32.py +14 -15
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/xlib_vidmoderestore.py +1 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/extlibs/earcut.py +2 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/__init__.py +3 -3
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/base.py +118 -51
- pyglet-2.1.5/pyglet/font/dwrite/__init__.py +1379 -0
- pyglet-2.1.5/pyglet/font/dwrite/d2d1_lib.py +637 -0
- pyglet-2.1.5/pyglet/font/dwrite/d2d1_types_lib.py +60 -0
- pyglet-2.1.5/pyglet/font/dwrite/dwrite_lib.py +1577 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/fontconfig.py +79 -16
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/freetype.py +252 -77
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/freetype_lib.py +234 -125
- pyglet-2.1.5/pyglet/font/harfbuzz/__init__.py +275 -0
- pyglet-2.1.5/pyglet/font/harfbuzz/harfbuzz_lib.py +212 -0
- pyglet-2.1.5/pyglet/font/quartz.py +623 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/user.py +18 -11
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/win32.py +9 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/wgl.py +94 -87
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/wglext_arb.py +472 -218
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/wglext_nv.py +410 -188
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gui/widgets.py +6 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/bmp.py +3 -5
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/gdiplus.py +28 -9
- pyglet-2.1.5/pyglet/image/codecs/wic.py +345 -0
- pyglet-2.1.3/pyglet/image/codecs/wic.py → pyglet-2.1.5/pyglet/image/codecs/wincodec_lib.py +31 -254
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/base.py +3 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/macos/darwin_hid.py +28 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/win32/directinput.py +2 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/win32/xinput.py +10 -9
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/lib.py +14 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/darwin/cocoapy/cocoalibs.py +74 -3
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/darwin/coreaudio.py +0 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/__init__.py +4 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/com.py +65 -12
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/constants.py +1 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/dinput.py +1 -9
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/types.py +72 -8
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/coreaudio.py +1 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/wmf.py +93 -72
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/devices/win32.py +5 -4
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/directsound/lib_dsound.py +4 -4
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/xaudio2/interface.py +21 -17
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/xaudio2/lib_xaudio2.py +42 -25
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/shapes.py +1 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/document.py +7 -53
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/formats/attributed.py +3 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/formats/plaintext.py +1 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/formats/structured.py +1 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/layout/base.py +76 -68
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/layout/incremental.py +38 -8
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/layout/scrolling.py +1 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/runlist.py +2 -114
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/win32/__init__.py +1 -3
- {pyglet-2.1.3 → pyglet-2.1.5}/pyproject.toml +1 -1
- pyglet-2.1.5/tests/data/fonts/action_man_atlas.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/font/test_freetype_face.py +5 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_caret_color.py +2 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_content_valign.py +2 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_html.py +46 -41
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_inline_elements.py +3 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_inline_elements_style_change.py +3 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_multiline_wrap.py +2 -2
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_plain.py +2 -1
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/test_style.py +3 -2
- pyglet-2.1.3/doc/programming_guide/shapes.rst +0 -88
- pyglet-2.1.3/pyglet/font/directwrite.py +0 -2798
- pyglet-2.1.3/pyglet/font/quartz.py +0 -303
- {pyglet-2.1.3 → pyglet-2.1.5}/.coveragerc +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/.github/ISSUE_TEMPLATE/questions--or-other.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/.github/workflows/codeql.yml +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/.github/workflows/unittests.yml +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/.gitignore +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/.readthedocs.yml +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/LICENSE +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/MANIFEST.in +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/README.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/aseprite_codec/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/aseprite_codec/asedemo.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/aseprite_codec/aseprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/aseprite_codec/running.ase +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/logo3d/logo3d.jpg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/logo3d/logo3d.obj.zip +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/logo3d/logo3d.wings +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/scenemanager.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/contrib/toys/follow_mouse.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/Makefile +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/_static/css/custom.css +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/_static/favicon.ico +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/_static/logo.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/_static/logo5.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/_static/relatedlogo.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/conf.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/external_resources.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/index.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/contributing.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/dist.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/doc.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/generated.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/gl.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/media_logging_manual.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/media_manual.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/testing.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/virtualenv.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/wraptypes-class.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/internal/wraptypes.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/make.bat +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/app.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/clock.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/customtypes.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/display.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/event.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/font.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/gl.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/graphics/allocation.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/graphics/index.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/graphics/shader.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/graphics/vertexbuffer.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/graphics/vertexdomain.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/gui.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/image/animation.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/image/atlas.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/image/buffer.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/image/index.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/info.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/input.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/math.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/media.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/media_synthesis.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/models.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/pyglet.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/resource.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/shapes.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/sprite.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/text/caret.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/text/document.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/text/index.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/text/layout.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/window.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/window_key.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/modules/window_mouse.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/context.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/debug.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/eventloop.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/events.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/examplegame.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/gl.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/gui.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/image.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/abstract_image.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/abstract_image.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/buffer_image.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/buffer_image.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/context_flow.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/context_flow.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_crosshair.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_default.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_hand.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_no.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_size_down.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_size_left.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_size_left_right.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_size_right.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_size_up.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_size_up_down.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_text.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_mac_wait.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_crosshair.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_default.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_hand.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_help.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_no.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_size.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_size_left_right.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_size_nesw.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_size_nwse.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_size_up_down.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_text.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_wait.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/cursor_win_wait_arrow.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/explosion.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/font_metrics.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/font_metrics.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/image_classes.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/image_classes.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/image_grid.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/image_grid.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/image_sequence.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/image_sequence.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/mouse_coordinates.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/mouse_coordinates.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/screens.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/screens.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/text_classes.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/text_classes.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_location.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_location.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_osx_borderless.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_osx_default.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_osx_dialog.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_osx_tool.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_xp_default.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_xp_dialog.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_xp_overlay.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_xp_tool.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/img/window_xp_transparent.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/input.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/installation.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/keyboard.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/math.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/media.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/migration.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/models.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/opengles.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/options.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/quickstart.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/rendering.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/resources.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/text.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/time.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/programming_guide/windowing.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/doc/requirements.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/clipboard.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/dpi_scaled_window.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/events/events_key_state_handler.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/events/register_event_type.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/events/window_events.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/events/window_platform_event.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/file_dialog.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/resources/asteroid.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/resources/bullet.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/resources/bullet.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/resources/engine_flame.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/resources/player.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version1/asteroid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version1/game/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version1/game/load.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version1/game/resources.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version2/asteroid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version2/game/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version2/game/load.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version2/game/physicalobject.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version2/game/player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version2/game/resources.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version3/asteroid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version3/game/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version3/game/load.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version3/game/physicalobject.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version3/game/player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version3/game/resources.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version3/game/util.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/asteroid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/asteroid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/bullet.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/load.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/physicalobject.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/resources.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version4/game/util.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/asteroid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/asteroid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/bullet.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/load.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/physicalobject.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/resources.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/game/version5/game/util.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/graphics/image_convert.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/graphics/image_display.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/gui/bar.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/gui/button_hover.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/gui/button_pressed.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/gui/button_unpressed.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/gui/knob.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/gui/widgets.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/hello_world.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/input/apple_remote.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/input/controller.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/input/input.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/input/joystick.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/input/tablet.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/media_info.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/media_player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/noisy/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/noisy/ball.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/noisy/ball.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/noisy/noisy.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/reader.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/res/bass.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/res/drums.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/res/guitar.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/res/piano.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/res/space.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/soundspace/soundspace.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/synthesizer.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/media/video.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/model/box.mtl +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/model/box.obj +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/model/fpscamera.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/model/logo3d.mtl +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/model/logo3d.obj +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/model/model.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/model/pyglet.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/compute_shader.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/egl_context.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/minimal_shader.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/opengl_context.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/opengl_core.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/opengl_scissor.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/opengl/pyglet.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/programming_guide/animation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/programming_guide/dinosaur.gif +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/programming_guide/events.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/programming_guide/hello_world.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/programming_guide/image_viewer.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/programming_guide/kitten.jpg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/programming_guide/window_subclass.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/resources/Brick1Blue.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/resources/Brick1Crack3.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/resources/Brick1Gray.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/resources/kitten.jpg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/resources/pyglet.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/shapes.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/sprite/depth_sprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/sprite/display_sprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/sprite/multi_texture_sprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/sprite/sprite_batching.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/text/html_label.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/text/pyglet.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/text/text_input.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/timer.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/window/camera.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/window/camera_group.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/window/fixed_resolution.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/window/fps_change.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/window/multiple_windows.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/window/overlay_window.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/examples/window/transparent_window.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/dist_field/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/dist_field/genfield.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/dist_field/py.df.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/dist_field/py.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/dist_field/renderfield.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/flaccodec.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/hello_world.svg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/instancing/sprite_instance.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/instancing/sprite_instance_object.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/multitexture_sprite/multitexturesprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/spritebenchmark.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/svg_test.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/wayland/gbm_egl_context.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/experimental/win32priority.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/make.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/app/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/app/base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/app/win32.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/app/xlib.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/clock.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/customtypes.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/__init__.pyi +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/cocoa.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/headless.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/display/xlib.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/event.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/experimental/README.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/experimental/geoshader_sprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/experimental/hidraw.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/experimental/jobs.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/experimental/multitexture_sprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/experimental/net.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/experimental/particles.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/extlibs/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/extlibs/png.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/font/ttf.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/agl.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/cocoa.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/gl.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/gl_compat.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/gl_info.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/glx.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/glx_info.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/glxext_arb.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/glxext_mesa.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/glxext_nv.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/headless.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/lib.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/lib_agl.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/lib_glx.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/lib_wgl.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/wgl_info.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/win32.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gl/xlib.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/graphics/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/graphics/allocation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/graphics/instance.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/graphics/shader.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/graphics/vertexarray.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/graphics/vertexbuffer.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/graphics/vertexdomain.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gui/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gui/frame.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/gui/ninepatch.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/animation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/atlas.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/buffer.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/dds.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/gdkpixbuf2.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/gif.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/pil.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/png.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/quartz.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/image/codecs/s3tc.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/info.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/controller.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/controller_db.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/linux/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/linux/evdev.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/linux/evdev_constants.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/linux/x11_xinput.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/linux/x11_xinput_tablet.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/macos/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/win32/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/input/win32/wintab.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/darwin/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/darwin/cocoapy/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/darwin/cocoapy/cocoatypes.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/darwin/cocoapy/runtime.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/darwin/quartzkey.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/egl/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/egl/egl.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/egl/eglext.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/egl/lib.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/ioctl.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/wayland/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/wayland/gbm.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/wayland/xkbcommon.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/context_managers.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/libwintab.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/win32/winkey.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/x11/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/x11/cursorfont.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/x11/xf86vmode.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/x11/xinerama.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/x11/xinput.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/x11/xlib.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/libs/x11/xsync.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/math.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/buffered_logger.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg_lib/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg_lib/compat.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg_lib/libavcodec.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg_lib/libavformat.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg_lib/libavutil.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg_lib/libswresample.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/ffmpeg_lib/libswscale.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/gstreamer.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/pyogg.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/codecs/wave.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/devices/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/devices/base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/directsound/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/directsound/adaptation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/directsound/exceptions.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/directsound/interface.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/listener.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/openal/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/openal/adaptation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/openal/interface.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/openal/lib_alc.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/openal/lib_openal.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/pulse/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/pulse/adaptation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/pulse/interface.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/pulse/lib_pulseaudio.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/silent/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/silent/adaptation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/xaudio2/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/drivers/xaudio2/adaptation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/exceptions.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/instrumentation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/player_worker_thread.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/media/synthesis.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/model/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/model/codecs/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/model/codecs/base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/model/codecs/gltf.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/model/codecs/obj.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/py.typed +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/resource.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/sprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/caret.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/formats/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/formats/html.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/text/layout/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/util.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/cocoa/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/cocoa/pyglet_delegate.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/cocoa/pyglet_textview.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/cocoa/pyglet_view.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/cocoa/pyglet_window.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/cocoa/systemcursor.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/event.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/headless/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/key.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/mouse.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pyglet/window/xlib/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/pytest.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/setup.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/annotations.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/base/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/base/data.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/base/event_loop.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/base/interactive.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/base/performance.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/conftest.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/fonts/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/fonts/action_man.ttf +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/fonts/action_man_bold.ttf +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/fonts/action_man_bold_italic.ttf +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/fonts/action_man_italic.ttf +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/fonts/courR12-ISO8859-1.pcf +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/8bpp.gif +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/cursor.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/dinosaur.gif +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/gdk_close.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/grey_background.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/icon1.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/icon_size1.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/icon_size2.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/icon_size3.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/icon_size4.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/icon_size5.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/l.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/la.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/multitexture.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_16bpp.bmp +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_1bpp.bmp +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_24bpp.bmp +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_32bpp.bmp +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_4bpp.bmp +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_8bpp.bmp +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_8bpp.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_8bpp_trans.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgb_dxt1.dds +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgba.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgba_32bpp.bmp +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgba_dxt1.dds +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgba_dxt3.dds +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/rgba_dxt5.dds +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/images/tests.interactive.test_interactive_test_base._Test.test_1.001.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/alert.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/login.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/logout.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/receive.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/send.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_sawtooth_16_11025_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_sawtooth_16_44800_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_silence_16_11025_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_silence_16_44800_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_simplefm_16_11025_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_simplefm_16_44800_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_sine_16_11025_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_sine_16_44800_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_square_16_11025_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_square_16_44800_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_triangle_16_11025_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/media/synthesis_triangle_16_44800_1ch.wav +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/models/logo3d.mtl +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/data/models/logo3d.obj +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/app/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/app/test_eventloop.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/conftest.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/font/test_fontconfig.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/graphics/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/graphics/test_allocation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/graphics/test_batch_migration.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/graphics/test_shaders.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/image/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/image/test_gdkpixbuf2.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/image/test_imagegrid.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/image/test_texture3d.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/media/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/media/mock_player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/media/test_directsound.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/media/test_driver.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/media/test_openal.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/media/test_player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/media/test_pulse.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/model/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/model/test_loading.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/platform/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/platform/test_win_context_managers.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/platform/test_win_multicore_clock.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/dir1/dir1/f3.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/dir1/f2.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/dir1/res.zip +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/dir2/f6.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/f1.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/rgbm.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/test_resource_image_loading.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/resource/test_resource_loading.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/test_integrations.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/text/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/text/test_empty_document.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/text/test_label_creation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/text/test_layout_creation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/window/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/window/test_context_share.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/window/test_event_sequence.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/integration/window/test_window_caption.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/conftest.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/image/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/image/test_image.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/media/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/media/test_player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/screenshots/committed/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/screenshots/session/README +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/shapes/test_shapes.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/test_interactive_test_base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/text/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/test_window_events.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/test_window_fullscreen.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/test_window_modes.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/test_window_multisample.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/test_window_open.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/test_window_settings.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/test_window_styles.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/window/window_util.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/interactive/windowed_test_base.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/requirements.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/conftest.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/math/test_mat.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/math/test_quat.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/math/test_vec2.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/math/test_vec3.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/math/test_vec4.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/media/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/media/test_listener.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/media/test_player.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/media/test_sources.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/media/test_synthesis.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/platform/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/platform/test_mac_objc.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/shader/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/shader/conftest.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/shader/test_shader.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/shapes/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/shapes/conftest.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/shapes/test_bordered_rectangle.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/shapes/test_shapes.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_atlas.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_clock.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_clock_freq.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_events.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_font.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_input.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_resource_path.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_sprite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/test_text.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/text/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/text/test_caret.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tests/unit/text/test_layout.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/al_info.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/bokeh_timeline.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/compare.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/configure.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/extractors.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/fs.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/mp.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/mpexceptions.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/playmany.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/readme_ffmpeg_debbuging_branch.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/readme_run_tests.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/report.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/reports.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/retry_crashed.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/run_test_suite.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/summarize.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/test_instrumentation.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/ffmpeg/timeline.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/gencontrollerdb.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/gengl.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/genwrappers.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/gl.template +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/gl.xml +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/gl_info.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/inspect_font.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/requirements.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wgl.h +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wraptypes/__init__.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wraptypes/cparser.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wraptypes/ctypesparser.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wraptypes/lex.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wraptypes/preprocessor.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wraptypes/wrap.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/tools/wraptypes/yacc.py +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/LICENSE.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/README.rst +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/assets/favicon.ico +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/assets/static/css/example-custom-styles.css +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/assets/static/images/pyglet.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/404.html/contents.lr +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/404.html/ngc-5793.jpg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/authors/benjamin/contents.lr +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/authors/benjamin/pyglet.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/authors/contents.lr +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/blog/contents.lr +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/blog/welcome-blog/contents.lr +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/contents.lr +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/content/eclipse.jpg +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/pyglet.lektorproject +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/AUTHORS.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/CHANGELOG.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/CONTRIBUTING.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/LICENSE.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/NOTICE.txt +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/README.md +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/css/bootstrap.css +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/css/icomoon.css +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/css/magnific-popup.css +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/css/style.css +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.ttf +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.ttf +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/fonts/icomoon/icomoon.woff +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/images/Preloader_2.gif +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/images/placeholder_person.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/jquery-3.3.1.min.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/jquery.easing.min.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/jquery.magnific-popup.min.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/jquery.stellar.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/jquery.stellar.min.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/jquery.waypoints.min.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/magnific-popup-options.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/main-singlelayout.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/assets/static/js/main.js +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/content.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/gallery.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/gallery_item.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/member.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/mission.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/mission_tab.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/service.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/services.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/flowblocks/team.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/images/blog-index.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/images/full-blog.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/images/full-page.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/images/gallery-404.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/images/gallery-singlepage.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/images/mainpage-screenshots.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/images/responsive-layout.png +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/models/404.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/models/author.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/models/authors.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/models/blog-post.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/models/blog.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/models/page.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/models/single-layout.ini +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/404.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/author.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/authors.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blocks/content.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blocks/gallery.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blocks/mission.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blocks/services.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blocks/team.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blog-layout.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blog-post.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/blog.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/layout.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/macros/blog.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/macros/pagination.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/none.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/page.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/templates/single-layout.html +0 -0
- {pyglet-2.1.3 → pyglet-2.1.5}/website/themes/lektor-icon/theme.ini +0 -0
|
@@ -1,3 +1,24 @@
|
|
|
1
|
+
pyglet 2.1.5
|
|
2
|
+
|
|
3
|
+
Changes
|
|
4
|
+
-------
|
|
5
|
+
- docs: Add shape guide crossrefs (#1291)
|
|
6
|
+
- Updated the opengl torus example to work with the material updates in 3.1 (#1281)
|
|
7
|
+
- Add homebrew lib search location for Apple Silicon.
|
|
8
|
+
- Bump Qt example to use PySide6 and PyQt6 (#1305)
|
|
9
|
+
|
|
10
|
+
Bugfixes
|
|
11
|
+
--------
|
|
12
|
+
- shapes.earcut: Fix int casting bug for large polygons (#1282)
|
|
13
|
+
- Linux: Use dotclock instead of rate in xlib vidmoderestore (#1285)
|
|
14
|
+
- tests: Fix many interactive tests, and other test fixes
|
|
15
|
+
- app: Fix run(None) crashing on macOS
|
|
16
|
+
- docs: Correct the docstring for the start_angle of an arc to indicate it is in degrees and not radians (#1290)
|
|
17
|
+
- controller: Fix dpad bias for controller.min > 0 (#1296)
|
|
18
|
+
- controller: Only use 0x1 desktop page axis for controller indexing on macOS (#1297)
|
|
19
|
+
- gui: Fix the position range of the slider knob when repositioning the slider (#1299)
|
|
20
|
+
|
|
21
|
+
|
|
1
22
|
pyglet 2.1.3
|
|
2
23
|
|
|
3
24
|
Changes
|
|
@@ -1,44 +1,45 @@
|
|
|
1
1
|
"""An example sprite previewer using Qt and pyglet together.
|
|
2
2
|
|
|
3
3
|
It allows you to edit the fragment and vertex shaders, then compile them
|
|
4
|
-
to get a live view. Errors and success will be printed to the console.
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
to get a live view. Errors and success will be printed to the console. Users
|
|
5
|
+
running GNOME on Linux may need the --use-qt-file-dialog flag to prevent invisible
|
|
6
|
+
window issues. A brief feature overview is located after the license notes below.
|
|
7
7
|
|
|
8
8
|
Important license notes:
|
|
9
9
|
|
|
10
10
|
1. Libraries can use licenses which impose requirements beyond those of
|
|
11
11
|
pyglet's BSD-style style license.
|
|
12
|
-
2. This example defaults to using
|
|
13
|
-
|
|
14
|
-
3.
|
|
12
|
+
2. This example defaults to using PySide6 by default, but can also use
|
|
13
|
+
PyQt6 due to their nearly-identical APIs.
|
|
14
|
+
3. PySide6 uses the LGPL license while PyQt6 uses a GPL / commercial
|
|
15
15
|
dual-license approach.
|
|
16
16
|
|
|
17
17
|
To the best knowledge of the contributors, this example and derivatives
|
|
18
18
|
are only obligated to meet the restrictions of the LGPL because it does
|
|
19
|
-
not use any
|
|
19
|
+
not use any PyQt6-specific features. Please see the following for more
|
|
20
20
|
information:
|
|
21
21
|
|
|
22
22
|
* The licenses and documentation for the libraries you plan to use
|
|
23
|
-
*
|
|
23
|
+
* This guide for prior versions of PySide and PyQt:
|
|
24
|
+
thttps://www.pythonguis.com/faq/pyqt5-vs-pyside2/
|
|
24
25
|
|
|
25
|
-
|
|
26
|
+
For additional certainty, please consult a legal professional.
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
Example features:
|
|
29
30
|
|
|
30
31
|
You can choose the current Qt binding in two ways:
|
|
31
32
|
|
|
32
|
-
1. Add
|
|
33
|
+
1. Add PySide6 or PyQt6 as the first argument after the launch command
|
|
33
34
|
when running the script in the terminal
|
|
34
|
-
2. Set the PYGLET_QT_BACKEND environment variable to either
|
|
35
|
-
|
|
35
|
+
2. Set the PYGLET_QT_BACKEND environment variable to either PySide6 or
|
|
36
|
+
PyQt6.
|
|
36
37
|
|
|
37
38
|
The priority order is:
|
|
38
39
|
|
|
39
40
|
1. positional argument
|
|
40
41
|
2. environment variable
|
|
41
|
-
3. default to
|
|
42
|
+
3. default to PySide6
|
|
42
43
|
|
|
43
44
|
To load images, choose File -> Open Image.
|
|
44
45
|
|
|
@@ -65,17 +66,17 @@ from typing import TYPE_CHECKING, Final, Mapping
|
|
|
65
66
|
# Constants for choosing a Qt backend and summarizing their licensing
|
|
66
67
|
ENV_VARIABLE: Final[str] = 'PYGLET_QT_BACKEND'
|
|
67
68
|
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
PYSIDE6: Final[str] = 'PySide6'
|
|
70
|
+
PYQT6: Final[str] = 'PyQt6'
|
|
70
71
|
|
|
71
72
|
valid_backends: Final[dict[str, str]] = {
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
PYSIDE6: "LGPL; may allow releasing under non-GPL licenses",
|
|
74
|
+
PYQT6: "Dual GPL / Commercial license; requires GPL or a fee",
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
# Default to
|
|
77
|
+
# Default to PySide6 as part of allowing non-GPL licenses
|
|
77
78
|
# This is necessary but not sufficient to allow this.
|
|
78
|
-
DEFAULT: Final[str] =
|
|
79
|
+
DEFAULT: Final[str] = PYSIDE6
|
|
79
80
|
|
|
80
81
|
|
|
81
82
|
# Argument parser for run-time config as __main__
|
|
@@ -83,8 +84,8 @@ parser = argparse.ArgumentParser(
|
|
|
83
84
|
description=dedent("""\
|
|
84
85
|
A sprite & shader previewer using Qt and pyglet together.
|
|
85
86
|
|
|
86
|
-
It defaults to
|
|
87
|
-
be helpful to users who want to avoid spreading
|
|
87
|
+
It defaults to PySide6, but can run on PyQt6. The details of how may
|
|
88
|
+
be helpful to users who want to avoid spreading PyQt6's GPL license
|
|
88
89
|
while using it as a fallback. See the docstrings and comments in the
|
|
89
90
|
source to learn more.
|
|
90
91
|
"""),
|
|
@@ -138,19 +139,21 @@ print(f"Selected {backend} as the Qt binding from the {reason}'s value.")
|
|
|
138
139
|
# Perform UI imports according to the detected configuration
|
|
139
140
|
import pyglet
|
|
140
141
|
|
|
141
|
-
# Use
|
|
142
|
-
# to help avoid infection by
|
|
143
|
-
# uses of
|
|
142
|
+
# Use PySide6 for type checking, static analysis, tests, and linting
|
|
143
|
+
# to help avoid infection by PyQt6's GPL license since tools will mark
|
|
144
|
+
# uses of PyQt6-specific features as missing. For example, pyright is
|
|
144
145
|
# one of the strict type checking and linting tools which can help.
|
|
145
|
-
if TYPE_CHECKING or backend ==
|
|
146
|
-
from
|
|
147
|
-
from
|
|
148
|
-
from
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
from
|
|
153
|
-
from
|
|
146
|
+
if TYPE_CHECKING or backend == PYSIDE6:
|
|
147
|
+
from PySide6 import QtCore, QtWidgets, QtGui
|
|
148
|
+
from PySide6.QtGui import QWheelEvent
|
|
149
|
+
from PySide6.QtWidgets import QFileDialog
|
|
150
|
+
from PySide6.QtOpenGLWidgets import QOpenGLWidget
|
|
151
|
+
|
|
152
|
+
elif backend == PYQT6:
|
|
153
|
+
from PyQt6 import QtCore, QtWidgets, QtGui
|
|
154
|
+
from PyQt6.QtGui import QWheelEvent
|
|
155
|
+
from PyQt6.QtWidgets import QFileDialog
|
|
156
|
+
from PyQt6.QtOpenGLWidgets import QOpenGLWidget
|
|
154
157
|
|
|
155
158
|
else: # Handle import edge cases
|
|
156
159
|
raise ValueError(
|
|
@@ -348,7 +351,7 @@ class Ui_MainWindow:
|
|
|
348
351
|
self.sprite = None
|
|
349
352
|
self.program = None
|
|
350
353
|
|
|
351
|
-
def get_file_dialog_options(self) -> QFileDialog.
|
|
354
|
+
def get_file_dialog_options(self) -> QFileDialog.Option:
|
|
352
355
|
"""Convert instance attributes to a file dialog options object.
|
|
353
356
|
|
|
354
357
|
At the moment, it supports choosing which dialog to use. This is
|
|
@@ -358,9 +361,9 @@ class Ui_MainWindow:
|
|
|
358
361
|
You may want to expand on this in your own application with
|
|
359
362
|
additional options.
|
|
360
363
|
"""
|
|
361
|
-
options = QFileDialog.
|
|
364
|
+
options = QFileDialog.Option()
|
|
362
365
|
if not self.use_native_file_dialog:
|
|
363
|
-
options |= QFileDialog.DontUseNativeDialog
|
|
366
|
+
options |= QFileDialog.Option.DontUseNativeDialog
|
|
364
367
|
|
|
365
368
|
return options
|
|
366
369
|
|
|
@@ -383,7 +386,10 @@ class Ui_MainWindow:
|
|
|
383
386
|
self.verticalLayout = QtWidgets.QVBoxLayout()
|
|
384
387
|
self.verticalLayout.setObjectName("verticalLayout")
|
|
385
388
|
self.label = QtWidgets.QLabel(self.centralwidget)
|
|
386
|
-
self.label.setAlignment(
|
|
389
|
+
self.label.setAlignment(
|
|
390
|
+
QtCore.Qt.AlignmentFlag.AlignLeading
|
|
391
|
+
| QtCore.Qt.AlignmentFlag.AlignLeft
|
|
392
|
+
| QtCore.Qt.AlignmentFlag.AlignVCenter)
|
|
387
393
|
self.label.setObjectName("label")
|
|
388
394
|
self.verticalLayout.addWidget(self.label)
|
|
389
395
|
self.vertex_source_edit = QtWidgets.QTextEdit(self.centralwidget)
|
|
@@ -428,23 +434,23 @@ class Ui_MainWindow:
|
|
|
428
434
|
MainWindow.setStatusBar(self.statusbar)
|
|
429
435
|
|
|
430
436
|
# Add menu bar menus, entries, and hotkeys
|
|
431
|
-
self.actionOpen_Image =
|
|
437
|
+
self.actionOpen_Image = QtGui.QAction(MainWindow)
|
|
432
438
|
self.actionOpen_Image.setObjectName("actionOpen_Image")
|
|
433
439
|
self.actionOpen_Image.triggered.connect(self.loadImages)
|
|
434
440
|
self.actionOpen_Image.setShortcut("Ctrl+I")
|
|
435
441
|
|
|
436
|
-
self.actionOpen_Shader =
|
|
442
|
+
self.actionOpen_Shader = QtGui.QAction(MainWindow)
|
|
437
443
|
self.actionOpen_Shader.setObjectName("actionOpen_Shader")
|
|
438
444
|
self.actionOpen_Shader.triggered.connect(self.loadShaders)
|
|
439
445
|
self.actionOpen_Shader.setShortcut("Ctrl+O")
|
|
440
446
|
|
|
441
|
-
self.actionSave_Shader =
|
|
447
|
+
self.actionSave_Shader = QtGui.QAction(MainWindow)
|
|
442
448
|
self.actionSave_Shader.setObjectName("actionSave_Shader")
|
|
443
449
|
self.actionSave_Shader.triggered.connect(self.saveShaders)
|
|
444
450
|
self.actionSave_Shader.setStatusTip('Saves both Shader Files')
|
|
445
451
|
self.actionSave_Shader.setShortcut("Ctrl+S")
|
|
446
452
|
|
|
447
|
-
self.actionExit =
|
|
453
|
+
self.actionExit = QtGui.QAction(MainWindow)
|
|
448
454
|
self.actionExit.triggered.connect(self.closeProgram)
|
|
449
455
|
self.actionExit.setObjectName("actionExit")
|
|
450
456
|
self.menuFile.addAction(self.actionOpen_Image)
|
|
@@ -457,7 +463,7 @@ class Ui_MainWindow:
|
|
|
457
463
|
|
|
458
464
|
self.imageMenu = QtWidgets.QMenu(self.menubar)
|
|
459
465
|
self.imageMenu.setObjectName("imageMenu")
|
|
460
|
-
self.noImageAction =
|
|
466
|
+
self.noImageAction = QtGui.QAction(MainWindow)
|
|
461
467
|
self.noImageAction.setDisabled(True)
|
|
462
468
|
self.imageMenu.addAction(self.noImageAction)
|
|
463
469
|
|
|
@@ -518,7 +524,7 @@ class Ui_MainWindow:
|
|
|
518
524
|
if not self.images:
|
|
519
525
|
self.imageMenu.removeAction(self.noImageAction)
|
|
520
526
|
|
|
521
|
-
action =
|
|
527
|
+
action = QtGui.QAction(self._window)
|
|
522
528
|
shader_name = f"sprite_texture{len(self.images)}"
|
|
523
529
|
action.setText(f"{os.path.basename(fileName)} ({shader_name})")
|
|
524
530
|
action.fileName = fileName
|
|
@@ -565,7 +571,7 @@ class Ui_MainWindow:
|
|
|
565
571
|
vert_filename.write_text(self.vertex_source_edit.toPlainText())
|
|
566
572
|
frag_filename.write_text(self.fragSourceEdit.toPlainText())
|
|
567
573
|
|
|
568
|
-
def removeImage(self, actionWidget:
|
|
574
|
+
def removeImage(self, actionWidget: QtGui.QAction) -> None:
|
|
569
575
|
if self.imageMenu:
|
|
570
576
|
self.imageMenu.removeAction(actionWidget)
|
|
571
577
|
|
|
@@ -775,4 +781,4 @@ if __name__ == "__main__":
|
|
|
775
781
|
sys.excepthook = excepthook
|
|
776
782
|
|
|
777
783
|
# Start the application and return its exit code
|
|
778
|
-
sys.exit(app.
|
|
784
|
+
sys.exit(app.exec())
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
Drawing Shapes
|
|
2
|
+
==============
|
|
3
|
+
|
|
4
|
+
.. _guide_shapes:
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
The :py:mod:`~pyglet.shapes` module is an easy to use option for creating
|
|
8
|
+
and manipulating colored shapes, such as rectangles, circles, and
|
|
9
|
+
lines. Shapes can be resized, positioned, and rotated where applicable,
|
|
10
|
+
and their color and opacity can be changed. All shapes are implemented
|
|
11
|
+
using OpenGL primitives, so they can be drawn efficiently with :ref:`guide_batched-rendering`.
|
|
12
|
+
In the following examples `Batch` will be ommitted for brevity, but in
|
|
13
|
+
general you always want to use Batched rendering for performance.
|
|
14
|
+
|
|
15
|
+
For drawing more complex shapes, see the :ref:`guide_graphics` module.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Creating a Shape
|
|
19
|
+
----------------
|
|
20
|
+
|
|
21
|
+
Various shapes can be constructed with a specific position, size, and color::
|
|
22
|
+
|
|
23
|
+
circle = shapes.Circle(x=100, y=150, radius=100, color=(50, 225, 30))
|
|
24
|
+
square = shapes.Rectangle(x=200, y=200, width=200, height=200, color=(55, 55, 255))
|
|
25
|
+
|
|
26
|
+
You can also change the color, or set the opacity after creation. The opacity
|
|
27
|
+
can be set on a scale of 0-255, for various levels of transparency::
|
|
28
|
+
|
|
29
|
+
circle.opacity = 120
|
|
30
|
+
|
|
31
|
+
The size of Shapes can also be adjusted after creation::
|
|
32
|
+
|
|
33
|
+
square.width = 200
|
|
34
|
+
circle.radius = 99
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
Anchor Points
|
|
38
|
+
^^^^^^^^^^^^^
|
|
39
|
+
|
|
40
|
+
Similar to images in pyglet, the "anchor point" of a Shape can be set.
|
|
41
|
+
This relates to the center of the shape on the x and y axis. For Circles,
|
|
42
|
+
the default anchor point is the center of the circle. For Rectangles,
|
|
43
|
+
it is the bottom left corner. Depending on how you need to position your
|
|
44
|
+
Shapes, this can be changed. For Rectangles this is especially useful if
|
|
45
|
+
you will rotate it, since Shapes will rotate around the anchor point. In
|
|
46
|
+
this example, a Rectangle is created, and the anchor point is then set to
|
|
47
|
+
the center::
|
|
48
|
+
|
|
49
|
+
rectangle = shapes.Rectangle(x=400, y=400, width=100, height=50)
|
|
50
|
+
rectangle.anchor_x = 50
|
|
51
|
+
rectangle.anchor_y = 25
|
|
52
|
+
# or, set at the same time:
|
|
53
|
+
rectangle.anchor_position = 50, 25
|
|
54
|
+
|
|
55
|
+
# The rectangle is then rotated around its anchor point:
|
|
56
|
+
rectangle.rotation = 45
|
|
57
|
+
|
|
58
|
+
If you plan to create a large number of shapes, you can optionally set the
|
|
59
|
+
default anchor points::
|
|
60
|
+
|
|
61
|
+
shapes.Rectangle._anchor_x = 100
|
|
62
|
+
shapes.Rectangle._anchor_y = 50
|
|
63
|
+
|
|
64
|
+
Advanced Operation
|
|
65
|
+
------------------
|
|
66
|
+
|
|
67
|
+
.. _guide_shapes-bounding:
|
|
68
|
+
|
|
69
|
+
Shape Bounding Checks
|
|
70
|
+
^^^^^^^^^^^^^^^^^^^^^
|
|
71
|
+
|
|
72
|
+
Some shapes can check whether an instance contains a 2D point via Python's ``in`` operator.
|
|
73
|
+
|
|
74
|
+
The point can be any :py:class:`tuple` of two numbers:
|
|
75
|
+
|
|
76
|
+
.. code-block:: python
|
|
77
|
+
|
|
78
|
+
from pyglet.shapes import Circle
|
|
79
|
+
|
|
80
|
+
# Create a circle
|
|
81
|
+
circle = shapes.Circle(x=100, y=100, radius=50)
|
|
82
|
+
|
|
83
|
+
# Turn the circle red if (200, 200) is inside it
|
|
84
|
+
if (200, 200) in circle:
|
|
85
|
+
circle.color = (255, 0, 0)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
Bounding Checks Are In World Space
|
|
89
|
+
""""""""""""""""""""""""""""""""""
|
|
90
|
+
|
|
91
|
+
If you move or alter your viewport, you must account for this when
|
|
92
|
+
checking coordinates from :ref:`mouse events <guide_mouse_events>`.
|
|
93
|
+
You may find :py:class:`~pyglet.math.Vec2` helpful for this since
|
|
94
|
+
it is a subclass of :py:class:`tuple`.
|
|
95
|
+
|
|
96
|
+
.. _guide_shapes-bounding-supported:
|
|
97
|
+
|
|
98
|
+
Which Shapes Support Bounding Checks?
|
|
99
|
+
"""""""""""""""""""""""""""""""""""""
|
|
100
|
+
|
|
101
|
+
Instances of the following shape classes support the ``in`` operator:
|
|
102
|
+
|
|
103
|
+
- :py:class:`~pyglet.shapes.Circle`
|
|
104
|
+
- :py:class:`~pyglet.shapes.Ellipse`
|
|
105
|
+
- :py:class:`~pyglet.shapes.Sector`
|
|
106
|
+
- :py:class:`~pyglet.shapes.Line`
|
|
107
|
+
- :py:class:`~pyglet.shapes.Rectangle`
|
|
108
|
+
- :py:class:`~pyglet.shapes.BorderedRectangle`
|
|
109
|
+
- :py:class:`~pyglet.shapes.Triangle`
|
|
110
|
+
- :py:class:`~pyglet.shapes.Polygon`
|
|
111
|
+
- :py:class:`~pyglet.shapes.Star`
|
|
112
|
+
(acts like a :py:class:`~pyglet.shapes.Circle`
|
|
113
|
+
with a radius of ``(outer_radius + inner_radius) / 2``).
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
.. _guide_shapes-bounding-details:
|
|
117
|
+
|
|
118
|
+
How Does It Work?
|
|
119
|
+
"""""""""""""""""
|
|
120
|
+
|
|
121
|
+
Each of these classes implements a :py:meth:`~object.__contains__` method which
|
|
122
|
+
accounts for an instance's:
|
|
123
|
+
|
|
124
|
+
* :py:attr:`~pyglet.shapes.ShapeBase.rotation` angle
|
|
125
|
+
* :py:attr:`~pyglet.shapes.ShapeBase.anchor_position`
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
.. _guide_shapes-custom:
|
|
129
|
+
|
|
130
|
+
Custom Shapes
|
|
131
|
+
^^^^^^^^^^^^^
|
|
132
|
+
|
|
133
|
+
.. tip:: For complex features and performance, please see :ref:`guide_graphics`.
|
|
134
|
+
|
|
135
|
+
You can import and subclass :py:class:`~pyglet.shapes.ShapeBase` to create
|
|
136
|
+
custom shapes:
|
|
137
|
+
|
|
138
|
+
.. code-block:: python
|
|
139
|
+
|
|
140
|
+
from pyglet.shapes import ShapeBase
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class MyCustomShape(ShapeBase):
|
|
144
|
+
"""A custom shape class. Implementation details omitted."""
|
|
145
|
+
...
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
This is the base class for shapes in the :py:mod:`~pyglet.shapes` module,
|
|
149
|
+
which means you can use the other shapes in the module as reference. Please
|
|
150
|
+
note that this class has the following caveats:
|
|
151
|
+
|
|
152
|
+
* The ``in`` operator requires you to add a :py:meth:`~object.__contains__` method which:
|
|
153
|
+
|
|
154
|
+
* accounts for the following values on an instance:
|
|
155
|
+
|
|
156
|
+
* :py:attr:`~pyglet.shapes.ShapeBase.rotation` angle
|
|
157
|
+
* :py:attr:`~pyglet.shapes.ShapeBase.anchor_position`
|
|
158
|
+
|
|
159
|
+
* returns a :py:class:`bool`
|
|
160
|
+
|
|
161
|
+
* It will conflict with other metaclass-based helpers due to using :py:class:`abc.ABC`
|
|
162
|
+
|
|
@@ -114,13 +114,13 @@ def create_torus(radius, inner_radius, slices, inner_slices, shader, batch):
|
|
|
114
114
|
emission = [0.0, 0.0, 0.0, 1.0]
|
|
115
115
|
shininess = 50
|
|
116
116
|
|
|
117
|
-
material = pyglet.model.
|
|
117
|
+
material = pyglet.model.SimpleMaterial("custom", diffuse, ambient, specular, emission, shininess)
|
|
118
118
|
group = pyglet.model.MaterialGroup(material=material, program=shader)
|
|
119
119
|
|
|
120
120
|
vertex_list = shader.vertex_list_indexed(len(vertices) // 3, GL_TRIANGLES, indices, batch, group,
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
POSITION=('f', vertices),
|
|
122
|
+
NORMAL=('f', normals),
|
|
123
|
+
COLOR_0=('f', material.diffuse * (len(vertices) // 3)))
|
|
124
124
|
|
|
125
125
|
return pyglet.model.Model([vertex_list], [group], batch)
|
|
126
126
|
|
|
@@ -9,7 +9,8 @@ if os.name == "nt":
|
|
|
9
9
|
# On Windows, it's possible to change the font anti-aliasing mode.
|
|
10
10
|
# Uncomment the below lines to set the options:
|
|
11
11
|
#
|
|
12
|
-
from pyglet.font.
|
|
12
|
+
from pyglet.font.dwrite import DirectWriteGlyphRenderer
|
|
13
|
+
|
|
13
14
|
D2D1_TEXT_ANTIALIAS_MODE_DEFAULT = 0
|
|
14
15
|
D2D1_TEXT_ANTIALIAS_MODE_CLEARTYPE = 1 # not working?
|
|
15
16
|
D2D1_TEXT_ANTIALIAS_MODE_GRAYSCALE = 2 # same as default
|
|
@@ -25,15 +26,15 @@ batch = pyglet.graphics.Batch()
|
|
|
25
26
|
float_font_size = pyglet.text.Label("Hello World on size 15.1", font_name="Arial", font_size=15.1, x=30, y=500, batch=batch)
|
|
26
27
|
float_font_size_1 = pyglet.text.Label("Hello World on size 15", font_name="Arial", font_size=15, x=270, y=500, batch=batch)
|
|
27
28
|
|
|
28
|
-
arial_bold = pyglet.text.Label("Hello World 👽", font_name="Arial",
|
|
29
|
-
arial_black = pyglet.text.Label("Hello World 👾", font_name="Arial",
|
|
30
|
-
arial_narrow = pyglet.text.Label("Hello World 🤖", font_name="Arial",
|
|
29
|
+
arial_bold = pyglet.text.Label("Hello World 👽", font_name="Arial", weight="normal", font_size=25, x=50, y=400, batch=batch)
|
|
30
|
+
arial_black = pyglet.text.Label("Hello World 👾", font_name="Arial", weight="black", font_size=25, x=50, y=350, batch=batch)
|
|
31
|
+
arial_narrow = pyglet.text.Label("Hello World 🤖", font_name="Arial", weight="normal", stretch="condensed", font_size=25, x=50, y=300, batch=batch)
|
|
31
32
|
arial = pyglet.text.Label("Hello World 👀", font_name="Arial", font_size=25, x=50, y=250, batch=batch)
|
|
32
33
|
|
|
33
|
-
segoe_ui_black = pyglet.text.Label("Hello World ☂️", font_name="Segoe UI",
|
|
34
|
-
segoe_ui_semilbold = pyglet.text.Label("Hello World ⚽️", font_name="Segoe UI",
|
|
35
|
-
segoe_ui_semilight = pyglet.text.Label("Hello World 🎱", font_name="Segoe UI",
|
|
36
|
-
segoe_ui_light = pyglet.text.Label("Hello World 🥳👍", font_name="Segoe UI",
|
|
34
|
+
segoe_ui_black = pyglet.text.Label("Hello World ☂️", font_name="Segoe UI", weight="black", font_size=25, x=50, y=200, batch=batch)
|
|
35
|
+
segoe_ui_semilbold = pyglet.text.Label("Hello World ⚽️", font_name="Segoe UI", weight="semibold", font_size=25, x=50, y=150, batch=batch)
|
|
36
|
+
segoe_ui_semilight = pyglet.text.Label("Hello World 🎱", font_name="Segoe UI", weight="semilight", font_size=25, x=50, y=100, batch=batch)
|
|
37
|
+
segoe_ui_light = pyglet.text.Label("Hello World 🥳👍", font_name="Segoe UI", weight="light", font_size=25, x=50, y=50, batch=batch)
|
|
37
38
|
segoe_ui = pyglet.text.Label("Hello World 😀✌", font_name="Segoe UI", font_size=25, x=50, y=10, batch=batch)
|
|
38
39
|
|
|
39
40
|
if os.name == "nt":
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"""This example demonstrates how to create a compatible font with Pyglets layout system using images."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import pyglet
|
|
5
|
+
from pyglet.font.user import UserDefinedMappingFont, get_scaled_user_font
|
|
6
|
+
|
|
7
|
+
# Add our resource path that includes the font atlas.
|
|
8
|
+
pyglet.resource.path.append('../../tests/data/fonts')
|
|
9
|
+
pyglet.resource.reindex()
|
|
10
|
+
|
|
11
|
+
# Create Window
|
|
12
|
+
window = pyglet.window.Window()
|
|
13
|
+
|
|
14
|
+
# Create a graphics batch to batch render our objects.
|
|
15
|
+
batch = pyglet.graphics.Batch()
|
|
16
|
+
|
|
17
|
+
atlas_image = pyglet.resource.image("action_man_atlas.png")
|
|
18
|
+
|
|
19
|
+
# You can use whatever method you want, but you just need to map your ImageData instances to the character
|
|
20
|
+
atlas_characters = """ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.: '"/?!@#$%^&*()"""
|
|
21
|
+
rows = 5
|
|
22
|
+
columns = 16
|
|
23
|
+
|
|
24
|
+
# Ensure the data is image data, as it is needed to blit into a Texture.
|
|
25
|
+
image_data = atlas_image.get_image_data()
|
|
26
|
+
|
|
27
|
+
# Create image grid based on how many glyphs.
|
|
28
|
+
grid = pyglet.image.ImageGrid(image_data, rows=rows, columns=columns)
|
|
29
|
+
|
|
30
|
+
# Map characters to image data. A -> ImageData
|
|
31
|
+
# The mapping can be a dictionary lookup, or it can be an object that behaves like a dictionary.
|
|
32
|
+
mapping = {}
|
|
33
|
+
char = 0
|
|
34
|
+
for row in range(rows):
|
|
35
|
+
for column in range(columns):
|
|
36
|
+
y_prime = (rows - 1) - row
|
|
37
|
+
new_index = column + y_prime * columns
|
|
38
|
+
# This chooses values based on the top left. Pyglet uses bottom left indexing.
|
|
39
|
+
glyph = grid[new_index]
|
|
40
|
+
mapping[atlas_characters[char]] = glyph
|
|
41
|
+
char += 1
|
|
42
|
+
|
|
43
|
+
class ActionManMappedFont(UserDefinedMappingFont):
|
|
44
|
+
glyph_fit = len(atlas_characters)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
# Create your font instance.
|
|
48
|
+
action_man_font = ActionManMappedFont("custom_action_man1", # Custom unique name to not clash with others.
|
|
49
|
+
default_char=" ", # Default character to use if a character is not mapped.
|
|
50
|
+
size=13, # The size you want your font to be considered at base size.
|
|
51
|
+
mappings=mapping) # The mapping object containing your character -> glyphs.
|
|
52
|
+
|
|
53
|
+
# Add the font to usable fonts.
|
|
54
|
+
pyglet.font.add_user_font(action_man_font)
|
|
55
|
+
|
|
56
|
+
# Create a label like normal!
|
|
57
|
+
label = pyglet.text.Label("Hello World!",
|
|
58
|
+
font_size=13,
|
|
59
|
+
font_name="custom_action_man1",
|
|
60
|
+
x=window.width // 2,
|
|
61
|
+
y=window.height // 2,
|
|
62
|
+
anchor_x="center",
|
|
63
|
+
anchor_y="center",
|
|
64
|
+
batch=batch)
|
|
65
|
+
|
|
66
|
+
# As an optional dependency with Pillow installed, you can scale your bitmap font.
|
|
67
|
+
try:
|
|
68
|
+
# Create the size you want it to be scaled to.
|
|
69
|
+
# Only create new font sizes from the original user font object.
|
|
70
|
+
# !! Note that the size will be calculated in relation to your original size.
|
|
71
|
+
action_scaled_32 = get_scaled_user_font(action_man_font, 32)
|
|
72
|
+
pyglet.font.add_user_font(action_scaled_32)
|
|
73
|
+
|
|
74
|
+
scaled_label = pyglet.text.Label("Scaled Hello World!",
|
|
75
|
+
font_size=32,
|
|
76
|
+
font_name="custom_action_man1",
|
|
77
|
+
x=window.width // 2,
|
|
78
|
+
y=window.height // 3,
|
|
79
|
+
anchor_x="center",
|
|
80
|
+
anchor_y="center",
|
|
81
|
+
batch=batch)
|
|
82
|
+
except ImportError:
|
|
83
|
+
print("Warning: PIL was not detected, scaled font will not be shown.")
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
@window.event
|
|
87
|
+
def on_draw():
|
|
88
|
+
window.clear()
|
|
89
|
+
batch.draw()
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
pyglet.app.run()
|
|
@@ -15,7 +15,7 @@ if TYPE_CHECKING:
|
|
|
15
15
|
from typing import Any, Callable, ItemsView, Sized
|
|
16
16
|
|
|
17
17
|
#: The release version
|
|
18
|
-
version = '2.1.
|
|
18
|
+
version = '2.1.5'
|
|
19
19
|
__version__ = version
|
|
20
20
|
|
|
21
21
|
MIN_PYTHON_VERSION = 3, 8
|
|
@@ -110,6 +110,10 @@ class Options:
|
|
|
110
110
|
debug_trace_depth: int = 1
|
|
111
111
|
debug_trace_flush: bool = True
|
|
112
112
|
|
|
113
|
+
debug_com: bool = False
|
|
114
|
+
"""If ``True``, prints information on COM calls. This can potentially help narrow down issues with certain libraries
|
|
115
|
+
that utilize COM calls. Only applies to the Windows platform."""
|
|
116
|
+
|
|
113
117
|
debug_win32: bool = False
|
|
114
118
|
"""If ``True``, prints error messages related to Windows library calls. Usually get's information from
|
|
115
119
|
``Kernel32.GetLastError``. This information is output to a file called ``debug_win32.log``."""
|
|
@@ -175,6 +179,11 @@ class Options:
|
|
|
175
179
|
.. versionadded:: 2.0
|
|
176
180
|
"""
|
|
177
181
|
|
|
182
|
+
text_antialiasing: bool = True
|
|
183
|
+
"""If ``True``, font renderers will improve text quality by adding antialiasing to the rendered characters. If
|
|
184
|
+
``False``, text quality will appear pixelated.
|
|
185
|
+
"""
|
|
186
|
+
|
|
178
187
|
headless: bool = False
|
|
179
188
|
"""If ``True``, visible Windows are not created and a running desktop environment is not required. This option
|
|
180
189
|
is useful when running pyglet on a headless server, or compute cluster. OpenGL drivers with ``EGL`` support are
|
|
@@ -186,14 +195,17 @@ class Options:
|
|
|
186
195
|
GPU to use. This is only useful on multi-GPU systems.
|
|
187
196
|
"""
|
|
188
197
|
|
|
189
|
-
|
|
190
|
-
"""
|
|
191
|
-
speed up. If your font is simple, monospaced, or you require no advanced OpenType features, this option may be
|
|
192
|
-
useful. You can try enabling this to see if there is any impact on clarity for your font. The advance will be
|
|
193
|
-
determined by the glyph width.
|
|
198
|
+
text_shaping: Literal["platform", "harfbuzz", False] = 'platform'
|
|
199
|
+
"""Determines how text is processed and displayed based on features of the font.
|
|
194
200
|
|
|
195
|
-
|
|
196
|
-
|
|
201
|
+
Valid option names are:
|
|
202
|
+
|
|
203
|
+
* ``False``, Disables the shaping process for text. This may increase performance as it reduces the amount
|
|
204
|
+
of calls during rendering. If your font is simple, monospaced, or you require no advanced OpenType features,
|
|
205
|
+
this option may be useful.
|
|
206
|
+
* ``'platform'``, Uses platform's font system for shaping. Supported by Windows (DirectWrite) and Mac (CoreText).
|
|
207
|
+
* ``'harfbuzz'``, Utilize the harfbuzz library for font shaping. This requires an optional dependency, if not
|
|
208
|
+
found, it will fallback to platform shaping.
|
|
197
209
|
|
|
198
210
|
.. versionadded:: 2.0
|
|
199
211
|
"""
|
|
@@ -270,7 +282,7 @@ class Options:
|
|
|
270
282
|
rescaling and repositioning of content will be necessary, but at the cost of blurry content depending on the extent
|
|
271
283
|
of the stretch. For example, 800x600 at 150% DPI will be 800x600 for `window.get_size()` and 1200x900 for
|
|
272
284
|
`window.get_framebuffer_size()`.
|
|
273
|
-
|
|
285
|
+
|
|
274
286
|
`'platform'`: A DPI aware window is created, however window sizing and framebuffer sizing is not interfered with
|
|
275
287
|
by Pyglet. Final sizes are dictated by the platform the window was created on. It is up to the user to make any
|
|
276
288
|
platform adjustments themselves such as sizing on a platform, mouse coordinate adjustments, or framebuffer size
|
|
@@ -49,15 +49,17 @@ class Options:
|
|
|
49
49
|
debug_win32: bool
|
|
50
50
|
debug_input: bool
|
|
51
51
|
debug_x11: bool
|
|
52
|
+
debug_com: bool
|
|
52
53
|
shadow_window: bool
|
|
53
54
|
vsync: bool | None
|
|
54
55
|
xsync: bool
|
|
55
56
|
xlib_fullscreen_override_redirect: bool
|
|
56
57
|
search_local_libs: bool
|
|
57
58
|
win32_gdi_font: bool
|
|
59
|
+
text_antialiasing: bool
|
|
58
60
|
headless: bool
|
|
59
61
|
headless_device: int
|
|
60
|
-
|
|
62
|
+
text_shaping: Literal["platform", "harfbuzz", False]
|
|
61
63
|
dw_legacy_naming: bool
|
|
62
64
|
win32_disable_xinput: bool
|
|
63
65
|
com_mta: bool
|