In this file will be listed the changes, especially the breaking ones that one should be careful of when upgrading from a version of rust-sdl2 to another. ### v0.32.1 [PR #868](https://github.com/Rust-SDL2/rust-sdl2/pull/868): Added inplace operations for `rect::Point`. [PR #827](https://github.com/Rust-SDL2/rust-sdl2/pull/827): Added 32-bit array pixelformats [PR #824](https://github.com/Rust-SDL2/rust-sdl2/pull/824): Added `controller::set_rumble` and `joystick::set_rumble`, wrappers for `SDL_GameControllerRumble` and `SDL_JoystickRumble` respectively. [PR #867](https://github.com/Rust-SDL2/rust-sdl2/pull/867): Added `Window::opacity` and `Window::set_opacity`, wrappers for `SDL_GetWindowOpacity` and `SDL_SetWindowOpacity` respectively. This bumps the minimum `SDL2` version requirement from `2.0.4` to `2.0.5`. ### v0.32 [PR #790](https://github.com/Rust-SDL2/rust-sdl2/pull/790): Added missing `window_id` field to `Event::DropFile` [PR #789](https://github.com/Rust-SDL2/rust-sdl2/pull/789): Audio Safety Fixes [PR #785](https://github.com/Rust-SDL2/rust-sdl2/pull/785): Vulkan Support [PR #782](https://github.com/Rust-SDL2/rust-sdl2/pull/782) * Move ffi of features (mixer, ...) into `sys` * Updated SDL2's default version to 2.0.8 [PR #780](https://github.com/Rust-SDL2/rust-sdl2/pull/780): Fixed a panic in `keyboard::Mod` [PR #775](https://github.com/Rust-SDL2/rust-sdl2/pull/775): Added `get_platform` [PR #774](https://github.com/Rust-SDL2/rust-sdl2/pull/774): `add_timer` is now must_use [PR #764](https://github.com/Rust-SDL2/rust-sdl2/pull/764): impl `Hash` for `Point` and `Rect` [PR #763](https://github.com/Rust-SDL2/rust-sdl2/pull/763): Allow `-sys` to build for `windows-gnu` target [PR #751](https://github.com/Rust-SDL2/rust-sdl2/pull/751): **Breaking change** `gl_setswap_interval` now returns a `Result` instead of a `bool`. [PR #759](https://github.com/Rust-SDL2/rust-sdl2/pull/759): Expose Joystick power level [PR #751](https://github.com/Rust-SDL2/rust-sdl2/pull/751) * Fix memory leak in `filesystem::base_path()` * Fix memory leak on `ClipboardUtil::clipboard_text()` [PR #740](https://github.com/Rust-SDL2/rust-sdl2/pull/740): Implement Debug for Event [PR #737](https://github.com/Rust-SDL2/rust-sdl2/pull/737): Fix `ClipboardUtil::set_clipboard_text` to return an Ok when it went well. [PR #733](https://github.com/Rust-SDL2/rust-sdl2/pull/733): Add `video::border_size -> Result<(u16, u16, u16, u16), String>` equivalent of `SDL_GetWindowBorderSize()` [PR #732](https://github.com/Rust-SDL2/rust-sdl2/pull/732): Implemented `From<(u8, u8, u8)>` and `From<(u8, u8, u8, u8)>` for `pixels::Color`. `Canvas.set_draw_color` can now be called with tuples or other types which implements `Into` [PR #279](https://github.com/Rust-SDL2/rust-sdl2/pull/729) * **Breaking change** set\_video\_minimize\_on\_focus\_lost was renamed to …minimize\_on\_focus\_loss, as it should be. As a bonus, it works now. * Although this is a breaking change, this function was not working in the first place, so this is hardly a true breaking change ### v0.31 [PR #693](https://github.com/Rust-SDL2/rust-sdl2/pull/693), [PR #720](https://github.com/Rust-SDL2/rust-sdl2/pull/720) * Adds feature "bundled" as well as "static-link". Entirely compatible wit hthe "use-bindgen" feature. Windows-gnu is not supported yet, any help is needed on that side, but every other major platform should be supported. [PR #711](https://github.com/Rust-SDL2/rust-sdl2/pull/711) * **Breaking change** Change HatState::Leftdown casing into HatState::LeftDown to be consistent with naming. [PR #695](https://github.com/Rust-sdl2/rust-sdl2/pull/695) * sdl2-sys can now be generated at compile time by bindgen (Opt-in required with "use-bindgen" feature) * The new sdl2-sys source code is generated by bindgen, hence **almost everything that uses sdl2-sys will be broken**. The fixes are small but still preset. [PR #673](https://github.com/Rust-sdl2/rust-sdl2/pull/673) * Support Audio Capture in AudioCallbacks. [PR #684](https://github.com/Rust-sdl2/rust-sdl2/pull/684) * **Breaking change** Make get\_swap\_interval return an enum instead of i32 * The signature of set\_swap\_interval has been changed as well, but it shouldn't breaking existing code too much. [PR #683](https://github.com/Rust-sdl2/rust-sdl2/pull/683) * Adds the `unsafe_textures` feature to this crate, allowing to get rid of the lifetimes in `Texture`s in the `render` module. [PR #704](https://github.com/Rust-SDL2/rust-sdl2/pull/704) * Adds the `Music::from_static_bytes` function, which creates a Music instance with the static lifetime from a buffer that also has a static lifetime. [PR #708](https://github.com/Rust-SDL2/rust-sdl2/pull/708) * Makes the fields of the `sdl2::mixer::Channel(i32)` and `sdl::mixer::Group(i32)` structs public so they can be instantiated directly, and deprecates `sdl2::mixer::channel(i32)`. [PR #714](https://github.com/Rust-SDL2/rust-sdl2/pull/714) * **Breaking change** Updates the `which` fields of `sdl2::Event::ControllerDeviceAdded` and `sdl2::Event::JoyDeviceAdded` to be `u32`s so they can be used with `sdl2::GameControllerSubsystem` and `sdl::JoystickSubsystem` methods directly. * **Breaking change** Updates `sdl2::HapticSubsystem::open_from_joystick_id` to correctly advertise `joystick_index` as being a `u32`. * This should only mean removing type conversions which were previously needed to use these values, or changing incorrect assumptions in existing code. ### v0.30 Re-exported sdl2\_sys as sdl2::sys [PR #632](https://github.com/AngryLawyer/rust-sdl2/pull/632) The path of soundness isn't an easy one; sometimes ease of use has to be sacrificed for soundness and safety! This change is a breaking change, and a **huge** one at that. **You will probably have to refactor some parts of your code**, but this is the price to pay for soundness and runtime safety. **Breaking Changes:** * `Renderer` has been renamed and split into `Canvas` and `TextureCreator`. * `Canvas` can store a `Surface` or a `Window`, and can be used to render into these as well. `TextureCreator` creates `Texture`s and is used by Texture to make sure they don't live longer than expected. * `set_render_target` has been removed and has been replaced with `Canvas::with_texture_canvas` and `Canvas::with_multiple_texture_canvas` * Deleted `WindowRef`, it wasn't useful anymore. Other Changes: * Added `PixelFormatEnum::supports_alpha(&self) -> bool` method. * A single Game Of Life example has been added to show the basic capabilities of the new `Canvas` and `TextureCreator` structs, as well as adding a very basic game to show how to handle input / game changes in a basic game. You won't have to worry about what target your `Renderer` has at runtime anymore, everything is done at compile time now ! [PR #628](https://github.com/AngryLawyer/rust-sdl2/pull/628) * Changed signature of `Surface::fill_rects` ([old](https://docs.rs/sdl2/0.29.1/sdl2/surface/struct.SurfaceRef.html#method.fill_rects) | [new](https://docs.rs/sdl2/0.30.0/sdl2/surface/struct.SurfaceRef.html#method.fill_rects)) * Changed various `Option` parameters into `Into>` parameters. For instance, it is now possible to do this: ```rust surface.blit(None,Rect::new(5,5,5,5)); // instead of surface.blit(None,Some(Rect::new(5,5,5,5))); ``` [PR #639](https://github.com/AngryLawyer/rust-sdl2/pull/639) * Added hint-specific functions to `sdl2::hint` ```rust sdl2::hint::set_video_minimize_on_focus_lost(bool) -> bool; sdl2::hint::set_video_minimize_on_focus_lost_with_priority(bool, sdl2::hint::Hint) -> bool; sdl2::hint::get_video_minimize_on_focus_lost() -> bool; ``` [PR #629](https://github.com/AngryLawyer/rust-sdl2/pull/629) * **Breaking Change: Changed Color to be a struct rather than an enum.** * Takes less space, easier to use, old constructors are still available. * Matching is no longer necessary to read the component values. * Struct rather than variant construction is required in static initializers. ```rust let color = Color { r: 255, g: 0, b: 0, a: 255 }; let color = Color::RGBA(255, 0, 0, 255); let color = Color::RGB(255, 0, 0); let (r, g, b) = color.rgb(); let (r, g, b, a) = color.rgba(); ``` [PR #651](https://github.com/AngryLawyer/rust-sdl2/pull/629) * **VideoSystem::display_name** now returns a `Result` instead of a `String`. * This prevents a segfault when the requested display index is out of bounds [commit e9681a0fe](https://github.com/AngryLawyer/rust-sdl2/commit/e9681a0fe) * `window.surface()` has been changed and is now more intuitive to use. * The example in `examples/no-renderer.rs` shows how to use this feature. [PR #635](https://github.com/AngryLawyer/rust-sdl2/pull/635) * **Deprecated `Rect::contains`**, added `Rect::contains_point` and `Rect::contains_rect`. **`contains` and `contains_point` are close but different ! See [here](https://github.com/AngryLawyer/rust-sdl2/issues/569)**