aboutsummaryrefslogtreecommitdiff
path: root/graphics/font.h
diff options
context:
space:
mode:
authorMax Horn2004-03-21 21:20:25 +0000
committerMax Horn2004-03-21 21:20:25 +0000
commita9789acfc61a057c82c6cc42386afc9b23813c24 (patch)
tree3e36be49dd35ceb59ce98f74aec92cd9c60198a4 /graphics/font.h
parent23dbd0de994ebfc97c65ab9deb96b052d1983426 (diff)
downloadscummvm-rg350-a9789acfc61a057c82c6cc42386afc9b23813c24.tar.gz
scummvm-rg350-a9789acfc61a057c82c6cc42386afc9b23813c24.tar.bz2
scummvm-rg350-a9789acfc61a057c82c6cc42386afc9b23813c24.zip
Moved Surface/Font code into new 'graphics' module
svn-id: r13357
Diffstat (limited to 'graphics/font.h')
-rw-r--r--graphics/font.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/graphics/font.h b/graphics/font.h
new file mode 100644
index 0000000000..2d5d6c9bd4
--- /dev/null
+++ b/graphics/font.h
@@ -0,0 +1,107 @@
+/* ScummVM - Scumm Interpreter
+ * Copyright (C) 2002-2004 The ScummVM project
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ * $Header$
+ */
+
+#ifndef FONT_H
+#define FONT_H
+
+#include "common/str.h"
+#include "graphics/surface.h"
+
+namespace Graphics {
+
+// Text alignment modes for drawString()
+enum TextAlignment {
+ kTextAlignLeft,
+ kTextAlignCenter,
+ kTextAlignRight
+};
+
+/**
+ * Instances of this class represent a distinct font, with a built-in renderer.
+ * @todo Maybe move the high-level methods (drawString etc.) to a separate
+ * FontRenderer class? That way, we could have different variants... ?
+ * @todo Add more parameters to drawString, or additional similar methods,
+ * featuring abilities like
+ * - rendering with wrap-around instead of inserting an ellipsis or
+ * cutting them; needs a 'height' parameter
+ * - rendering multi-line strings (essentially, invoke the regular
+ * drawString for each line, and advance one line)
+ * - combinations of the two above: honor line feeds, and also wrap
+ * overlong lines
+ */
+class Font {
+public:
+ virtual int getFontHeight() const = 0;
+ virtual int getMaxCharWidth() const = 0;
+
+ virtual int getCharWidth(byte chr) const = 0;
+ virtual void drawChar(const Surface *dst, byte chr, int x, int y, uint32 color) const = 0;
+
+ void drawString(const Surface *dst, const Common::String &str, int x, int y, int w, uint32 color, TextAlignment align = kTextAlignLeft, int deltax = 0, bool useEllipsis = true) const;
+ int getStringWidth(const Common::String &str) const;
+};
+
+
+class ScummFont : public Font {
+public:
+ virtual int getFontHeight() const { return 8; }
+ virtual int getMaxCharWidth() const { return 8; };
+
+ virtual int getCharWidth(byte chr) const;
+ virtual void drawChar(const Surface *dst, byte chr, int x, int y, uint32 color) const;
+};
+
+extern const ScummFont g_scummfont;
+
+
+
+typedef unsigned short bitmap_t; /* bitmap image unit size*/
+
+/* builtin C-based proportional/fixed font structure */
+/* based on The Microwindows Project http://microwindows.org */
+class NewFont : public Font {
+protected:
+ const char * name; /* font name*/
+ int maxwidth; /* max width in pixels*/
+ int height; /* height in pixels*/
+ int ascent; /* ascent (baseline) height*/
+ int firstchar; /* first character in bitmap*/
+ int size; /* font size in glyphs*/
+ const bitmap_t* bits; /* 16-bit right-padded bitmap data*/
+ const unsigned long* offset; /* offsets into bitmap data*/
+ const unsigned char* width; /* character widths or NULL if fixed*/
+ int defaultchar; /* default char (not glyph index)*/
+ long bits_size; /* # words of bitmap_t bits*/
+
+public:
+ NewFont();
+
+ virtual int getFontHeight() const { return height; }
+ virtual int getMaxCharWidth() const { return maxwidth; };
+
+ virtual int getCharWidth(byte chr) const;
+ virtual void drawChar(const Surface *dst, byte chr, int x, int y, uint32 color) const;
+};
+
+extern const NewFont g_sysfont;
+
+} // End of namespace Graphics
+
+#endif