summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/glfont.h5
-rw-r--r--lib/glfont.cc48
-rw-r--r--src/font-2.binbin0 -> 162407 bytes
-rw-r--r--src/font.binbin0 -> 66823 bytes
-rw-r--r--src/test.cc24
5 files changed, 61 insertions, 16 deletions
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
--- /dev/null
+++ b/src/font-2.bin
Binary files differ
diff --git a/src/font.bin b/src/font.bin
new file mode 100644
index 0000000..10e1b48
--- /dev/null
+++ b/src/font.bin
Binary files 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);