diff options
| author | Manolo Gouy <Manolo> | 2016-09-23 13:56:07 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2016-09-23 13:56:07 +0000 |
| commit | 0250c5a98af506f2f107f8bd2e9e2c2c87a10c10 (patch) | |
| tree | 161771fa546b05f2d7fad1f5d67d831e00c6425c /src/drivers/Xlib | |
| parent | 63e33b1be3e2af253cd8adf10a5eac7e72a5fc7e (diff) | |
Move font-related member functions from Fl_Screen_Driver to Fl_Graphics_Driver.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11968 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/drivers/Xlib')
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H | 6 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx | 24 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx | 12 | ||||
| -rw-r--r-- | src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx | 9 |
4 files changed, 42 insertions, 9 deletions
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H index eda367e61..63671ef2c 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H @@ -151,6 +151,12 @@ protected: virtual float scale_bitmap_for_PostScript(); virtual void set_spot(int font, int size, int X, int Y, int W, int H, Fl_Window *win); 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); + virtual unsigned font_desc_size(); + virtual const char *font_name(int num); + virtual void font_name(int num, const char *name); + virtual Fl_Font set_fonts(const char* xstarname); protected: virtual void global_gc(); }; diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx index 523147248..bd39ecf5f 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx @@ -19,6 +19,7 @@ #include "../../config_lib.h" #include "Fl_Xlib_Graphics_Driver.H" +#include "Fl_Font.H" #include <FL/fl_draw.H> #include <FL/x.H> @@ -197,6 +198,29 @@ void Fl_Xlib_Graphics_Driver::set_spot(int font, int size, int X, int Y, int W, XFree(preedit_attr); } +unsigned Fl_Xlib_Graphics_Driver::font_desc_size() { + return (unsigned)sizeof(Fl_Fontdesc); +} + +const char *Fl_Xlib_Graphics_Driver::font_name(int num) { + return fl_fonts[num].name; +} + +void Fl_Xlib_Graphics_Driver::font_name(int num, const char *name) { + Fl_Fontdesc *s = fl_fonts + num; + if (s->name) { + if (!strcmp(s->name, name)) {s->name = name; return;} + if (s->xlist && s->n >= 0) XFreeFontNames(s->xlist); + for (Fl_Font_Descriptor* f = s->first; f;) { + Fl_Font_Descriptor* n = f->next; delete f; f = n; + } + s->first = 0; + } + s->name = name; + s->fontname[0] = 0; + s->xlist = 0; + s->first = 0; +} // // End of "$Id$". 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 d1f28e831..60ee51d28 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_x.cxx @@ -19,7 +19,6 @@ // Select fonts from the FLTK font table. #include "../../flstring.h" #include "Fl_Xlib_Graphics_Driver.H" -#include "../X11/Fl_X11_Screen_Driver.H" #include <FL/Fl.H> #include <FL/fl_draw.H> #include <FL/x.H> @@ -94,7 +93,7 @@ static int use_registry(const char *p) { #define ENDOFBUFFER 127 // sizeof(Fl_Font.fontname)-1 // turn a stored (with *'s) X font name into a pretty name: -const char* Fl_X11_Screen_Driver::get_font_name(Fl_Font fnum, int* ap) { +const char* Fl_Xlib_Graphics_Driver::get_font_name(Fl_Font fnum, int* ap) { Fl_Fontdesc *f = fl_fonts + fnum; if (!f->fontname[0]) { int type = 0; @@ -265,7 +264,12 @@ static int to_canonical(char *to, const char *from, size_t tolen) { static unsigned int fl_free_font = FL_FREE_FONT; -Fl_Font Fl_X11_Screen_Driver::set_fonts(const char* xstarname) { + +// This function fills in the fltk font table with all the fonts that +// are found on the X server. It tries to place the fonts into families +// and to sort them so the first 4 in a family are normal, bold, italic, +// and bold italic. +Fl_Font Fl_Xlib_Graphics_Driver::set_fonts(const char* xstarname) { if (fl_free_font > (unsigned)FL_FREE_FONT) // already been here return (Fl_Font)fl_free_font; fl_open_display(); @@ -318,7 +322,7 @@ Fl_Font Fl_X11_Screen_Driver::set_fonts(const char* xstarname) { return (Fl_Font)fl_free_font; } -int Fl_X11_Screen_Driver::get_font_sizes(Fl_Font fnum, int*& sizep) { +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 if (!s->xlist) { 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 0e5f8cb71..efc0d062d 100644 --- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx +++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver_font_xft.cxx @@ -19,7 +19,6 @@ // Select fonts from the FLTK font table. #include "../../flstring.h" #include "Fl_Xlib_Graphics_Driver.H" -#include "../X11/Fl_X11_Screen_Driver.H" #include <FL/Fl.H> #include <FL/fl_draw.H> #include <FL/x.H> @@ -44,7 +43,7 @@ #define USE_OVERLAY 0 // turn a stored font name in "fltk format" into a pretty name: -const char* Fl_X11_Screen_Driver::get_font_name(Fl_Font fnum, int* ap) { +const char* Fl_Xlib_Graphics_Driver::get_font_name(Fl_Font fnum, int* ap) { Fl_Fontdesc *f = fl_fonts + fnum; if (!f->fontname[0]) { const char* p = f->name; @@ -218,7 +217,7 @@ static int fl_free_font = FL_FREE_FONT; // Also, for now I'm ignoring the "pattern_name" and just getting everything... // AND I don't try and skip the fonts we've already loaded in the defaults. // Blimey! What a hack! -Fl_Font Fl_X11_Screen_Driver::set_fonts(const char* pattern_name) +Fl_Font Fl_Xlib_Graphics_Driver::set_fonts(const char* pattern_name) { FcFontSet *fnt_set; // Will hold the list of fonts we find FcPattern *fnt_pattern; // Holds the generic "match all names" pattern @@ -364,11 +363,11 @@ static int int_sort(const void *aa, const void *bb) { // Return all the point sizes supported by this font: // Suprisingly enough Xft works exactly like fltk does and returns // the same list. Except there is no way to tell if the font is scalable. -int Fl_X11_Screen_Driver::get_font_sizes(Fl_Font fnum, int*& sizep) { +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 - open_display(); + fl_open_display(); XftFontSet* fs = XftListFonts(fl_display, fl_screen, XFT_FAMILY, XftTypeString, s->name+1, (void *)0, |
