diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2016-01-26 20:48:21 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2016-01-26 20:48:21 +0000 |
| commit | 2b3567c83ca18b5dad62be7f10cc71446c028164 (patch) | |
| tree | fa3e3151c1bf84673d8a3632025895efa01b2da4 /src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx | |
| parent | 222538baad665f226546c2cfae417df3f6835a44 (diff) | |
OpenGL new naming scheme.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11055 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx')
| -rw-r--r-- | src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx b/src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx new file mode 100644 index 000000000..24a5fe51b --- /dev/null +++ b/src/drivers/OpenGL/Fl_OpenGL_Graphics_Driver_font.cxx @@ -0,0 +1,151 @@ +// +// "$Id$" +// +// Standard X11 font selection code for the Fast Light Tool Kit (FLTK). +// +// Copyright 1998-2016 by Bill Spitzak and others. +// +// This library is free software. Distribution and use rights are outlined in +// the file "COPYING" which should have been included with this file. If this +// file is missing or damaged, see the license at: +// +// http://www.fltk.org/COPYING.php +// +// Please report all bugs and problems on the following page: +// +// http://www.fltk.org/str.php +// + +/* + This module implements a lowest-common-denominator font for OpenGL. + It will always work, even if the main graphics library does not support + rendering text into a texture buffer. + + The font is limited to a single face and ASCII characters. It is drawn using + lines which makes it arbitrarily scalable. I am trying to keep font data really + compact. + */ + + +#include <FL/gl.h> + +// FIXME: check out FreeGlut: +// FIXME: implement font-to-RGBA in the main graphics driver + +#if 1 + +/* + |01234567| + -+--------+ + 0| |____ + 1|++++++++|font + 2|++++++++| + 3|++++++++| + 4|++++++++| + 5|++++++++|____ + 6| |descent + 7| | + -+--------+ + */ + + +static const char *font_data[128] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, /*T*/"\11\71\100\41\45", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, /*e*/"\55\25\14\13\22\52\63\64\14", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, /*s*/"\62\22\13\64\55\15", /*t*/"\41\44\55\65\100\22\62", 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, +}; + + +double Fl_OpenGL_Graphics_Driver::width(const char *str, int n) { + return size_*n*0.5; +} + +int Fl_OpenGL_Graphics_Driver::descent() { + return (int)(size_ - size_*0.8); +} + +int Fl_OpenGL_Graphics_Driver::height() { + return (int)(size_*0.8); +} + +void Fl_OpenGL_Graphics_Driver::text_extents(const char *str, int n, int& dx, int& dy, int& w, int& h) +{ + dx = 0; + dy = descent(); + w = width(str, n); + h = size_; +} + +void Fl_OpenGL_Graphics_Driver::draw(const char *str, int n, int x, int y) +{ + int i; + for (i=0; i<n; i++) { + char c = str[i] & 0x7f; + const char *fd = font_data[(int)c]; + if (fd) { + char rendering = 0; + float px, py; + for (;;) { + char cmd = *fd++; + if (cmd==0) { + if (rendering) { + glEnd(); + glBegin(GL_POINTS); glVertex2f(px, py); glEnd(); + rendering = 0; + } + break; + } else if (cmd>63) { + if (cmd=='\100' && rendering) { + glEnd(); + glBegin(GL_POINTS); glVertex2f(px, py); glEnd(); + rendering = 0; + } + } else { + if (!rendering) { glBegin(GL_LINE_STRIP); rendering = 1; } + int vx = (cmd & '\70')>>3; + int vy = (cmd & '\07'); + px = 0.5+x+vx*size_*0.5/8.0; + py = 0.5+y+vy*size_/8.0-0.8*size_; + glVertex2f(px, py); + } + } + } + x += size_*0.5; + } +} + +#elif 0 + +/* +extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeRoman; +extern FL_EXPORT Fl_Glut_StrokeFont glutStrokeMonoRoman; +# define GLUT_STROKE_ROMAN (&glutStrokeRoman) +# define GLUT_STROKE_MONO_ROMAN (&glutStrokeMonoRoman) + +FL_EXPORT void glutStrokeCharacter(void *font, int character); +FL_EXPORT GLfloat glutStrokeHeight(void *font); +FL_EXPORT int glutStrokeLength(void *font, const unsigned char *string); +FL_EXPORT void glutStrokeString(void *font, const unsigned char *string); +FL_EXPORT int glutStrokeWidth(void *font, int character); +*/ + +#else + +void Fl_OpenGL_Graphics_Driver::draw(const char* str, int n, int x, int y) { + gl_draw(str, n, x, y); +} + +#endif + + +// +// End of "$Id$". +// |
