[fpc-pascal] [ANN] fpGUI Toolkit v2.1.0 release
Graeme Geldenhuys
mailinglists at geldenhuys.co.uk
Mon Apr 27 19:34:55 CEST 2026
Hi everyone,
I'm happy to announce a huge new release of fpGUI — with some massive
improvements, new features, new applications and plenty of bug fixes.
https://github.com/graemeg/fpGUI
Feedback, bug reports, and questions are welcome as always. I mostly monitor
the GitHub bugtracker and the fpGUI support newsgroup - see website for
details.
== Build commands ==
Framework and applications can be built with PasBuild:
https://github.com/graemeg/PasBuild
* For Linux & FreeBSD
pasbuild compile -p unix (builds framework & tools)
* For Windows
pasbuild compile -p windows (builds framework & tools)
* For macOS
pasbuild compile -p macos (builds framework & tools)
== Changelog ==
v2.1.0 (2026-04-27)
- Event Loop Rearchitecture
* Worker threads can now wake the main event loop instantly on all
platforms without waiting for mouse movement or timer expiry.
* TThread.Queue() and TThread.Synchronize() wake the event loop
automatically via FPC's WakeMainThread hook.
* Duplicate FPGM_PAINT and FPGM_RESIZE messages for the same widget
are coalesced, reducing redundant processing under high load.
* New TfpgAsyncTask class for background tasks that safely publish
progress updates to the GUI thread (SwingWorker-inspired).
* New fpgInvokeLater() schedules work on the main thread from any
thread.
- Hybrid Canvas (new) — now default on all platforms
* The AggPas hybrid canvas is now the default on all platforms.
No extra build profile is required; the 'agg' and 'freetype'
profiles have been removed.
* Cached bitmap glyph rendering for fast syntax-highlighted text.
* Platform buffer managers added for Windows (GDI) and macOS (Cocoa).
* Performance: fast-path for opaque rectangle fills, bypassing AggPas
blending when alpha is not needed.
* Fixed several Windows-specific rendering issues: upside-down text on
32-bit FPC 3.2.2, layout not applied on first show of modal dialogs,
and a compilation error on 32-bit targets.
- Fusion Style (new)
* Added Fusion Light and Fusion Dark application styles, inspired by
Qt5 Fusion. Fusion Light is now the default IDE style.
* Fusion-style page control tabs and body rendering.
* Checkbox, radio button, and progress bar painting delegated to
TfpgStyle, enabling per-style customisation.
* Announcement with early screenshots (https://github.com/graemeg/fpGUI/
discussions/171)
- HiDPI improvements
* Improved HiDPI scaling for the GDI (Windows) and X11 backends.
- Maximus IDE
* PasBuild backend integration: TPasBuildProjectBackend
bridges the IDE with the PasBuild build system.
* Project tree redesign: displays modules, dependencies,
and build profiles as tree nodes with accent colour category headers.
* Multi-module UI with aggregator project support.
* Dependency tree visualisation added to the project tree.
* Build actions: clean, rebuild, and test added to IDE toolbar.
* INI and XML syntax highlighting added.
* MigLayout used throughout the IDE UI, including a TfpgMigSplitter
and MigLayout-managed status bar.
* Session persistence: open files, window layout, and file dialog
directories are saved and restored per project.
* Edit menu: Duplicate Line, Delete Line, Undo, and Redo added.
* Status bar shows cursor position, file path, and current git branch.
* Go to Declaration (Ctrl+B / Ctrl+Click) with cross-unit resolution
including FPC RTL and packages.
* Find Usages (Alt+F7) with highlighted context column.
* Quick Documentation popup (Ctrl+F1).
* Navigate to File and Navigate to Symbol dialogs with fuzzy matching.
* Cursor history back/forward navigation.
* Custom Pascal tokeniser replacing vendored fcl-passrc, used by the
highlighter, symbol finder, procedure list, and declaration finder.
* Debug session lifecycle: F9 starts a debug run, Ctrl+F2 stops it.
* Breakpoints panel and full breakpoint add/remove management; live
breakpoints routed through the ptrace owner thread.
* Execution line highlighted in the editor at each debugger stop.
* Variables panel showing Locals and Globals groups; Show Globals
toggle persisted across sessions.
* Call Stack panel.
* Watches panel.
* Evaluate Expression dialog.
* Exception notification bar.
* OPDF/PDR integration via a dedicated debugger worker thread.
Requires FPC 3.3.1 + OPDF debug format support.
Linux x86_64 only, until OPDF support more platforms.
* Support for building the IDE with FPC 3.2.2 via a stub debugger
adapter (OPDF dependencies disabled by default).
* Cross-module source file resolution for Ctrl+B navigation and
debugger stop-line lookup.
* 'Reopen last project on startup' preference added.
* Messages tab now activates automatically when a build is triggered.
* Quick Documentation popup signature search stops at the
class/record declaration header.
* Pascal modifiers and directives (virtual, override, stdcall, etc.)
now highlighted as secondary keywords.
- DocView
* Project restructured and added as a PasBuild module.
* Fixed rendering stopping prematurely, leaving a blank area at the
bottom of the document.
* Fixed DocView statusbar colour being reset to the wrong default.
* DocView navigation toolbar now uses some HVIF vector icons.
- UI Designer
* Added style preview support, showing the designer form in the
user-selected style.
- Framework Bug Fixes
* Fixed FreeType font metrics producing squashed line spacing.
* Fixed XOR selection rendering in TfpgMemo — now uses proper theme
colours instead of XOR pixel inversion.
* Fixed Open/Save dialog grid not growing correctly on resize.
* Fixed pagecontrol tab rendering to be font and DPI aware.
* Fixed Cocoa hybrid canvas rendering (drawRect instead of lockFocus).
* Fixed Cocoa font metrics and popup window visibility.
* Fixed FreeType font cache not being enabled on Windows.
* Fixed index out of bounds in File Open dialog under macOS.
* Compatibility fix for upcoming FPC 3.3.x release.
* Added wpMainFormCenter window position option; centralised window
positioning logic into fpg_form.pas.
* Experimental multi-monitor and per-screen DPI support.
* Fixed several bounds-checking issues in the text editor component.
* Deprecated old DrawXXX widget paint methods in TfpgCanvas.
* Fixed ComboBox text not clipped to exclude the dropdown button area.
* Fixed TfpgLabel not auto-sizing to text content when no
PreferredSize was set.
* Fixed developer-set text colour ignored by style DrawString.
* Fixed popup calendar generating deprecation warnings.
- Code Hygiene
* Replaced bundled SynRegExpr with FPC's standard RegExpr unit.
* Replaced bundled mPasLex with FPC's fcl-passrc for Procedure List.
* Replaced bundled sha1.pas (D5-era) with FPC's standard hash package.
* Removed Cairo rendering backend.
* Removed VLC units (now part of FPC's Free Component Library).
* Removed MigLayout Java reference source (porting complete).
* Removed unused and empty style units.
* Removed vendored fcl-passrc (replaced by custom Pascal tokeniser).
* Moved documentation and Lazarus IDE integration package out of the
framework source tree.
* Legacy Agg2D canvas moved out of the framework source to
extras/aggpas/.
* GDI & X11 native canvas classes marked "Deprecated" for future
removal.
* TfpgCanvas.DrawXXX methods for widget painting marked "deprecated"
for future removal.
- HVIF (Haiku Vector Icon File) Icon Format
* New HVIF binary reader with AggPas renderer and unit tests.
* New HVIF binary writer with unit tests.
* svg2hvif CLI tool converts SVG files to HVIF; --inc flag emits a
Pascal byte-array include file for embedding icons in source.
* hvif_dump inspection tool for examining HVIF binary files.
* Full rendering pipeline: multi-stop gradient LUT, gradient strokes,
transforms, arc segments, and LOD visibility scale.
* TfpgIconStore: DPI-aware HVIF icon registry; fpgIcons global
initialised automatically in TfpgApplication.
* HVIF icons wired into core framework widgets.
* New IconName and IconSize properties on TfpgBaseButton for
icon-store–driven button icons.
* imageconvert utility added to the PasBuild ecosystem.
- Vertex HVIF Icon Editor (new application)
* Announcement thread with screenshot (https://github.com/graemeg/fpGUI/
discussions/182)
* Full HVIF vector icon editor added to the primary build.
* Tools: Select, Node edit, Pan, Zoom, Rectangle, Ellipse, and Pen.
* Bounding box and affine transform interactions; Shift+drag for
uniform scale, Ctrl+drag for shear.
* Gradient style editing with multi-stop ramp widget and editor popup.
* Grid overlay with configurable snap-to-grid.
* Object tree with inline rename and sidecar metadata file.
* Bezier path outline overlay in node-edit mode.
* Undo support for path and shape property edits.
* File > New, Open, Save (.hvif), Export as .inc, and Export as PNG
at 16/32/48/64 px.
* File > Open Recent with persistent last-used directory.
* Window position and size restored across sessions.
Regards,
- Graeme -
More information about the fpc-pascal
mailing list