FreeRDP
SDL3/dialogs/sdl_select.cpp
1 
20 #include <cassert>
21 
22 #include <string>
23 #include <utility>
24 
25 #include <SDL3/SDL.h>
26 #include <SDL3_ttf/SDL_ttf.h>
27 
28 #include "sdl_select.hpp"
29 #include "sdl_widget.hpp"
30 #include "sdl_button.hpp"
31 #include "sdl_buttons.hpp"
32 #include "sdl_input_widgets.hpp"
33 
34 static const SDL_Color labelmouseovercolor = { 0, 0x80, 0, 0x60 };
35 static const SDL_Color labelbackgroundcolor = { 0x69, 0x66, 0x63, 0xff };
36 static const SDL_Color labelhighlightcolor = { 0xcd, 0xca, 0x35, 0x60 };
37 static const SDL_Color labelfontcolor = { 0xd1, 0xcf, 0xcd, 0xff };
38 
39 SdlSelectWidget::SdlSelectWidget(SDL_Renderer* renderer, std::string label, const SDL_FRect& rect)
40  : SdlWidget(renderer, rect, true), _text(std::move(label)), _mouseover(false), _highlight(false)
41 {
42  update_text(renderer);
43 }
44 
45 SdlSelectWidget::SdlSelectWidget(SdlSelectWidget&& other) noexcept = default;
46 
47 bool SdlSelectWidget::set_mouseover(SDL_Renderer* renderer, bool mouseOver)
48 {
49  _mouseover = mouseOver;
50  return update_text(renderer);
51 }
52 
53 bool SdlSelectWidget::set_highlight(SDL_Renderer* renderer, bool highlight)
54 {
55  _highlight = highlight;
56  return update_text(renderer);
57 }
58 
59 bool SdlSelectWidget::update_text(SDL_Renderer* renderer)
60 {
61  assert(renderer);
62  std::vector<SDL_Color> colors = { labelbackgroundcolor };
63  if (_highlight)
64  colors.push_back(labelhighlightcolor);
65  if (_mouseover)
66  colors.push_back(labelmouseovercolor);
67  if (!fill(renderer, colors))
68  return false;
69  return SdlWidget::update_text(renderer, _text, labelfontcolor);
70 }