diff options
| author | Manolo Gouy <Manolo> | 2018-02-07 15:34:44 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2018-02-07 15:34:44 +0000 |
| commit | dcc82d8926e447e422f200d01e1aa990233bc16a (patch) | |
| tree | bc0d120f1381e0e8c0ef5c66262289e93d3b9a08 /src/drivers/Xlib | |
| parent | 90630409cbe8740d2c8b66823757a4ea5441aa21 (diff) | |
STR#3450: Draw text with OpenGL using textures on all platforms.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12650 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Xlib')
| -rw-r--r-- | src/drivers/Xlib/Fl_Font.H | 28 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H | 2 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx | 20 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx | 53 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx | 45 |
5 files changed, 73 insertions, 75 deletions
diff --git a/src/drivers/Xlib/Fl_Font.H b/src/drivers/Xlib/Fl_Font.H index 0bc4b200e..49917b6d3 100644 --- a/src/drivers/Xlib/Fl_Font.H +++ b/src/drivers/Xlib/Fl_Font.H @@ -3,7 +3,7 @@ // // Font definitions for the Fast Light Tool Kit (FLTK). // -// Copyright 1998-2011 by Bill Spitzak and others. +// Copyright 1998-2018 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 @@ -32,18 +32,8 @@ typedef struct _XftFont XftFont; # include "../../Xutf8.h" #endif // USE_XFT -/** - This 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. -*/ -class Fl_Font_Descriptor { +class Fl_Xlib_Font_Descriptor : public Fl_Font_Descriptor { public: - /** linked list for this Fl_Fontdesc */ - Fl_Font_Descriptor *next; - Fl_Fontsize size; /**< font size */ -#ifndef FL_DOXYGEN // don't bother with platorm dependant details in the doc. # if USE_XFT # if USE_PANGO int descent_; @@ -52,30 +42,28 @@ public: XftFont* font; # endif int angle; - FL_EXPORT Fl_Font_Descriptor(const char* xfontname, Fl_Fontsize size, int angle); + FL_EXPORT Fl_Xlib_Font_Descriptor(const char* xfontname, Fl_Fontsize size, int angle); # else XUtf8FontStruct* font; // X UTF-8 font information - FL_EXPORT Fl_Font_Descriptor(const char* xfontname); + FL_EXPORT Fl_Xlib_Font_Descriptor(const char* xfontname); # endif # if HAVE_GL - unsigned int listbase;// base of display list, 0 = none char glok[64]; # endif // HAVE_GL - - FL_EXPORT ~Fl_Font_Descriptor(); - -#endif // FL_DOXYGEN + FL_EXPORT ~Fl_Xlib_Font_Descriptor(); }; //extern FL_EXPORT Fl_Font_Descriptor *fl_fontsize; // the currently selected one -struct Fl_Fontdesc { +#if !USE_XFT +struct Fl_Xlib_Fontdesc { // replaces Fl_Fontdesc const char *name; char fontname[128]; // "Pretty" font name Fl_Font_Descriptor *first; // linked list of sizes of this style char **xlist; // matched X font names int n; // size of xlist, negative = don't free xlist! }; +#endif extern FL_EXPORT Fl_Fontdesc *fl_fonts; // the table diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H index 09f0dd31b..8e44e2371 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H @@ -180,7 +180,9 @@ protected: virtual void reset_spot(); virtual const char* get_font_name(Fl_Font fnum, int* ap); virtual int get_font_sizes(Fl_Font fnum, int*& sizep); +#if !USE_XFT virtual unsigned font_desc_size(); +#endif virtual const char *font_name(int num); virtual void font_name(int num, const char *name); virtual Fl_Font set_fonts(const char* xstarname); diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx index fd21de07c..dfae0c006 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx @@ -202,22 +202,34 @@ void Fl_Xlib_Graphics_Driver::set_spot(int font, int size, int X, int Y, int W, XFree(preedit_attr); } +#if !USE_XFT unsigned Fl_Xlib_Graphics_Driver::font_desc_size() { - return (unsigned)sizeof(Fl_Fontdesc); + return (unsigned)sizeof(Fl_Xlib_Fontdesc); } +#endif const char *Fl_Xlib_Graphics_Driver::font_name(int num) { +#if USE_XFT return fl_fonts[num].name; +#else + return ((Fl_Xlib_Fontdesc*)fl_fonts)[num].name; +#endif } void Fl_Xlib_Graphics_Driver::font_name(int num, const char *name) { -#if USE_PANGO +#if USE_XFT +# if USE_PANGO init_built_in_fonts(); -#endif +# endif Fl_Fontdesc *s = fl_fonts + num; +#else + Fl_Xlib_Fontdesc *s = ((Fl_Xlib_Fontdesc*)fl_fonts) + num; +#endif if (s->name) { if (!strcmp(s->name, name)) {s->name = name; return;} +#if !USE_XFT if (s->xlist && s->n >= 0) XFreeFontNames(s->xlist); +#endif for (Fl_Font_Descriptor* f = s->first; f;) { Fl_Font_Descriptor* n = f->next; delete f; f = n; } @@ -225,7 +237,9 @@ void Fl_Xlib_Graphics_Driver::font_name(int num, const char *name) { } s->name = name; s->fontname[0] = 0; +#if !USE_XFT s->xlist = 0; +#endif s->first = 0; } diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx index dcb209154..377be7c91 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx @@ -94,7 +94,7 @@ static int use_registry(const char *p) { // turn a stored (with *'s) X font name into a pretty name: const char* Fl_Xlib_Graphics_Driver::get_font_name(Fl_Font fnum, int* ap) { - Fl_Fontdesc *f = fl_fonts + fnum; + Fl_Xlib_Fontdesc *f = ((Fl_Xlib_Fontdesc*)fl_fonts) + fnum; if (!f->fontname[0]) { int type = 0; const char* p = f->name; @@ -312,9 +312,10 @@ Fl_Font Fl_Xlib_Graphics_Driver::set_fonts(const char* xstarname) { break; } } - if (!fl_fonts[j].xlist) { - fl_fonts[j].xlist = xlist+first_xlist; - fl_fonts[j].n = -(i-first_xlist); + Fl_Xlib_Fontdesc *s = ((Fl_Xlib_Fontdesc*)fl_fonts)+j; + if (!s->xlist) { + s->xlist = xlist+first_xlist; + s->n = -(i-first_xlist); used_xlist = 1; } } @@ -323,8 +324,8 @@ Fl_Font Fl_Xlib_Graphics_Driver::set_fonts(const char* xstarname) { } int Fl_Xlib_Graphics_Driver::get_font_sizes(Fl_Font fnum, int*& sizep) { - Fl_Fontdesc *s = fl_fonts+fnum; - if (!s->name) s = fl_fonts; // empty slot in table, use entry 0 + Fl_Xlib_Fontdesc *s = ((Fl_Xlib_Fontdesc*)fl_fonts)+fnum; + if (!s->name) s = ((Fl_Xlib_Fontdesc*)fl_fonts); // empty slot in table, use entry 0 if (!s->xlist) { fl_open_display(); s->xlist = XListFonts(fl_display, s->name, 100, &(s->n)); @@ -358,7 +359,7 @@ int Fl_Xlib_Graphics_Driver::get_font_sizes(Fl_Font fnum, int*& sizep) { #ifndef FL_DOXYGEN -Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name) { +Fl_Xlib_Font_Descriptor::Fl_Xlib_Font_Descriptor(const char* name) : Fl_Font_Descriptor(name, 0) { font = XCreateUtf8FontStruct(fl_display, name); if (!font) { Fl::warning("bad font: %s", name); @@ -372,7 +373,7 @@ Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name) { Fl_XFont_On_Demand fl_xfont; -Fl_Font_Descriptor::~Fl_Font_Descriptor() { +Fl_Xlib_Font_Descriptor::~Fl_Xlib_Font_Descriptor() { # 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 @@ -389,7 +390,7 @@ Fl_Font_Descriptor::~Fl_Font_Descriptor() { // WARNING: if you add to this table, you must redefine FL_FREE_FONT // in Enumerations.H & recompile!! -static Fl_Fontdesc built_in_table[] = { +static Fl_Xlib_Fontdesc built_in_table[] = { {"-*-helvetica-medium-r-normal--*"}, {"-*-helvetica-bold-r-normal--*"}, {"-*-helvetica-medium-o-normal--*"}, @@ -408,7 +409,7 @@ static Fl_Fontdesc built_in_table[] = { {"-*-*zapf dingbats-*"} }; -Fl_Fontdesc* fl_fonts = built_in_table; +Fl_Fontdesc* fl_fonts = (Fl_Fontdesc*)built_in_table; #define MAXSIZE 32767 @@ -554,8 +555,8 @@ static char *put_font_size(const char *n, int size) char *fl_get_font_xfld(int fnum, int size) { - Fl_Fontdesc* s = fl_fonts+fnum; - if (!s->name) s = fl_fonts; // use font 0 if still undefined + Fl_Xlib_Fontdesc* s = ((Fl_Xlib_Fontdesc*)fl_fonts)+fnum; + if (!s->name) s = (Fl_Xlib_Fontdesc*)fl_fonts; // use font 0 if still undefined fl_open_display(); return put_font_size(s->name, size); } @@ -563,15 +564,15 @@ char *fl_get_font_xfld(int fnum, int size) { // locate or create an Fl_Font_Descriptor for a given Fl_Fontdesc and size: static Fl_Font_Descriptor* find(int fnum, int size) { char *name; - Fl_Fontdesc* s = fl_fonts+fnum; - if (!s->name) s = fl_fonts; // use font 0 if still undefined + Fl_Xlib_Fontdesc* s = ((Fl_Xlib_Fontdesc*)fl_fonts)+fnum; + if (!s->name) s = (Fl_Xlib_Fontdesc*)fl_fonts; // use font 0 if still undefined Fl_Font_Descriptor* f; for (f = s->first; f; f = f->next) if (f->size == size) return f; fl_open_display(); name = put_font_size(s->name, size); - f = new Fl_Font_Descriptor(name); + f = new Fl_Xlib_Font_Descriptor(name); f->size = size; f->next = s->first; s->first = f; @@ -597,7 +598,7 @@ void Fl_Xlib_Graphics_Driver::font_unscaled(Fl_Font fnum, Fl_Fontsize size) { } if (fnum == Fl_Graphics_Driver::font() && size == Fl_Graphics_Driver::size()) return; Fl_Graphics_Driver::font(fnum, size); - Fl_Font_Descriptor* f = find(fnum, size); + Fl_Xlib_Font_Descriptor* f = (Fl_Xlib_Font_Descriptor*)find(fnum, size); if (f != this->font_descriptor()) { this->font_descriptor(f); fl_xfont = f->font->fonts[0]; @@ -606,12 +607,12 @@ void Fl_Xlib_Graphics_Driver::font_unscaled(Fl_Font fnum, Fl_Fontsize size) { } int Fl_Xlib_Graphics_Driver::height_unscaled() { - if (font_descriptor()) return font_descriptor()->font->ascent + font_descriptor()->font->descent; + if (font_descriptor()) return ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->ascent + ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->descent; else return -1; } int Fl_Xlib_Graphics_Driver::descent_unscaled() { - if (font_descriptor()) return font_descriptor()->font->descent; + if (font_descriptor()) return ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->descent; else return -1; } @@ -621,12 +622,12 @@ Fl_Fontsize Fl_Xlib_Graphics_Driver::size_unscaled() { } double Fl_Xlib_Graphics_Driver::width_unscaled(const char* c, int n) { - if (font_descriptor()) return (double) XUtf8TextWidth(font_descriptor()->font, c, n); + if (font_descriptor()) return (double) XUtf8TextWidth(((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, c, n); else return -1; } double Fl_Xlib_Graphics_Driver::width_unscaled(unsigned int c) { - if (font_descriptor()) return (double) XUtf8UcsWidth(font_descriptor()->font, c); + if (font_descriptor()) return (double) XUtf8UcsWidth(((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, c); else return -1; } @@ -634,11 +635,11 @@ void Fl_Xlib_Graphics_Driver::text_extents_unscaled(const char *c, int n, int &d if (font_gc != gc_) { if (!font_descriptor()) font(FL_HELVETICA, FL_NORMAL_SIZE); font_gc = gc_; - XSetFont(fl_display, gc_, font_descriptor()->font->fid); + XSetFont(fl_display, gc_, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->fid); } int xx, yy, ww, hh; xx = yy = ww = hh = 0; - if (gc_) XUtf8_measure_extents(fl_display, fl_window, font_descriptor()->font, gc_, &xx, &yy, &ww, &hh, c, n); + if (gc_) XUtf8_measure_extents(fl_display, fl_window, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, gc_, &xx, &yy, &ww, &hh, c, n); W = ww; H = hh; dx = xx; dy = yy; // This is the safe but mostly wrong thing we used to do... @@ -652,9 +653,9 @@ void Fl_Xlib_Graphics_Driver::draw_unscaled(const char* c, int n, int x, int y) if (font_gc != gc_) { if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE); font_gc = gc_; - XSetFont(fl_display, gc_, font_descriptor()->font->fid); + XSetFont(fl_display, gc_, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->fid); } - if (gc_) XUtf8DrawString(fl_display, fl_window, font_descriptor()->font, gc_, x+offset_x_, y+offset_y_, c, n); + if (gc_) XUtf8DrawString(fl_display, fl_window, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, gc_, x+offset_x_, y+offset_y_, c, n); } void Fl_Xlib_Graphics_Driver::draw_unscaled(int angle, const char *str, int n, int x, int y) { @@ -673,14 +674,14 @@ void Fl_Xlib_Graphics_Driver::rtl_draw_unscaled(const char* c, int n, int x, int if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE); font_gc = gc_; } - if (gc_) XUtf8DrawRtlString(fl_display, fl_window, font_descriptor()->font, gc_, x+offset_x_, y+offset_y_, c, n); + if (gc_) XUtf8DrawRtlString(fl_display, fl_window, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, gc_, x+offset_x_, y+offset_y_, c, n); } float Fl_Xlib_Graphics_Driver::scale_font_for_PostScript(Fl_Font_Descriptor *desc, int s) { float ps_size = (float) s; // Non-Xft fonts can be smaller than required. // Set the PostScript font size to the display font height - char *name = desc->font->font_name_list[0]; + char *name = ((Fl_Xlib_Font_Descriptor*)desc)->font->font_name_list[0]; char *p = strstr(name, "--"); if (p) { sscanf(p + 2, "%f", &ps_size); diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx index 5bda05e5c..e5d62492a 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx @@ -695,13 +695,9 @@ puts("Font Opened"); fflush(stdout); } } // end of fontopen -Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize, int fangle) { +Fl_Xlib_Font_Descriptor::Fl_Xlib_Font_Descriptor(const char* name, Fl_Fontsize fsize, int fangle) : Fl_Font_Descriptor(name, fsize) { // encoding = fl_encoding_; - size = fsize; angle = fangle; -#if HAVE_GL - listbase = 0; -#endif // HAVE_GL font = fontopen(name, fsize, false, angle); } @@ -729,7 +725,7 @@ static const wchar_t *utf8reformat(const char *str, int& n) return buffer; } -static void utf8extents(Fl_Font_Descriptor *desc, const char *str, int n, XGlyphInfo *extents) +static void utf8extents(Fl_Xlib_Font_Descriptor *desc, const char *str, int n, XGlyphInfo *extents) { memset(extents, 0, sizeof(XGlyphInfo)); const wchar_t *buffer = utf8reformat(str, n); @@ -741,26 +737,26 @@ static void utf8extents(Fl_Font_Descriptor *desc, const char *str, int n, XGlyph } int Fl_Xlib_Graphics_Driver::height_unscaled() { - if (font_descriptor()) return font_descriptor()->font->ascent + font_descriptor()->font->descent; + if (font_descriptor()) return ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->ascent + ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->descent; else return -1; } int Fl_Xlib_Graphics_Driver::descent_unscaled() { - if (font_descriptor()) return font_descriptor()->font->descent; + if (font_descriptor()) return ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font->descent; else return -1; } double Fl_Xlib_Graphics_Driver::width_unscaled(const char* str, int n) { if (!font_descriptor()) return -1.0; XGlyphInfo i; - utf8extents(font_descriptor(), str, n, &i); + utf8extents((Fl_Xlib_Font_Descriptor*)font_descriptor(), str, n, &i); return i.xOff; } static double fl_xft_width(Fl_Font_Descriptor *desc, FcChar32 *str, int n) { if (!desc) return -1.0; XGlyphInfo i; - XftTextExtents32(fl_display, desc->font, str, n, &i); + XftTextExtents32(fl_display, ((Fl_Xlib_Font_Descriptor*)desc)->font, str, n, &i); return i.xOff; } @@ -776,7 +772,7 @@ void Fl_Xlib_Graphics_Driver::text_extents_unscaled(const char *c, int n, int &d return; } XGlyphInfo gi; - utf8extents(font_descriptor(), c, n, &gi); + utf8extents((Fl_Xlib_Font_Descriptor*)font_descriptor(), c, n, &gi); w = gi.width; h = gi.height; @@ -818,9 +814,9 @@ void Fl_Xlib_Graphics_Driver::draw_unscaled(const char *str, int n, int x, int y const wchar_t *buffer = utf8reformat(str, n); #ifdef __CYGWIN__ - XftDrawString16(draw_, &color, font_descriptor()->font, x+offset_x_*scale_+line_delta_, y+offset_y_*scale_+line_delta_, (XftChar16 *)buffer, n); + XftDrawString16(draw_, &color, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, x+offset_x_*scale_+line_delta_, y+offset_y_*scale_+line_delta_, (XftChar16 *)buffer, n); #else - XftDrawString32(draw_, &color, font_descriptor()->font, x+offset_x_*scale_+line_delta_, y+offset_y_*scale_+line_delta_, (XftChar32 *)buffer, n); + XftDrawString32(draw_, &color, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, x+offset_x_*scale_+line_delta_, y+offset_y_*scale_+line_delta_, (XftChar32 *)buffer, n); #endif } } @@ -862,7 +858,7 @@ void Fl_Xlib_Graphics_Driver::drawUCS4(const void *str, int n, int x, int y) { color.color.blue = ((int)b)*0x101; color.color.alpha = 0xffff; - XftDrawString32(draw_, &color, font_descriptor()->font, x+offset_x_*scale_+line_delta_, y+offset_y_*scale_+line_delta_, (FcChar32 *)str, n); + XftDrawString32(draw_, &color, ((Fl_Xlib_Font_Descriptor*)font_descriptor())->font, x+offset_x_*scale_+line_delta_, y+offset_y_*scale_+line_delta_, (FcChar32 *)str, n); } @@ -998,7 +994,7 @@ float Fl_Xlib_Graphics_Driver::scale_bitmap_for_PostScript() { return 2; } -Fl_Font_Descriptor::~Fl_Font_Descriptor() { +Fl_Xlib_Font_Descriptor::~Fl_Xlib_Font_Descriptor() { if (this == fl_graphics_driver->font_descriptor()) fl_graphics_driver->font_descriptor(NULL); // XftFontClose(fl_display, font); } @@ -1019,18 +1015,18 @@ static void fl_xft_font(Fl_Xlib_Graphics_Driver *driver, Fl_Font fnum, Fl_Fontsi driver->Fl_Graphics_Driver::font(0, 0); return; } - Fl_Font_Descriptor* f = driver->font_descriptor(); + Fl_Xlib_Font_Descriptor* f = (Fl_Xlib_Font_Descriptor*)driver->font_descriptor(); if (fnum == driver->Fl_Graphics_Driver::font() && size == driver->size_unscaled() && f && f->angle == angle) return; driver->Fl_Graphics_Driver::font(fnum, size); Fl_Fontdesc *font = fl_fonts + fnum; // search the fontsizes we have generated already - for (f = font->first; f; f = f->next) { + for (f = (Fl_Xlib_Font_Descriptor*)font->first; f; f = (Fl_Xlib_Font_Descriptor*)f->next) { if (f->size == size && f->angle == angle)// && !strcasecmp(f->encoding, fl_encoding_)) break; } if (!f) { - f = new Fl_Font_Descriptor(font->name, size, angle); + f = new Fl_Xlib_Font_Descriptor(font->name, size, angle); f->next = font->first; font->first = f; } @@ -1202,6 +1198,7 @@ PangoContext *Fl_Xlib_Graphics_Driver::context() { return pctxt_; } + void Fl_Xlib_Graphics_Driver::font_unscaled(Fl_Font fnum, Fl_Fontsize size) { if (!size) return; if (size < 0) { @@ -1215,7 +1212,7 @@ void Fl_Xlib_Graphics_Driver::font_unscaled(Fl_Font fnum, Fl_Fontsize size) { pfd_ = pango_font_description_from_string(Fl::get_font_name(fnum)); pango_font_description_set_absolute_size(pfd_, size*PANGO_SCALE); // 1.8 if (!pctxt_) context(); - Fl_Font_Descriptor *fd = font_descriptor(); + Fl_Xlib_Font_Descriptor *fd = (Fl_Xlib_Font_Descriptor*)font_descriptor(); if (!fd->height_) { PangoFont *pfont = pango_font_map_load_font(pfmap_, pctxt_, pfd_); PangoRectangle logical_rect; @@ -1339,7 +1336,7 @@ void Fl_Xlib_Graphics_Driver::text_extents_unscaled(const char *str, int n, int } int Fl_Xlib_Graphics_Driver::height_unscaled() { - if (font_descriptor()) return font_descriptor()->height_; + if (font_descriptor()) return ((Fl_Xlib_Font_Descriptor*)font_descriptor())->height_; else return -1; } @@ -1350,7 +1347,7 @@ double Fl_Xlib_Graphics_Driver::width_unscaled(unsigned int c) { } int Fl_Xlib_Graphics_Driver::descent_unscaled() { - if (font_descriptor()) return font_descriptor()->descent_; + if (font_descriptor()) return ((Fl_Xlib_Font_Descriptor*)font_descriptor())->descent_; else return -1; } @@ -1433,13 +1430,9 @@ int Fl_Xlib_Graphics_Driver::get_font_sizes(Fl_Font fnum, int*& sizep) { return 1; } -Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, Fl_Fontsize fsize, int fangle) { +Fl_Xlib_Font_Descriptor::Fl_Xlib_Font_Descriptor(const char* name, Fl_Fontsize fsize, int fangle) : Fl_Font_Descriptor(name, fsize) { fl_open_display(); - size = fsize; angle = fangle; -#if HAVE_GL - listbase = 0; -#endif // HAVE_GL height_ = 0; descent_ = 0; } |
