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 - _______________________________________________ fpc-pascal maillist - [email protected] https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
