#include "dclient/render_glyph.h" #include #include #include "adt/array_size.h" #include #include static std::pair foreground[] = { { COLOR_WHITE, WA_NORMAL }, // reset { COLOR_WHITE, WA_NORMAL }, // black => 0, { COLOR_WHITE, WA_BOLD }, // white => 1, { COLOR_BLUE, WA_NORMAL }, // navy => 2, { COLOR_RED, WA_NORMAL }, // red => 3, { COLOR_RED, WA_BOLD }, // orange => 4, { COLOR_BLUE, WA_BOLD }, // blue => 5, { COLOR_RED, WA_NORMAL }, // darkorange => 6, { COLOR_GREEN, WA_NORMAL }, // green => 7, { COLOR_GREEN, WA_BOLD }, // lightgreen => 8, { COLOR_BLACK, WA_BOLD }, // grey => 9, { COLOR_YELLOW, WA_NORMAL }, // brown => 10, { COLOR_YELLOW, WA_BOLD }, // gold => 11, { COLOR_CYAN, WA_NORMAL }, // tan => 12, { COLOR_WHITE, WA_NORMAL }, // none => 13, }; static std::pair background[] = { { COLOR_BLACK, WA_NORMAL }, // reset { COLOR_BLACK, WA_NORMAL }, // black => 0, { COLOR_WHITE, WA_BOLD }, // white => 1, { COLOR_BLUE, WA_NORMAL }, // navy => 2, { COLOR_RED, WA_NORMAL }, // red => 3, { COLOR_RED, WA_BOLD }, // orange => 4, { COLOR_BLUE, WA_BOLD }, // blue => 5, { COLOR_RED, WA_NORMAL }, // darkorange => 6, { COLOR_GREEN, WA_NORMAL }, // green => 7, { COLOR_GREEN, WA_BOLD }, // lightgreen => 8, { COLOR_BLACK, WA_BOLD }, // grey => 9, { COLOR_YELLOW, WA_NORMAL }, // brown => 10, { COLOR_YELLOW, WA_BOLD }, // gold => 11, { COLOR_CYAN, WA_NORMAL }, // tan => 12, { COLOR_BLACK, WA_NORMAL }, // none => 13, }; static ncurses::color color (int fg, int bg) { assert (fg + 1 < int (array_size (foreground))); assert (bg + 1 < int (array_size (background))); auto const &fgpair = foreground[fg + 1]; auto const &bgpair = background[bg + 1]; return { fgpair.first, bgpair.first, fgpair.second | bgpair.second, }; } void write (ncurses::pen &pen, data::glyph const &glyph, u16 darkness) { pen.set_color (darkness < 50 ? color (9, 0) : color (glyph.fg, glyph.bg)); pen.write (glyph.text); pen.set_color (color (-1, -1)); // reset }