# Change Log All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/). ## Unreleased ### Fixed * Make `SDLmain` library optional in Unix, since some distros seem to drop it ## 0.16.0 - 2018-02-11 ### Added * New SDL 2.0.5 `Window` method: `Window::SetResizable()` * Minor documentation improvements * Example code fixes ## 0.15.0 - 2017-07-10 ### Added * `Color` class wrapping around `SDL_Color` ## 0.14.1 - 2017-06-28 ### Fixed * `Surface.hh` include was missing from `SDL2pp.hh` ## 0.14.0 - 2017-05-29 ### Fixed * Proper `Size()` handling for custom `RWops` ### Added * `Window::GetOpacity()` and `Window()::SetOpacity()` wrappers for functions appeared in SDL 2.0.5 * `Music` RWops constructors based on undocumented SDL_mixer functions * Static standalone build support ### Changed * libSDL2pp now follows SDL2 include path conventions, finding and using SDL2 headers without SDL2/ prefix ## 0.13.0 - 2016-11-08 ### Fixed * Fixed SDL 2.0.4 specific `AudioDevice` methods: `AudioDevice::QueueAudio()`, `AudioDevice::GetQueuedAudioSize()` * Fixed MSVC compiler support and .dll generation * Multiple documentation fixes ### Added * More tests * Automatic SDL 2.0.4 detection * `Texture::Update()` overload which takes rvalue reference to `Surface` ### Changed * `Renderer::GetClipRect` now returns `Optional` instead of (possibly empty) `Rect` * `Exception` is now derived from `std::runtime_error` ### Removed * Deprecated `Renderer::GetInfo()` variant which takes pointer (use variant which takes reference) ## 0.12.0 - 2016-01-23 ### Fixed * Link SDL2main library, which is needed on some systems * Numerous improvements in Windows support * Documentation fixes * Multiple fixes in pkg-config and CMake module files ## 0.11.0 - 2015-11-30 ### Added * New `Window` methods: `Window::GetDrawableWidth()`, `Window::GetDrawableHeight()`, `Window::GetDrawableSize()` (@csoren) * `Point` and `Rect` less-than operators and std::hash support which makes them usable as `std::map`/`std::unordered_map`/`std::set`/`std::unordered_set` keys * More `Rect` methods and wider constexpr support ### Fixed * `Rect` documentation fixes * Unused variable warnings (@vladimirgamalian) * Incorrect return value handling in `Surface::SetClipRect()` ## 0.10.0 - 2015-10-14 ### Fixed * Improved cygwin compatibility * Missing `SDL` method implementations * Fixed return and argument types for some `Window`, `Font` and `Mixer` methods to match upstream API * Infinite loop in `StreamRWops` * Documentation improvements * Build without [SDL_mixer](https://www.libsdl.org/projects/SDL_mixer/) support ## 0.9.0 - 2015-09-07 ### Added * [SDL_mixer](https://www.libsdl.org/projects/SDL_mixer/) support * More `Point` operators: `*`, `/`, `%` for integer multiplication, division and remainder by a number or another `Point` * `Point` and `Rect` better inlining and constexpr support * New method: `Surface::GetFormat()` * `Texture::Update()` overload which takes Surface as pixel source ## 0.8.2 - 2015-07-28 ### Fixed * Add missing `Font::IsGlyphProvided()` implementation (@vladimirgamalian) * Fix glyph rectangle calculation in `Font::GetGlyphRect()` (@vladimirgamalian) ## 0.8.1 - 2015-06-29 ### Fixed * Use correct type flags in `RWops::Size()`, fixing MinGW build (@vladimirgamalian) ## 0.8.0 - 2015-06-10 ### Added * `Render::Copy()` overload which takes target `Point` instead of a `Rect` * New method `Render::FillCopy()` which fills target rect with repeated texture * Improved UTF-16 font rendering support * CMake module file ## 0.7.1 - 2015-03-27 ### Fixed * Miscellaneous style, documentation and build system fixes ## 0.7.0 - 2015-01-22 ### Added * More `Texture`, `Renderer` (both complete now) and `Window` methods * New methods: `Point::Clamp()`, `Point::Wrap()`, `Rect::Extend()`, `Rect::IntersectLine()` * STL stream output for `Point` and `Rect` (as in `std::cout << Rect(10, 20, 30 40);`) ### Changed * Most setters now return reference to self to allow method chaining * Exception now stores both SDL error and name of function which caused it; `what()` message now includes these both in a readable way, so SDL2pp exceptions may be conveniently handled with `catch (std::exception&)` * pkg-config file now provides SDL libraries along with SDL2pp, so users don't need to care of SDL2 flags in addition to SDL2pp's ### Removed * Deprecated `Point` and `Rect` methods: `Null()`, `IsNull()`, `Get()` ### Fixed * Use move, not copy in constructing `RWops` from `CustomRWops`-derived class ## 0.6.0 - 2015-01-11 ### Added * [Doxygen](http://doxygen.org/) documentation for the whole library * Wrapper around [SDL_image](https://www.libsdl.org/projects/SDL_image/) initialization/deinitialization: `SDLImage` class * `Surface``, a wrapepr for [SDL_Surface](https://wiki.libsdl.org/SDL_Surface) including [SDL_image](https://www.libsdl.org/projects/SDL_image/) support. It's now also possible to construct `Texture` from `Surface`. * Bunch of constructors from existing SDL objects (e.g. `Window::Window(SDL_Window*)`) for `Point`, `Rect`, `Window`, `Renderer`, `Texture` * Complete [SDL_ttf](https://www.libsdl.org/projects/SDL_ttf/) support * Consistent `GetWidth()`/`GetHeight()`/`GetSize()` for `Texture` and `Surface` * More operators, constructors and methods for `Point` and `Rect` ### Fixed * Added proper error checking for SDL_image-using Texture constructors * Multiple fixes in build system ## 0.5.2 - 2014-12-30 ### Fixed * Added missing include file to installation ## 0.5.1 - 2014-12-27 ### Fixed * Potential problems with SDL2 error handling ## 0.5.0 - 2014-12-26 ### Added * `AudioDevice::LockHandle` is now copyable * `Rect` now has `+` `-` `+=` `-=` operators to offset it by a `Point` * `Optional` class to pass optional values * Possibility to use c++1y standard and detection of available useful c++1y features with c++11 * Default argument for `Texture::Lock()` * Bunch of `Window` functions: `Window::Maximize()`, `Window::Minimize()`, `Window::Hide()`, `Window::Restore()`, `Window::Raise()`, `Window::Show()`, `Window::SetFullscreen()`, `Window::SetSize()` * More granular build options for tests and examples ### Changed * `Point` and `Rect` no longer have invalid (null) states and are now directly derived from [SDL_Point](https://wiki.libsdl.org/SDL_Point) and [SDL_Rect](https://wiki.libsdl.org/SDL_Rect) structures. In places where null states were usable (e.g. usually null `Rect` would mean "whole area", like in `Texture::Lock()`), `Optional` class is now used. Use `NullOpt` instead of `Point::Null()` and `Rect::Null()` ## 0.4.0 - 2014-12-19 ### Added * `StreamRWops` which works with STL streams * `AudioDevice` and `Texture` `LockHandle`s now have empty constructors and may be initialized after construction * `RWops` `(Read|Write)(LE|BE)(16|32|64)` methods * pkg-config file ### Changed * Plain `ContainerRWops` is now able to work with both const and mutable containers * Audio callback is now tied to `AudioDevice`, not `AudioSpec`, which is cleaner and easier to use ### Removed * `ConstContainerRWops` which is no longer needed ### Fixed * Exception safety when changing audio callback * Made `-Werror` flag conditional for user convenience ## 0.3.0 - 2014-11-30 ### Added * [SDL audio](https://wiki.libsdl.org/CategoryAudio) functionality ### Fixed * Proper self-assignment handling in move assignment operators ## 0.2.0 - 2014-11-25 ### Added * Getters for `Texture` properties: `Texture::GetWidth()`, `Texture::GetHeight()`, `Texture::GetFormat()`, `Texture::GetAccess()` * `Texture` locking * New `Rect` method `Rect::Contains()` to check if it contains a `Point` ## 0.1.1 - 2014-09-09 ### Added * Installation * Library version ## 0.1.0 - 2014-09-05 ### Added * [SDL2_image](https://www.libsdl.org/projects/SDL_image/) support * `RWops` support * New `Renderer` methods: `Renderer::SetClipRect()`, `Renderer::SetScale()`, `Renderer::SetViewport()`, `Renderer::TargetSupported()` * New `SDL` methods: `SDL::WasInit()`, `SDL::InitSubsystem()`, `SDL::QuitSubSystem()` * Basic MSVC support * Arithmetic operators for `Point` ### Fixed * GUI tests which are sensible to OpenGL implementation-specific behavior are no longer fatal ## 0.0.2 - 2014-02-11 ### Added * Unit tests * New `Window` methods: `Window::GetSize()`, `Window::GetWidth()`, `Window::GetHeight()`, `Window::SetTitle()` * New `Renderer` method: `Renderer::ReadPixels()` * `Point` and `Rect` setters and comparison operators ## 0.0.1 - 2014-02-01 ### Added * Initial release supporting basic `Window`, `Renderer`, `Texture`, `Rect` and `Point` handling