fc3cf682e6cb2762b3fc52e7040e8d8c569131ce
[roguelike.git] / ui.py
1 import curses
2 import cacher
3
4 class Color (object):
5     __metaclass__ = cacher.FirstArg
6     colors = {
7             'Default':       (curses.COLOR_WHITE,),
8             'Bright':        (curses.COLOR_WHITE,curses.A_BOLD),
9             'Red':           (curses.COLOR_RED,),
10             'Green':         (curses.COLOR_GREEN,),
11             'Brown':         (curses.COLOR_YELLOW,),
12             'Blue':          (curses.COLOR_BLUE,),
13             'Magenta':       (curses.COLOR_MAGENTA,),
14             'Cyan':          (curses.COLOR_CYAN,),
15             'Gray':          (curses.COLOR_WHITE,),
16             'Grey':          (curses.COLOR_WHITE,),
17             'Black':         (curses.COLOR_BLACK,),
18             'BrightRed':     (curses.COLOR_RED, curses.A_BOLD),
19             'BrightGreen':   (curses.COLOR_GREEN, curses.A_BOLD),
20             'BrightBrown':   (curses.COLOR_YELLOW, curses.A_BOLD),
21             'Yellow':        (curses.COLOR_YELLOW, curses.A_BOLD),
22             'BrightBlue':    (curses.COLOR_BLUE, curses.A_BOLD),
23             'BrightMagenta': (curses.COLOR_MAGENTA, curses.A_BOLD),
24             'BrightCyan':    (curses.COLOR_CYAN, curses.A_BOLD),
25             'BrightGray':    (curses.COLOR_WHITE, curses.A_BOLD),
26             'BrightGrey':    (curses.COLOR_WHITE, curses.A_BOLD),
27             'White':         (curses.COLOR_WHITE, curses.A_BOLD),
28             'BrightBlack':   (curses.COLOR_BLACK, curses.A_BOLD),
29             'DarkGray':      (curses.COLOR_BLACK, curses.A_BOLD),
30             'DarkGrey':      (curses.COLOR_BLACK, curses.A_BOLD),
31             }
32     npairs = 1
33     def __init__(self, color):
34         if isinstance(color, str):
35             fg = self.colors[color]
36             bg = self.colors['Black']
37         elif isinstance(color, int):
38             fg = color
39             bg = self.colors['Black']
40         else:
41             (fg,bg) = color
42             if isinstance(fg, str):
43                 fg = self.colors[fg]
44             if isinstance(bg, str):
45                 bg = self.colors[bg]
46
47         self.fg = fg[0]
48         (self.attrs) = fg[1] if len(fg) > 1 else 0
49         self.bg = bg[0]
50         try:
51             curses.init_pair(Color.npairs, self.fg, self.bg)
52         except:
53             raise Exception("%s %s %s %s" % (Color.npairs, fg, bg, color))
54         self.cp = curses.color_pair(Color.npairs) | self.attrs
55         Color.npairs += 1