summaryrefslogtreecommitdiffstats
path: root/src/XPM.h
blob: 962ffe42fe201e82b5a6d859a5433dd2667f6ffd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Scintilla source code edit control
/** @file XPM.h
 ** Define a class that holds data in the X Pixmap (XPM) format.
 **/
// Copyright 1998-2003 by Neil Hodgson <neilh@scintilla.org>
// The License.txt file describes the conditions under which this software may be distributed.

#ifndef XPM_H
#define XPM_H

#if defined(PLAT_QT)
#include <qpixmap.h>
#endif

/**
 * Hold a pixmap in XPM format.
 */
class XPM {
#if defined(PLAT_QT)
	QPixmap qpm;

public:
	XPM(const char *textForm);
	XPM(const char * const *linesForm);
	~XPM() {}

	void RefreshColourPalette(Palette &pal, bool want);
	void Draw(Surface *surface,PRectangle &rc);

	const QPixmap &Pixmap() const {return qpm;}
#else
	int id;		// Assigned by container
	int height;
	int width;
	int nColours;
	char *data;
	char codeTransparent;
	char *codes;
	ColourPair *colours;
	ColourAllocated ColourFromCode(int ch);
	void FillRun(Surface *surface, int code, int startX, int y, int x);
	char **lines;
	ColourPair *colourCodeTable[256];
public:
	XPM(const char *textForm);
	XPM(const char * const *linesForm);
	~XPM();
	void Init(const char *textForm);
	void Init(const char * const *linesForm);
	void Clear();
	/// Similar to same named method in ViewStyle:
	void RefreshColourPalette(Palette &pal, bool want);
	/// No palette used, so just copy the desired colours to the allocated colours
	void CopyDesiredColours();
	/// Decompose image into runs and use FillRectangle for each run
	void Draw(Surface *surface, PRectangle &rc);
	char **InLinesForm() { return lines; }
	void SetId(int id_) { id = id_; }
	int GetId() { return id; }
	int GetHeight() { return height; }
	int GetWidth() { return width; }
	static const char **LinesFormFromTextForm(const char *textForm);
#endif
};

#if !defined(PLAT_QT)

/**
 * A collection of pixmaps indexed by integer id.
 */
class XPMSet {
	XPM **set;	///< The stored XPMs.
	int len;	///< Current number of XPMs.
	int maximum;	///< Current maximum number of XPMs, increased by steps if reached.
	int height;	///< Memorize largest height of the set.
	int width;	///< Memorize largest width of the set.
public:
	XPMSet();
	~XPMSet();
	/// Remove all XPMs.
	void Clear();
	/// Add a XPM.
	void Add(int id, const char *textForm);
	/// Get XPM by id.
	XPM *Get(int id);
	/// Give the largest height of the set.
	int GetHeight();
	/// Give the largest width of the set.
	int GetWidth();
};

#endif

#endif