Mercurial > fife-parpg
comparison ext/guichan-0.8.1/include/guichan/imagefont.hpp @ 0:4a0efb7baf70
* Datasets becomes the new trunk and retires after that :-)
author | mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Sun, 29 Jun 2008 18:44:17 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4a0efb7baf70 |
---|---|
1 /* _______ __ __ __ ______ __ __ _______ __ __ | |
2 * / _____/\ / /\ / /\ / /\ / ____/\ / /\ / /\ / ___ /\ / |\/ /\ | |
3 * / /\____\// / // / // / // /\___\// /_// / // /\_/ / // , |/ / / | |
4 * / / /__ / / // / // / // / / / ___ / // ___ / // /| ' / / | |
5 * / /_// /\ / /_// / // / // /_/_ / / // / // /\_/ / // / | / / | |
6 * /______/ //______/ //_/ //_____/\ /_/ //_/ //_/ //_/ //_/ /|_/ / | |
7 * \______\/ \______\/ \_\/ \_____\/ \_\/ \_\/ \_\/ \_\/ \_\/ \_\/ | |
8 * | |
9 * Copyright (c) 2004 - 2008 Olof Naessén and Per Larsson | |
10 * | |
11 * | |
12 * Per Larsson a.k.a finalman | |
13 * Olof Naessén a.k.a jansem/yakslem | |
14 * | |
15 * Visit: http://guichan.sourceforge.net | |
16 * | |
17 * License: (BSD) | |
18 * Redistribution and use in source and binary forms, with or without | |
19 * modification, are permitted provided that the following conditions | |
20 * are met: | |
21 * 1. Redistributions of source code must retain the above copyright | |
22 * notice, this list of conditions and the following disclaimer. | |
23 * 2. Redistributions in binary form must reproduce the above copyright | |
24 * notice, this list of conditions and the following disclaimer in | |
25 * the documentation and/or other materials provided with the | |
26 * distribution. | |
27 * 3. Neither the name of Guichan nor the names of its contributors may | |
28 * be used to endorse or promote products derived from this software | |
29 * without specific prior written permission. | |
30 * | |
31 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
32 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
33 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
34 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
35 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
36 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | |
37 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR | |
38 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF | |
39 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING | |
40 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | |
41 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
42 */ | |
43 | |
44 #ifndef GCN_IMAGEFONT_HPP | |
45 #define GCN_IMAGEFONT_HPP | |
46 | |
47 #include <string> | |
48 | |
49 #include "guichan/font.hpp" | |
50 #include "guichan/platform.hpp" | |
51 #include "guichan/rectangle.hpp" | |
52 | |
53 namespace gcn | |
54 { | |
55 class Color; | |
56 class Graphics; | |
57 class Image; | |
58 | |
59 /** | |
60 * A font using an image containing the font data. ImageFont can be used | |
61 * with any supported by the current used ImageLoader. | |
62 * | |
63 * These are two examples of an image containing a font. | |
64 * \image html imagefontexample.bmp | |
65 * \image html imagefontexample2.bmp | |
66 * | |
67 * The Image font format works like this: The first pixel, the pixal at | |
68 * coordinate (0,0), tells which color to look for when seperating glyphs. | |
69 * You create an image with your glyphs and simple separates them with | |
70 * the seperation color. When you create your image font you supply the | |
71 * constructor with the glyphs present in your image. | |
72 * | |
73 * To create an ImageFont from the first image example above the following | |
74 * constructor call should be made: | |
75 * @code gcn::ImageFont imageFont("fixedfont_big.bmp"," abcdefghijklmno\ | |
76 pqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"); @endcode | |
77 * | |
78 * Note worthy is that the first glyph actually gives the width of space. | |
79 * Glyphs can, as seen in the second image example above, be seperated with | |
80 * horizontal lines making it possible to draw glyphs on more then one | |
81 * line in the image. However, these vertical lines must have a height of | |
82 * one pixel! | |
83 */ | |
84 class GCN_CORE_DECLSPEC ImageFont: public Font | |
85 { | |
86 public: | |
87 | |
88 /** | |
89 * Constructor. Takes an image file containing the font and | |
90 * a string containing the glyphs. The glyphs in the string should | |
91 * be in the same order as they appear in the font image. | |
92 * | |
93 * @param filename The filename of the image. | |
94 * @param glyphs The glyphs found in the image. | |
95 * @throws Exception when glyph list is incorrect or the font file is | |
96 * corrupt or if no ImageLoader exists. | |
97 */ | |
98 ImageFont(const std::string& filename, const std::string& glyphs); | |
99 | |
100 /** | |
101 * Constructor. Takes an image containing the font and | |
102 * a string containing the glyphs. The glyphs in the string should | |
103 * be in the same order as they appear in the font image. | |
104 * The image will be deleted in the destructor. | |
105 * | |
106 * @param image The image with font glyphs. | |
107 * @param glyphs The glyphs found in the image. | |
108 * @throws Exception when glyph list is incorrect or the font image is | |
109 * is missing. | |
110 */ | |
111 ImageFont(Image* image, const std::string& glyphs); | |
112 | |
113 /** | |
114 * Constructor. Takes an image file containing the font and | |
115 * two boundaries of ASCII values. The font image should include | |
116 * all glyphs specified with the boundaries in increasing ASCII | |
117 * order. The boundaries are inclusive. | |
118 * | |
119 * @param filename The filename of the image. | |
120 * @param glyphsFrom The ASCII value of the first glyph found in the | |
121 * image. | |
122 * @param glyphsTo The ASCII value of the last glyph found in the | |
123 * image. | |
124 * @throws Exception when glyph bondaries are incorrect or the font | |
125 * file is corrupt or if no ImageLoader exists. | |
126 */ | |
127 ImageFont(const std::string& filename, | |
128 unsigned char glyphsFrom=32, | |
129 unsigned char glyphsTo=126); | |
130 | |
131 /** | |
132 * Destructor. | |
133 */ | |
134 virtual ~ImageFont(); | |
135 | |
136 /** | |
137 * Draws a glyph. | |
138 * | |
139 * NOTE: You normally won't use this function to draw text since | |
140 * the Graphics class contains better functions for drawing | |
141 * text. | |
142 * | |
143 * @param graphics A graphics object used for drawing. | |
144 * @param glyph A glyph to draw. | |
145 * @param x The x coordinate where to draw the glyph. | |
146 * @param y The y coordinate where to draw the glyph. | |
147 * @return The width of the glyph in pixels. | |
148 */ | |
149 virtual int drawGlyph(Graphics* graphics, unsigned char glyph, | |
150 int x, int y); | |
151 | |
152 /** | |
153 * Sets the space between rows in pixels. Default is 0 pixels. | |
154 * The space can be negative. | |
155 * | |
156 * @param spacing The space between rows in pixels. | |
157 * @see getRowSpacing | |
158 */ | |
159 virtual void setRowSpacing(int spacing); | |
160 | |
161 /** | |
162 * Gets the space between rows in pixels. | |
163 * | |
164 * @return The space between rows in pixels. | |
165 * @see setRowSpacing | |
166 */ | |
167 virtual int getRowSpacing(); | |
168 | |
169 /** | |
170 * Sets the spacing between glyphs in pixels. Default is 0 pixels. | |
171 * The space can be negative. | |
172 * | |
173 * @param spacing The glyph space in pixels. | |
174 * @see getGlyphSpacing | |
175 */ | |
176 virtual void setGlyphSpacing(int spacing); | |
177 | |
178 /** | |
179 * Gets the spacing between letters in pixels. | |
180 * | |
181 * @return the spacing. | |
182 * @see setGlyphSpacing | |
183 */ | |
184 virtual int getGlyphSpacing(); | |
185 | |
186 /** | |
187 * Gets a width of a glyph in pixels. | |
188 * | |
189 * @param glyph The glyph which width will be returned. | |
190 * @return The width of a glyph in pixels. | |
191 */ | |
192 virtual int getWidth(unsigned char glyph) const; | |
193 | |
194 | |
195 // Inherited from Font | |
196 | |
197 virtual int getWidth(const std::string& text) const; | |
198 | |
199 virtual void drawString(Graphics* graphics, const std::string& text, | |
200 int x, int y); | |
201 | |
202 virtual int getHeight() const; | |
203 | |
204 virtual int getStringIndexAt(const std::string& text, int x); | |
205 | |
206 protected: | |
207 /** | |
208 * Scans for a certain glyph. | |
209 * | |
210 * @param glyph The glyph to scan for. Used for exception messages. | |
211 * @param x The x coordinate where to begin the scan. The coordinate | |
212 * will be updated with the end x coordinate of the glyph | |
213 * when the scan is complete. | |
214 * @param y The y coordinate where to begin the scan. The coordinate | |
215 * will be updated with the end y coordinate of the glyph | |
216 * when the scan is complete. | |
217 * @param separator The color separator to look for where the glyph ends. | |
218 * @return A rectangle with the found glyph dimension in the image | |
219 * with the font. | |
220 * @throws Exception when no glyph is found. | |
221 */ | |
222 Rectangle scanForGlyph(unsigned char glyph, | |
223 int x, | |
224 int y, | |
225 const Color& separator); | |
226 | |
227 /** | |
228 * Holds the glyphs areas in the image. | |
229 */ | |
230 Rectangle mGlyph[256]; | |
231 | |
232 /** | |
233 * Holds the height of the image font. | |
234 */ | |
235 int mHeight; | |
236 | |
237 /** | |
238 * Holds the glyph spacing of the image font. | |
239 */ | |
240 int mGlyphSpacing; | |
241 | |
242 /** | |
243 * Holds the row spacing of the image font. | |
244 */ | |
245 int mRowSpacing; | |
246 | |
247 /** | |
248 * Holds the image with the font data. | |
249 */ | |
250 Image* mImage; | |
251 | |
252 /** | |
253 * Holds the filename of the image with the font data. | |
254 */ | |
255 std::string mFilename; | |
256 }; | |
257 } | |
258 | |
259 #endif // end GCN_IMAGEFONT_HPP |