[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