20#include "sdl_input.hpp" 
   30#include "sdl_widget.hpp" 
   31#include "sdl_button.hpp" 
   32#include "sdl_buttons.hpp" 
   34static const SDL_Color inputbackgroundcolor = { 0x56, 0x56, 0x56, 0xff };
 
   35static const SDL_Color inputhighlightcolor = { 0x80, 0, 0, 0x60 };
 
   36static const SDL_Color inputmouseovercolor = { 0, 0x80, 0, 0x60 };
 
   37static const SDL_Color inputfontcolor = { 0xd1, 0xcf, 0xcd, 0xff };
 
   38static const SDL_Color labelbackgroundcolor = { 0x56, 0x56, 0x56, 0xff };
 
   39static const SDL_Color labelfontcolor = { 0xd1, 0xcf, 0xcd, 0xff };
 
   40static const Uint32 vpadding = 5;
 
   41static const Uint32 hpadding = 10;
 
   43SdlInputWidget::SdlInputWidget(SDL_Renderer* renderer, std::string label, std::string initial,
 
   44                               Uint32 flags, 
size_t offset, 
size_t width, 
size_t height)
 
   45    : _flags(flags), _text(std::move(initial)), _text_label(std::move(label)),
 
   47             { 0, 
static_cast<int>(offset * (height + vpadding)), 
static_cast<int>(width),
 
   48               static_cast<int>(height) },
 
   51             { 
static_cast<int>(width + hpadding), 
static_cast<int>(offset * (height + vpadding)),
 
   52               static_cast<int>(width), 
static_cast<int>(height) },
 
   54      _highlight(
false), _mouseover(
false)
 
   59    : _flags(other._flags), _text(std::move(other._text)),
 
   60      _text_label(std::move(other._text_label)), _label(std::move(other._label)),
 
   61      _input(std::move(other._input)), _highlight(other._highlight), _mouseover(other._mouseover)
 
   65bool SdlInputWidget::fill_label(SDL_Renderer* renderer, SDL_Color color)
 
   67  if (!_label.fill(renderer, color))
 
   69  return _label.update_text(renderer, _text_label, labelfontcolor);
 
   72bool SdlInputWidget::update_label(SDL_Renderer* renderer)
 
   74  return _label.update_text(renderer, _text_label, labelfontcolor, labelbackgroundcolor);
 
   77bool SdlInputWidget::set_mouseover(SDL_Renderer* renderer, 
bool mouseOver)
 
   81  _mouseover = mouseOver;
 
   82  return update_input(renderer);
 
   85bool SdlInputWidget::set_highlight(SDL_Renderer* renderer, 
bool highlight)
 
   89  _highlight = highlight;
 
   90  return update_input(renderer);
 
   93bool SdlInputWidget::update_input(SDL_Renderer* renderer)
 
   95  std::vector<SDL_Color> colors = { inputbackgroundcolor };
 
   97    colors.push_back(inputhighlightcolor);
 
   99    colors.push_back(inputmouseovercolor);
 
  101  if (!_input.fill(renderer, colors))
 
  103  return update_input(renderer, inputfontcolor);
 
  106bool SdlInputWidget::resize_input(
size_t size)
 
  113bool SdlInputWidget::set_str(SDL_Renderer* renderer, 
const std::string& text)
 
  118  if (!resize_input(_text.size()))
 
  120  return update_input(renderer);
 
  123bool SdlInputWidget::remove_str(SDL_Renderer* renderer, 
size_t count)
 
  132  if (!resize_input(_text.size() - count))
 
  134  return update_input(renderer);
 
  137bool SdlInputWidget::append_str(SDL_Renderer* renderer, 
const std::string& text)
 
  144  if (!resize_input(_text.size()))
 
  146  return update_input(renderer);
 
  149const SDL_Rect& SdlInputWidget::input_rect()
 const 
  151  return _input.rect();
 
  154std::string SdlInputWidget::value()
 const 
  159bool SdlInputWidget::readonly()
 const 
  161  return (_flags & SDL_INPUT_READONLY) != 0;
 
  164bool SdlInputWidget::update_input(SDL_Renderer* renderer, SDL_Color fgcolor)
 
  166  std::string text = _text;
 
  169    if (_flags & SDL_INPUT_MASK)
 
  176  return _input.update_text(renderer, text, fgcolor);