Merge 9986e488e972b84504ed8381ed0703aa3545ea45 into b00d3b9eb98be4fa2eca7ae9d88f96d28796e4f0

This commit is contained in:
Vraiment 2025-04-14 06:02:17 +00:00 committed by GitHub
commit 55a8ec41ce
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 222 additions and 0 deletions

View File

@ -87,6 +87,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
@ -106,6 +107,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

70
SDL2pp/Display.cc Normal file
View File

@ -0,0 +1,70 @@
/*
libSDL2pp - C++11 bindings/wrapper for SDL2
Copyright (C) 2017 Vraiment <jemc44@gmail.com>
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 <SDL2pp/Display.hh>
#include <SDL2pp/Exception.hh>
#include <SDL_video.h>
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) {
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;
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;
if (SDL_GetDisplayUsableBounds(displayIndex, &result) < 0) {
throw Exception("SDL_GetDisplayUsableBounds");
}
return result;
}
#endif
}

149
SDL2pp/Display.hh Normal file
View File

@ -0,0 +1,149 @@
/*
libSDL2pp - C++11 bindings/wrapper for SDL2
Copyright (C) 2017 Vraiment <jemc44@gmail.com>
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 <SDL2pp/Export.hh>
#include <SDL_version.h>
#include <SDL2pp/Rect.hh>
#include <string>
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
///
/// \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
///
/// \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
///
/// 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

View File

@ -60,6 +60,7 @@
/// \ingroup graphics
///
////////////////////////////////////////////////////////////
#include <SDL2pp/Display.hh>
#include <SDL2pp/Window.hh>
////////////////////////////////////////////////////////////