palette_view.cpp 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #include "palette_view.h"
  2. #include "cassert"
  3. using namespace simple::graphical;
  4. size_t palette_view::size() const noexcept
  5. {
  6. return static_cast<size_t>(raw->ncolors);
  7. }
  8. void palette_view::set_color(size_t index, rgba_pixel color) const noexcept
  9. {
  10. auto& dst_color = raw->colors[index];
  11. dst_color.r = color.r();
  12. dst_color.g = color.g();
  13. dst_color.b = color.b();
  14. dst_color.a = color.a();
  15. SDL_SetPaletteColors(raw, raw->colors, 0, 1); // let SDL know changes occurred
  16. }
  17. size_t palette_view::set_colors(support::range<const rgba_pixel*> colors, size_t start_index) const noexcept
  18. {
  19. auto src_size = colors.end() - colors.begin();
  20. auto to_write = std::min<size_t>(size() - start_index, src_size);
  21. for(size_t i = 0; i < to_write ; ++i) // could just copy bytes?
  22. {
  23. auto& dst_color = raw->colors[i];
  24. auto& src_color = *(colors.begin() + i);
  25. dst_color.r = src_color.r();
  26. dst_color.g = src_color.g();
  27. dst_color.b = src_color.b();
  28. dst_color.a = src_color.a();
  29. }
  30. SDL_SetPaletteColors(raw, raw->colors, 0, 1); // let SDL know changes occurred
  31. return to_write;
  32. }
  33. rgba_pixel palette_view::operator[](size_t index) const noexcept
  34. {
  35. assert(index < size_t(raw->ncolors));
  36. SDL_Color color = raw->colors[index];
  37. return {color.r, color.g, color.b, color.a};
  38. }
  39. rgba_pixel palette_view::at(size_t index) const
  40. {
  41. if(index >= size_t(raw->ncolors))
  42. throw std::out_of_range("simple::graphical::palette_view::at: index out of range.");
  43. return (*this)[index];
  44. }
  45. palette_view::palette_view(SDL_Palette* raw) noexcept : raw(raw) {}