From dd3485c57a0ef7ffa5e00edc9fb9937004f3ca54 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Mon, 3 Feb 2020 16:35:28 +0100 Subject: 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. --- src/Fl_Graphics_Driver.cxx | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'src') 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;} -- cgit v1.2.3