<div dir="ltr">I'm just learning Pascal lately, I haven't made a complete app or project with Pascal yet, but making an app with a GUI is a bit more exciting than my command line attempts.<br><br>I'm wondering if the community has any project ideas or basic fpGUI project tutorials to give me a bit of a kickstart. I have a hard time getting started with projects.<br><br>Thank you for any direction you can give!</div><br><div class="gmail_quote gmail_quote_container"><div dir="ltr" class="gmail_attr">On Tue, Feb 10, 2026 at 3:15 AM mailinglists--- via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org">fpc-pascal@lists.freepascal.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi everyone,<br>
<br>
I'm super happy to announce the v2.0.0 release of fpGUI Toolkit.<br>
<br>
<a href="https://github.com/graemeg/fpGUI" rel="noreferrer" target="_blank">https://github.com/graemeg/fpGUI</a><br>
<br>
It only took 10 years since the last "official release". Oops. :-D<br>
<br>
As you can imagine, a full changelog would be massive, so here<br>
are some highlights of the larger work.<br>
<br>
== AggPas (Anty-Grain Geomery) canvas ==<br>
<br>
A 100% implemented in Object Pascal, 2D graphics canvas with<br>
advanced anti-aliasing and transparency now included. You can<br>
use the native platform graphic rendering, or opt for AggCanvas,<br>
which gives consistent and high quality rendering on all platforms<br>
<br>
<br>
== Alien Windows branch was merged in ==<br>
<br>
Before, every widget had it's own platform window handle. Now, the<br>
top-level window is the only window that has a native OS window<br>
handle, and all widgets on that form has "virtual handles". This<br>
means much less resources needed by the OS, more consistent<br>
drawing, clipping and event handling. It also allows all widgets to <br>
fully<br>
support transparency.<br>
<br>
<br>
== Layout Manager System ==<br>
<br>
fpGUI now has a pluggable layout manager architecture inspired by<br>
Java Swing's LayoutManager interface. Instead of manually<br>
calculating widget positions, you can assign a layout manager to<br>
any container and let it handle positioning, sizing, and resize<br>
behaviour automatically.<br>
<br>
The layout manager system coexists with the existing<br>
Align/Anchors mechanism. It is entirely optional -- existing code<br>
continues to work without changes.<br>
<br>
Three layout managers are included:<br>
<br>
* FlowLayout - arranges widgets in a horizontal row with<br>
automatic wrapping<br>
* BorderLayout - five-region docking (North/South/East/West<br>
and Center)<br>
* MigLayout - a full port of Java's MigLayout v11.4.2 (see<br>
below)<br>
<br>
A quick start guide is available at:<br>
docs/layout_managers_quick_start.adoc<br>
<br>
<br>
== MigLayout v11.4.2 Port ==<br>
<br>
The headline feature is a comprehensive port of MigLayout v11.4.2<br>
from Java to Object Pascal. MigLayout is one of the most powerful<br>
and flexible layout managers available in the Java ecosystem, and<br>
fpGUI now has a native implementation.<br>
<br>
Supported features:<br>
<br>
* Grid-based layout with automatic wrapping<br>
* Column and row spanning (SpanX/SpanY)<br>
* Growth priorities (GrowX/GrowY) for distributing extra space<br>
* Cell alignment (left/center/right/top/bottom/fill)<br>
* Docking (North/South/East/West) outside the normal grid<br>
* Component gaps with physical unit support (px, mm, cm, inch,<br>
pt)<br>
* Platform-aware default gaps and sizing<br>
* Fluent constraint API with automatic reference counting<br>
* Constraint string parser for concise constraint definitions<br>
* Debug visualisation overlay for layout inspection<br>
* Multi-DPI / HiDPI support via logic units<br>
* Platform-specific button ordering (OK/Cancel vs Cancel/OK)<br>
<br>
The port includes 396 unit tests, all passing cleanly.<br>
<br>
A comprehensive demo application is available at<br>
examples/gui/lm-mig/ with eight feature panels demonstrating<br>
basic grids, alignment, spanning, growth, complex layouts,<br>
constraint parsing, button ordering, and docking.<br>
<br>
<br>
== FPReport (FPC's reporting system) integrated into fpGUI ==<br>
<br>
What to generate reports, display them in your application, export<br>
them to PDF of PNG. Now it's possible.<br>
<br>
<br>
== Widget Sizing API ==<br>
<br>
A new sizing model separates a widget's intended size from its<br>
actual rendered size.<br>
<br>
Widgets now have:<br>
<br>
* Width/Height - the developer's preferred (intended) size<br>
* ActualWidth/ActualHeight - the actual rendered size after<br>
layout<br>
* PreferredSize - explicit preferred size that layout managers<br>
read<br>
* MinWidth/MinHeight - minimum size constraints<br>
<br>
Some widgets (TfpgLabel, TfpgButton) now calculate their<br>
preferred size automatically based on content and font, so<br>
explicit sizing is often unnecessary.<br>
<br>
SetPosition() has been deprecated in favour of setting individual<br>
properties (Left, Top, Width, Height). The uidesigner has been<br>
updated to generate the new property-based code.<br>
<br>
<br>
== PasBuild Build System ==<br>
<br>
The project has adopted PasBuild as its build tool. The<br>
repository structure has been reorganised:<br>
<br>
* Framework source: framework/src/main/pascal/corelib/<br>
* Test source: framework/src/test/pascal/<br>
* Build output: framework/target/<br>
<br>
UIDesigner is now managed by the new build tool as well, and will<br>
by default compile after the framework is compiled. You can<br>
compile them independently if you want.<br>
<br>
See PasBuild documentation for more details:<br>
<a href="https://github.com/graemeg/PasBuild" rel="noreferrer" target="_blank">https://github.com/graemeg/PasBuild</a><br>
<br>
Build commands:<br>
<br>
pasbuild compile -p unix,agg (build framework)<br>
pasbuild test -p unix,agg (run unit tests)<br>
<br>
All example extrafpc.cfg files have been updated for the new<br>
directory structure.<br>
<br>
<br>
== macOS Cocoa Backend ==<br>
<br>
An initial macOS Cocoa backend has been implemented<br>
(experimental). This adds native macOS support alongside the<br>
existing X11 and GDI backends.<br>
<br>
<br>
== HiDPI and Rendering Improvements ==<br>
<br>
* Fixed DPI scaling for widgets designed at 96dpi but displayed<br>
at higher densities<br>
* Focus rectangle line width now scales for HiDPI displays<br>
* Font height calculation improved (ascent + descent) to<br>
prevent text clipping<br>
* AggCanvas text baseline positioning fixed for descender<br>
characters<br>
* Canvas dimension guards added across X11/GDI/Cocoa backends<br>
to prevent range errors during extreme resize operations<br>
* AggPas 32-bit and 64-bit compatibility fixes<br>
<br>
<br>
== DocView Application ==<br>
<br>
Lots of DocView (help viewer) improvements, and several UI<br>
windows/dialogs have been migrated to MigLayout:<br>
<br>
* Contents tab<br>
* Index tab<br>
* Search tab<br>
* Notes & History tabs<br>
<br>
The File Open/Save and Directory Select dialogs have also been<br>
converted to use MigLayout management.<br>
<br>
I'll be migrating more applications, tools and example to MigLayout<br>
for better HiDPI support.<br>
<br>
<br>
== Other Notable Changes ==<br>
<br>
* Deprecated function calls replaced with method equivalents<br>
across the codebase<br>
* Command line parameter handling migrated to ICmdLineParams<br>
interface<br>
* TStringHashList replaced with FPC's TFPDataHashTable for PO<br>
file handling<br>
* TagPointer deprecated (FPC's TComponent.Tag now supports<br>
64-bit)<br>
* Font property moved to base widget class<br>
* Visible property moved to WidgetBase class<br>
* StyleManager assert logic fixes<br>
* Bug #83 (broken localise) fixed<br>
* Tab sheet resize flicker eliminated<br>
* TreeView scrollbar flicker fixed<br>
* Multiple memory leak fixes in MigLayout constraint handling<br>
* All compiler warnings from fpGUI code has been resolved<br>
* All range-check errors have been fixed<br>
<br>
<br>
== Breaking Changes ==<br>
<br>
* SetPosition() is deprecated - use Left/Top/Width/Height<br>
properties instead<br>
* Directory structure changed - extrafpc.cfg paths updated<br>
* TagPointer is deprecated - use Tag (now 64-bit capable)<br>
instead<br>
* Deprecated function calls removed (use method equivalents)<br>
<br>
<br>
== Documentation ==<br>
<br>
* docs/layout_managers_quick_start.adoc<br>
- 10-minute introduction to layout managers<br>
* docs/miglayout_v11_port_plan.adoc<br>
- detailed MigLayout port plan<br>
* docs/layout_manager_implementation_plan.adoc<br>
- architecture design document<br>
* docs/toolkit_sizing_comparison.adoc<br>
- widget sizing API design guide<br>
* docs/api_design_intent_pathway.adoc<br>
- API design intent documentation<br>
<br>
Example demos for all three layout managers are in:<br>
* examples/gui/lm-flow/<br>
* examples/gui/lm-border/<br>
* examples/gui/lm-mig/<br>
<br>
<br>
And there are lots more, but too much to mention here. :)<br>
<br>
Feedback, bug reports, and questions are welcome as always.<br>
I mostly monitor the GitHub bugtracker and the fpGUI support<br>
newsgroup - see website for details.<br>
<br>
<br>
Lastly, thank you to the Free Pascal Compiler developers for making<br>
such an awesome compiler. Without that, fpGUI Toolkit would not have<br>
been possible. 🫶<br>
<br>
<br>
Regards,<br>
- Graeme -<br>
<br>
-- <br>
fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal<br>
<a href="http://fpgui.sourceforge.net/" rel="noreferrer" target="_blank">http://fpgui.sourceforge.net/</a><br>
<br>
_______________________________________________<br>
fpc-pascal maillist - <a href="mailto:fpc-pascal@lists.freepascal.org" target="_blank">fpc-pascal@lists.freepascal.org</a><br>
<a href="https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal" rel="noreferrer" target="_blank">https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal</a><br>
</blockquote></div>