#pragma once /// @file video.hpp /// For complete documentation, see src/video.cpp #include #include #include /// 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 namespace hdk::sdl { inline Renderer Window::GetRenderer() const { return Renderer(Renderer::get_or_view(SDL_GetRenderer(*this))); } inline Window Renderer::GetWindow() const { return Window(Window::get_or_view(SDL_GetRenderWindow(*this))); } inline std::pair 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) }; } } inline Palette Surface::CreatePalette() const { return Palette::get_or_cache(SDL_CreateSurfacePalette(*this), SDL_DestroyPalette); } }