ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/cf.schmorp.de/dclient/src/frontend/client/render_glyph.cpp
Revision: 1.4
Committed: Tue Oct 19 09:45:11 2010 UTC (16 years ago) by sf-pippijn
Branch: MAIN
Changes since 1.3: +4 -4 lines
Log Message:
- use wchar_t for single characters (glyphs and line drawing)
- merge ncurses and ndk wrappers
- simplify colour caching

File Contents

# User Rev Content
1 sf-pippijn 1.1 #include "dclient/render_glyph.h"
2    
3 sf-pippijn 1.4 #include <ndk++/color.hh>
4     #include <ndk++/pen.hh>
5 sf-pippijn 1.1
6 sf-pippijn 1.2 #include "adt/array_size.h"
7    
8     #include <cassert>
9     #include <utility>
10    
11     static std::pair<short, attr_t> foreground[] = {
12     { COLOR_WHITE, WA_NORMAL }, // reset
13     { COLOR_WHITE, WA_NORMAL }, // black => 0,
14     { COLOR_WHITE, WA_BOLD }, // white => 1,
15     { COLOR_BLUE, WA_NORMAL }, // navy => 2,
16     { COLOR_RED, WA_NORMAL }, // red => 3,
17     { COLOR_RED, WA_BOLD }, // orange => 4,
18     { COLOR_BLUE, WA_BOLD }, // blue => 5,
19     { COLOR_RED, WA_NORMAL }, // darkorange => 6,
20     { COLOR_GREEN, WA_NORMAL }, // green => 7,
21     { COLOR_GREEN, WA_BOLD }, // lightgreen => 8,
22     { COLOR_BLACK, WA_BOLD }, // grey => 9,
23     { COLOR_YELLOW, WA_NORMAL }, // brown => 10,
24     { COLOR_YELLOW, WA_BOLD }, // gold => 11,
25     { COLOR_CYAN, WA_NORMAL }, // tan => 12,
26     { COLOR_WHITE, WA_NORMAL }, // none => 13,
27     };
28    
29     static std::pair<short, attr_t> background[] = {
30     { COLOR_BLACK, WA_NORMAL }, // reset
31     { COLOR_BLACK, WA_NORMAL }, // black => 0,
32     { COLOR_WHITE, WA_BOLD }, // white => 1,
33     { COLOR_BLUE, WA_NORMAL }, // navy => 2,
34     { COLOR_RED, WA_NORMAL }, // red => 3,
35     { COLOR_RED, WA_BOLD }, // orange => 4,
36     { COLOR_BLUE, WA_BOLD }, // blue => 5,
37     { COLOR_RED, WA_NORMAL }, // darkorange => 6,
38     { COLOR_GREEN, WA_NORMAL }, // green => 7,
39     { COLOR_GREEN, WA_BOLD }, // lightgreen => 8,
40     { COLOR_BLACK, WA_BOLD }, // grey => 9,
41     { COLOR_YELLOW, WA_NORMAL }, // brown => 10,
42     { COLOR_YELLOW, WA_BOLD }, // gold => 11,
43     { COLOR_CYAN, WA_NORMAL }, // tan => 12,
44     { COLOR_BLACK, WA_NORMAL }, // none => 13,
45     };
46    
47 sf-pippijn 1.4 ndk::color
48 sf-pippijn 1.3 ndi_color (int fg, int bg)
49 sf-pippijn 1.1 {
50 sf-pippijn 1.2 assert (fg + 1 < int (array_size (foreground)));
51     assert (bg + 1 < int (array_size (background)));
52     auto const &fgpair = foreground[fg + 1];
53     auto const &bgpair = background[bg + 1];
54     return {
55     fgpair.first,
56     bgpair.first,
57     fgpair.second | bgpair.second,
58 sf-pippijn 1.1 };
59     }
60    
61     void
62 sf-pippijn 1.4 write (ndk::pen &pen, data::glyph const &glyph, u16 darkness)
63 sf-pippijn 1.1 {
64 sf-pippijn 1.3 pen.set_color (darkness < 50 ? ndi_color (9, 0) : ndi_color (glyph.fg, glyph.bg));
65 sf-pippijn 1.1 pen.write (glyph.text);
66 sf-pippijn 1.3 pen.set_color (ndi_color (-1, -1)); // reset
67 sf-pippijn 1.1 }