1/*
2 * Copyright 2010-2013, Haiku, Inc. All rights reserved.
3 * Distributed under the terms of the MIT License.
4 *
5 * Authors:
6 *		Stefano Ceccherini, stefano.ceccherini@gmail.com
7 *		Siarzhuk Zharski, zharik@gmx.li
8 */
9#ifndef _COLORS_H
10#define _COLORS_H
11
12
13#include <InterfaceDefs.h>
14#include <ObjectList.h>
15
16
17struct ansi_color_scheme {
18	rgb_color black;
19	rgb_color red;
20	rgb_color green;
21	rgb_color yellow;
22	rgb_color blue;
23	rgb_color magenta;
24	rgb_color cyan;
25	rgb_color white;
26	bool operator==(const ansi_color_scheme& color);
27};
28
29struct color_scheme {
30	const char* name;
31	rgb_color text_fore_color;
32	rgb_color text_back_color;
33	rgb_color cursor_fore_color;
34	rgb_color cursor_back_color;
35	rgb_color select_fore_color;
36	rgb_color select_back_color;
37	ansi_color_scheme ansi_colors;
38	ansi_color_scheme ansi_colors_h;
39	bool operator==(const color_scheme& color);
40};
41
42struct FindColorSchemeByName : public UnaryPredicate<const color_scheme> {
43	FindColorSchemeByName() : scheme_name("") {}
44
45	FindColorSchemeByName(const char* name)
46		: scheme_name(name)
47	{
48	}
49
50	int operator()(const color_scheme* item) const
51	{
52		return strcmp(item->name, scheme_name);
53	}
54
55	const char*	scheme_name;
56};
57
58extern color_scheme gCustomColorScheme;
59extern BObjectList<const color_scheme> *gColorSchemes;
60
61const uint kANSIColorCount = 16;
62const uint kTermColorCount = 256;
63
64
65// Helper class handling XColorName/rgb:xxx/xxx/xxx -> rgb_color conversions.
66// The source of XColorNames is wide available rgb.txt for X11 System.
67// It is stored in "XColorsTable" application resource as array of
68// "hash <-> rgb_color" pairs. The table is loaded only on demand.
69// Name hashes must be sorted to let lookup procedure work properly
70class XColorsTable {
71
72	struct _XColorEntry {
73		uint32		hash;
74		rgb_color	color;
75	};
76
77public:
78							XColorsTable();
79							~XColorsTable();
80
81	status_t				LookUpColor(const char* name, rgb_color* color);
82private:
83	status_t				_LoadXColorsTable();
84	uint32					_HashName(const char* name);
85
86	const _XColorEntry*		fTable;
87	size_t					fCount;
88};
89
90extern XColorsTable gXColorsTable;
91
92#endif // _COLORS_H
93