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