2009-04-24 23:35:41 +00:00
|
|
|
// 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
|
|
|
|
|
|
|
|
#ifdef SCI_NAMESPACE
|
|
|
|
namespace Scintilla {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Hold a pixmap in XPM format.
|
|
|
|
*/
|
|
|
|
class XPM {
|
2009-08-23 02:24:48 +00:00
|
|
|
int pid; // Assigned by container
|
2009-04-24 23:35:41 +00:00
|
|
|
int height;
|
|
|
|
int width;
|
|
|
|
int nColours;
|
|
|
|
char *data;
|
|
|
|
char codeTransparent;
|
|
|
|
char *codes;
|
|
|
|
ColourPair *colours;
|
2010-07-12 22:19:51 +00:00
|
|
|
ColourAllocated ColourFromCode(int ch) const;
|
2009-04-24 23:35:41 +00:00
|
|
|
void FillRun(Surface *surface, int code, int startX, int y, int x);
|
|
|
|
char **lines;
|
|
|
|
ColourPair *colourCodeTable[256];
|
|
|
|
public:
|
|
|
|
XPM(const char *textForm);
|
2010-07-12 22:19:51 +00:00
|
|
|
XPM(const char *const *linesForm);
|
2009-04-24 23:35:41 +00:00
|
|
|
~XPM();
|
|
|
|
void Init(const char *textForm);
|
2010-07-12 22:19:51 +00:00
|
|
|
void Init(const char *const *linesForm);
|
2009-04-24 23:35:41 +00:00
|
|
|
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; }
|
2009-08-23 02:24:48 +00:00
|
|
|
void SetId(int pid_) { pid = pid_; }
|
2010-07-12 22:19:51 +00:00
|
|
|
int GetId() const { return pid; }
|
|
|
|
int GetHeight() const { return height; }
|
|
|
|
int GetWidth() const { return width; }
|
2009-04-24 23:35:41 +00:00
|
|
|
static const char **LinesFormFromTextForm(const char *textForm);
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 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();
|
|
|
|
};
|
|
|
|
|
|
|
|
#ifdef SCI_NAMESPACE
|
|
|
|
}
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#endif
|