From e6dc945aaa53b0739148b5ba4ebf7f8870e64370 Mon Sep 17 00:00:00 2001 From: pixel Date: Sat, 21 Dec 2002 12:39:15 +0000 Subject: Commit of the day. --- include/glfont.h | 5 ++++- lib/glfont.cc | 48 ++++++++++++++++++++++++++++++++++++++++-------- src/font-2.bin | Bin 0 -> 162407 bytes src/font.bin | Bin 0 -> 66823 bytes src/test.cc | 24 +++++++++++++++++------- 5 files changed, 61 insertions(+), 16 deletions(-) create mode 100644 src/font-2.bin create mode 100644 src/font.bin diff --git a/include/glfont.h b/include/glfont.h index c1f7df9..d1ba60c 100644 --- a/include/glfont.h +++ b/include/glfont.h @@ -15,19 +15,22 @@ namespace mogltk { void drawentry(Uint16, int, int, Color = Color(255, 255, 255, 255)); void putcursor(int, int); void putentry(Uint16, Color = Color(255, 255, 255, 255)); + void putchar(char, Color = Color(255, 255, 255, 255)); void newline(void); int printf(const String &, ...); void setcolor(Color); + void setshadow(int); private: Uint8 * sizes; Uint16 nbentries, nbcT, nbT; - Uint8 flags, maxX, maxY, nbcU, nbcV; + Uint8 flags, maxX, maxY, nbcU, nbcV, base, inter; texture ** fonttex; Uint16 * corresp; void Bind(int); int cx, cy, ox; Color textcolor; + int shadow; }; }; diff --git a/lib/glfont.cc b/lib/glfont.cc index 91d70ba..3d254d3 100644 --- a/lib/glfont.cc +++ b/lib/glfont.cc @@ -19,8 +19,10 @@ off|siz|description 2 | 1 | Flags 3 | 1 | maxX (maximum width) 4 | 1 | maxY (maximum height) - 5 | X | char entries -5+X| Y | char map + 5 | 1 | base (bottom line from top) + 6 | 1 | inter (size of the interline) + 7 | X | char entries +7+X| Y | char map X = (maxX * maxY + 1) * nbentries Y = nbentries * 4 @@ -76,12 +78,12 @@ nbT = number of textures mogltk::font::font(Handle * ffont) : textcolor(255, 255, 255, 255) { int i; - ffont->SetZ(); - ffont->read(&nbentries, 2); ffont->read(&flags, 1); ffont->read(&maxX, 1); ffont->read(&maxY, 1); + ffont->read(&base, 1); + ffont->read(&inter, 1); nbcU = 256 / maxX; nbcV = 256 / maxY; @@ -133,9 +135,9 @@ mogltk::font::font(Handle * ffont) : textcolor(255, 255, 255, 255) { } } } - if ((curU += maxX) >= 256) { + if (((curU += maxX) + maxX) >= 256) { curU = 0; - if ((curV += maxY) >= 256) { + if (((curV += maxY) + maxY) >= 256) { curV = 0; if ((curT + 1) != nbT) curtex = (Uint8 *) fonttex[++curT]->GetSurface()->pixels; @@ -168,6 +170,17 @@ void mogltk::font::drawentry(Uint16 entry, int x, int y, Color c) { mogltk::glbase::Enter2DMode(); } + if (shadow) { + int os = shadow; + shadow = 0; + + drawentry(entry, x + os, y + os, BLACK); + + shadow = os; + } + + y -= base; + Bind(entry / nbcT); c.Bind(); trueentry = entry % nbcT; @@ -202,9 +215,21 @@ void mogltk::font::putentry(Uint16 entry, Color c) { cx += sizes[entry]; } +void mogltk::font::putchar(char ch, Color c) { + Uint16 * p; + int i; + + for (i = 0, p = corresp; i < nbentries; i++, p++) { + if (*(p++) == ch) { + putentry(*p, c); + return; + } + } +} + void mogltk::font::newline(void) { cx = ox; - cy += maxY; + cy += inter; } int mogltk::font::printf(const String & m, ...) { @@ -218,7 +243,11 @@ int mogltk::font::printf(const String & m, ...) { va_end(ap); for (p = buffer; *p; p++) { - putentry(*p, textcolor); + if (*p == '\n') { + newline(); + } else { + putchar(*p, textcolor); + } } return r; @@ -228,3 +257,6 @@ void mogltk::font::setcolor(Color c) { textcolor = c; } +void mogltk::font::setshadow(int s) { + shadow = s; +} diff --git a/src/font-2.bin b/src/font-2.bin new file mode 100644 index 0000000..4cac824 Binary files /dev/null and b/src/font-2.bin differ diff --git a/src/font.bin b/src/font.bin new file mode 100644 index 0000000..10e1b48 Binary files /dev/null and b/src/font.bin differ diff --git a/src/test.cc b/src/test.cc index 5289762..344a737 100644 --- a/src/test.cc +++ b/src/test.cc @@ -11,7 +11,7 @@ virtual int startup() throw (GeneralException) { Uint8 * texture; verbosity = M_INFO; mogltk::glbase::setup(); - Input ffont("font.bin"); + Input ffont("font-2.bin"); mogltk::font font(&ffont); verbosity = M_INFO; @@ -77,16 +77,26 @@ virtual int startup() throw (GeneralException) { glColor3d(0, 0, 1); glVertex2f(450, 150); glEnd(); - mogltk::glbase::Leave2DMode(); + + glBegin(GL_TRIANGLE_STRIP); + CORNFLOWERBLUE.Bind(); + glVertex2f( 5, 5); + DEEPSKYBLUE.Bind(); + glVertex2f(150, 5); + MIDNIGHTBLUE.Bind(); + glVertex2f( 5, 80); + NAVY.Bind(); + glVertex2f(150, 80); + glEnd(); + font.setshadow(1); font.putcursor(10, 10); font.setcolor(Color(255, 0, 0)); - font.printf("PixelPawa!"); - font.newline(); - font.printf("It works!!"); - font.newline(); - font.printf("I can't believe it!"); + font.printf("PixelPawa!\n"); + font.printf("It works!!\n"); + font.printf("I can't believe it!\n"); + mogltk::glbase::Leave2DMode(); mogltk::glbase::Flip(); // sleep(15); -- cgit v1.2.3