Add copyright notices (GPL v2 or later).
[roguelike.git] / ui.py
1 #! /usr/bin/env python
2 # -*- coding: utf-8 -*-
3
4 # Copyright © 2008 Neil Moore <neil@s-z.org>.
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15 #  
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20 import curses
21 import cacher
22
23 class Color (object):
24     __metaclass__ = cacher.FirstArg
25     colors = {
26             'Default':       (curses.COLOR_WHITE,),
27             'Bright':        (curses.COLOR_WHITE,curses.A_BOLD),
28             'Red':           (curses.COLOR_RED,),
29             'Green':         (curses.COLOR_GREEN,),
30             'Brown':         (curses.COLOR_YELLOW,),
31             'Blue':          (curses.COLOR_BLUE,),
32             'Magenta':       (curses.COLOR_MAGENTA,),
33             'Cyan':          (curses.COLOR_CYAN,),
34             'Gray':          (curses.COLOR_WHITE,),
35             'Grey':          (curses.COLOR_WHITE,),
36             'Black':         (curses.COLOR_BLACK,),
37             'BrightRed':     (curses.COLOR_RED, curses.A_BOLD),
38             'BrightGreen':   (curses.COLOR_GREEN, curses.A_BOLD),
39             'BrightBrown':   (curses.COLOR_YELLOW, curses.A_BOLD),
40             'Yellow':        (curses.COLOR_YELLOW, curses.A_BOLD),
41             'BrightBlue':    (curses.COLOR_BLUE, curses.A_BOLD),
42             'BrightMagenta': (curses.COLOR_MAGENTA, curses.A_BOLD),
43             'BrightCyan':    (curses.COLOR_CYAN, curses.A_BOLD),
44             'BrightGray':    (curses.COLOR_WHITE, curses.A_BOLD),
45             'BrightGrey':    (curses.COLOR_WHITE, curses.A_BOLD),
46             'White':         (curses.COLOR_WHITE, curses.A_BOLD),
47             'BrightBlack':   (curses.COLOR_BLACK, curses.A_BOLD),
48             'DarkGray':      (curses.COLOR_BLACK, curses.A_BOLD),
49             'DarkGrey':      (curses.COLOR_BLACK, curses.A_BOLD),
50             }
51     npairs = 1
52     def __init__(self, color):
53         if isinstance(color, str):
54             fg = self.colors[color]
55             bg = self.colors['Black']
56         elif isinstance(color, int):
57             fg = color
58             bg = self.colors['Black']
59         else:
60             (fg,bg) = color
61             if isinstance(fg, str):
62                 fg = self.colors[fg]
63             if isinstance(bg, str):
64                 bg = self.colors[bg]
65
66         self.fg = fg[0]
67         (self.attrs) = fg[1] if len(fg) > 1 else 0
68         self.bg = bg[0]
69         try:
70             curses.init_pair(Color.npairs, self.fg, self.bg)
71         except:
72             raise Exception("%s %s %s %s" % (Color.npairs, fg, bg, color))
73         self.cp = curses.color_pair(Color.npairs) | self.attrs
74         Color.npairs += 1