fltk/CHANGES.txt

313 lines
18 KiB
Plaintext

Changes in FLTK 1.4.0 Released: Feb ?? 2024
General Information about this Release
- FLTK 1.4.0 is based on FLTK 1.3.4 (released Nov 15 2016),
see CHANGES_1.3.txt for more information.
- CMake is the primary supported build system in FLTK 1.4.0 and later.
CMake can be used to generate Makefiles, IDE project files, and
several other build systems by using different "generators" provided
by CMake (for instance Ninja, CodeBlocks, Eclipse, KDevelop3, Xcode, etc.).
FLTK uses "Modern CMake" since release 1.4.0 which simplifies user
project build systems significantly.
See README.CMake.txt and documentation chapter "Migrating Code from
FLTK 1.3 to 1.4" for more information.
- autoconf/configure is still supported by the FLTK team for backwards
compatibility with older systems that lack CMake support. Support of
autoconf/configure will be dropped in FLTK 1.5.0.
- FLTK 1.4 introduces a new platform, Wayland, available for recent Linux
distributions and FreeBSD. For details see README.Wayland.txt.
New Features and Extensions
- X11 and Wayland platforms: Added support of HiDPI displays. FLTK apps
detect the current display scaling factor and use it to scale all windows.
- MSWindows platform: FLTK applications detect the display scaling factor and
automatically scale their GUI accordingly. This effectively renders WIN32
FLTK apps "per-monitor DPI-aware" whereas they were "DPI-unaware" before.
- Dynamical GUI rescaling: it is possible on all platforms to rescale all
FLTK windows mapped to a screen by typing ctrl-'+' (enlarge), ctrl-'-'
(shrink) or ctrl-'0' (back to starting scaling factor value). Under macOS,
the corresponding keystrokes are cmd-'+', cmd-'-', cmd-'0'. The resulting
GUI scaling factor (e.g., 170 %) transiently appears in a yellow popup window.
Use new Fl::option() item OPTION_SHOW_SCALING to turn on/off these popups.
Windows moved between screens adjust to the scaling factor of their screen.
This supports desktops mixing screens with distinct resolutions.
In addition, use environment variable FLTK_SCALING_FACTOR to further adjust
the starting scaling factor of all FLTK apps.
- New Fl_Grid class to layout multiple columns and rows of widgets.
- New Fl_Flex class to layout one row or one column of widgets.
- New Fl_Terminal widget supporting Unicode/utf-8, ANSI/xterm escape codes
with full RGB color control.
- New Fl::keyboard_screen_scaling(0) call stops recognition of ctrl/+/-/0/
keystrokes as scaling all windows of a screen.
- New member function Fl_Image::scale(int width, int height) to set
the drawing size of an image independently from its data size. The
same function was previously available only for class Fl_Shared_Image
and with FL_ABI_VERSION >= 10304. New member functions Fl_Image::data_w()
and Fl_Image::data_h() give the width and height of the image data.
- New member functions Fl_Widget::bind_image(Fl_Image *img) and
Fl_Widget::bind_deimage(Fl_Image *img) to bind an image to a widget, that is,
to set an image to be used as part of the widget label and also
to be deleted when the widget is deleted.
- New Fl_SVG_Image class: gives support of scalable vector graphics images
to FLTK using the nanosvg software.
- New Fl_ICO_Image class to read Windows .ico icon files.
- New classes Fl_PDF_File_Surface, Fl_SVG_File_Surface and Fl_EPS_File_Surface
to save any FLTK graphics to PDF, SVG or EPS files, respectively.
- New member functions Fl_Window::maximize(), Fl_Window::un_maximize() and
Fl_Window::maximize_active() to programmatically manage window maximization.
- Fl_Button now supports a compact flag that visually groups closely set
buttons into keypads.
- Fl_Tabs widget now supports close buttons for individual tabs.
- Fl_Tabs widget now supports four different modes for handling an
overflowing number of tabs.
- Windows platform: added support for using a manifest to set the
application's level of DPI awareness (issue #309).
- class Fl_Native_File_Chooser on the X11/Wayland platform relies on external
commands zenity (PR #599), or kdialog (issue #278), or on the GTK library
to construct file dialogs. New "Preview" switch added to the GTK dialog.
The libgtk-based dialog uses in priority the file chooser dialog
of GTK version 3 when available on the running platform, and falls back
to version 2 when V3 is not available. In contrast, GTK version 2 was used
in priority by FLTK 1.3.x. New FL::option() item OPTION_FNFC_USES_ZENITY
to turn on/off use of zenity-based file dialogs.
- The undocumented feature FLTK_CONSOLIDATE_MOTION is now OFF on X11 and
removed on macOS. In FLTK 1.3 this feature has been ON on X11. The macro can now
be set on the compiler commandline and can be used to reduce the number
of mouse move events sent to the application but it may be unreliable.
Recommendation: let it switched OFF unless you really need it.
- New function fl_capture_window() to capture the content of a rectangular
zone of a mapped window and return it as an Fl_RGB_Image. It improves
with HighDPI displays what can be done with fl_read_image().
- The Windows platform now draws oblique and curved lines in antialiased
form. The new function void fl_antialias(int state); allows to turn off
or on such antialiased drawing. The new function int fl_antialias(); returns
whether line and curve drawing is currently antialiased.
- The border radius of "rounded" box types can be limited and
the shadow width of "shadow" box types can be configured (issue #130).
See Fl::box_border_radius_max() and Fl::box_shadow_width().
- New fl_putenv() is a cross-platform putenv() wrapper (see docs).
- New public variable Fl_Image::register_images_done allows an app. to detect
whether function fl_register_images() has been called.
- Fix Fl::add_timeout() under Linux (STR 3516).
- Fix early timeouts in Fl_Clock seen in some environments (STR 3516).
- Fl_Printer::begin_job() uses by default the Gnome print dialog on the X11
platform when the GTK library is available at run-time. That can be turned off
with Fl::option(OPTION_PRINTER_USES_GTK, false).
- New member functions Fl_Paged_Device::begin_job() and begin_page()
replace start_job() and start_page(). The start_... names are maintained
for API compatibility.
- OpenGL draws text using textures on all platforms, when the necessary
hardware support is present (a backup mechanism is available in absence
of this support). Thus, all text drawable in Fl_Window's can be drawn
in Fl_Gl_Window's (STR#3450).
- New member function Fl_Menu_Bar::play_menu(const char *title) to
programmatically open a menu of a menubar.
- New member functions Fl::program_should_quit(void),
and Fl::program_should_quit(int) to support detection by the library
of a request to terminate cleanly the program.
- MacOS platform: the processing of the application menu's "Quit" item
has been changed. With FLTK 1.3.x, the application terminated when all
windows were closed even before Fl::run() or Fl::wait() could return.
With FLTK 1.4, Fl::run() returns so the app follows its normal termination path.
- FLTK apps on the MacOS platform contain automatically a Window menu, which,
under MacOS ≥ 10.12, allows to group/ungroup windows in tabbed form. The new
Fl_Sys_Menu_Bar::window_menu_style() function allows to specify various
styles for the Window menu, even not to create it.
- New function: int fl_open_ext(const char* fname, int binary, int oflags, ...)
to control the opening of files in binary/text mode in a cross-platform way.
- Fix for issue #247 : loading SVG image with BOM.
- Fl_Text_Selection got a new method length() and returns 0 in length()
and in all offsets (start(), end(), position()) if no text is selected
(selected() == false). The behavior in FLTK 1.3 and earlier versions
(returning undefined values if !selected()) was confusing.
- New method Fl_Group::bounds() replaces Fl_Group::sizes() which is now
deprecated. Fl_Group::bounds() uses the new class Fl_Rect that contains
widget coordinates and sizes x(), y(), w(), and h() (STR #3385).
Documentation for bounds() and its internal structure was added.
- New method shadow(int) allows to disable the shadows of the hands
of Fl_Clock, Fl_Clock_Output, and derived widgets.
- New method Fl_Tabs::tab_align() allows to set alignment of tab labels,
particularly to support icons on tab labels (STR #3076).
- Added Fl_Surface_Device::push_current(new_surface) and
Fl_Surface_Device::pop_current() to set/unset the current surface
receiving graphics commands.
- New macros for easy function and method callbacks with multiple
type safe arguments (see FL_METHOD_CALLBACK_1 etc.) .
Removed Features
- X11 platform: Support of XDBE, the configure option '--enable-xdbe'
and the CMake option 'OPTION_USE_XDBE' have been removed because XDBE
was unreliable and rarely supported by X servers. Double buffering
support in Fl_Double_Window is not affected.
New Configuration Options (ABI Version)
- X11 platform: Added support for drawing text with the pango library
which allows to draw most scripts supported by Unicode, including CJK
and right-to-left scripts. FLTK now outputs PostScript that draws
those scripts in vectorial form. The corresponding CMake option is
FLTK_USE_PANGO. The corresponding configure option is --enable-pango.
This option is OFF by default.
- Configure option --enable-wayland allows to build the FLTK library for
the new Wayland platform while remaining compatible with X11. The
corresponding CMake option is FLTK_BACKEND_WAYLAND. This option is ON by default.
- Configure options --enable-wayland --disable-x11 used together allow to
build FLTK for the Wayland backend only (no x11 backend). Under CMake, the
equivalent option is to set FLTK_BACKEND_WAYLAND=ON and FLTK_BACKEND_X11=OFF.
- The new configure option --disable-gdiplus removes the possibility to draw
antialiased lines and curves on the Windows platform. The corresponding CMake
option is FLTK_GRAPHICS_GDIPLUS.
- The library can be built without support for reading SVG images or writing
graphics in SVG format using the --disable-svg configure option
or turning off FLTK_OPTION_SVG in CMake.
- The library can be built without support for PostScript, thus reducing
its size, using the --disable-print configure option or turning off
FLTK_OPTION_PRINT_SUPPORT in CMake. That makes classes Fl_PostScript_File_Device,
Fl_EPS_File_Surface and Fl_Printer (under X11 platform only) ineffective.
- FLTK's ABI version can be configured with 'configure' and CMake.
See documentation in README.abi-version.txt.
Bundled libraries
- Bundled image libraries have been upgraded to newer versions.
For details see documentation/src/bundled-libs.dox or online docs.
1.4.0 ABI FEATURES
- None. FLTK 1.4.0 has a new ABI, breaking 1.3.x ABI.
Other Improvements
- (add new items here)
- Added support of macOS 15.0 beta "Sequoia", 14.0 "Sonoma",
13.0 "Ventura", 12.0 "Monterey", and 11.0 "Big Sur".
- Added macOS support for the arm64 architecture since 11.0 (Big Sur).
- Added support for macOS 10.15 "Catalina"
- Added support for macOS 10.14 "Mojave": all drawing to windows is done
through "layer-backed views" when the app is linked to SDK 10.14.
- Added support for macOS 10.13 "High Sierra".
- Fixed X11 Input Method window badly positioned with Fl_Text_Editor
widget (issue #270).
- Fixed X11 copy-paste and drag-and-drop target selection (issue #182).
This fix has been backported to 1.3.6 as well.
- Add optional argument to Fl_Printer::begin_job() to receive
a string describing the error when an error occurs.
- Fix Windows-specific bug when the program tries to enlarge a
maximized window, that would freeze the window (git issue #65).
- Improve X11 16-bit coordinate clipping for text (STR 2798). This
assumes that text is "small" WRT 16-bit coordinate space and clips
text if at least one of the x/y coordinates is out of bounds.
- Fix Fl::add_timeout() in draw() under Linux (STR 3188)
- Improved documentation for '@' symbols in labels (STR #2940).
- Fl_Roller can now be controlled via the mouse wheel (STR #3120).
- Tooltips hide by themselves after 12 seconds (STR #2584).
- Added widget visibility indicator to Fluid (STR #2669).
- Improved shell script support in FLUID
- Improved constructor for creating Fl_Preferences files with flags for the
correct locale and for overwriting existing files.
- Added Fl_Input_::append() method (STR #2953).
- Fix for STR#3473 (and its duplicate STR#3507) to restore configure-based
builds on recent Linux/Unix distributions where the freetype-config
command has been replaced by pkg-config.
- MacOS ≥ 10.10: Fl_Window::fullscreen() and fullscreen_off() no longer
proceed by Fl_Window::hide() + Fl_Window::show() but essentially
resize the window, as done on the X11+EWMH and Windows platforms.
- Fl_Cairo_Window constructors are now compatible with Fl_Double_Window
constructors - fixed missing constructors (STR #3160).
- The include file for platform specific functions and definitions
(FL/x.H) has been replaced with FL/platform.H. FL/x.H is deprecated
but still available for backwards compatibility (STR #3435).
FL/x.H will be removed in a (not yet specified) future FLTK release.
We recommend to change your #include statements accordingly.
- The Fl_Boxtype and Fl_Labeltype definitions contained enum values
(names) with a leading underscore (e.g. _FL_MULTI_LABEL) that had to
be used in this form. Now all boxtypes and labeltypes can and should
be used without the leading underscore. A note was added to the enum
documentations to make clear that the leading underscore must not be
used in user code, although the enum documentation still contains
leading underscores for technical reasons (internal use).
- The blocks demo program got a new keyboard shortcut (ALT+SHIFT+H) to
reset the user's high score. It is now slower than before in higher
levels, hence you can expect higher scores (due to a bug fix in the
timer code). You can use the '+' key to increase the level at all times.
- Some methods of Fl_Tabs are now virtual and/or protected for easier
subclassing without code duplication (STR #3211 and others).
To be continued...
- Separated Fl_Input_Choice.H and Fl_Input_Choice.cxx (STR #2750, #2752).
- Separated Fl_Spinner.H and Fl_Spinner.cxx (STR #2776).
- New method Fl_Spinner::wrap(int) allows to set wrap mode at bounds if
value is changed by pressing or holding one of the buttons (STR #3365).
- Fl_Spinner now handles Up and Down keys when the input field has
keyboard focus (STR #2989).
- Renamed test/help.cxx demo program to test/help_dialog.cxx to avoid
name conflict with CMake's auto-generated target 'help'.
- Fl_Menu_Bar: left and right arrow keys now wrap to the menu at the
other end of the menubar when pressed in the first (resp. last) menu.
- Many documentation fixes, clarifications, and enhancements.
Bug Fixes
- (add new items here)
- Fixed all Pixmaps to be '*const' (STR #3108).
- Fixed Fl_Text_Editor selection range after paste (STR #3248).
- Fixed crash for very small Fl_Color_Chooser (STR #3490).
- Removed all shadow lint in header files (STR #2714).
- Fixed pulldown menu position when at the bottom of the screen (STR #2880).
- Fixed missing item handling in Fl_Check_Browser (STR #3480).
- Fixed Delete key in Fl_Input deleting entire widgets in Fluid (STR #2841).
- Reorganized Fluid Template feature (STR #3336).
- Updated Fluid documentation and image (STR #3328).
- FLUID recognizes `override` and `FL_OVERRIDE` keywords (Github #801)
- Duplicating Widget Class in Fluid no longer crashes (STR #3445).
- Fl_Check_Browser::add(item) now accepts NULL (STR #3498).
- Interface to set maximum width of spinner text field (STR #3386).
- Fl_Text_Display no longer wiggles (STR #2531).
- Fixed Help_View return value (STR #3430).
- Fix 'fluid.app' on case sensitive macOS (was: Fluid.app).
- Fix FL_PUSH event handling of Fl_Check_Browser (STR #3004).
- Fix a potential crash when a program exits before it opens a window
(Windows only, STR #3484).
- Fix Fl_PNG_Image error handling. An error was potentially caused
by error handling of the image library with setjmp/longjmp.
- Fix Fl_Browser background and text color parsing (STR #3376).
- Fix Windows CreateDC/DeleteDC mismatch (STR #3373).
- Fix Fl_Tabs label drawing for Fl_Window children (STR #3075).
- Fix line number alignment in Fl_Text_Display/Editor (STR #3363).
- Fix ignored buffer pre-allocation (requestedSize) in Fl_Text_Buffer.
See fltk.general "Fl_Text_Buffer constructor bug" on Dec 5, 2016.
- Fix build with configure --enable-cairo --enable-cairoext,
see this report in fltk.general:
https://groups.google.com/forum/#!topic/fltkgeneral/x80qQ6wt0s4
Removed Features
- Bundled IDE project files (Xcode and Visual Studio) have been
removed. Please use CMake to generate your IDE project files.
See README.CMake.txt for more information.
- Dropped FLTK 1.0 compatibility (macro FLTK_1_0_COMPAT). This "feature"
was no longer usable since FLTK 1.3, hence it can be dropped safely.
Changes in FLTK 1.3
See CHANGES_1.3.txt
Changes in FLTK 1.1
See CHANGES_1.1.txt
Changes in FLTK 1.0
See CHANGES_1.0.txt