summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlbrecht Schlosser <albrechts.fltk@online.de>2020-02-03 16:35:28 +0100
committerAlbrecht Schlosser <albrechts.fltk@online.de>2020-02-03 16:35:28 +0100
commitdd3485c57a0ef7ffa5e00edc9fb9937004f3ca54 (patch)
tree7b48142d1eec3e61318e9de4f9b3addfc688bfd7
parentb8ab77e39c01b9019edaeaa09d5d08c7b21f75ab (diff)
Fix regression calling fl_font() w/o draw context
According to the documentation fl_font(face, size) may be called "outside a draw context if necessary to call fl_width()". This worked in 1.3.5 but did not in 1.4 (so far). I reworded the docs to make clear that other measurement functions can be called as well and refactored the code to make sure that fl_font(face, size) will open the display if necessary.
-rw-r--r--FL/fl_draw.H11
-rw-r--r--src/Fl_Graphics_Driver.cxx16
2 files changed, 19 insertions, 8 deletions
diff --git a/FL/fl_draw.H b/FL/fl_draw.H
index 6854bcc7c..04d3b14d6 100644
--- a/FL/fl_draw.H
+++ b/FL/fl_draw.H
@@ -574,16 +574,11 @@ FL_EXPORT void fl_rescale_offscreen(Fl_Offscreen &ctx);
/* NOTE: doxygen comments here to avoid triplication in os-specific sources */
// Fonts:
-/**
+/*
Sets the current font, which is then used in various drawing routines.
- You may call this outside a draw context if necessary to call fl_width(),
- but on X this will open the display.
-
- The font is identified by a \p face and a \p size.
- The size of the font is measured in pixels and not "points".
- Lines should be spaced \p size pixels apart or more.
+ Implemented and documented in src/Fl_Graphics_Driver.cxx
*/
-inline void fl_font(Fl_Font face, Fl_Fontsize fsize) { fl_graphics_driver->font(face,fsize); }
+void fl_font(Fl_Font face, Fl_Fontsize fsize);
/**
Returns the \p face set by the most recent call to fl_font().
diff --git a/src/Fl_Graphics_Driver.cxx b/src/Fl_Graphics_Driver.cxx
index 0fbe80106..3d1b720cd 100644
--- a/src/Fl_Graphics_Driver.cxx
+++ b/src/Fl_Graphics_Driver.cxx
@@ -557,6 +557,22 @@ void Fl_Graphics_Driver::rtl_draw(const char *str, int nChars, int x, int y) {
/** Returns non-zero if the graphics driver possesses the \p feature */
int Fl_Graphics_Driver::has_feature(driver_feature feature) { return 0; }
+/**
+ Sets the current font, which is then used in various drawing routines.
+ You may call this outside a draw context if necessary to measure text,
+ for instance by calling fl_width(), fl_measure(), or fl_text_extents(),
+ but on X this will open the display.
+
+ The font is identified by a \p face and a \p size.
+ The size of the font is measured in pixels and not "points".
+ Lines should be spaced \p size pixels apart or more.
+*/
+void fl_font(Fl_Font face, Fl_Fontsize fsize) {
+ if (!fl_graphics_driver)
+ fl_open_display();
+ fl_graphics_driver->font(face, fsize);
+}
+
/** see fl_font(Fl_Font, Fl_Fontsize) */
void Fl_Graphics_Driver::font(Fl_Font face, Fl_Fontsize fsize) {font_ = face; size_ = fsize;}