summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fl_font_xft.cxx31
1 files changed, 14 insertions, 17 deletions
diff --git a/src/fl_font_xft.cxx b/src/fl_font_xft.cxx
index 52894acc4..35488f291 100644
--- a/src/fl_font_xft.cxx
+++ b/src/fl_font_xft.cxx
@@ -110,8 +110,6 @@ Fl_Fontdesc* fl_fonts = built_in_table;
#define current_font (fl_graphics_driver->font_descriptor()->font)
-static Fl_Font fl_font_ = 0;
-static Fl_Fontsize fl_size_ = 0;
Fl_XFont_On_Demand fl_xfont;
void *fl_xftfont = 0;
//const char* fl_encoding_ = "iso8859-1";
@@ -119,13 +117,13 @@ const char* fl_encoding_ = "iso10646-1";
static void fl_font(Fl_Font fnum, Fl_Fontsize size, int angle) {
if (fnum==-1) { // special case to stop font caching
- fl_font_ = 0; fl_size_ = 0;
+ fl_graphics_driver->Fl_Graphics_Driver::font(0, 0);
return;
}
Fl_Font_Descriptor* f = fl_graphics_driver->font_descriptor();
- if (fnum == fl_font_ && size == fl_size_ && f && f->angle == angle)
+ if (fnum == fl_graphics_driver->font() && size == fl_graphics_driver->size() && f && f->angle == angle)
return;
- fl_font_ = fnum; fl_size_ = size;
+ fl_graphics_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) {
@@ -148,7 +146,6 @@ static void fl_font(Fl_Font fnum, Fl_Fontsize size, int angle) {
void Fl_Xlib_Graphics_Driver::font(Fl_Font fnum, Fl_Fontsize size) {
fl_font(fnum,size,0);
- Fl_Graphics_Driver::font(fl_font_, fl_size_);
}
static XftFont* fontopen(const char* name, bool core, int angle) {
@@ -228,7 +225,7 @@ static XftFont* fontopen(const char* name, bool core, int angle) {
// Construct a match pattern for the font we want...
XftPatternAddInteger(fnt_pat, XFT_WEIGHT, weight);
XftPatternAddInteger(fnt_pat, XFT_SLANT, slant);
- XftPatternAddDouble (fnt_pat, XFT_PIXEL_SIZE, (double)fl_size_);
+ XftPatternAddDouble (fnt_pat, XFT_PIXEL_SIZE, (double)fl_graphics_driver->size());
XftPatternAddString (fnt_pat, XFT_ENCODING, fl_encoding_);
// rotate font if angle!=0
@@ -288,7 +285,7 @@ static XftFont* fontopen(const char* name, bool core, int angle) {
// last chance, just open any font in the right size
the_font = XftFontOpen (fl_display, fl_screen,
XFT_FAMILY, XftTypeString, "sans",
- XFT_SIZE, XftTypeDouble, (double)fl_size_,
+ XFT_SIZE, XftTypeDouble, (double)fl_graphics_driver->size(),
NULL);
XftPatternDestroy(fnt_pat);
if (!the_font) {
@@ -340,7 +337,6 @@ puts("Font Opened"); fflush(stdout);
Fl_Font_Descriptor::Fl_Font_Descriptor(const char* name, int fangle) {
// encoding = fl_encoding_;
- size = fl_size_;
angle = fangle;
#if HAVE_GL
listbase = 0;
@@ -458,13 +454,14 @@ void fl_text_extents(const char *c, int n, int &dx, int &dy, int &w, int &h) {
// well for the fltk "built-in" font names.
static XFontStruct* load_xfont_for_xft2(void) {
XFontStruct* xgl_font = 0;
- int size = fl_size_;
+ int size = fl_graphics_driver->size();
+ int fnum = fl_graphics_driver->font();
const char *wt_med = "medium";
const char *wt_bold = "bold";
const char *weight = wt_med; // no specifc weight requested - accept any
char slant = 'r'; // regular non-italic by default
char xlfd[128]; // we will put our synthetic XLFD in here
- char *pc = strdup(fl_fonts[fl_font_].name); // what font were we asked for?
+ char *pc = strdup(fl_fonts[fnum].name); // what font were we asked for?
const char *name = pc; // keep a handle to the original name for freeing later
// Parse the "fltk-name" of the font
switch (*name++) {
@@ -531,11 +528,11 @@ XFontStruct* fl_xxfont() {
static int glsize = 0;
static int glfont = -1;
// Do we need to load a new font?
- if ((!xgl_font) || (glsize != fl_size_) || (glfont != fl_font_)) {
+ if ((!xgl_font) || (glsize != fl_graphics_driver->size()) || (glfont != fl_graphics_driver->font())) {
// create a dummy XLFD for some font of the appropriate size...
if (xgl_font) XFreeFont(fl_display, xgl_font); // font already loaded, free it - this *might* be a Bad Idea
- glsize = fl_size_; // record current font size
- glfont = fl_font_; // and face
+ glsize = fl_graphics_driver->size(); // record current font size
+ glfont = fl_graphics_driver->font(); // and face
xgl_font = load_xfont_for_xft2();
}
return xgl_font;
@@ -543,7 +540,7 @@ XFontStruct* fl_xxfont() {
if (current_font->core) return current_font->u.core.font; // is the current font a "core" font? If so, use it.
static XftFont* xftfont;
if (xftfont) XftFontClose (fl_display, xftfont);
- xftfont = fontopen(fl_fonts[fl_font_].name, true); // else request XFT to load a suitable "core" font instead.
+ xftfont = fontopen(fl_fonts[fl_graphics_driver->font()].name, true); // else request XFT to load a suitable "core" font instead.
return xftfont->u.core.font;
# endif // XFT_MAJOR > 1
}
@@ -624,9 +621,9 @@ void Fl_Xlib_Graphics_Driver::draw(const char *str, int n, int x, int y) {
}
void Fl_Xlib_Graphics_Driver::draw(int angle, const char *str, int n, int x, int y) {
- fl_font(fl_font_, fl_size_, angle);
+ fl_font(fl_graphics_driver->font(), fl_graphics_driver->size(), angle);
fl_draw(str, n, (int)x, (int)y);
- fl_font(fl_font_, fl_size_);
+ fl_font(fl_graphics_driver->font(), fl_graphics_driver->size());
}
static void fl_drawUCS4(const FcChar32 *str, int n, int x, int y) {