From 01e080ade9159faba8982df896556fb19865ed20 Mon Sep 17 00:00:00 2001 From: Vraiment Date: Mon, 24 Jul 2017 22:17:30 -0700 Subject: [PATCH 1/5] Added Display.hh and Display.cc --- CMakeLists.txt | 2 ++ SDL2pp/Display.cc | 26 ++++++++++++++++++++++++++ SDL2pp/Display.hh | 31 +++++++++++++++++++++++++++++++ SDL2pp/SDL2pp.hh | 1 + 4 files changed, 60 insertions(+) create mode 100644 SDL2pp/Display.cc create mode 100644 SDL2pp/Display.hh diff --git a/CMakeLists.txt b/CMakeLists.txt index 51eb91e..502bfcd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -126,6 +126,7 @@ SET(LIBRARY_SOURCES SDL2pp/AudioLock.cc SDL2pp/AudioSpec.cc SDL2pp/Color.cc + SDL2pp/Display.cc SDL2pp/Exception.cc SDL2pp/Point.cc SDL2pp/RWops.cc @@ -145,6 +146,7 @@ SET(LIBRARY_HEADERS SDL2pp/AudioSpec.hh SDL2pp/Color.hh SDL2pp/ContainerRWops.hh + SDL2pp/Display.hh SDL2pp/Exception.hh SDL2pp/Optional.hh SDL2pp/Point.hh diff --git a/SDL2pp/Display.cc b/SDL2pp/Display.cc new file mode 100644 index 0000000..36cacba --- /dev/null +++ b/SDL2pp/Display.cc @@ -0,0 +1,26 @@ +/* + libSDL2pp - C++11 bindings/wrapper for SDL2 + Copyright (C) 2017 Vraiment + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#include + +namespace SDL2pp { + +} diff --git a/SDL2pp/Display.hh b/SDL2pp/Display.hh new file mode 100644 index 0000000..8d91e3a --- /dev/null +++ b/SDL2pp/Display.hh @@ -0,0 +1,31 @@ +/* + libSDL2pp - C++11 bindings/wrapper for SDL2 + Copyright (C) 2017 Vraiment + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef SDL2PP_DISPLAY_HH +#define SDL2PP_DISPLAY_HH + +#include + +namespace SDL2pp { + +} + +#endif diff --git a/SDL2pp/SDL2pp.hh b/SDL2pp/SDL2pp.hh index 22110b4..b9b34d4 100644 --- a/SDL2pp/SDL2pp.hh +++ b/SDL2pp/SDL2pp.hh @@ -60,6 +60,7 @@ /// \ingroup graphics /// //////////////////////////////////////////////////////////// +#include #include //////////////////////////////////////////////////////////// From 9b82524c1a73375da2b7e40dfeec7f51742e4150 Mon Sep 17 00:00:00 2001 From: Vraiment Date: Mon, 24 Jul 2017 22:45:24 -0700 Subject: [PATCH 2/5] Added GetDisplayUsableBounds (issue #81) --- SDL2pp/Display.cc | 15 ++++++++++++++- SDL2pp/Display.hh | 30 +++++++++++++++++++++++++++++- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/SDL2pp/Display.cc b/SDL2pp/Display.cc index 36cacba..40733af 100644 --- a/SDL2pp/Display.cc +++ b/SDL2pp/Display.cc @@ -21,6 +21,19 @@ #include -namespace SDL2pp { +#include +#include + +namespace SDL2pp { +#if SDL_VERSION_ATLEAST(2, 0, 5) +Rect GetDisplayUsableBounds(int displayIndex) { + Rect result; + if (SDL_GetDisplayUsableBounds(displayIndex, &result) < 0) { + throw Exception("SDL_GetDisplayUsableBounds"); + } + + return result; +} +#endif } diff --git a/SDL2pp/Display.hh b/SDL2pp/Display.hh index 8d91e3a..5a1bef5 100644 --- a/SDL2pp/Display.hh +++ b/SDL2pp/Display.hh @@ -24,8 +24,36 @@ #include -namespace SDL2pp { +#include +#include + +namespace SDL2pp { +#if SDL_VERSION_ATLEAST(2, 0, 5) + //////////////////////////////////////////////////////////// + /// \brief Gets the usable desktop area of a given display + /// + /// This function retrieves an rectangle with the usable area + /// of the given display, with the initial display being + /// located at (0,0). This function does takes into account + /// space that is not usable, like OS X's menu bar, removing it + /// and returning the actual usable area. + /// + /// \ingroup graphics + /// + /// \headerfile SDL2pp/Display.hh + /// + /// \param[in] displayIndex The display to retrieve the usable area + /// + /// \returns A rectangle with the usable area of the given display + /// + /// \throws SDL2pp::Exception + /// + /// \see https://wiki.libsdl.org/SDL_GetDisplayUsableBounds + /// + //////////////////////////////////////////////////////////// + SDL2PP_EXPORT Rect GetDisplayUsableBounds(int displayIndex); +#endif } #endif From a6208de4f8a50c32b71d03b4028d6e78ac19e632 Mon Sep 17 00:00:00 2001 From: Vraiment Date: Mon, 24 Jul 2017 23:48:14 -0700 Subject: [PATCH 3/5] Added GetDisplayDPI --- SDL2pp/Display.cc | 11 +++++++++++ SDL2pp/Display.hh | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/SDL2pp/Display.cc b/SDL2pp/Display.cc index 40733af..cecccf2 100644 --- a/SDL2pp/Display.cc +++ b/SDL2pp/Display.cc @@ -26,6 +26,17 @@ #include namespace SDL2pp { +#if SDL_VERSION_ATLEAST(2, 0, 4) +DPI GetDisplayDPI(int displayIndex) { + float diagonal = 0, horizontal = 0, vertical = 0; + if (SDL_GetDisplayDPI(displayIndex, &diagonal, &horizontal, &vertical) < 0) { + throw Exception("SDL_GetDisplayDPI"); + } + + return DPI{diagonal, horizontal, vertical}; +} +#endif + #if SDL_VERSION_ATLEAST(2, 0, 5) Rect GetDisplayUsableBounds(int displayIndex) { Rect result; diff --git a/SDL2pp/Display.hh b/SDL2pp/Display.hh index 5a1bef5..de584b7 100644 --- a/SDL2pp/Display.hh +++ b/SDL2pp/Display.hh @@ -29,6 +29,54 @@ #include namespace SDL2pp { +#if SDL_VERSION_ATLEAST(2, 0, 4) + //////////////////////////////////////////////////////////// + /// \brief Read-only struct to store DPI information of a display + /// + /// \ingroup graphics + /// + /// \headerfile SDL2pp/Display.hh + /// + //////////////////////////////////////////////////////////// + struct SDL2PP_EXPORT DPI { + //////////////////////////////////////////////////////////// + /// \brief The diagonal DPI of the display + /// + //////////////////////////////////////////////////////////// + const float Diagonal; + + //////////////////////////////////////////////////////////// + /// \brief The horizontal DPI of the display + /// + //////////////////////////////////////////////////////////// + const float Horizontal; + + //////////////////////////////////////////////////////////// + /// \brief The vertical DPI of the display + /// + //////////////////////////////////////////////////////////// + const float Vertical; + }; + + //////////////////////////////////////////////////////////// + /// \brief Gets the dots/pixels per inch of a given display + /// + /// \ingroup graphics + /// + /// \headerfile SDL2pp/Display.hh + /// + /// \param[in] displayIndex The display to retrieve the DPI + /// + /// \returns A DPI object with the dpi values for the given display + /// + /// \throws SDL2pp::Exception + /// + /// \see https://wiki.libsdl.org/SDL_GetDisplayDPI + /// + //////////////////////////////////////////////////////////// + SDL2PP_EXPORT DPI GetDisplayDPI(int displayIndex); +#endif + #if SDL_VERSION_ATLEAST(2, 0, 5) //////////////////////////////////////////////////////////// /// \brief Gets the usable desktop area of a given display From 50683558324c351edf4d08a909db35aa6c16e67b Mon Sep 17 00:00:00 2001 From: Vraiment Date: Mon, 24 Jul 2017 23:59:12 -0700 Subject: [PATCH 4/5] Added GetDisplayName --- SDL2pp/Display.cc | 11 +++++++++++ SDL2pp/Display.hh | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/SDL2pp/Display.cc b/SDL2pp/Display.cc index cecccf2..7905fd3 100644 --- a/SDL2pp/Display.cc +++ b/SDL2pp/Display.cc @@ -25,7 +25,18 @@ #include +using std::string; + namespace SDL2pp { +string GetDisplayName(int displayIndex) { + const char* name = SDL_GetDisplayName(displayIndex); + if (name == nullptr) { + throw Exception("SDL_GetDisplayName"); + } + + return string{name}; +} + #if SDL_VERSION_ATLEAST(2, 0, 4) DPI GetDisplayDPI(int displayIndex) { float diagonal = 0, horizontal = 0, vertical = 0; diff --git a/SDL2pp/Display.hh b/SDL2pp/Display.hh index de584b7..85647ac 100644 --- a/SDL2pp/Display.hh +++ b/SDL2pp/Display.hh @@ -27,8 +27,27 @@ #include #include +#include namespace SDL2pp { + //////////////////////////////////////////////////////////// + /// \brief Gets the name of a given display + /// + /// \ingroup graphics + /// + /// \headerfile SDL2pp/Display.hh + /// + /// \param[in] displayIndex The display to retrieve its name + /// + /// \returns A string with the name of the given display + /// + /// \throws SDL2pp::Exception + /// + /// \see https://wiki.libsdl.org/SDL_GetDisplayName + /// + //////////////////////////////////////////////////////////// + SDL2PP_EXPORT std::string GetDisplayName(int displayIndex); + #if SDL_VERSION_ATLEAST(2, 0, 4) //////////////////////////////////////////////////////////// /// \brief Read-only struct to store DPI information of a display From 9986e488e972b84504ed8381ed0703aa3545ea45 Mon Sep 17 00:00:00 2001 From: Vraiment Date: Tue, 25 Jul 2017 00:07:52 -0700 Subject: [PATCH 5/5] Added GetDisplayBounds --- SDL2pp/Display.cc | 9 +++++++++ SDL2pp/Display.hh | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/SDL2pp/Display.cc b/SDL2pp/Display.cc index 7905fd3..47f64ab 100644 --- a/SDL2pp/Display.cc +++ b/SDL2pp/Display.cc @@ -28,6 +28,15 @@ using std::string; namespace SDL2pp { +Rect GetDisplayBounds(int displayIndex) { + Rect result; + if (SDL_GetDisplayBounds(displayIndex, &result) < 0) { + throw Exception("SDL_GetDisplayBounds"); + } + + return result; +} + string GetDisplayName(int displayIndex) { const char* name = SDL_GetDisplayName(displayIndex); if (name == nullptr) { diff --git a/SDL2pp/Display.hh b/SDL2pp/Display.hh index 85647ac..a09f876 100644 --- a/SDL2pp/Display.hh +++ b/SDL2pp/Display.hh @@ -30,6 +30,29 @@ #include namespace SDL2pp { + //////////////////////////////////////////////////////////// + /// \brief Gets the area of a given display + /// + /// This function retrieves an rectangle with the area of + /// the given display, with the initial display being located + /// at (0,0). This function does not takes into account space + /// that is not usable, like OS X's menu bar. + /// + /// \ingroup graphics + /// + /// \headerfile SDL2pp/Display.hh + /// + /// \param[in] displayIndex The display to retrieve the area + /// + /// \returns A rectangle with area of the given display + /// + /// \throws SDL2pp::Exception + /// + /// \see https://wiki.libsdl.org/SDL_GetDisplayBounds + /// + //////////////////////////////////////////////////////////// + SDL2PP_EXPORT Rect GetDisplayBounds(int displayIndex); + //////////////////////////////////////////////////////////// /// \brief Gets the name of a given display ///