wanting to try a GUI toolkit: needing some advice on which one to choose

someone someone at somewhere.com
Sat May 29 00:41:08 UTC 2021


On Thursday, 27 May 2021 at 01:17:44 UTC, someone wrote:

> Any comments are welcomed, even any comments regarding anyone 
> experience with GUI development within D, no matter whether the 
> answer would be relevant to my specific question seeking a 
> choice or not.

First and foremost, thanks everybody for your replies :) !

I didn't know some of the toolkits you advised me to try even 
existed.

There was a lot of info for me to digest before starting 
answering you on some of the specifics and/or personal experience 
with them, so, I did my homework and make the following summary 
(mainly relevant to my requirements) to organize my thoughts so I 
could make a roadmap to start selecting/discarding toolkits, and 
please, let me know anything I got wrong and/or point me to 
anything that is plainly wrong in the following summary:

- Microsoft 
[MFC](https://en.wikipedia.org/wiki/Microsoft_Foundation_Class_Library) is a Microsoft Visual C++ wrapper around the Windows API
- Microsoft [Windows 
Forms](https://en.wikipedia.org/wiki/Windows_Forms) for the net 
framework (not a Windows API wrapper)
- Microsoft 
[WPL](https://en.wikipedia.org/wiki/Windows_Presentation_Foundation) (aka Windows Presentation Foundation) for the net framework 3.0 using XAML or any CLR language
- Microsoft [WinUI # 
1](https://docs.microsoft.com/windows/apps/winui/)
- Microsoft [WinUI # 
2](https://docs.microsoft.com/windows/apps/winui/winui2/release-notes/) for UWP XAML apps
- Microsoft [WinUI # 
3](https://docs.microsoft.com/windows/apps/winui/winui3/release-notes/) for UWP XAML / Win32 apps (aka Project Reunion)

- Gnome [GNUstep](https://en.wikipedia.org/wiki/GNUstep) for 
Objective-C
- Apple [Cocoa](https://en.wikipedia.org/wiki/Cocoa_(API)) for 
Objective-C

- [MOTIF](https://en.wikipedia.org/wiki/Motif_(software)) for C 
is a legacy UNIX toolkit
- [libagar](http://libagar.org/) (aka agar) for 
(industry-standard ANSI X3.159-1989) C: 
[documentation](http://libagar.org/docs) for 
[1.6.0](http://libagar.org/mdoc.cgi?man=AG_Intro.3), 
[screenshots](http://libagar.org/screenshots.html)
    - supports texture and GPU acceleration wherever available
    - supports linux/freeBSD/dragonFlyBSD (at least)

- [Fox](http://www.fox-toolkit.org/home.html) for C++: 
[overview](http://www.fox-toolkit.org/goals.html), plain 
[documentation](http://www.fox-toolkit.org/doc.html), 
[FAQ](http://www.fox-toolkit.org/faq.html), and 
[screenshots](http://www.fox-toolkit.org/screenshots.html)
    - relies only on core system facilities and **does not wrap** 
native GUI libraries or toolkits
    - supports linux/freeBSD (at least)
    - used by the xfe file manager app

- [wxWidgets](https://en.wikipedia.org/wiki/WxWidgets) (former 
wxWindows) for C++: 
[overview](https://docs.wxwidgets.org/3.0/page_introduction.html), excellent plain [documentation](https://docs.wxwidgets.org/3.0/), [tutorials](https://docs.wxwidgets.org/3.0/page_topics.html); eg: [hello world app](https://docs.wxwidgets.org/3.0/overview_helloworld.html)
    - supports native platform controls wherever possible
    - supports UniCode: 
(https://docs.wxwidgets.org/3.0/overview_unicode.html)overview
    - wxMSW is the native port for Microsoft Windows
    - wxGTK2 port supporting GTK+ 2.# ≥ 2.6
    - wxGTK3 port supporting GTK+ 3.#
    - first-impressions: fully-alive

- 
[arsd](http://dpldocs.info/experimental-docs/arsd.html#desktop-gui): [simpledisplay](http://dpldocs.info/experimental-docs/arsd.simpledisplay.html) → [minigui](http://dpldocs.info/experimental-docs/arsd.minigui.html) for D: plain documentation
    - simpleDisplay provides basic cross-platform GUI-related 
functionality: creating windows, drawing on them, working with 
the clipboard, timers, openGL, and more; but, **does not 
provide** high-level GUI widgets
    - simpleDisplay does not have any dependencies outside the OS 
and color.d
    - simpleDisplay should support UniCode and i18n 
internationalization since its written in D to begin with (my 
assumption)
    - miniGUI primary goal is to be useful without being large and 
complicated (like GTK and/or QT) and it isn't hugely concerned 
with appearance
    - miniGUI keeps it simple on linux: some controls can be 
customized with CSS-inspired Widget.Style classes
    - miniGUI supports the native controls/themes on Windows
    - miniGUI supports creating widget trees at runtime from XML 
with arsd.minigui_xml
    - miniGUI requirements are arsd.simpledisplay and arsd.color 
dependencies on which it is built: nothing more
    - miniGUI had mostly additive changes or bug fixes since its 
inception until 05-2021
    - miniGUI should support UniCode and i18n internationalization 
since its written in D to begin with (my assumption)

- [dlangUI](https://github.com/buggins/dlangui) for D: 
[documentation](http://buggins.github.io/dlangui/ddox/), 
[tutorials](https://github.com/buggins/dlangui/wiki), and 
[screenshots](http://buggins.github.io/dlangui/screenshots.html)
    - it is a major-refactored port of the Cool Reader app project 
for C++
    - supports openGL based acceleration: fallbacks to pure Win32 
API / SDL / X11 when the openGL library is not available and/or 
cannot be loaded
    - supports highly-customizable styles and themes
    - supports UniCode and i18n internationalization
    - requirements: DMD ≥ 2.077
    - requirements: third-party: DerelictGL3 for OpenGL support
    - requirements: third-party: DerelictFT and FreeType library 
support under linux and optionally under Windows
    - requirements: third-party: DerelictFI and FreeImage library 
support for image decoding
    - requirements: third-party: DerelictSDL2 and SDL2 for cross 
platform support
    - requirements: third-party: XCB and X11 bindings (patched) 
when SDL2 is not used
    - first-impressions: seems abandoned

- Gnome [GTK+](https://en.wikipedia.org/wiki/GTK%2B) (former GIMP 
ToolKit) for C (using GObject library targeting Glib) (currently 
using Cairo)
    - primarily targeting the X-Windows system
    - used in Gnome, LXDE, XFCE, MATE, Cinamon
    - used by Marco, Mutter, Xfwm (and some more) window managers

- [QT](https://en.wikipedia.org/wiki/Qt_(framework)) is for C++
    - primarily targeting the X-Windows system or Wayland
    - used in KDE, LXQT, Lumina, Unity
    - QT [has removed LTS from the OSS 
community](https://catfox.life/2021/03/21/really-leaving-the-linux-desktop-behind/) plainly admitting they want us to be their beta testers and that paid commercial users are the only ones who deserve stability

- 
[Elementary](https://en.wikipedia.org/wiki/Enlightenment_Foundation_Libraries) for C
    - part of EFL (aka Elementary Foundation Libraries)

- [sciter](https://sciter.com/): is an embeddable 
HTML/CSS/JavaScript engine for modern UI development
    - still need to research it: left it as the last one because 
it seems it is the opposite of what I am looking for

At first glance, but that could end quite differently, possible 
ones are (ordering not standing): dlangUI and arsd.miniGUI 
written in D, agar written in C, Fox and wxWidgets written in C++.

Regarding dlangUI: its a shame if it was really abandoned ... 
does someone seriously considered forking it ? Or is it pointless 
since it needs a lot of human resources that are not there to 
begin with which is what I suspect ?




More information about the Digitalmars-d-learn mailing list