1 // Scintilla source code edit control
2 /** @file XPM.h
3  ** Define a class that holds data in the X Pixmap (XPM) format.
4  **/
5 // Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
6 // The License.txt file describes the conditions under which this software may be distributed.
7 
8 #ifndef XPM_H
9 #define XPM_H
10 
11 /**
12  * Hold a pixmap in XPM format.
13  */
14 class XPM {
15 	int id;		// Assigned by container
16 	int height;
17 	int width;
18 	int nColours;
19 	char *data;
20 	char codeTransparent;
21 	char *codes;
22 	ColourPair *colours;
23 	ColourAllocated ColourFromCode(int ch);
24 	void FillRun(Surface *surface, int code, int startX, int y, int x);
25 	char **lines;
26 	ColourPair *colourCodeTable[256];
27 public:
28 	XPM(const char *textForm);
29 	XPM(const char * const *linesForm);
30 	~XPM();
31 	void Init(const char *textForm);
32 	void Init(const char * const *linesForm);
33 	void Clear();
34 	/// Similar to same named method in ViewStyle:
35 	void RefreshColourPalette(Palette &pal, bool want);
36 	/// No palette used, so just copy the desired colours to the allocated colours
37 	void CopyDesiredColours();
38 	/// Decompose image into runs and use FillRectangle for each run
39 	void Draw(Surface *surface, PRectangle &rc);
InLinesForm()40 	char **InLinesForm() { return lines; }
SetId(int id_)41 	void SetId(int id_) { id = id_; }
GetId()42 	int GetId() { return id; }
GetHeight()43 	int GetHeight() { return height; }
GetWidth()44 	int GetWidth() { return width; }
45 	static const char **LinesFormFromTextForm(const char *textForm);
46 };
47 
48 /**
49  * A collection of pixmaps indexed by integer id.
50  */
51 class XPMSet {
52 	XPM **set;	///< The stored XPMs.
53 	int len;	///< Current number of XPMs.
54 	int maximum;	///< Current maximum number of XPMs, increased by steps if reached.
55 	int height;	///< Memorize largest height of the set.
56 	int width;	///< Memorize largest width of the set.
57 public:
58 	XPMSet();
59 	~XPMSet();
60 	/// Remove all XPMs.
61 	void Clear();
62 	/// Add a XPM.
63 	void Add(int id, const char *textForm);
64 	/// Get XPM by id.
65 	XPM *Get(int id);
66 	/// Give the largest height of the set.
67 	int GetHeight();
68 	/// Give the largest width of the set.
69 	int GetWidth();
70 };
71 
72 #endif
73