1#include "sdl_widget_list.hpp"
2#include "sdl_blend_mode_guard.hpp"
4SdlWidgetList::~SdlWidgetList() =
default;
6bool SdlWidgetList::reset(
const std::string& title,
size_t width,
size_t height)
8 auto w = WINPR_ASSERTING_INT_CAST(
int, width);
9 auto h = WINPR_ASSERTING_INT_CAST(
int, height);
10 SDL_Renderer* renderer =
nullptr;
11 SDL_Window* window =
nullptr;
12 auto rc = SDL_CreateWindowAndRenderer(title.c_str(), w, h,
13 SDL_WINDOW_MOUSE_FOCUS | SDL_WINDOW_INPUT_FOCUS |
14 SDL_WINDOW_ALWAYS_ON_TOP | SDL_WINDOW_UTILITY |
15 SDL_WINDOW_INPUT_FOCUS | SDL_WINDOW_MOUSE_FOCUS,
17 _renderer = std::shared_ptr<SDL_Renderer>(renderer, SDL_DestroyRenderer);
18 _window = std::shared_ptr<SDL_Window>(window, SDL_DestroyWindow);
20 widget_log_error(rc,
"SDL_CreateWindowAndRenderer");
24bool SdlWidgetList::visible()
const
26 if (!_window || !_renderer)
29 auto flags = SDL_GetWindowFlags(_window.get());
30 return (flags & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED)) == 0;
33bool SdlWidgetList::clearWindow()
39 const auto drc = SDL_SetRenderDrawColor(_renderer.get(), _backgroundcolor.r, _backgroundcolor.g,
40 _backgroundcolor.b, _backgroundcolor.a);
41 if (widget_log_error(drc,
"SDL_SetRenderDrawColor"))
44 const auto rcls = SDL_RenderClear(_renderer.get());
45 return !widget_log_error(rcls,
"SDL_RenderClear");
48bool SdlWidgetList::update()
55 if (!updateInternal())
57 if (!_buttons.update())
59 auto rc = SDL_RenderPresent(_renderer.get());
62 SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION,
"[%s] SDL_RenderPresent failed with %s", __func__,