FreeRDP
Loading...
Searching...
No Matches
sdl_widget_list.cpp
1#include "sdl_widget_list.hpp"
2#include "sdl_blend_mode_guard.hpp"
3
4SdlWidgetList::~SdlWidgetList() = default;
5
6bool SdlWidgetList::reset(const std::string& title, size_t width, size_t height)
7{
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(
13 title.c_str(), w, h, SDL_WINDOW_MOUSE_FOCUS | SDL_WINDOW_INPUT_FOCUS, &window, &renderer);
14 _renderer = std::shared_ptr<SDL_Renderer>(renderer, SDL_DestroyRenderer);
15 _window = std::shared_ptr<SDL_Window>(window, SDL_DestroyWindow);
16 if (!rc)
17 widget_log_error(rc, "SDL_CreateWindowAndRenderer");
18 return rc;
19}
20
21bool SdlWidgetList::visible() const
22{
23 if (!_window || !_renderer)
24 return false;
25
26 auto flags = SDL_GetWindowFlags(_window.get());
27 return (flags & (SDL_WINDOW_HIDDEN | SDL_WINDOW_MINIMIZED)) == 0;
28}
29
30bool SdlWidgetList::clearWindow()
31{
32 if (!_renderer)
33 return false;
34
35 SdlBlendModeGuard guard(_renderer, SDL_BLENDMODE_NONE);
36 const auto drc = SDL_SetRenderDrawColor(_renderer.get(), _backgroundcolor.r, _backgroundcolor.g,
37 _backgroundcolor.b, _backgroundcolor.a);
38 if (widget_log_error(drc, "SDL_SetRenderDrawColor"))
39 return false;
40
41 const auto rcls = SDL_RenderClear(_renderer.get());
42 return !widget_log_error(rcls, "SDL_RenderClear");
43}
44
45bool SdlWidgetList::update()
46{
47 clearWindow();
48 updateInternal();
49 if (!_buttons.update())
50 return false;
51 auto rc = SDL_RenderPresent(_renderer.get());
52 if (!rc)
53 {
54 SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, "SDL_RenderPresent failed with %s",
55 SDL_GetError());
56 }
57 return rc;
58}