diff options
Diffstat (limited to 'include/ncurses/colors.hpp')
| -rw-r--r-- | include/ncurses/colors.hpp | 87 | 
1 files changed, 87 insertions, 0 deletions
| diff --git a/include/ncurses/colors.hpp b/include/ncurses/colors.hpp new file mode 100644 index 0000000..a0622a9 --- /dev/null +++ b/include/ncurses/colors.hpp @@ -0,0 +1,87 @@ +#ifndef INCLUDE_NCURSES_COLORS_HPP_ +#define INCLUDE_NCURSES_COLORS_HPP_ + +#include "ncurses/utils/macros.hpp" +#include <ncurses.h> + +#include <ncurses/utils/preamble.hpp> + +namespace NCURSES_CPP_NAMESPACE { + +enum class curs_color { +  black = COLOR_BLACK, +  red = COLOR_RED, +  green = COLOR_GREEN, +  yellow = COLOR_YELLOW, +  blue = COLOR_BLUE, +  magenta = COLOR_MAGENTA, +  cyan = COLOR_CYAN, +  white = COLOR_WHITE +}; + +struct rgb_color { +  unsigned char r; +  unsigned char g; +  unsigned char b; +}; + +NCURSES_CPP_CONSTEXPR static int +rgb_to_curses(unsigned char c) NCURSES_CPP_NOEXCEPT { +  return static_cast<int>(c) * 1000 / 255; +} + +NCURSES_CPP_CONSTEXPR static unsigned char +curses_to_rgb(int c) NCURSES_CPP_NOEXCEPT { +  return static_cast<unsigned char>((c * 255 / 1000) + +                                    (c * 255 % 1000 == 0 ? 0 : 1)); +} + +inline bool has_colors() { return static_cast<bool>(::has_colors()); } + +inline bool can_change_color() { +  return static_cast<bool>(::can_change_color()); +} + +inline bool init_color(int index, int r, int g, int b) { +  return init_extended_color(index, rgb_to_curses(r), rgb_to_curses(g), +                             rgb_to_curses(b)) == OK +             ? true +             : false; +} + +inline bool color_content(int index, int *r, int *g, int *b) { +  int res = extended_color_content(index, r, g, b); +  if (res == ERR) +    return false; +  *r = curses_to_rgb(*r); +  *g = curses_to_rgb(*g); +  *b = curses_to_rgb(*b); +  return true; +} + +inline bool init_pair(int index, int fg, int bg) { +  return init_extended_pair(index, fg, bg) == OK ? true : false; +} + +inline bool pair_content(int index, int *fg, int *bg) { +  return extended_pair_content(index, fg, bg); +} + +class color_pair { +public: +  using value_type = chtype; +  NCURSES_CPP_CONSTEXPR color_pair(int index) NCURSES_CPP_NOEXCEPT +      : index_(index) {} + +  explicit NCURSES_CPP_CONSTEXPR +  operator value_type() const NCURSES_CPP_NOEXCEPT { +    return COLOR_PAIR(index_); +  } + +private: +  int index_; +}; + +} // namespace NCURSES_CPP_NAMESPACE + +#endif // INCLUDE_NCURSES_COLORS_HPP_ | 
