Recent

Author Topic: [ANN] fpGUI Toolkit v2.1.0 release  (Read 1352 times)

Graeme

  • Hero Member
  • *****
  • Posts: 1527
    • Graeme on the web
[ANN] fpGUI Toolkit v2.1.0 release
« on: April 27, 2026, 07:23:48 pm »
Hi everyone,

I'm very happy to announce a huge new release of fpGUI — with some massive improvements, new features, and plenty of bug fixes.

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.
  - 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 (INF help file viewer)
    * 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 (visual form 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.
--
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal
http://fpgui.sourceforge.net/

coolmyf

  • Newbie
  • Posts: 4
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #1 on: July 19, 2026, 09:41:41 am »
It looks great though I have not really used it! :)

cdbc

  • Hero Member
  • *****
  • Posts: 2928
    • http://www.cdbc.dk
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #2 on: July 19, 2026, 01:41:07 pm »
Hi
You should -- It's great \o/\ö/\o/
Regards Benny

edit: added screenshot of my latest self-study-project
« Last Edit: July 19, 2026, 01:49:47 pm by cdbc »
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE6/QT6 -> FPC Release -> Lazarus Release &  FPC Main -> Lazarus Main

sfeinst

  • Sr. Member
  • ****
  • Posts: 266
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #3 on: July 26, 2026, 02:53:53 pm »
I thought I saw a message with the answer, but I can't seem to find it.  So asking here.  I didn't want to take up lazarus space with fpgui questions, so where is the best place to post questions about fpgui?  I'm trying it out and have run into some items I have questions about.

Thanks,
Steve

Fred vS

  • Hero Member
  • *****
  • Posts: 3958
    • StrumPract is the musicians best friend
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #4 on: July 26, 2026, 03:13:40 pm »
I thought I saw a message with the answer, but I can't seem to find it.  So asking here.  I didn't want to take up lazarus space with fpgui questions, so where is the best place to post questions about fpgui?  I'm trying it out and have run into some items I have questions about.
Hello.

https://github.com/graemeg/fpGUI/discussions

(But here on the Lazarus forum, it is OK too.)
I use Lazarus 2.2.0 32/64 and FPC 3.2.2 32/64 on Debian 11 64 bit, Windows 10, Windows 7 32/64, Windows XP 32,  FreeBSD 64.
Widgetset: fpGUI, MSEgui, Win32, GTK2, Qt.

https://github.com/fredvs
https://gitlab.com/fredvs
https://codeberg.org/fredvs

sfeinst

  • Sr. Member
  • ****
  • Posts: 266
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #5 on: July 26, 2026, 03:16:05 pm »
Thanks

cdbc

  • Hero Member
  • *****
  • Posts: 2928
    • http://www.cdbc.dk
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #6 on: July 26, 2026, 05:17:47 pm »
Hi
What's the 'naughty fpGUI' teasing you with, maybe  we can help...
I'm also learning the ropes with fpGUI and I find it fun \o/
Regards Benny
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE6/QT6 -> FPC Release -> Lazarus Release &  FPC Main -> Lazarus Main

sfeinst

  • Sr. Member
  • ****
  • Posts: 266
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #7 on: July 26, 2026, 08:38:20 pm »
I posted a bunch 4 messages in the Q&A discussion area for fpgui.  The 4 items were:
1) Clipboard on Wayland not working.  I was given a patch to try and that seems to be working .
2) A question of fpgApplication.ProcessMessages not updating the UI (though I plan on converting to threads so question is informational for me).
3) StringGrid resize.  I questioned how I solved resizing columns on the fly (using HandleResize) as opposed to some OnResize event.  I don't think my way is correct, but only way I got it working.
4) Hotkey for button.  Basically equivalent of using & in Lazarus in the Caption.  As & in Text of Button on Fpgui just shows the text including the &.

cdbc

  • Hero Member
  • *****
  • Posts: 2928
    • http://www.cdbc.dk
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #8 on: July 27, 2026, 09:17:01 am »
Hi Steve
Hmmm, I'll skip 1..3 and jump to 4):
- I've done this with menu's:
Code: Pascal  [Select][+][-]
  1.   mnuAppPop:= TfpgPopupMenu.Create(pnlTop);
  2.   with mnuAppPop do begin
  3.     Name := 'mnuAppPop';
  4.     TextColor:= clOrange;
  5.     AddMenuItem('About BinToDb','Alt+B',@mniAboutBin2DbClick);
  6.     AddMenuItem('About fpGui','Alt+F',@mniAboutFpGuiClick);
  7.   end;
- And buttons I handle like this:
Code: Pascal  [Select][+][-]
  1. procedure TfrmMain.frmMainKeyPress(Sender: TObject; var KeyCode: word;
  2.                                    var ShiftState: TShiftState; var Consumed: boolean);
  3. var ct{$ifdef dbg},alt,shft{$endif}: boolean;
  4. begin
  5. {$ifdef dbg}alt:= (ssAlt in ShiftState); shft:= (ssShift in ShiftState);{$endif}
  6.   ct:= (ssCtrl in ShiftState);
  7.   case KeyCode of
  8.     $41: if ct then begin Consumed:= true; btnAddExclClick(btnAddExcl); end;    // ctrl + A
  9.     $42: if ct then begin Consumed:= true; btnRootClick(btnRoot); end;          // ctrl + B
  10.     $44: if ct then begin Consumed:= true; btnDeselectClick(btnDeselect); end;  // ctrl + D
  11.     $45: if ct then begin Consumed:= true; btnExecuteClick(btnExecute); end;    // ctrl + E
  12.     $4D: if ct then begin Consumed:= true; btnMenuClick(btnMenu); end;          // ctrl + M
  13.     $51: if ct then begin Consumed:= true; btnCloseClick(btnClose); end;        // ctrl + Q
  14.     $52: if ct then begin Consumed:= true; btnRemExclClick(btnRemExcl); end;    // ctrl + R
  15.     $53: if ct then begin Consumed:= true; btnSelectClick(btnSelect); end;      // ctrl + S
  16.   end;
  17. {$ifdef dbg}
  18.   StatusSimple:= format('(i) Key: %d, Alt = %s',[]);
  19. {$endif}
  20. end;
...In the hint for said button, I disclose which key-combo to push.
The above works pretty flawless for me...  :D
HTH
Regards Benny
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE6/QT6 -> FPC Release -> Lazarus Release &  FPC Main -> Lazarus Main

PeterBB

  • Full Member
  • ***
  • Posts: 115
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #9 on: July 27, 2026, 09:33:37 am »
...  I didn't want to take up lazarus space with fpgui questions, ...

This is also FreePascal space  :)

sfeinst

  • Sr. Member
  • ****
  • Posts: 266
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #10 on: July 27, 2026, 03:55:59 pm »
- And buttons I handle like this:
Code: Pascal  [Select][+][-]
  1. procedure TfrmMain.frmMainKeyPress(Sender: TObject; var KeyCode: word;
  2.                                    var ShiftState: TShiftState; var Consumed: boolean);
  3. var ct{$ifdef dbg},alt,shft{$endif}: boolean;
  4. begin
  5. {$ifdef dbg}alt:= (ssAlt in ShiftState); shft:= (ssShift in ShiftState);{$endif}
  6.   ct:= (ssCtrl in ShiftState);
  7.   case KeyCode of
  8.     $41: if ct then begin Consumed:= true; btnAddExclClick(btnAddExcl); end;    // ctrl + A
  9.     $42: if ct then begin Consumed:= true; btnRootClick(btnRoot); end;          // ctrl + B
  10.     $44: if ct then begin Consumed:= true; btnDeselectClick(btnDeselect); end;  // ctrl + D
  11.     $45: if ct then begin Consumed:= true; btnExecuteClick(btnExecute); end;    // ctrl + E
  12.     $4D: if ct then begin Consumed:= true; btnMenuClick(btnMenu); end;          // ctrl + M
  13.     $51: if ct then begin Consumed:= true; btnCloseClick(btnClose); end;        // ctrl + Q
  14.     $52: if ct then begin Consumed:= true; btnRemExclClick(btnRemExcl); end;    // ctrl + R
  15.     $53: if ct then begin Consumed:= true; btnSelectClick(btnSelect); end;      // ctrl + S
  16.   end;
  17. {$ifdef dbg}
  18.   StatusSimple:= format('(i) Key: %d, Alt = %s',[]);
  19. {$endif}
  20. end;
...In the hint for said button, I disclose which key-combo to push.
The above works pretty flawless for me...  :D
HTH
Regards Benny

Interesting approach.  Using the hint to provide info on hotkey.  I'll look into this as an option.

cdbc

  • Hero Member
  • *****
  • Posts: 2928
    • http://www.cdbc.dk
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #11 on: July 27, 2026, 05:54:33 pm »
Hi Steve
The code excerpt was taken from THIS project...
You're welcome to swing by for a 'LookSee'  :D
Regards Benny
If it ain't broke, don't fix it ;)
PCLinuxOS(rolling release) 64bit -> KDE6/QT6 -> FPC Release -> Lazarus Release &  FPC Main -> Lazarus Main

Mike.Cornflake

  • Hero Member
  • *****
  • Posts: 1309
Re: [ANN] fpGUI Toolkit v2.1.0 release
« Reply #12 on: July 27, 2026, 09:27:13 pm »
The code excerpt was taken from THIS project...

I'm loving the comments in this code.  Very polite :-)
Code: Pascal  [Select][+][-]
  1. dirs.Free; { thank you for your services :o) }

Thanks for posting this.  I've recently had to implement my own Function FileCreationDate(Const AFilename: String): TDateTime; but my code is windows only - been meaning to add linux support, your code just pointed me to fpstat, which I'd previously missed. 
Lazarus Trunk/FPC latest fixes on Windows 11
  How to use the forum:  https://wiki.lazarus.freepascal.org/Forum

 

TinyPortal © 2005-2018