Releases: pygame-community/pygame-ce
2.5.5
Hello again, this release is out a lot quicker than usual because we're responding to two reported regressions in 2.5.4. Thank you to @SamuelWyck and @davidfokkema for their reports. This release fixes both of those regressions and contains the other things we've worked on in the last few weeks.
What's Changed
Bugfixes
- @oddbookworm found and fixed a regression where
pygame.transform
would fail to copy palettes when transforming palettized surfaces, making the outputs unusable, in #3464. @ankith26 made a related fix and @Starbuck5 added additional tests for this in #3465 and #3466 respectively. - @ankith26 fixed a regression where pygame-ce apps failed MacOS code notarization in Briefcase, due to the inclusion of non ascii (Korean) filenames in our tutorials. #3478.
New API
- @AntoineMamou added new
angle
andangle_rad
properties toVector2
in #3222.
Docs
- @DickerDackel and @ToniDevStuff added extra detail to the docs about how Vectors can be converted to other data types in #3447 and #3446.
Maintenance
- @Starbuck5 worked on SDL3 functionality in #3434 and #3451, updated pythoncapi_comat.h in #3445, and simplified math module init in #3453.
- @oddbookworm moved the surface module to multiphase init and updated our pre-commit config in #3354 and #3452.
New Contributors
- @AntoineMamou made their first contribution in #3222
- @DickerDackel made their first contribution in #3447
- @ToniDevStuff made their first contribution in #3446
Full Changelog: 2.5.4...2.5.5
2.5.4
🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙🕹️🎯⚡🏅📙
Hey all, we've got another release for you! This one was made by 13 contributors changing over 403 files in 74 PRs and 200 commits. A big theme of this release is porting our codebase to SDL3 (along with some other general maintenance stuff), but we also have some more immediately applicable enhancements. Here's what we did in the last 3 months!
What's Changed
New API
- @ankith26 and @damusss added
image.load_animation
to load an animated file (like GIF or WEBP) as a list of surfaces in #3372 and #3444. - @MarcellPerger1 added support for passing
special_flags
toGroup.draw()
in #3321 - @damusss added
Color.hex
in #3379 - @itzpr3d4t0r and @aatle added
Font.set_linesize()
to control the spacing between lines of text in #3282
Enhancements
- @damusss and @Starbuck5 reduced the sizes of our wheels by converting a lot of assets to webp in #3362, #3374 and #3358
- @zoldalma999 moved Window, display, system, Surface, draw, transform and image docs to their stub file so that editors can pick them up in #3296 and #3389
- @oddbookworm updated print_debug_info to show whether GIL is enabled in #3355
- @aatle removed angled brackets from Circle and Line
__repr__
s in #3375 - @mv805 improved the warning message when a SysFont is not found and clarified the docs related to it in #3373
- @damusss removed an unnecessary warning when a zero sized resizable window is requested in display.set_mode in #3386
Bugfixes
- @oddbookworm added tolerance for Color.lerp in #3347
- @ankith26 added full unicode support to
Font.metrics
in #3328 - @ankith26 fixed the unicode property of keydown events when keyup events are blocked in #3357
- @Matiiss fixed Vector initialization from numpy arrays in #3408
Docs and Types
- @aatle made a bunch of improvements and fixes to our stubs in #3335
- @damusss added tutorials to the offline docs that come with your pygame-ce installation in #3380
- @COUR4G3 fixed the depth argument missing in the type hints of
video.Texture.__init__
in #3360 - @ankith26 fixed
__class_getitem__
to be positional-only in #3410 - @XORandom finished the russian translation of our readme in #3424
- @aatle fixed stubs for buffer types in #3398
SDL3 Porting
- @Starbuck5 worked more on porting surface pixel formats to work with SDL3 in #3310, #3314, #3315, #3309, #3338, #3337, #3343, #3344 and #3371
- @ankith26 ported the font, scrap, camera, joystick and transform modules in #3326, #3340, #3341, #3208 and #3351
Maintenance
- @oddbookworm @aatle and @ankith26 kept our CI running in #3363, #3395 and #3334
- @Starbuck5 and @Matiiss kept our dependencies up-to-date (most importantly SDL was updated from 2.30.12 to 2.32.6, SDL_Image from 2.8.4 to 2.8.8 and SDL_Mixer from 2.8.0 to 2.8.1) in #3332, #3365, #3399, #3401 and #3425
- @oddbookworm fixed our debug python builds in #3345
- @ankith26 replaced tabs with spaces in our docs RST files in #3361
- @MightyJosip
- @oddbookworm added braces to one-line statements in #3364
- @Matiiss used
ruff
to sort imports in #3237 - @ankith26 updated our pre-commit config in #3400
New Contributors
- @COUR4G3 made their first contribution in #3360
- @mv805 made their first contribution in #3373
- @MarcellPerger1 made their first contribution in #3321
Thank you all!
Thank you to everyone who helped make this release happen from contributors, to people reporting issues, to PR reviewers! A big thanks also to those who helped the pygame community whether that be making tutorials, helping people on forums, sharing cool things made with pygame or just talking about it online with other people! And thank you for reading the release notes and using pygame-ce!
Let us know if we made any mistakes in these release notes so that we can correct them.
Take care, and happy pygaming!
Full Changelog: 2.5.3...2.5.4
2.5.4.dev2
This is a preview release for 2.5.4, which should be out next weekend, if everything goes to plan. Included are the GitHub autogenerated release notes-- for the full release we will clean these up to be more human readable.
What's Changed
- 2.5.3.dev2 by @Starbuck5 in #3323
- Start 2.5.4 by @Starbuck5 in #3324
- Move Surface towards compiling w/ SDL3 by @Starbuck5 in #3310
- Port font to SDL3(_ttf) by @ankith26 in #3326
- Downgrade host image on debian multiarch by @ankith26 in #3334
- Update SDL to 2.32, mixer to 2.8.1 by @Starbuck5 in #3332
- Add interface for _sdl2.video classes by @MightyJosip in #3317
- Move transform towards compiling w/ SDL3 by @Starbuck5 in #3314
- Draw SDL3 by @Starbuck5 in #3315
- Pixelarray SDL3 by @Starbuck5 in #3309
- General improvements and fixes to stubs by @aatle in #3335
- Prep alphablit.c for SDL3 by @Starbuck5 in #3338
- Prep surface_fill.c for SDL3 by @Starbuck5 in #3337
- Port scap.c to SDL3 by @ankith26 in #3340
- Port camera to SDL3 by @ankith26 in #3341
- GET_PIXELVALS SDL3 compat by @Starbuck5 in #3343
- A few surface.c SDL3 fixes by @Starbuck5 in #3344
- Bump docker/build-push-action from 6.13.0 to 6.14.0 by @dependabot in #3348
- Bump actions/cache from 4.2.0 to 4.2.1 by @dependabot in #3349
- Added tolerance for Color.lerp by @oddbookworm in #3347
- Fix build with debug python by @oddbookworm in #3345
- Add full unicode support to
Font.metrics
by @ankith26 in #3328 - Move Window, display and system docs to stubs by @zoldalma999 in #3296
- Use webp to minify logo images by @Starbuck5 in #3358
- Fixed stub for pygame._sdl2.video.Texture.init by @COUR4G3 in #3360
- Updated print_debug_info to output the status of the GIL by @oddbookworm in #3355
- Use spaces instead of tabs in docs rst files by @ankith26 in #3361
- Port joystick to SDL3 by @ankith26 in #3208
- Fix failing CI by @oddbookworm in #3363
- No more one-line statements without braces by @oddbookworm in #3364
- Bump SDL2 to 2.32.2, SDL3 to 3.2.6, SDL3_ttf to 3.2.0 by @Matiiss in #3365
- Bump actions/cache from 4.2.1 to 4.2.2 by @dependabot in #3366
- Bump docker/metadata-action from 5.6.1 to 5.7.0 by @dependabot in #3367
- Bump docker/build-push-action from 6.14.0 to 6.15.0 by @dependabot in #3368
- Bump pypa/cibuildwheel from 2.22.0 to 2.23.0 by @dependabot in #3369
- Fix unicode property when keyup blocked by @ankith26 in #3357
- Convert some
data/example
images to webp by @damusss in #3362 - Bump robinraju/release-downloader from 1.11 to 1.12 by @dependabot in #3376
- Bump actions/attest-build-provenance from 2.2.0 to 2.2.3 by @dependabot in #3377
- Remove angled brackets from Circle and Line reprs by @aatle in #3375
- Add
image.load_animation
by @ankith26 in #3372 - Improve SysFont documentation and add font verification warning. Closes #2643 by @mv805 in #3373
- Bump docker/login-action from 3.3.0 to 3.4.0 by @dependabot in #3388
- Bump pypa/cibuildwheel from 2.23.0 to 2.23.1 by @dependabot in #3387
- Include tutorials docs in release build (fixes #3353) by @damusss in #3380
- Use
ruff
to also sort imports by @Matiiss in #3237 - Remove warning with zero size & RESIZABLE in display.set_mode by @damusss in #3386
- Bump actions/cache from 4.2.2 to 4.2.3 by @dependabot in #3391
- Convert most tutorial assets to WEBP by @damusss in #3374
- Bump pypa/cibuildwheel from 2.23.1 to 2.23.2 by @dependabot in #3394
- Fix CI by avoiding bugged version of
pyproject-metadata
package by @aatle in #3395 - Refactor bufferproxy by @MightyJosip in #3383
- Add
special_flags
toGroup.draw()
by @MarcellPerger1 in #3321 - Update dependencies by @Starbuck5 in #3399
- Run
pre-commit autoupdate
by @ankith26 in #3400 - Bump uraimo/run-on-arch-action from 3.0.0 to 3.0.1 by @dependabot in #3409
- Fix
pygame.Vector{2,3}
initialization from numpy arrays by @Matiiss in #3408 - Update to SDL2_image 2.8.8 by @Starbuck5 in #3401
- Fix
__class_getitem__
to be positional-only by @ankith26 in #3410 - Add
Color.hex
by @damusss in #3379 - Bump docker/build-push-action from 6.15.0 to 6.16.0 by @dependabot in #3415
- Bump astral-sh/setup-uv from 5 to 6 by @dependabot in #3416
- Get transform compiling on SDL3 by @ankith26 in #3351
- Remove controller.c from gitignore by @MightyJosip in #3418
- Move Surface, draw, transform and image docs to stubs by @zoldalma999 in #3389
- Bump actions/attest-build-provenance from 2.2.3 to 2.3.0 by @dependabot in #3422
- Updating the translation to 100% by @XORandom in #3424
- Update SDL2 to 2.32.6 by @Starbuck5 in #3425
- Port Renderer to C code by @MightyJosip in #3327
- Restructure and port surface init and convert to SDL3 by @Starbuck5 in #3371
- Add
Font.set_linesize()
(TTF 2.24.0 feature) by @itzpr3d4t0r in #3282 - Replace AddObject() with AddObjectRef() by @MightyJosip in #3406
- Bump docker/build-push-action from 6.16.0 to 6.17.0 by @dependabot in #3433
- Fix stubs for buffer types by @aatle in #3398
New Contributors
- @COUR4G3 made their first contribution in #3360
- @mv805 made their first contribution in #3373
- @MarcellPerger1 made their first contribution in #3321
Full Changelog: 2.5.3.dev2...2.5.4.dev2
2.5.3
🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗
Hello all! We are pleased to announce the first pygame-ce release of 2025.
Since last release, our underlying library SDL (Simple DirectMedia Layer) has released SDL3, with tons of shiny new features and lots of breaking changes. Our goal is to get our existing API fully working on top of SDL3, then focus on a pygame-ce 3.0 release with SDL3 + cool SDL3 features + a few minor backwards compatibility tweaks-- nothing crazy but more than we would feel comfortable changing in a release normally. See #2760 for a discussion of potential pygame-ce 3.0 API changes. To that end, significant effort this release went to getting things more ready for SDL3, but we still have a ways to go. And this plan may change, just wanted to share what we're thinking.
Before we get into the meat of the changes,
- This release drops support for Python 3.8, as it is end of life. (Contributed by @ankith26 in #3143)
- This release raises the minimum SDL2 version to 2.0.14 (Contributed by @ankith26 in #3213)
Enhancements
- @gresm added an option for
pygame.Window
s to not show up in the taskbar, for "utility windows".pygame.Window(utility=True)
. Added in #3226. - @damusss Added "erase" and "repeat" options for
Surface.scroll
in #2855. - @damusss Expanded color type support (not just tuples, but also color strings like other APIs accept) for mask.from_threshold. He also fixed the type stubs for PixelArray methods to correctly indicate they don't have the expanded color type support. See #3164.
- @MrRedstone058 added
Line
methods andlength
attribute to the experimental geometry module in #3179.
Bugfixes
- @Matiiss Added runtime support for type hinting sprite Groups like other Python containers. E.g.
group: pygame.sprite.Group[MySpriteClass] = pygame.sprite.Group()
tells type hinters that this is a sprite group of MySpriteClass instances. Contributed in #3053. - @ankith26 Fixed a bug in saving Surfaces as TGA images, where they could overrun allocated memory and crash, in #3169.
- @yunline Added the missing BLENDMODE_MUL (relevant to the experimental _sdl2.video module) in #3258.
- @ankith26, @MyreMylar, and @zoldalma999 all worked together (we love to see it) to straighten out event.peek behavior between implementation, type hints, and documentation, in #3283. Classifying this as a bugfix because the previous behavior was a mistake and has been fixed.
Peformance improvements
- @Starbuck5 removed unnecessary calls to PyNumber_Index, PyLong_Check-- speeding up
x = rect[0]
andrect[0] = x
7-9% percent-- in #3242. - @Starbuck5 optimized an internal function that converts pairs of Python numbers into C integers or floats. This function is used all over the place, but is only significant for functions that were pretty quick anyways. Rect.move_ip and Rect.collidepoint were tested to be 19% and 17% faster, respectively. Contributed in #3214.
- @ankith26 and @damusss improved the speed of color parsing for color names (e.g
"green"
) and string hex values (e.g."#FF00FF"
) by more than 2x, by adding a fast path before stranger arguments are considered. Contributed in #3297 and #3302.
Deprecations
- @ankith26 deprecated
Window
'sforeign
kwarg andWindow.focus
'sinput_only
kwarg in #3234 - @Starbuck5 marked old type aliases as deprecated (SurfaceType, RectType --- just use Surface and Rect!) #3288
Docs and Types
- @zoldalma999 began implementation of a new documentation system where we generate the docs from a unified representation in the type hints. This will allow editors to see and display the documentation of each function as the user uses it. Currently this is only implemented for the time and cursors modules, it is planned to roll out to other modules in future releases. See #3188.
- @aatle improved the type hints, especially around Color, Rect, display, and geometry. See #3172, #3183, #3248, and #3264.
- @gavinmorrow fixed a grammar mistake in the Window docs in #3194.
- @Starbuck5 corrected some older docs content and some recent invalid formatting that got through, in #3204, #3205, #3266, #3272, and #3316.
- @ankith26 improved the type hints around the experimental geometry and _sdl2 modules, as well as the freetype module, in #3212, #3300, #3301.
- @damusss expanded the type hints for
pygame.Window
init keyword arguments to make them easier to discover in editors/IDEs, see #3295. - @XORandom and @noahcse worked on Russian and Traditional Chinese readmes, respectively, in #3138 and #3113.
- @GabrieleLS added a note to the mixer documentation about different meanings of the word "channel" in #3228.
- @JovialKnoll did a grammar fix and removed incorrect information from the Surface docs in #3231 and #3263
- @yunline fixed a formatting mistake in sndarray.rst and cursors.rst in #3257
- @Matiiss documented how volume is stored internally for
(get|set)_volume
functions/methods (129-value scale) in #3091
Tests and Examples
- @damusss Added
__name__ == "__main__"
guards to the examples, so they can't be accidentally run on import. People occasionally import them on accident, like in this case. Contributed in #3181. - @Akaracy added a test for draw.arc in #3230.
- @MyreMylar renamed TestTags so it doesn't get confused for a test in #3276.
- @MyreMylar fixed most of the Deprecation Warnings in surfarray_test in #3274.
SDL 3 porting
- @Starbuck5 put in several PRs to getting modules compiling or get modules closer to compiling, focusing on modules failing because of SDL3's pixelformat changes. See #3166, #3171, #3278, #3294, #3308, #3307.
- @ankith26 put in a bunch of PRs as well, getting time, surflock, constants, event, imageext, window, key, and mouse all compiling for SDL3. See #3206, #3217, #3262, #3251, #3207.
Maintenance
- @ankith26 added a new
dev.py
file to help pygame-ce devs run necessary commands and do editable builds very smoothly, as a spiritual successor tosetup.py
which is seemingly being phased out in the Python packaging ecosystem. See #3128. - @ankith26 and @Starbuck5 kept us up to date with SDL2 (and SDL3 releases/prereleases for our experimental support). We've pulled in the new SDL 2.30.12, SDL_image 2.8.4, and SDL_ttf 2.24.0. Contributed in #3203, #3261, #3271, #3286, #3304, #3279, and #3322.
- @ankith26...
2.5.3.dev2
Hello! This is a preview release for 2.5.3, which should be out in a week or so. Included are the GitHub autogenerated release notes, for the full release we will clean these up to be more human readable.
What's Changed
- 2.5.2.dev2 by @Starbuck5 in #3173
- Start 2.5.3.dev1 by @Starbuck5 in #3174
- Fix TGA save bug, add test by @ankith26 in #3169
- Bump actions/checkout from 4.2.0 to 4.2.1 by @dependabot in #3175
- Bump actions/cache from 4.1.0 to 4.1.1 by @dependabot in #3176
- Minor fixes and changes to
geometry.pyi
stub file by @aatle in #3172 - Better meson error on windows when libraries versions are not correct by @bilhox in #3178
- Image module SDL3 support by @Starbuck5 in #3166
- Allow erasing pixels in pygame.Surface.scroll and add repeat functionality by @damusss in #2855
- Include the explicit type in
ColorLike
andRectLike
by @aatle in #3183 - Add main guard to examples (+ incredibly small fixes) by @damusss in #3181
- Bump uraimo/run-on-arch-action from 2.7.2 to 2.8.1 by @dependabot in #3200
- Bump actions/cache from 4.1.1 to 4.1.2 by @dependabot in #3198
- Fix latest SDL3 and MSYS2 fails by @ankith26 in #3201
- Bump actions/checkout from 4.2.1 to 4.2.2 by @dependabot in #3199
- Ignore new gcc version mask array bounds warning by @ankith26 in #3186
- Fix grammar and formatting in Window docs by @gavinmorrow in #3194
- Start getting base module ready for SDL3 by @Starbuck5 in #3171
- Bump SDL2 to 2.30.9 and SDL3 to 3.1.6 by @ankith26 in #3203
- Correct draw.aaline docs by @Starbuck5 in #3204
- Fix window docs by @Starbuck5 in #3205
- Add
dev.py
implementing dev command shorthands by @ankith26 in #3128 - Port time, surflock and constants to SDL3 by @ankith26 in #3206
- Add Russian readme by @XORandom in #3138
- Raise minimum supported SDL2 to 2.0.14 by @ankith26 in #3213
- Bump actions/attest-build-provenance from 1.4.3 to 1.4.4 by @dependabot in #3220
- Use SequenceLike in geometry stubs by @ankith26 in #3212
- Port event.c to SDL3 by @ankith26 in #3217
- Allow all color types mask.from_threshold and fix typing for PixelArray methods by @damusss in #3164
- Batch and error check allocations by @Starbuck5 in #3224
- Update mixer documentation by @GabrieleLS in #3228
- fixing grammar by @JovialKnoll in #3231
- Fix SDL3 CI apt issues by @ankith26 in #3233
- Utility Window implementation. by @gresm in #3226
- Drop python 3.8 support by @ankith26 in #3143
- Bump docker/metadata-action from 5.5.1 to 5.6.1 by @dependabot in #3241
- Bump pypa/cibuildwheel from 2.21.3 to 2.22.0 by @dependabot in #3240
- Remove unnecessary calls to PyNumber_Index, PyLong_Checks by @Starbuck5 in #3242
- updated 'in' operator for sys.platform linux check by @sonotopes in #3246
- Draw arc test in draw_test.py by @Akaracy in #3230
- Bump build dependencies and use
dev.py
on msys2/multiarch CI by @ankith26 in #3211 - Added
Line
methods andlength
attribute by @MrRedstone058 in #3179 - Fix failing tests: change
Tuple[float, float]
toPoint
ingeometry.pyi
by @aatle in #3248 - Bump docker/build-push-action from 6.9.0 to 6.10.0 by @dependabot in #3250
- Deprecate
Window
foreign
kwarg andWindow.focus
input_only
kwarg by @ankith26 in #3234 - Add missing newline in sndarray.rst and cursors.rst by @yunline in #3257
- Bump actions/cache from 4.1.2 to 4.2.0 by @dependabot in #3259
- Bump actions/attest-build-provenance from 1.4.4 to 2.0.1 by @dependabot in #3260
- Add BLENDMODE_MUL to constants by @yunline in #3258
- this statement seems to be false, removing by @JovialKnoll in #3263
- Bump SDL2 to 2.30.10 by @ankith26 in #3261
- Optimize pg_Two(Ints/Floats)FromObj by @Starbuck5 in #3214
- Bump actions/attest-build-provenance from 2.0.1 to 2.1.0 by @dependabot in #3267
- Typo fixes by @Starbuck5 in #3266
- Correct
pygame.display
stubs by @aatle in #3264 - Docs updates (mainly to mixer) by @Starbuck5 in #3272
- Bump SDL2_image to 2.8.3 by @ankith26 in #3271
- Fix mypy to 1.13.0 to avoid all duplication by @MyreMylar in #3277
- Rename TestTags so it doesn't get confused for a test by @MyreMylar in #3276
- Fix most of the Deprecation Warnings in surfarray_test by @MyreMylar in #3274
- add and modified readme for Traditional Chinese. by @noahcse in #3113
- Port imageext.c to SDL3(_image) by @ankith26 in #3262
- Add runtime support for
pygame.sprite.AbstractGroup
subscripts by @Matiiss in #3053 - Generate reST/ref docs from python or stub files, move time and cursors docs by @zoldalma999 in #3188
- Document how volume is stored internally for
(get|set)_volume
functions and methods by @Matiiss in #3091 - Bump SDL to 2.30.11 and SDL_ttf to 2.24.0 by @ankith26 in #3279
- Remove unnecessary lock in gfxdraw by @Starbuck5 in #3280
- event.peek return bool, minor doc/stub fixes by @ankith26 in #3283
- SDL3: restructure cliprect handling in draw.c by @Starbuck5 in #3278
- Bump SDL2_image and SDL3 prerelease by @Starbuck5 in #3286
- Bump docker/build-push-action from 6.10.0 to 6.11.0 by @dependabot in #3290
- Port key and mouse to SDL3 by @ankith26 in #3207
- Introduce PG_SURF_FORMATENUM macro (SDL3 compat) by @Starbuck5 in #3294
- Drop circleci, use gh actions for arm manylinux by @ankith26 in #3293
- Fix/improve _sdl2 stubs by @ankith26 in #3300
- Bump docker/build-push-action from 6.11.0 to 6.12.0 by @dependabot in #3299
- Expand init parameters for
Window
by @damusss in #3295 - Optimize correct colordict entries by @damusss in #3297
- Port window.c to SDL3 by @ankith26 in #3251
- Move get_rect helper to c_api by @MightyJosip in #3303
- Optimize for str hex color values by @ankith26 in #3302
- Bump SDL3 / SDL3_image prebuilts by @Starbuck5 in #3304
- Mask SDL3 by @Starbuck5 in #3307
- Freetype typing fixes, enhancements to dict/tuple...
2.5.2
☀️🎃👻🕸️🕷️🧛🧟♂️🧙♀️🧙♂️🕯️🪦🍬🍭🍫☠️⚰️🔮🧹🌕🐈⬛🦇🌌
pip uninstall pygame
(if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🎃👻🕸️🕷️🧛🧟♂️🧙♀️🧙♂️🕯️🪦🍬🍭🍫☠️⚰️🔮🧹🌕🐈⬛🦇🌌
We're pumped to drop another pygame-ce release, thanks to the awesome efforts of 30+ contributors in this release! In the last couple of months, we've together made 286 commits, updated 281 files, and merged 85 pull requests.
Now, let's dive into what's new!
New and improved API
-
pygame.Window
has left experimental status and now been declared public API (contributed by @Starbuck5 in #3170). @damusss further enhanced the API by adding theWindow.flash
method andWindow.focused
property in #3054 and #3079 respectively. -
@damusss added a new module,
pygame.typing
, in #3002 that exports commonly used type aliases for use in type hinting. -
The experimental
pygame.geometry
module saw more API porting from its development repository in this release. A big thanks to allgeometry
project contributors: @andrewhong04, @Emc2356, @itzpr3d4t0r, @ScriptLineStudios, @avaxar, @Matiiss, @newpaxonian, @maqa41, @blankRiot96, @gresm- New contributor @MrRedstone058 added additional
Circle
attributes in #3127 - @itzpr3d4t0r added the
Circle.intersect
method and the base for theLine
class in #3071 and #3131 respectively. - @damusss added the
Circle.collidelist(all)
method in #2880
- New contributor @MrRedstone058 added additional
-
@ScriptLineStudios added the
transform.solid_overlay
function in #2304 making it easier to create a single color version of an alpha possessing surface. -
@damusss added the
desktop
argument tomouse.get_pos
andmouse.get_pressed
in #3105 so you can get the position of the mouse outside of the pygame window, where this is supported by the OS. -
@damusss added the
pygame.Sound
alias to denotepygame.mixer.Sound
in #3063. That should save a few precious characters of typing.
Bugfixes
-
@Starbuck5 fixed an OpenGL issue in
Window
init in #3059 -
@oddbookworm fixed a break when the OS resizes the window in
set_mode
in #2992 -
@bilhox fixed segfault with antialiased draw functions with a depth different than 32bits in #3008
-
@pmp-p did some fixes for improved wasm support in #3137 and #3163
-
@MyreMylar fixed midi timer reset when quit in #3018
-
- Fixed aalines overlap issue in #2912
- Fixed missing pixels in
aalines
when using integer coordinates in #3144
General Enhancements
- @oddbookworm improved
Vector{2,3}.__delattr__
messaging when deletingx, y, {z}
and removedVector4
zombies in #3069, and @ankith26 applied some more related updates in #3087 - @bilhox made it so that too many arguments to
Color.from_{colorspace}
style methods now raise errors in #3125 - @damusss added handling for all color types in
transform.threshold
in #3156
Performance Enhancements
-
@Starbuck5 updated more places in
rect
code to usePyObject_Vectorcall
in #3048. The affected methods therefore see 15-22% improvements in speed.
Docs and Type Hints
-
New contributor @MrValdez added example on how
Window
behaves withWINDOWCLOSE
andQUIT
events in #3115 -
New contributor @datapythonista clarified how
Rect
and positions relate in the intro tutorial in #3111 -
@oddbookworm fixed a couple of versionadded tags that should have been versionaddedold in
display
docs in #3046 -
@itzpr3d4t0r improved
geometry
docs in #3043 -
@Starbuck5 fixed
transform.average_color
docs and stubs to match implementation in #3076 -
@yunline updated the dependency section of zh-cn README in #3119
-
@zoldalma999 fix stubcheck typing error on windows in #3147
Examples and Unit Tests
-
New contributor @avpai-dinosaur fixed
test_inflate_ip__larger
unit test in #3098
Code Quality and General Maintenance
-
New contributor @raspofabs migrated
pkgdata
code to importlib to resolve warning aboutpkg_resources
in #3061 -
@zoldalma999 ported the controller module to C in #2056
-
@oddbookworm added code coverage CI in #2990
-
- Switched code to use
PyObject_CallOneArg
where applicable in #3023 - Drop MSYS2 clang32 from our CI in #3116
- Fix whitespace and eof formatting with pre-commit in #3104
- Fix a compiler warning in debug mode in #3124
- Made sure our CI and build dependency versions are all up to date in #3123, #3100 and #3118
- Switched code to use
-
@ankith26 and @Starbuck5 continued on the work to get pygame-ce compiling with the latest SDL3 prerelease in #3141, #2975, #3145, #2933, #3146, and #3160
-
@oddbookworm and @Starbuck5 kept our SDL dependency updated in #3094 and #3168 respectively
-
@ankith26 and @Starbuck5 kept the dev release process running in #3042 and #3173 respectively
-
@dependabot kept our CI dependencies updated in #3065, #3095, #3051, #3050, #3081, #3103, https://github...
2.5.2.dev2
Pre release version of 2.5.2 for testing, we appreciate everyone who tests out our dev releases!
Release highlights
- Promoted pygame.Window to public API. Allows use of multiple windows at once, new window operations.
- Various rect optimizations
- Dependency updates: SDL and lower level C libraries
- New module pygame.typing
- Fixed segfault in antialiased draw functions with non 32 bit surfaces
What's Changed
- 2.5.2.dev1 by @ankith26 in #3042
- Fixed a couple of versionadded tags that should have been versionaddedold in
display
docs by @oddbookworm in #3046 - Bump docker/build-push-action from 6.5.0 to 6.6.1 by @dependabot in #3051
- Bump actions/attest-build-provenance from 1.4.0 to 1.4.1 by @dependabot in #3050
- Improved geometry docs by @itzpr3d4t0r in #3043
- Fix imposter opengl by @Starbuck5 in #3059
- Add
Window.flash(operation)
by @damusss in #3054 - Add pygame.typing module by @damusss in #3002
- Use PyObject_Vectorcall in rect by @Starbuck5 in #3048
- Version-getters SDL2/SDL3 by @Starbuck5 in #2975
- Coverage CI created, hopefully it works first time lol by @oddbookworm in #2990
- Bump docker/build-push-action from 6.6.1 to 6.7.0 by @dependabot in #3065
- Optimized
Rect.clipline()
by @itzpr3d4t0r in #3067 - Optimized tuple creation for Rect getters by @itzpr3d4t0r in #3072
- Update
FRect
repr to handle larger values by @ankith26 in #3077 - Bump actions/attest-build-provenance from 1.4.1 to 1.4.2 by @dependabot in #3081
- Fix average_color docs and stubs to match implementation by @Starbuck5 in #3076
- Fix and improve
pygame.typing
module by @aatle in #3080 - Add
Window.focused
by @damusss in #3079 - Add alias
pygame.Sound
by @damusss in #3063 - Port the controller module to C. by @zoldalma999 in #2056
- Fix break when the OS resizes our window in
set_mode
by @oddbookworm in #2992 - Make experimental API not hidden in the docs anymore by @bilhox in #3068
Vector{2,3}.__delattr__
messaging fixed when deletingx, y, {z}
and removedVector4
zombies by @oddbookworm in #3069- Use PyObject_CallOneArg where applicable by @ankith26 in #3023
- migrate importlib to resolve warning about pkg_resources by @raspofabs in #3061
- Make
pygame.typing.PathLike
internal/private by @aatle in #3086 - Updated SDL version to 2.30.7 by @oddbookworm in #3094
- Fix test_inflate_ip__larger. by @avpai-dinosaur in #3098
- Bump actions/attest-build-provenance from 1.4.2 to 1.4.3 by @dependabot in #3095
- Add
Circle.intersect()
by @itzpr3d4t0r in #3071 - Remove RGBATuple by @Starbuck5 in #3102
- Fix component bounds checking by @ankith26 in #3087
- Bump build dependencies by @ankith26 in #3100
- Enhance
pygame.mouse.get_pressed
docs by @damusss in #3084 - Bump pypa/cibuildwheel from 2.20.0 to 2.21.0 by @dependabot in #3103
- Bump pypa/cibuildwheel from 2.21.0 to 2.21.1 by @dependabot in #3112
- Drop MSYS2 clang32 from our CI by @ankith26 in #3116
- Fix whitespace and eof formatting with pre-commit by @ankith26 in #3104
- Fix segfault with antialiased draw functions with a depth different than 32bits by @bilhox in #3008
- Add japanese readme by @hisa10 in #3114
- Update the dependency section of zh-cn README by @yunline in #3119
- Add
desktop
argument tomouse.get_pos
andmouse.get_pressed
by @damusss in #3105 - added example on how Window behaves with WINDOWCLOSE and QUIT events by @MrValdez in #3115
- Fix editable install on windows by @ankith26 in #3117
- Add
Circle.collidelist/collidelistall()
by @damusss in #2880 - Fix midi timer reset when quit by @MyreMylar in #3018
- Make
copy
methods explicit for linting by @damusss in #3129 - Fix a compiler warning in debug mode by @ankith26 in #3124
- Set error when too many numbers of argument in
pygame.Color.from_colorspace
by @bilhox in #3125 - Bump actions/checkout from 4.1.7 to 4.2.0 by @dependabot in #3135
- Bump docker/build-push-action from 6.7.0 to 6.8.0 by @dependabot in #3136
- Added additional circle attributes by @MrRedstone058 in #3127
- Bump ubuntu to 24.04 on CI, fix cppcheck by @ankith26 in #3123
- Clarify how Rect and positions relate in the intro tutorial by @datapythonista in #3111
- Fix aalines overlap by @mzivic7 in #2912
- wasm: controller is not multiphase init + workaround for wasm 313t by @pmp-p in #3137
- Rename
pygame.typing.Coordinate
toPoint
, fix related grammar by @aatle in #3139 - Fix
(F)Rect.scale_by(_ip)
handling of thescale_by
parameter by @ankith26 in #3078 - Add 9-patch to examples by @damusss in #2985
- transform.solid_overlay by @ScriptLineStudios in #2304
- Add draw.aaline width argument by @mzivic7 in #3140
- New up-to-date review of french readme + note of when it was last reviewed by @bilhox in #3142
- Missing pixels in
aalines
when using integer coordinates by @mzivic7 in #3144 - Add meson flag for compiling with SDL3 by @ankith26 in #3141
- SDL3: compile rect, bufferproxy, math, newbuffer, geometry by @ankith26 in #3145
- Fixes for rwobject (now iostream) SDL3 by @Starbuck5 in #2933
- SDL3 support for pygame.system by @Starbuck5 in #3146
- Fix stubcheck error on windows, mark typealiases as such in typing by @zoldalma999 in #3147
- Bump docker/build-push-action from 6.8.0 to 6.9.0 by @dependabot in #3151
- Bump actions/cache from 4.0.2 to 4.1.0 by @dependabot in #3153
- Add Italian README by @damusss in #3120
- Bump pypa/cibuildwheel from 2.21.1 to 2.21.3 by @dependabot in #3161
- Adjust pg_MappedColorFromObj API for SDL3-porting by @Starbuck5 in #3160
- Fix handling all color types in
pygame.transform.threshold
by @damusss in #3156 - Improve color notation in the docs by @damusss in #3165
- SDL 2.30.8 by @Starbuck5 in #3168
- Add basic pygame.typing unit test, remove problematic TypeAlias usage by @ankith26 in #3150
- Added
geometry.Line
base by @itzpr3d4t0r in #3131 - wasm: better wasm fencing by @pmp-p in https://github.com/pyg...
2.5.1
☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉
pip uninstall pygame
(if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉
We are pleased to do yet another release of pygame-ce, and this has been possible due to the efforts of over 20 code contributors. Together, we have made 193 commits across 139 files via 80 pull requests in the last 2 months since the previous release!
Now, onto the highlights!
Highlights
-
Added Python 3.13 (just standard 3.13, no free threading yet) and PyPy for apple silicon support.
-
We have a new logo!
- We haven't run out of optimization ideas yet 😅, we've managed to cram a few more in this release.
New API
- There is now a default destination position
(0, 0)
forSurface.blit
, thanks to @damusss in #2936. - @itzpr3d4t0r added a new function
Surface.premul_alpha_ip
to premultiply alpha faster by operating in place instead of needing to allocate a new Surface. @Matiiss also helped with documentation. See #2899, #2972, and #2980.
Bugfixes
- @Matiiss fixed passing
parent_window=None
todisplay.message_box
in #2723. - @itzpr3d4t0r fixed an issue
transform.hsl
not working on certain pixel formats in #2948. - @oddbookworm fixed a
Surface.fill
where rects with negative positions would slide to(0, 0)
and then fill, instead of only filling part of theRect
. See #2939 for details. - @ankith26 fixed using
SCALED
after not usingSCALED
indisplay
in #2925. - @damusss fixed using OpenGL with a resizable
pygame.Window
, see #2915.
General Enhancements
- @MyreMylar added a SIMD printout (SSE2, AVX2 & NEON) to
pygame.print_debug_info()
in #2897. This will help us debug any SIMD-backend specific bugs submitted by users. - @damusss added support for
radius = 0
circles to the experimentalgeometry
module, see #2913. - @zoldalma999 added new
"ABGR"
format support toimage.frombytes
andimage.tobytes
in #2951. - @zoldalma999 made the experimental
Window
class subclassable in #2950. - @ankith26 added support for iterables in
display.update
, see #2987. - @Starbuck5 and @ankith26 added Python 3.13 support in #2994 and #3030.
Performance Enhancements
- @itzpr3d4t0r continued his quest to optimize all the things, merging improvements to
PixelArray.make_surface
,transform.scale2x
,Surface.fblits
(a fix for a performance regression),mask.from_surface
and(F)Rect
methods. See #2953, #2859, #2978, #2895, and #2908 for more details. - @mzivic7 got a 5-6% boost out of
draw.aacircle
(new in pygame-ce 2.5.0) in #3012. - @Starbuck5 boosted the performance of some
draw
operations on 24-bit surfaces, with a 20% improvement on single-pixel line drawing, see #3021.
Deprecations and Removals
No new deprecations this release, but-
- @ankith26 added deprecation warnings to some already-deprecated API (
freetype.was_init
,scrap.lost
) in #3001.
Docs and Type Hints
- @Mega-JC created a new logo and added it to the docs (in collaboration with @kadir014 on the design), in #2965. This is great for us to express our own identity as a project.
- @REX2626, @whangho, @Mic-lab, and @damusss made grammar and wording improvements to docs content. See #2907, #2919, #2911, #3004, and #2901.
- @damusss made it so deprecated functions are marked with the deprecated decorator in #2984. This allows editors to show users that a function is deprecated very neatly. They also made some smaller enhancements to the type stubs in #2918 and #2926.
- @ankith26 modernized the stubs to use python-3.8-isms in #2995
- @MrF1ow added a Contribution Section to README to help out new contributors in #2910.
- @MyreMylar added license identifier to README in #2890.
- @oddbookworm changed dark theme slightly to make code more readable in some cases in #2960.
Examples and Unit Tests
- @bilhox made some general example changes and enhancements in #2581.
- @ankith26 and @MyreMylar enhanced our unit tests and ensured sure they keep passing in #3031, #3017, #2934, #2885, and #2966.
Code Quality and General Maintenance
- @Notenlish got rid of unneeded
docscomments.js
usage in docs in #2959. - @ankith26 added support for macOS arm64 PyPy in our releases in #2945. He also improved our buildconfig/CI by making it more robust and secure in #2971, #2977, #3015, #2941, and #3040.
- @Starbuck5 helped keep our codebase modern and tidy in #2922, #2940, #2928, #3014, #2973, #2974, and #3020.
- @oddbookworm made some ease-of-use changes to doc generation in #2942 and #2989.
- @zoldalma999 updated the codebase to use the
SDL_TTF_VERSION_ATLEAST
macro in #3003. - @ankith26 and @zoldalma999 made some changes to better support development "editable" builds in #2996 and #2952.
- @Matiiss and @oddbookworm ensured our SDL dependency is kept updated in #2949, #2969, and #3034.
- @dependabot kept all our CI dependencies updated in #2906, #2932, #2931, #2930, #2955, #2963, #2964, #2983, #2982, #3013, #3025, and #3024.
- @Starbuck5 and @ankith26 worked on making intermediate dev releases possible in #2905, #3038, and #3039.
New Contributors
- @REX2626 made their first contribution in #2907.
- @MrF1ow made their first contribution in #2910.
- @whangho made their first contribution in #2919.
- @Mic-lab made their first contribution in #3004.
Thanks all
A heartfelt thank you to everyone involved! This includes not just code contributors, but also the wider community - issue reporters, PR reviewers, tutorial creators, helpers on various media platforms, developers of supp...
2.5.1.dev2
A pre-release before the final release, please help us by testing this!
Release highlights
This is mostly a bug-fixes-and-enhancements release, but we do have a few cool new stuff to showcase!
- We now support and distribute wheels for CPython 3.13 and PyPy for apple silicon.
- The experimental
Window
class is now subclass-able. - Added new method
Surface.premul_alpha_ip
- The
dst
argument ofSurface.blit
now has a default value:(0, 0)
. This means you can skip this argument if you are blitting a surface at the origin (top-left) of the window.
What's Changed
- 2.5.0.dev5 by @Starbuck5 in #2904
- Start 2.5.1 by @Starbuck5 in #2905
- Bump docker/login-action from 3.1.0 to 3.2.0 by @dependabot in #2906
- Update docs of
Surface.get_(f)rect()
and(F)Rect.move_to()
by @damusss in #2901 - Fixed missing comma in README by @REX2626 in #2907
- Add SSE2, AVX2 & NEON support to
pygame.print_debug_info()
by @MyreMylar in #2897 - Use github download links to get SDL dependencies by @ankith26 in #2916
- Update transform.get/set_smoothscale_backend typehint from str to Literal by @damusss in #2918
- Contribution Section Added to README.rst by @MrF1ow in #2910
- Update punctuation in some docs by @whangho in #2919
- More SDL3 compat: Surface things by @Starbuck5 in #2922
- Very small typehint fix for pygame.Mask by @damusss in #2926
- Remove SDL v1.2.10 checks in display.c by @Starbuck5 in #2928
- pygame.Surface docs improvements by @REX2626 in #2911
- Bump docker/build-push-action from 5.3.0 to 5.4.0 by @dependabot in #2932
- Fix failing tests based on numpy v2 by @ankith26 in #2934
- Bump actions/checkout from 4.1.6 to 4.1.7 by @dependabot in #2931
- Bump pypa/cibuildwheel from 2.18.1 to 2.19.1 by @dependabot in #2930
- EventState SDL3 compat by @Starbuck5 in #2940
- Try re-enabling tests disabled since SDL 2.0.18 by @MyreMylar in #2885
- Fix passing
parent_window=None
tomessage_box
by @Matiiss in #2723 - Improve security of releases by adding hash checks by @ankith26 in #2941
- Updated SDL to 2.30.4 by @Matiiss in #2949
- Fix transform.hsl() to work on any Surface by @itzpr3d4t0r in #2948
- Bump docker/build-push-action from 5.4.0 to 6.1.0 by @dependabot in #2955
- Allow degenerate circles (radius = 0) by @damusss in #2913
- Improve
PixelArray.make_surface()
performance by @itzpr3d4t0r in #2953 - Fix
Surface.fill
with rects with negative positions that overlap the surface by @oddbookworm in #2939 - Add ABGR format to frombytes and tobytes by @zoldalma999 in #2951
- Make window subclassable by @zoldalma999 in #2950
- Optimized
transform.scale2x()
by @itzpr3d4t0r in #2859 - Use static inline instead of inline by @zoldalma999 in #2952
- Add default dest (0, 0) to Surface.blit by @damusss in #2936
- Docs generation is now
python -m buildconfig docs
andpython -m buildconfig docs full_generation
by @oddbookworm in #2942 - Bump docker/build-push-action from 6.1.0 to 6.2.0 by @dependabot in #2963
- Bump robinraju/release-downloader from 1.10 to 1.11 by @dependabot in #2964
- Add
Surface.premul_alpha_ip()
by @itzpr3d4t0r in #2899 - SDL 2.30.5 by @oddbookworm in #2969
- Make pyproject license consistent with
setup.py
by @ankith26 in #2971 - Fix
premul_alpha_ip
doc indentation issue by @Matiiss in #2972 - Add new official logos for pygame - Community Edition by @Mega-JC in #2965
- Fix homepage and release notes link in pypi urls by @ankith26 in #2977
- Use PyObject_CallMethod in resource loaders by @Starbuck5 in #2974
- Get rid of docscomments.js from docs by @Notenlish in #2959
- Remove obsolete surflock functions by @Starbuck5 in #2973
- Bump docker/build-push-action from 6.2.0 to 6.3.0 by @dependabot in #2983
- Ensure
.premul_alpha_ip()
works with zero sized Surfaces by @itzpr3d4t0r in #2980 - Bump pypa/cibuildwheel from 2.19.1 to 2.19.2 by @dependabot in #2982
- Restore inlining for
.fblits()
internal functionality by @itzpr3d4t0r in #2978 - Optimized
mask.from_surface()
when converting an alpha surface. by @itzpr3d4t0r in #2895 - Fix scaled-after-non-scaled usage by @ankith26 in #2925
- Optimized all
Rect/FRect
methods viapgRect_FromObject
by @itzpr3d4t0r in #2908 - General example changes by @bilhox in #2581
- python -m buildconfig now works again... by @oddbookworm in #2989
- Use python 3.8 isms in the type stubs by @ankith26 in #2995
- Add license identifier to readme by @MyreMylar in #2890
- Polish stubs with deprecated decorator by @damusss in #2984
- Make deprecated API raise deprecation warnings by @ankith26 in #3001
- Use
SDL_TTF_VERSION_ATLEAST
by @zoldalma999 in #3003 - Make blend flag docs more accurate by @Mic-lab in #3004
- Fix editable install test fixtures logic by @ankith26 in #2996
- Support iterable in
display.update
by @ankith26 in #2987 - 3.13 source support (removes deprecated functions) by @Starbuck5 in #2994
- Centralize CI config and make it more uniform (Adds macOS arm64 pypy CI) by @ankith26 in #2945
- Optimize draw.aacircle and fix typo by @mzivic7 in #3012
- Pin all build dependencies by @ankith26 in #3015
- Bump docker/build-push-action from 6.3.0 to 6.4.1 by @dependabot in #3013
- Skip flaky window tests on pypy by @ankith26 in #3017
- Adjust tobytes premul formula by @ankith26 in #2966
- Update OpenGL Viewport when Window resizes by @damusss in #2915
- Use PyObject_CallNoArgs where applicable by @Starbuck5 in #3020
- Changed dark theme slightly to make code more readable in some cases by @oddbookworm in #2960
- Remove unnecessary pixeloffset member of subsurface data by @Starbuck5 in #3014
- draw.c: better strategy for 24bpp writes by @Starbuck5 in #3021
- Bump docker/login-action from 3.2.0 to 3.3.0 by @dependabot in #3025
- Bump docker/build-push-action from 6.4.1 to 6.5.0 by @dependabot in #3024
- Update SDL to 2.30.6 by @oddbookworm in #3034
- Skip yet another flaky pypy test by @ankith26 in #3031
- Add python 3.13 wheel support by @ankith26 in #3030
New Contrib...
2.5.0
☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉
pip uninstall pygame
(if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉
This release, coming in just four months after the previous one, has been possible due to patches submitted by over 30 contributors, who have collectively made over 132 pull requests with 464 commits that touch 413 files! Impressive!
Now, onto the highlights!
Highlights
API updates
- added
mouse.get_just_[pressed|released]
in #2836 - added
display.[get|set]_window_position
in #2816 (F)Rect
can be initialized with no arguments in #2655
@whydoubt added the pitch
argument for image.tobytes
in #2602
@XFajk added Color.from_normalized
constructor and Color.normalized
property in #2693
@mzivic7 added draw.aacircle
in #2800
@itzpr3d4t0r added transform.hsl
in #2398
@ScriptLineStudios implemented a few convenience properties to Surface
class: Surface.width
, Surface.height
and Surface.size
in #2813
@bilhox added math.invlerp
and math.remap
in #2654
@ankith26 added mixer.get_driver
in #2741
SIMD Performance enhancements
@Starbuck5 improved performance of SSE2 no_surf_alpha_opaque_dst
blitter in #2601 and #2896. As a result of this PR, some kinds of blit operations should get a nice speed up (upto about 2.5x speedup on the testcases we used) on some hardware.
- Partially refactor SSE2 blitters with macros in #2656.
- Implemented AVX2 variant of
Surface.premul_alpha
in #2615
@MyreMylar added SIMD versions transform.invert
in #2534. This gives a significant performance boost, and in the example we tested, we have observed a 12x-13x speedup!
More pygame.geometry
goodies
The recently introduced experimental pygame.geometry
submodule has gotten more features and polish in this release in the PRs: #2561, #2660, #2634, #2662, #2661, #2709, #2791, #2732, #2731
A big thanks to everyone who contributed to pygame-geometry so far: @Emc2356, @itzpr3d4t0r, @andrewhong04, @ScriptLineStudios, @avaxar, @gresm, @Matiiss, @newpaxonian, @maqa41, and @blankRiot96
As with all experimental submodules, do remember that things in here are subject to change, and there are a lot more things to be added! See the docs for the current progress.
Other general highlights
@oddbookworm added opengl
support to the experimental pygame.Window
interface in #2659
@ankith26 added Wayland and PipeWire support in the linux wheels distributed by us in #1997 and #2733
@ankith26 rewrote the build machinery in the meson
buildsystem, while deprecating the old build machinery in the PRs #2557, #2803, #2853, #2856, #2875, #2854, #2831, #2779. As part of these changes, a few improvements are:
- On 32-bit ARMv7 systems (which includes many Raspberry Pi), NEON (SIMD) optimizations are now enabled by default. Therefore users of this should see a significant performance boost in many operations that can support SIMD.
- Enhanced support for Windows MinGW/MSYS2 systems.
- Reduced wheel size.
Deprecations and Removals
@Starbuck5 removed the pygame.threads
submodule in #2762
@oddbookworm re-added and properly deprecated the blend
argument of draw.aaline
in #2743
Performance Enhancements
In addition to those mentioned above that are SIMD-related
- Optimized
(F)Rect.unionall(_ip)
in #2784 - Optimized
(F)Rect.collideXX
family of methods in #2786 - Replaced use of internal C-API functions with more efficient alternatives in #2819
Bug fixes
@oddbookworm added shim to fix broken midi
module compilation in #2863
- fixed some init related issues in the experimental
window
API in #2860 - fixed segmentation fault during invalid
PixelArray
usage in #2742
General Enhancements
@Kn4ughty made error messages for using font
align clearer in #2777
@pmp-p ensured we keep supporting pygame on the web in
- wasm: unify pygame-web/pyodide/static Freetype init in #2748
- fixed some
METH_NOARGS
arg missing in #2888
- made
transform
blur on a surface with either width or height equal to 0 not raiseValueError
in #2852 - Cleanup codebase, docs and examples with American spelling in #2827
@Starbuck5 added a briefcase
template to pygame-ce in #2862
@RainRat fixed typos across the repository in #2847
@robertpfeiffer relax Surface.convert
conditions in #2839, now it is no longer a requirement to have called display.set_mode
when this method has been invoked with a
@oddbookworm removed the xwayland warning and ensured that debug info now contains whether x11 is running or xwayland in #2823
Examples and Unit tests
@snowfruit added an example for retro scaling in #2785
@Matiiss removed undefined variable in aliens.py
in #2769
@Starbuck5 fixed ftfont_test
being run directly in #2763
- Add a delta of 2 ms to test_music_pause__unpause() in #2898
- Force window surface update after set_size, hopefully proper fix for that pesky frequent pypy test fail in #2865
- Minor changes to support pytest in #2675
Docs, Tutorials and typestubs
- fixed documentation mix up in attributes of object returned by
get_power_state
in #2734 - added clarifications about ranges in
mixer
docs in #2738
@kritserv fixed an issue in pygame.display.get_caption
docs in #2765
@yohanmoon added instructions for resolving setuptools issue in the docs readme in #2868
@Matiiss added more /
(positional-only notation) to docs and stubs in #2691
@oddbookworm fixed indentation of surface attributes in #2900
@ankith26 did some minor docs/stubs improvements in invlerp
/remap
in #2902
@Starbuck5 added warning about 7.1 stereo on set_source_location
in #2881
- removed duplicate images in tutorials in #2871
- including
print_debug_info()
in issue template in #2879 - adjusted symbol color in light theme in #2891
Code quality and robustness
- Minor optimizations by using comprehensions in #2771
- PEP572 Use Python's assignment expression in #2782
- Remove lint logic from
setup.py
in #2796 setup.py
: Properly add_sdl2_data_files
todata_files
in #2770
@Lumiobyte fix a comment typo ...