Kivy 2.2.0 released

Written for Kivy by Mirko Galimberti on 2023-05-20

The Kivy team is happy to announce the release of Kivy 2.2.0.

Kivy is a full-featured framework for creating novel and performant user
interfaces, such as multi-touch applications, released under the **MIT license**.
The framework works on Windows, macOS, Linux, Android, iOS and Raspberry Pi.

Installation instructions and Kivy Docs are hosted on the [Kivy Website](https://www.kivy.org)

Currently supported Python versions are **3.7-3.11**

Features marked as deprecated on 1.9.0 and prior versions will be removed in Kivy 2.3.0 (See: https://github.com/kivy/kivy/issues/8177)

Highlights
----------

- [#7876]: `Line`/`SmoothLine`: Fixes rendering issues related to corner radius and updates its order (`rounded_rectangle`) + add getter methods for `rounded_rectangle`, `rectangle`, `ellipse`, `circle`.
- [#7882]: Re-implements the Bubble widget.
- [#7908]: Speed up SmoothLine creation by ~2.5x
- [#7942]: Config unicode support on Windows
- [#7988]: Added support for KIVY_LOG_MODE
- [#8044]: Add support for Python 3.11
- [#8056]: New Feature: Add `BoxShadow` graphic instruction 🎉
- [#8115]: Use `font_direction` and `font_script_name` from SDL2_ttf
- [#8144]: Added property for mouse draggable tab scrollbar to TabbedPanel
- [#8162]: `Label`: allow different values of left, top, right and bottom for `padding`.
- [#8169]: `Image`: add `fit_mode` feature
- [#8096]: Introduce build script for SDL dependencies and `KIVY_DEPS_ROOT`

Deprecated
----------

- [#7882]: Re-implements the Bubble widget.

Breaking changes
----------------

- [#7876]: `Line`/`SmoothLine`: Fixes rendering issues related to corner radius and updates its order (`rounded_rectangle`) + add getter methods for `rounded_rectangle`, `rectangle`, `ellipse`, `circle`.

Kv-lang
-------

- [#8021]: Update builder.py

Misc
----

- [#7906]: Replace deprecated logging.warn with logging.warning
- [#7913]: fix(UrlRequest): Add "on_finish" and add alternative implementation
- [#7943]: Fixes some E275 - assert is a keyword. + other minor PEP8 fixes
- [#7969]: Config is not available when generating docs + Use `getdefault` instead of `has_option` + `get`

Widgets
-------

- [#7626]: New Feature: Allow control how many lines to scroll at once using the mouse wheel on TextInput
- [#7882]: Re-implements the Bubble widget.
- [#7905]: Fix TextInputCutCopyPaste widget
- [#7925]: Qwerty VKeyboard button fix( z, Q and W and ] ) on Linux(Ubuntu Focal Fossa)
- [#8109]: Fix for changes of Splitter.strip_cls having no effect
- [#8144]: Added property for mouse draggable tab scrollbar to TabbedPanel
- [#8169]: `Image`: add `fit_mode` feature
- [#8202]: Migrate `allow_stretch` and `keep_ratio` in widgets/examples by corresponding `fit_mode`

Core-app
--------

- [#7942]: Config unicode support on Windows
- [#7958]: Use AddLevelName in kivy.Logger to define TRACE
- [#7962]: Refactored logging.ColoredFormatter to avoid deepcopy.
- [#7971]: Support KivyLogMode environment variable for logging testing
- [#7973]: Bump KIVY_CONFIG_VERSION and add a warning for future changes.
- [#7975]: Light clean up of stderr handling code.
- [#7979]: #7978: Don't monkey-patch logging.root
- [#7985]: Handle non-strings in logs.
- [#7988]: Added support for KIVY_LOG_MODE
- [#7989]: Android Lifecycle convergence
- [#7994]: Use urlopen instead of build_opener when fetching files from 'internet'. Removes some PY2 compat.
- [#8062]: Use `find_spec`, `module_from_spec` and `exec_module` instead of `find_module` and `load_module` since are deprecated.

Core-providers
--------------

- [#7846]: Fix VKeyboard missing with custom keyboard class
- [#7857]: iOS camera provider enhancements
- [#7982]: Use `SDL_WINDOWEVENT_DISPLAY_CHANGED` to notice about window switching display to update `_density` an `dpi`
- [#7999]: Modify layout fix bug in how long text without space is cut
- [#8025]: Release the GIL when performing SDL_GL_SwapWindow call.
- [#8058]: Makes Windows DPI aware of scale changes
- [#8076]: New Feature: Always On Top
- [#8083]: Allow changing `Window.fullscreen` and `Window.borderless` options after setup on iOS
- [#8115]: Use `font_direction` and `font_script_name` from SDL2_ttf
- [#8142]: New Feature: Allows to hide the taskbar icon
- [#8146]: Fix memory issue on iOS 16.2 for AVMetadataObject (during QRCode scan)
- [#8147]: Detect High DPI on Linux Desktop
- [#8162]: `Label`: allow different values of left, top, right and bottom for `padding`.
- [#8171]: Make VideoFFPy work with RTSP streams.
- [#8184]: Revert "Detect High DPI on Linux Desktop"

Core-widget
-----------

- [#8035]: Simplify Animation._unregister

Distribution
------------

- [#7837]: Bump to 2.2.0.dev0
- [#7852]: Build python 3.9 wheels for RPi
- [#7974]: Bump SDL2, SDL_image, SDL_mixer, SDL_ttf versions to latest stable release
- [#8004]: Bump kivy_deps.sdl2 and kivy_deps.sdl2_dev to 0.5.0
- [#8006]: Use Platypus 5.4
- [#8043]: Bump SDL2 to `2.24.1` on Linux and macOS
- [#8044]: Add support for Python 3.11
- [#8050]: Bump again SDL2 to 2.24.2 on Linux and macOS
- [#8070]: Remove usage of `distutils` module which is deprecated and slated for removal in 3.12
- [#8096]: Introduce build script for SDL dependencies and `KIVY_DEPS_ROOT`
- [#8155]: Dependencies build tool: exit immediately on fail and allows to debug easier
- [#8173]: Bump macOS dependencies versions on `tools/build_macos_dependencies.sh`
- [#8174]: Bump Linux dependencies versions on `tools/build_linux_dependencies.sh`
- [#8176]: Bump Windows dependencies via `kivy_deps` packages
- [#8178]: Bump `cython_max` version
- [#8191]: XCode 14.3 fails to build SDL if `MACOSX_DEPLOYMENT_TARGET` < `10.13`
- [#8203]: Migrate from `autotools` to `cmake` for SDL2 linux dependencies
- [#8223]: Perform RPi builds on `balenalib/raspberrypi3-*` images and skip `DISPMANX` API usage if can't be used [build wheel armv7l]
- [#8231]: Bump version to `2.2.0rc1`

Documentation
-------------

- [#7870]: Documentation: bump Gentoo install instructions
- [#7916]: Fixes NO DOCUMENTATION (module kivy.uix.recycleview)
- [#7927]: Fix minor typo in pong tutorial code comments
- [#7928]: Add missing closing paren in hint text
- [#7929]: Use consistent source code notes in pong tutorial
- [#7930]: Purge trailing whitespace in docs source files
- [#7946]: Add doc for `Canvas.add()`
- [#8026]: Typo : missing coma in the doc
- [#8032]: doc: Initial remarks on BSD compatibility.
- [#8034]: Fix backticks typo in pong tutorial
- [#8039]: Link to buildozer installation instructions instead of duplicating them
- [#8041]: installation-osx.rst: Minor code formatting
- [#8088]: Add support for sphinx `6.0.0`
- [#8089]: Add a warning about `keyboard_suggestions` usage on Android
- [#8139]: Improve docs about `BoxShadow` behavior and usage.
- [#8156]: Docs: Update the Ubuntu prerequisites to build Kivy and its dependencies
- [#8175]: Update Copyright and LICENSE dates
- [#8179]: Update Python supported versions
- [#8181]: :book: Grammar tweaks to focus docstrings
- [#8183]: Docs: Fixes a typo (issue #7838)
- [#8229]: Sphinx `7.0.0` is incompatible, use `<=6.2.1` for now
- [#8234]: Docs review for `RPi` installation and build instructions

Graphics
--------

- [#7860]: Ellipse: update angle_start, angle_end to explicit floats
- [#7876]: `Line`/`SmoothLine`: Fixes rendering issues related to corner radius and updates its order (`rounded_rectangle`) + add getter methods for `rounded_rectangle`, `rectangle`, `ellipse`, `circle`.
- [#7908]: Speed up SmoothLine creation by ~2.5x
- [#8056]: New Feature: Add `BoxShadow` graphic instruction 🎉
- [#8098]: Fix `BoxShadow` shader crashing issue on Adreno GPUs
- [#8132]: `BoxShadow`: Add `inset` feature
- [#8138]: `BoxShadow`: Accept values for vertical and horizontal `spread_radius`
- [#8163]: `Line`/`SmoothLine`: `ellipse` - fix behavior and add feature to allow closing line through center of ellipse
- [#8164]: `Ellipse`: Handle the number of segments and avoid division by zero
- [#8170]: Add svg rotation transform support
- [#8187]: `Line`/`SmoothLine` - `ellipse`: Handle the number of segments to match `Ellipse`

Input
-----

- [#8027]: Typo : German Keyboard is QWERTZ

Tests/ci
--------

- [#7847]: Tests: ffpyplayer now ships cp310-* and Apple Silicon compatible wheels, so tests on the full version can be re-introduced.
- [#7854]: Fixes 3.8.x pyenv install due to a recent change in clang [build wheel osx]
- [#7885]: Our self-hosted Apple Silicon runner now has been migrated to actions/runner v2.292.0 which now supports arm64 natively
- [#7903]: Migrate from probot/no-response to lee-dohm/no-response
- [#7917]: When using pytest_asyncio for tests, function should be decorated with `pytest_asyncio.fixture`
- [#7972]: Fix trivial typo in workflow.
- [#7987]: Fix source typo in test_uix_bubbles.py
- [#8084]: Switch from `ubuntu-18.04` to `ubuntu-latest` as `18.04` runners will be removed on 2023-01-12
- [#8093]: Add `gstreamer1.0-plugins-good` for `autoaudiosink` availability during tests
- [#8099]: Install twine only when needed [build wheel]
- [#8117]: Upgrade GitHub Actions
- [#8120]: [build wheel] Upgrade more GitHub Actions
- [#8121]: GitHub Actions: Use current Python instead of hardcoded v3.9
- [#8126]: Switch back to `macos-latest` instead of `macos-11`
- [#8129]: Remove remaining nosetest settings in favor of pytest
- [#8157]: Correct the flake8 pre-commit URL
- [#8217]: `Generate-sdist` needs `packaging` as a dependency [build wheel win]

Thanks
--------

A big thanks to all of the Contributors, especially those github usernames mentioned here:

Akshay Arora, Alsp, Anders, AnthonyZimmermann, CdrSonan, Cecil Curry, Chris Vincent, Christian Clauss, Danny Dawson, Dexer, Evgeniy Selezniov, Gabriel Pettier, Gabriel Vogel, Hugo van Kemenade, Johan Toft, Julian, Matt Einhorn, Mirko Galimberti, NomadDemon, Paul Cochrane, Peter Tripp, Richard Larkin, Robert Niederreiter, RobertF, Robin Picard, Romain Heller, SanAndreyas, Tom Dudley, Tomasz CEDRO, Vinayak Sachan, anand vibhuti, djogy, luzpaz, mp-007, 水戸う納豆齋(Nattōsai Mitō)

Read all announcements