diff options
| author | Manolo Gouy <Manolo> | 2011-02-15 21:19:41 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2011-02-15 21:19:41 +0000 |
| commit | f924432dd556a49a01546d93d27a555c437b6141 (patch) | |
| tree | c57f23d81f67bf7ee8a9bf3b1b3157891c3ac2b4 /src | |
| parent | 01085aca4be7db9c45b8147e74423f8c024f679c (diff) | |
Changed fl_height(), fl_descent(), fl_width() and fl_text_extents() so they use the display
graphics driver even if fl_graphics_driver is another driver, say, to PostScript.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8432 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/fl_font_x.cxx | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/src/fl_font_x.cxx b/src/fl_font_x.cxx index 6c033f72c..c56bff7dc 100644 --- a/src/fl_font_x.cxx +++ b/src/fl_font_x.cxx @@ -86,8 +86,6 @@ Fl_Fontdesc* fl_fonts = built_in_table; #define MAXSIZE 32767 -#define current_font (fl_graphics_driver->font_descriptor()->font) - // return dash number N, or pointer to ending null if none: const char* fl_font_word(const char* p, int n) { while (*p) {if (*p=='-') {if (!--n) break;} p++;} @@ -281,35 +279,46 @@ void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) { } int fl_height() { - if (fl_graphics_driver->font_descriptor()) return (current_font->ascent + current_font->descent); + Fl_Graphics_Driver *driver = Fl_Display_Device::display_device()->driver(); + if (driver->font_descriptor()) { + XUtf8FontStruct *font = driver->font_descriptor()->font; + return (font->ascent + font->descent); + } else return -1; } int fl_descent() { - if (fl_graphics_driver->font_descriptor()) return current_font->descent; + Fl_Graphics_Driver *driver = Fl_Display_Device::display_device()->driver(); + if (driver->font_descriptor()) { + return driver->font_descriptor()->font->descent; + } else return -1; } double fl_width(const char* c, int n) { - if (fl_graphics_driver->font_descriptor()) return (double) XUtf8TextWidth(current_font, c, n); + Fl_Graphics_Driver *driver = Fl_Display_Device::display_device()->driver(); + if (driver->font_descriptor()) + return (double) XUtf8TextWidth(driver->font_descriptor()->font, c, n); else return -1; } double fl_width(unsigned int c) { - if (fl_graphics_driver->font_descriptor()) return (double) XUtf8UcsWidth(current_font, c); + Fl_Graphics_Driver *driver = Fl_Display_Device::display_device()->driver(); + if (driver->font_descriptor()) + return (double) XUtf8UcsWidth(driver->font_descriptor()->font, c); else return -1; } - void fl_text_extents(const char *c, int n, int &dx, int &dy, int &W, int &H) { + Fl_Graphics_Driver *driver = Fl_Display_Device::display_device()->driver(); if (font_gc != fl_gc) { - if (!fl_graphics_driver->font_descriptor()) fl_font(FL_HELVETICA, FL_NORMAL_SIZE); + if (!driver->font_descriptor()) driver->font(FL_HELVETICA, FL_NORMAL_SIZE); font_gc = fl_gc; - XSetFont(fl_display, fl_gc, current_font->fid); + XSetFont(fl_display, fl_gc, driver->font_descriptor()->font->fid); } int xx, yy, ww, hh; xx = yy = ww = hh = 0; - if (fl_gc) XUtf8_measure_extents(fl_display, fl_window, current_font, fl_gc, &xx, &yy, &ww, &hh, c, n); + if (fl_gc) XUtf8_measure_extents(fl_display, fl_window, driver->font_descriptor()->font, fl_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... @@ -319,26 +328,26 @@ void fl_text_extents(const char *c, int n, int &dx, int &dy, int &W, int &H) { // dy = fl_descent() - H; } // fl_text_extents - void Fl_Xlib_Graphics_Driver::draw(const char* c, int n, int x, int y) { if (font_gc != fl_gc) { - if (!fl_graphics_driver->font_descriptor()) fl_font(FL_HELVETICA, FL_NORMAL_SIZE); + if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE); font_gc = fl_gc; - XSetFont(fl_display, fl_gc, current_font->fid); + XSetFont(fl_display, fl_gc, font_descriptor()->font->fid); } - if (fl_gc) XUtf8DrawString(fl_display, fl_window, current_font, fl_gc, x, y, c, n); + if (fl_gc) XUtf8DrawString(fl_display, fl_window, font_descriptor()->font, fl_gc, x, y, c, n); } + void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) { fprintf(stderr,"ROTATING TEXT NOT IMPLEMENTED\n"); - fl_draw(str, n, (int)x, (int)y); + this->draw(str, n, (int)x, (int)y); } void Fl_Xlib_Graphics_Driver::rtl_draw(const char* c, int n, int x, int y) { if (font_gc != fl_gc) { - if (!fl_graphics_driver->font_descriptor()) fl_font(FL_HELVETICA, FL_NORMAL_SIZE); + if (!font_descriptor()) this->font(FL_HELVETICA, FL_NORMAL_SIZE); font_gc = fl_gc; } - if (fl_gc) XUtf8DrawRtlString(fl_display, fl_window, current_font, fl_gc, x, y, c, n); + if (fl_gc) XUtf8DrawRtlString(fl_display, fl_window, font_descriptor()->font, fl_gc, x, y, c, n); } #endif // FL_DOXYGEN // |
