From 11f44e36d5f02f8309fc463f9a2c6cd81b42c3ce Mon Sep 17 00:00:00 2001 From: pixel Date: Sat, 7 Dec 2002 00:42:14 +0000 Subject: Whoups --- lib/glfont.cc | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 lib/glfont.cc (limited to 'lib/glfont.cc') diff --git a/lib/glfont.cc b/lib/glfont.cc new file mode 100644 index 0000000..82058c8 --- /dev/null +++ b/lib/glfont.cc @@ -0,0 +1,110 @@ +#include "glbase.h" +#include "glfont.h" +#include "Input.h" + +Uint8 prescale2[4] = { 0, 85, 170, 255 }, prescale3[8] = { 0, 36, 72, 109, 145, 182, 218, 255 }; + +mogltk::font::font(const String & file) { + Input ffont(file); + int i; + +#ifdef HAVE_ZLIB + ffont.SetZ(); +#endif + + ffont.read(&nbentries, 2); + ffont.read(&flags, 1); + ffont.read(&maxX, 1); + ffont.read(&maxY, 1); + + nbcU = 256 / maxX; + nbcV = 256 / maxY; + + nbcT = nbcU * nbcV; + + nbT = nbentries / nbcT; + + if (nbentries % nbcT) { + nbT++; + } + + fonttex = (texture **) malloc(nbT * sizeof(texture *)); + + for (i = 0; i < nbT; i++) { + fonttex[i] = new texture(256, 256, true); + } + + sizes = (Uint8 *) malloc(nbentries * sizeof(Uint8)); + + Uint8 * curtex = (Uint8 *) fonttex[0]->GetSurface()->pixels; + Uint8 curU = 0, curV = 0, curT = 0; + for (int i = 0; i < nbentries; i++) { + ffont.read(&sizes[i], 1); + for (int v = 0; v < maxY; v++) { + for (int u = 0; u < maxX; u++) { + Uint8 f; + ffont.read(&f, 1); + if (flags) { + Uint8 r, g, b, a; + r = f & 3; + g = (f >> 2) & 7; + b = (f >> 5) & 3; + a = (f >> 7) & 1; + curtex[(curU + u + (curV + v) * 256) * 4 + 0] = prescale2[r]; + curtex[(curU + u + (curV + v) * 256) * 4 + 1] = prescale3[g]; + curtex[(curU + u + (curV + v) * 256) * 4 + 2] = prescale2[b]; + curtex[(curU + u + (curV + v) * 256) * 4 + 3] = a ? 255 : 0; + } else { + curtex[(curU + u + (curV + v) * 256) * 4 + 0] = 255; + curtex[(curU + u + (curV + v) * 256) * 4 + 1] = 255; + curtex[(curU + u + (curV + v) * 256) * 4 + 2] = 255; + curtex[(curU + u + (curV + v) * 256) * 4 + 3] = f; + } + } + } + curU += maxX; + if (curU >= 256) { + curU = 0; + curV += maxY; + if (curV >= 256) { + curV = 0; + curT++; + curtex = (Uint8 *) fonttex[curT]->GetSurface()->pixels; + } + } + } + + for (int i = 0; i < nbT; i++) { + fonttex[i]->Generate(); + } + + corresp = (Uint16 *) malloc(nbentries * 2 * sizeof(Uint16)); + + ffont.read(corresp, 2 * sizeof(Uint16) * nbentries); +} + +mogltk::font::~font() { + int i; + for (i = 0; i < nbT; i++) { + delete fonttex[i]; + } + + free((void *) fonttex); + free(sizes); +} + +void mogltk::font::drawentry(Uint16 entry, Color c, int x, int y) { + bool was2D; + + was2D = mogltk::glbase::is2D(); + + if (!was2D) { + mogltk::glbase::Enter2DMode(); + } + + + + if (!was2D) { + mogltk::glbase::Leave2DMode(); + } +} -- cgit v1.2.3