85dbe33a77
Co-authored-by: Copilot <copilot@github.com>
47 lines
1.9 KiB
C++
47 lines
1.9 KiB
C++
#pragma once
|
|
/**
|
|
* @file video.hpp
|
|
* @brief Marries the two classes together resolving what would otherwise be circular dependencies between Window and
|
|
* Renderer
|
|
*/
|
|
#include <hdk/sdl/video/Display.hpp>
|
|
#include <hdk/sdl/video/Surface.hpp>
|
|
#include <hdk/sdl/video/Window.hpp>
|
|
|
|
/// We need to be able to return a Renderer from Window, but Renderer also needs to be able to return a Window, so we
|
|
/// have to include both headers here to resolve the circular dependency.
|
|
#include <hdk/sdl/render/Renderer.hpp>
|
|
|
|
namespace hdk::sdl {
|
|
/** @see SDL_GetRenderer
|
|
* https://wiki.libsdl.org/SDL3/SDL_GetRenderer
|
|
* @brief Get the renderer associated with a window.
|
|
* @return Renderer The renderer associated with the window. If the window is invalid or has no renderer, returns an
|
|
* invalid renderer.
|
|
*/
|
|
inline Renderer Window::GetRenderer() const { return Renderer(Renderer::get_or_view(SDL_GetRenderer(*this))); }
|
|
/** @see SDL_GetRenderWindow
|
|
* https://wiki.libsdl.org/SDL3/SDL_GetRenderWindow
|
|
*/
|
|
inline Window Renderer::GetWindow() const { return Window(Window::get_or_view(SDL_GetRenderWindow(*this))); }
|
|
/** @see SDL_CreateWindowAndRenderer
|
|
* https://wiki.libsdl.org/SDL3/SDL_CreateWindowAndRenderer
|
|
* @brief Create a window and renderer with one function call.
|
|
* @param title
|
|
* @param width
|
|
* @param height
|
|
* @param window_flags
|
|
* @return std::pair<Window, Renderer>
|
|
*/
|
|
inline std::pair<Window, Renderer> CreateWindowAndRenderer(
|
|
const char* title, int width, int height, SDL_WindowFlags window_flags) {
|
|
SDL_Window* window_ptr = nullptr;
|
|
SDL_Renderer* renderer_ptr = nullptr;
|
|
if (SDL_CreateWindowAndRenderer(title, width, height, window_flags, &window_ptr, &renderer_ptr)) {
|
|
return { Window::get_or_cache(window_ptr, SDL_DestroyWindow),
|
|
Renderer::get_or_cache(renderer_ptr, SDL_DestroyRenderer) };
|
|
} else {
|
|
return { Window(nullptr), Renderer(nullptr) };
|
|
}
|
|
}
|
|
} |