Font changes from Bill.

git-svn-id: file:///fltk/svn/fltk/trunk@109 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Michael R Sweet 1998-12-02 15:51:38 +00:00
parent c061230dc7
commit beb210d4d4
9 changed files with 143 additions and 164 deletions

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_draw.H,v 1.4 1998/12/02 15:39:28 mike Exp $"
// "$Id: fl_draw.H,v 1.5 1998/12/02 15:51:33 mike Exp $"
//
// Portable drawing function header file for the Fast Light Tool Kit (FLTK).
//
@ -121,8 +121,10 @@ double fl_width(uchar);
// draw using current font:
void fl_draw(const char*, int x, int y);
void fl_draw(const char*, int n, int x, int y);
void fl_draw(const char*, int x, int y, int w, int h, Fl_Align);
void fl_measure(const char*, int& x, int& y);
void fl_draw(const char*, int,int,int,int, Fl_Align);
void fl_draw(const char*, int,int,int,int, Fl_Align,
void (*callthis)(const char *, int n, int x, int y));
// boxtypes:
void fl_frame(const char* s, int x, int y, int w, int h);
@ -156,5 +158,5 @@ int fl_add_symbol(const char* name, void (*drawit)(Fl_Color), int scalable);
#endif
//
// End of "$Id: fl_draw.H,v 1.4 1998/12/02 15:39:28 mike Exp $".
// End of "$Id: fl_draw.H,v 1.5 1998/12/02 15:51:33 mike Exp $".
//

5
FL/x.H
View File

@ -1,5 +1,5 @@
//
// "$Id: x.H,v 1.6 1998/11/05 16:04:41 mike Exp $"
// "$Id: x.H,v 1.7 1998/12/02 15:51:34 mike Exp $"
//
// X11 header file for the Fast Light Tool Kit (FLTK).
//
@ -56,6 +56,7 @@ extern Colormap fl_colormap;
// drawing functions:
extern GC fl_gc;
extern Window fl_window;
extern XFontStruct* fl_xfont;
ulong fl_xpixel(Fl_Color i);
ulong fl_xpixel(uchar r, uchar g, uchar b);
void fl_clip_region(Region);
@ -116,5 +117,5 @@ extern int fl_background_pixel; // hack into Fl_X::make_xid()
#endif
//
// End of "$Id: x.H,v 1.6 1998/11/05 16:04:41 mike Exp $".
// End of "$Id: x.H,v 1.7 1998/12/02 15:51:34 mike Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: Fl_Font.H,v 1.3 1998/10/21 14:20:03 mike Exp $"
// "$Id: Fl_Font.H,v 1.4 1998/12/02 15:51:35 mike Exp $"
//
// Font definitions for the Fast Light Tool Kit (FLTK).
//
@ -25,47 +25,42 @@
// Two internal fltk data structures:
//
// Fl_Fontdesc: an entry into the fl_font() table. This entry may contain
// several "fonts" according to the system, for instance under X all the
// sizes are different X fonts, but only one fl_font.
// Fl_Fontdesc: an entry into the fl_font() table. There is one of these
// for each fltk font number.
//
// Fl_XFont: a structure for an actual system font, with junk to help
// choose it and info on character sizes. Each Fl_Font has a linked
// list of these. These are created the first time each system font
// is used.
// Fl_FontSize: a structure for an actual system font, with junk to
// help choose it and info on character sizes. Each Fl_Fontdesc has a
// linked list of these. These are created the first time each system
// font/size combination is used.
#ifndef FL_FONT_
#define FL_FONT_
class Fl_XFont {
class Fl_FontSize {
public:
Fl_XFont *next; // linked list of sizes of this style
Fl_FontSize *next; // linked list for this Fl_Fontdesc
#ifndef WIN32
XFontStruct* font; // X font information, 0 for display list
XCharStruct* per_char;// modified from XFontStruct to have 0x20-0xff in it
XCharStruct* free_this; // pointer saved for delete[]
Fl_XFont(const char*, int);
XFontStruct* font; // X font information
Fl_FontSize(const char* xfontname);
#else
HFONT fid;
int width[256];
TEXTMETRIC metr;
Fl_XFont(const char*, int, int);
Fl_FontSize(const char* fontname, int size);
#endif
int number; // which slot in FL's font table
int minsize; // smallest point size that should use this
int maxsize; // largest point size that should use this
#if HAVE_GL
unsigned int listbase;// base of display list, 0 = none
#endif
~Fl_XFont();
~Fl_FontSize();
};
extern Fl_XFont *fl_current_xfont;
extern Fl_XFont *fl_fixed_xfont;
extern Fl_FontSize *fl_fontsize; // the currently selected one
struct Fl_Fontdesc {
const char *name;
Fl_XFont *first; // linked list of sizes of this style
Fl_FontSize *first; // linked list of sizes of this style
#ifndef WIN32
char **xlist; // matched X font names
int n; // size of xlist, negative = don't free xlist!
@ -80,11 +75,8 @@ const char* fl_font_word(const char *p, int n);
char *fl_find_fontsize(char *name);
#endif
void fl_draw(const char *, int x, int y, int w, int h, Fl_Align,
void (*callthis)(const char *, int n, int x, int y));
#endif
//
// End of "$Id: Fl_Font.H,v 1.3 1998/10/21 14:20:03 mike Exp $".
// End of "$Id: Fl_Font.H,v 1.4 1998/12/02 15:51:35 mike Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_font.cxx,v 1.4 1998/12/02 15:39:36 mike Exp $"
// "$Id: fl_font.cxx,v 1.5 1998/12/02 15:51:35 mike Exp $"
//
// Font selection code for the Fast Light Tool Kit (FLTK).
//
@ -39,41 +39,20 @@
#include <stdlib.h>
#include <string.h>
Fl_XFont::Fl_XFont(const char *name, int num)
: number(num)
{
Fl_FontSize::Fl_FontSize(const char* name) {
font = XLoadQueryFont(fl_display, name);
if (!font) {
Fl::warning("bad font: %s", name);
font = XLoadQueryFont(fl_display, "fixed"); // if fixed fails we crash
}
XCharStruct *p = font->per_char;
if (!p) {
free_this = per_char = 0;
} else if (font->min_char_or_byte2>0x20 || font->max_char_or_byte2<0xff) {
// fill in short fonts so fl_width does not crash:
XCharStruct *q = free_this = new XCharStruct[0xff-0x20+1];
per_char = q - 0x20;
unsigned int i = 0x20;
for (; i<font->min_char_or_byte2; i++, q++)
q->width = font->min_bounds.width;
for (; i<=font->max_char_or_byte2; i++)
*q++ = *p++;
for (; i<=0xff; i++)
q->width = font->min_bounds.width;
} else {
free_this = 0;
per_char = p - font->min_char_or_byte2;
}
#if HAVE_GL
listbase = 0;
#endif
}
Fl_XFont *fl_current_xfont;
Fl_XFont *fl_fixed_xfont;
Fl_FontSize* fl_current_xfont;
Fl_XFont::~Fl_XFont() {
Fl_FontSize::~Fl_FontSize() {
#if HAVE_GL
// Delete list created by gl_draw(). This is not done by this code
// as it will link in GL unnecessarily. There should be some kind
@ -86,7 +65,6 @@ Fl_XFont::~Fl_XFont() {
// }
#endif
if (this == fl_current_xfont) fl_current_xfont = 0;
delete[] free_this;
XFreeFont(fl_display, font);
}
@ -113,28 +91,28 @@ static Fl_Fontdesc built_in_table[] = {
{"-*-*zapf dingbats-*"}
};
Fl_Fontdesc *fl_fonts = built_in_table;
Fl_Fontdesc* fl_fonts = built_in_table;
#define MAXSIZE 32767
// return dash number N, or pointer to ending null if none:
const char* fl_font_word(const char *p, int n) {
const char* fl_font_word(const char* p, int n) {
while (*p) {if (*p=='-') {if (!--n) break;} p++;}
return p;
}
// return a pointer to a number we think is "point size":
char *fl_find_fontsize(char* name) {
char *c = name;
char* fl_find_fontsize(char* name) {
char* c = name;
// for standard x font names, try after 7th dash:
if (*c == '-') {
c = (char*)fl_font_word(c,7);
if (*c++ && isdigit(*c)) return c;
return 0; // malformed x font name?
}
char *r = 0;
char* r = 0;
// find last set of digits:
for (c++; *c; c++)
for (c++;* c; c++)
if (isdigit(*c) && !isdigit(*(c-1))) r = c;
return r;
}
@ -148,42 +126,39 @@ int fl_correct_encoding(const char* name) {
return (*c++ && !strcmp(c,fl_encoding));
}
// locate or create an Fl_XFont for a given Fl_Fontdesc and size:
static Fl_XFont *find(int fnum, int size) {
Fl_Fontdesc *s = fl_fonts+fnum;
// locate or create an Fl_FontSize for a given Fl_Fontdesc and size:
static Fl_FontSize* find(int fnum, int size) {
Fl_Fontdesc* s = fl_fonts+fnum;
if (!s->name) s = fl_fonts; // use font 0 if still undefined
Fl_XFont *f;
Fl_FontSize* f;
for (f = s->first; f; f = f->next)
if (f->minsize <= size && f->maxsize >= size) return f;
fl_open_display();
if (!s->xlist) {
s->xlist = XListFonts(fl_display, s->name, 100, &(s->n));
if (!s->xlist) { // use fixed if no matching font...
if (!fl_fixed_xfont) {
fl_fixed_xfont = new Fl_XFont("fixed",fnum);
fl_fixed_xfont->minsize = 0;
fl_fixed_xfont->maxsize = 32767;
}
s->first = fl_fixed_xfont;
return fl_fixed_xfont;
s->first = new Fl_FontSize("fixed");
s->first->minsize = 0;
s->first->maxsize = 32767;
return s->first;
}
}
// search for largest <= font size:
char *name = s->xlist[0]; int ptsize = 0; // best one found so far
char* name = s->xlist[0]; int ptsize = 0; // best one found so far
int matchedlength = 32767;
char namebuffer[1024]; // holds scalable font name
int found_encoding = 0;
int m = s->n; if (m<0) m = -m;
for (int n=0; n < m; n++) {
char *thisname = s->xlist[n];
char* thisname = s->xlist[n];
if (fl_correct_encoding(thisname)) {
if (!found_encoding) ptsize = 0; // force it to choose this
found_encoding = 1;
} else {
if (found_encoding) continue;
}
char *c = fl_find_fontsize(thisname);
char* c = fl_find_fontsize(thisname);
int thissize = c ? atoi(c) : MAXSIZE;
int thislength = strlen(thisname);
if (thissize == size && thislength < matchedlength) {
@ -227,7 +202,7 @@ static Fl_XFont *find(int fnum, int size) {
}
// okay, we definately have some name, make the font:
f = new Fl_XFont(name,fnum);
f = new Fl_FontSize(name);
if (ptsize < size) {f->minsize = ptsize; f->maxsize = size;}
else {f->minsize = size; f->maxsize = ptsize;}
f->next = s->first;
@ -241,64 +216,81 @@ static Fl_XFont *find(int fnum, int size) {
int fl_font_;
int fl_size_;
XFontStruct* fl_xfont;
static GC font_gc;
void fl_font(int fnum, int size) {
if (fnum == fl_font_ && size == fl_size_) return;
fl_font_ = fnum; fl_size_ = size;
Fl_XFont *f = find(fnum, size);
if (f != fl_current_xfont) {fl_current_xfont = f; font_gc = 0;}
Fl_FontSize* f = find(fnum, size);
if (f != fl_current_xfont) {
fl_current_xfont = f;
fl_xfont = f->font;
font_gc = 0;
}
}
int fl_height() {
return (fl_current_xfont->font->ascent + fl_current_xfont->font->descent);
return (fl_xfont->ascent + fl_xfont->descent);
}
int fl_descent() {
return fl_current_xfont->font->descent;
return fl_xfont->descent;
}
double fl_width(const char *c) {
XCharStruct *p = fl_current_xfont->per_char;
if (!p) return strlen(c)*fl_current_xfont->font->min_bounds.width;
double fl_width(const char* c) {
XCharStruct* p = fl_xfont->per_char;
if (!p) return strlen(c)*fl_xfont->min_bounds.width;
int a = fl_xfont->min_char_or_byte2;
int b = fl_xfont->max_char_or_byte2 - a;
int w = 0;
while (*c)
if (*c >= ' ')
w += p[(uchar)(*c++)].width;
else
c ++;
while (*c) {
int x = *(uchar*)c++ - a;
if (x >= 0 && x <= b) w += p[x].width;
else w += fl_xfont->min_bounds.width;
}
return w;
}
double fl_width(const char *c, int n) {
XCharStruct *p = fl_current_xfont->per_char;
if (!p) return n*fl_current_xfont->font->min_bounds.width;
double fl_width(const char* c, int n) {
XCharStruct* p = fl_xfont->per_char;
if (!p) return n*fl_xfont->min_bounds.width;
int a = fl_xfont->min_char_or_byte2;
int b = fl_xfont->max_char_or_byte2 - a;
int w = 0;
while (n--) w += p[(uchar)(*c++)].width;
while (n--) {
int x = *(uchar*)c++ - a;
if (x >= 0 && x <= b) w += p[x].width;
else w += fl_xfont->min_bounds.width;
}
return w;
}
double fl_width(uchar c) {
XCharStruct *p = fl_current_xfont->per_char;
if (!p) return fl_current_xfont->font->min_bounds.width;
return p[c].width;
XCharStruct* p = fl_xfont->per_char;
if (p) {
int a = fl_xfont->min_char_or_byte2;
int b = fl_xfont->max_char_or_byte2 - a;
int x = c-a;
if (x >= 0 && x <= b) return p[c].width;
}
return fl_xfont->min_bounds.width;
}
void fl_draw(const char *str, int n, int x, int y) {
void fl_draw(const char* str, int n, int x, int y) {
if (font_gc != fl_gc) {
font_gc = fl_gc;
XSetFont(fl_display, fl_gc, fl_current_xfont->font->fid);
XSetFont(fl_display, fl_gc, fl_xfont->fid);
}
XDrawString(fl_display, fl_window, fl_gc, x, y, str, n);
}
void fl_draw(const char *str, int x, int y) {
void fl_draw(const char* str, int x, int y) {
fl_draw(str, strlen(str), x, y);
}
#endif
//
// End of "$Id: fl_font.cxx,v 1.4 1998/12/02 15:39:36 mike Exp $".
// End of "$Id: fl_font.cxx,v 1.5 1998/12/02 15:51:35 mike Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_font_win32.cxx,v 1.6 1998/12/02 15:39:36 mike Exp $"
// "$Id: fl_font_win32.cxx,v 1.7 1998/12/02 15:51:36 mike Exp $"
//
// WIN32 font selection routines for the Fast Light Tool Kit (FLTK).
//
@ -33,7 +33,7 @@
#include <stdlib.h>
#include <string.h>
Fl_XFont::Fl_XFont(const char *name, int size, int num) {
Fl_FontSize::Fl_FontSize(const char* name, int size) {
int weight = FW_NORMAL;
int italic = 0;
switch (*name++) {
@ -68,13 +68,12 @@ Fl_XFont::Fl_XFont(const char *name, int size, int num) {
#if HAVE_GL
listbase = 0;
#endif
number = num;
minsize = maxsize = size;
}
Fl_XFont *fl_current_xfont;
Fl_FontSize* fl_current_xfont;
Fl_XFont::~Fl_XFont() {
Fl_FontSize::~Fl_FontSize() {
#if HAVE_GL
// Delete list created by gl_draw(). This is not done by this code
// as it will link in GL unnecessarily. There should be some kind
@ -113,15 +112,15 @@ static Fl_Fontdesc built_in_table[] = {
{" Wingdings"},
};
Fl_Fontdesc *fl_fonts = built_in_table;
Fl_Fontdesc* fl_fonts = built_in_table;
static Fl_XFont *find(int fnum, int size) {
Fl_Fontdesc *s = fl_fonts+fnum;
static Fl_FontSize* find(int fnum, int size) {
Fl_Fontdesc* s = fl_fonts+fnum;
if (!s->name) s = fl_fonts; // use 0 if fnum undefined
Fl_XFont *f;
Fl_FontSize* f;
for (f = s->first; f; f = f->next)
if (f->minsize <= size && f->maxsize >= size) return f;
f = new Fl_XFont(s->name, size, fnum);
f = new Fl_FontSize(s->name, size);
f->next = s->first;
s->first = f;
return f;
@ -148,13 +147,13 @@ int fl_descent() {
return fl_current_xfont->metr.tmDescent;
}
double fl_width(const char *c) {
double fl_width(const char* c) {
double w = 0.0;
while (*c) w += fl_current_xfont->width[uchar(*c++)];
return w;
}
double fl_width(const char *c, int n) {
double fl_width(const char* c, int n) {
double w = 0.0;
while (n--) w += fl_current_xfont->width[uchar(*c++)];
return w;
@ -164,16 +163,16 @@ double fl_width(uchar c) {
return fl_current_xfont->width[c];
}
void fl_draw(const char *str, int n, int x, int y) {
void fl_draw(const char* str, int n, int x, int y) {
SetTextColor(fl_gc, fl_RGB());
SelectObject(fl_gc, fl_current_xfont->fid);
TextOut(fl_gc, x, y, str, n);
}
void fl_draw(const char *str, int x, int y) {
void fl_draw(const char* str, int x, int y) {
fl_draw(str, strlen(str), x, y);
}
//
// End of "$Id: fl_font_win32.cxx,v 1.6 1998/12/02 15:39:36 mike Exp $".
// End of "$Id: fl_font_win32.cxx,v 1.7 1998/12/02 15:51:36 mike Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_set_font.cxx,v 1.3 1998/10/21 14:20:58 mike Exp $"
// "$Id: fl_set_font.cxx,v 1.4 1998/12/02 15:51:36 mike Exp $"
//
// Font utilities for the Fast Light Tool Kit (FLTK).
//
@ -35,13 +35,13 @@
static int table_size;
void Fl::set_font(Fl_Font fnum, const char *name) {
void Fl::set_font(Fl_Font fnum, const char* name) {
if (fnum >= table_size) {
int i = table_size;
if (!i) { // don't realloc the built-in table
table_size = 2*FL_FREE_FONT;
i = FL_FREE_FONT;
Fl_Fontdesc *t = (Fl_Fontdesc*)malloc(table_size*sizeof(Fl_Fontdesc));
Fl_Fontdesc* t = (Fl_Fontdesc*)malloc(table_size*sizeof(Fl_Fontdesc));
memcpy(t, fl_fonts, FL_FREE_FONT*sizeof(Fl_Fontdesc));
fl_fonts = t;
} else {
@ -50,17 +50,14 @@ void Fl::set_font(Fl_Font fnum, const char *name) {
}
for (; i < table_size; i++) fl_fonts[i].name = 0;
}
Fl_Fontdesc *s = fl_fonts+fnum;
Fl_Fontdesc* s = fl_fonts+fnum;
if (s->name) {
if (!strcmp(s->name, name)) {s->name = name; return;}
#ifndef WIN32
if (s->xlist && s->n >= 0) XFreeFontNames(s->xlist);
#endif
for (Fl_XFont *f = s->first; f;) {
#ifndef WIN32
if (f == fl_fixed_xfont) break;
#endif
Fl_XFont *n = f->next; delete f; f = n;
for (Fl_FontSize* f = s->first; f;) {
Fl_FontSize* n = f->next; delete f; f = n;
}
s->first = 0;
}
@ -71,8 +68,8 @@ void Fl::set_font(Fl_Font fnum, const char *name) {
s->first = 0;
}
const char *Fl::get_font(Fl_Font fnum) {return fl_fonts[fnum].name;}
const char* Fl::get_font(Fl_Font fnum) {return fl_fonts[fnum].name;}
//
// End of "$Id: fl_set_font.cxx,v 1.3 1998/10/21 14:20:58 mike Exp $".
// End of "$Id: fl_set_font.cxx,v 1.4 1998/12/02 15:51:36 mike Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_set_fonts.cxx,v 1.3 1998/10/21 14:20:58 mike Exp $"
// "$Id: fl_set_fonts.cxx,v 1.4 1998/12/02 15:51:37 mike Exp $"
//
// More font utilities for the Fast Light Tool Kit (FLTK).
//
@ -137,6 +137,9 @@ const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
if (*x) {x++; *o++ = '('; while (*x) *o++ = *x++; *o++ = ')';}
*o = 0;
if (type & FL_BOLD) {strcpy(o, " bold"); o += 5;}
if (type & FL_ITALIC) {strcpy(o, " italic"); o += 7;}
if (ap) *ap = type;
return buffer;
@ -322,5 +325,5 @@ int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
#endif
//
// End of "$Id: fl_set_fonts.cxx,v 1.3 1998/10/21 14:20:58 mike Exp $".
// End of "$Id: fl_set_fonts.cxx,v 1.4 1998/12/02 15:51:37 mike Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: fl_set_fonts_win32.cxx,v 1.3 1998/10/21 14:20:59 mike Exp $"
// "$Id: fl_set_fonts_win32.cxx,v 1.4 1998/12/02 15:51:37 mike Exp $"
//
// WIN32 font utilities for the Fast Light Tool Kit (FLTK).
//
@ -39,13 +39,19 @@
const char* Fl::get_font_name(Fl_Font fnum, int* ap) {
const char* p = fl_fonts[fnum].name;
if (!p || !*p) {if (ap) *ap = 0; return "";}
if (ap) switch (*p) {
case 'B': *ap = FL_BOLD; break;
case 'I': *ap = FL_ITALIC; break;
case 'P': *ap = FL_BOLD | FL_ITALIC; break;
default: *ap = 0; break;
int type;
switch (*p) {
case 'B': type = FL_BOLD; break;
case 'I': type = FL_ITALIC; break;
case 'P': type = FL_BOLD | FL_ITALIC; break;
default: type = 0; break;
}
return p+1;
if (!type) return p+1;
static char *buffer; if (!buffer) buffer = new char[128];
strcpy(buffer, p+1);
if (type & FL_BOLD) strcat(buffer, " bold");
if (type & FL_ITALIC) strcat(buffer, " italic");
return buffer;
}
static int fl_free_font = FL_FREE_FONT;
@ -81,5 +87,5 @@ int Fl::get_font_sizes(Fl_Font fnum, int*& sizep) {
}
//
// End of "$Id: fl_set_fonts_win32.cxx,v 1.3 1998/10/21 14:20:59 mike Exp $".
// End of "$Id: fl_set_fonts_win32.cxx,v 1.4 1998/12/02 15:51:37 mike Exp $".
//

View File

@ -1,5 +1,5 @@
//
// "$Id: gl_draw.cxx,v 1.4 1998/11/24 13:18:16 mike Exp $"
// "$Id: gl_draw.cxx,v 1.5 1998/12/02 15:51:38 mike Exp $"
//
// OpenGL drawing support routines for the Fast Light Tool Kit (FLTK).
//
@ -32,20 +32,11 @@
#include <FL/Fl.H>
#include <FL/gl.h>
#include <FL/x.H>
#include <FL/fl_draw.H>
#include "Fl_Gl_Choice.H"
#include "Fl_Font.H"
#include <string.h>
// stuff from fl_draw.H:
void fl_font(int fontid, int size);
int fl_height(); // using "size" should work ok
int fl_descent();
void fl_measure(const char*, int& x, int& y);
double fl_width(const char*);
double fl_width(const char*, int n);
double fl_width(uchar);
unsigned long fl_xpixel(uchar i);
void gl_font(int fontid, int size) {fl_font(fontid, size);}
int gl_height() {return fl_height();}
int gl_descent() {return fl_descent();}
@ -54,26 +45,22 @@ double gl_width(const char* s, int n) {return fl_width(s,n);}
double gl_width(uchar c) {return fl_width(c);}
void gl_draw(const char* str, int n) {
if (!fl_fontsize->listbase) {
#ifdef WIN32
if (!fl_current_xfont->listbase) {
int base = fl_current_xfont->metr.tmFirstChar;
int size = fl_current_xfont->metr.tmLastChar-base+1;
HFONT oldFid = (HFONT)SelectObject(fl_gc, fl_current_xfont->fid);
fl_current_xfont->listbase = glGenLists(size)-base;
wglUseFontBitmaps(fl_gc, base, size, fl_current_xfont->listbase+base);
int base = fl_fontsize->metr.tmFirstChar;
int size = fl_fontsize->metr.tmLastChar-base+1;
HFONT oldFid = (HFONT)SelectObject(fl_gc, fl_fontsize->fid);
fl_fontsize->listbase = glGenLists(size)-base;
wglUseFontBitmaps(fl_gc, base, size, fl_fontsize->listbase+base);
SelectObject(fl_gc, oldFid);
}
#else
if (!fl_current_xfont->listbase) {
int base = fl_current_xfont->font->min_char_or_byte2;
int size = fl_current_xfont->font->max_char_or_byte2-base+1;
// int base = 0; int size = 256;
fl_current_xfont->listbase = glGenLists(size)-base;
glXUseXFont(fl_current_xfont->font->fid, base, size,
fl_current_xfont->listbase+base);
}
int base = fl_xfont->min_char_or_byte2;
int size = fl_xfont->max_char_or_byte2-base+1;
fl_fontsize->listbase = glGenLists(size)-base;
glXUseXFont(fl_xfont->fid, base, size, fl_fontsize->listbase+base);
#endif
glListBase(fl_current_xfont->listbase);
}
glListBase(fl_fontsize->listbase);
glCallLists(n, GL_UNSIGNED_BYTE, str);
}
@ -152,5 +139,5 @@ void gl_draw_image(const uchar* b, int x, int y, int w, int h, int d, int ld) {
#endif
//
// End of "$Id: gl_draw.cxx,v 1.4 1998/11/24 13:18:16 mike Exp $".
// End of "$Id: gl_draw.cxx,v 1.5 1998/12/02 15:51:38 mike Exp $".
//