Skip to content

4.0.0.dev6: Pyglet update (#2881)

Latest

Choose a tag to compare

@pvcraven pvcraven released this 07 Aug 13:11
8bdf4d6

New Features

  • GUI: Added an experimental animation API in arcade.gui.experimentalUIAnimatedGroup wraps a widget subtree and tweens its transform properties over time via animate().
    • UIAnimatedGroup caches its subtree into a surface and exposes non-layouting transform properties (scale, angle, alpha, offset_x, offset_y, tint); it is interactive, hit-testing hovered/pressed/on_click against its untransformed rect. UIRenderGroup is the non-interactive caching primitive.
    • animate() supports multiple properties per call, sequencing via then(), repetition (repeat, yoyo), relative targets (rel()), easing, delays and on_finish callbacks.
    • Animations are resolved per property: starting a new animation takes over its properties from running ones, other properties keep animating.
    • Interpolates numbers, tuples, Color and vector types; non-interpolatable values snap at the end.
    • The low level Transition* classes remain available for custom behavior.

Fixes

  • GUI: Fixed UILabel.update_font always reporting a font change when the requested font was a fallback tuple (e.g. UIFlatButton's default styles), which caused a full UI re-render every frame. This made widget-heavy UIs, such as the exp_scroll_area example, run at a few FPS.
  • Fixed rotate_around_point missing from arcade.math.__all__, which made it unavailable via from arcade.math import *.

Breaking Changes

  • Updated pyglet to 3.0.dev7 (from 3.0.dev3).
    • Between dev4 and dev5, pyglet removed window._matrices and moved window view/projection/viewport onto its own camera (default_camera in dev5/dev6, renamed to camera in dev7), backed by a per-frame ring-buffer UBO. Arcade now fully owns its own window matrix UBO, independent of pyglet's camera/ring buffer, so rendering behavior for cameras, sprites, and shapes is unchanged.
    • Advanced users who mix raw pyglet camera/window code with Arcade should note: window._matrices no longer exists, and window.camera (pyglet's default_camera prior to dev7) is pyglet's own concept (a Camera2D), distinct from arcade.Window.default_camera (Arcade's own DefaultProjector) — both exist simultaneously and serve different roles. arcade.Window now also exposes a camera property as an alias for default_camera, matching pyglet's dev7 rename.
    • Fixed BackgroundTexture scale and offset producing incorrect visual transforms — Arcade's code was inadvertently relying on bugs in pyglet's pre-dev7 Mat3.scale/Mat3.translate that have since been fixed upstream. Visual output for BackgroundTexture users with non-default scale/offset values will change to be correct.

Misc Changes

  • Resolved security vulnerabilities in the setuptools, click, and typer dependencies (typer bumped to 0.27.1) via uv audit/uv lock.