WxWidgets 3.2
wxwidgets.org
wxwidgets.org
[1] https://en.wikipedia.org/wiki/Clipper_(programming_language)
They like consistent, reliable, fast operation. Especially those first two things.
The things that make them most unhappy are: 1) programs that behave unpredictably—a predictable, consistent bug that happens every single time is preferable to an operation that fails 5% of the time, randomly, or a button that fails to register about half of all clicks, or anything like that and 2) changes to an interface they've already learned—because your new thing probably isn't 1/10 as "intuitive" as you think it is, so it's just another annoying arbitrary thing they have to deal with for no good reason, when they already had the last annoying, arbitrary thing figured out.
Now, where it might make a difference (maybe—but I'm skeptical) is screenshots on sales pages. Which I suppose is why design continues to be so anti-user.
wxWidgets applications are supposed to look native on every platform... what's the issue? Personally, I find apps with weird GUIs that don't look at all like the rest of the system very irritating. I would prefer developers to spend more time implementing features, and less making bling-bling UI things.
So many apps twenty years ago had features that apps today do not. It was really frustrating to see instant messaging services regress in features as people migrated from one to another to a third to ... today's dumpster fires.
In practice, Qt looks much more native on Gnome than GTK does on KDE so you should go with Qt.
My main point is that "native" covers a lot of ground, and "native legacy compatibility" and "native modern" are radically different technology stacks on Windows.
Of course since they come with the OS you might as well use those instead of bundling a separate UI toolkit, but IMO if you consider them as native as the HWND stuff then might as well consider everything native - AFAIK Windows even comes with a shared Electron/Chromium instance applications can use so in that case you could say anything that uses Electron is native on Windows :-P.
I wish more people used it instead of writing "apps" that are just a giant web browser with javascript and a hack to get menus working correctly, with fake UI widgets that don't respond like native window controls (no proper tab navigation, no moveable or resizeable dialogs, keyboard accelerators don't work).
I get near parity on design on all platforms yet keep full native speed on mobile.
The main issue with old widget system is how hard is to theme them, and theming is, I think, a major driver of the use of HTML/CSS (certainly on my business customers, where they demand the UI be colorized with their corporate stuff!).
Fix that (like with SwiftUI) and suddenly using native is more doable (bussines-wise).
Combining with server-driven architecture, so far my eCommerce app with 3 dozens of screens is made with 2 files of SwiftUI (app specific, plus a one-time cost in build the boilerplate), very doable to a solo guy to code all in 3 platforms.
>> wxWidgets licence is a modified version of LGPL explicitly allowing not distributing the sources of an application using the library even in the case of static linking.
For some app distribution channels, like with iOS apps, that can be difficult to impossible to actually implement given the control Apple has over app packaging and distribution.
Otherwise, you should be able to distribute a commercial non-LGPL app that uses an LGPL library just fine as long as you meet that stipulation.
As others have pointed out, WxWidgets ships with a modified LGPL license that makes this point moot, anyway, and makes it easier for commercial apps to comply with the modified license compared to the bare LGPL as they are free to statically link WxWidgets and distribute apps in compliance with the modified license.
You theoretically can.
You also have to offer them source code, or just ship it along with.
A few years later (~2009), I used Qt to develop a big codebase that needed to be used on Windows, Linux, and Mac. It was admittedly nicer than WxWidgets, but my impression was that it was harder to understand what Qt did under the hood… It was as if Qt was trying to be more clever than the C++ compiler, while with WxWidgets it had always be more or less evident what the library was doing.
It uses the platforms' native UI frameworks. Gtk on Linux.
Audacity the audio editor uses WxWidgets.
Hopefully this release will help the planned improvements to Audacity too.
I do not remember why. Perhaps I thought it will be more portable or performant.
But I quickly abandoned that (would not want to get stuck on a legacy tech like java and awt) and ported all my projects to Pascal for maximal performance.
I have successfully used the wrapper from C and Zig as a proof of concept. The main goal was to originally expose SWT for Nim, but I got pretty side tracked. I'll probably make a show HN later this year when I have it in a usable state. I haven't gotten callbacks working quite yet, which makes it pretty useless.
I'm a bit worried about performance, but I'll throw a cassowary constraint manager on top of a ton of widgets and see how it does. Memory usage with an empty window is ~35mb at 1920x1080. It successfully works on Windows, Linux, and MacOS x86 and aarch64.
But it also has a terrible flaw: its heavy-templated C++ api, hard to port to other languages.
I don't want to get stuck on C++. I want to use Go and Rust. And all the wxWidgets ports to those languages suck, big time.
Show me a solid wxWidgets for Rust and I'll fall in love again. Yes, I'd also colaborate on that project, too.
GTK-rs is decent for rust on Linux. Not sure how it does on other platforms.
I'm delighted to hear Rust programmers have got something worth using.
You can't use C directly with the official WxWidget library. For instance, here is the first line of WxWidget's manual:
"Welcome to wxWidgets, a stable and powerful open source framework for developing native cross-platform GUI applications in C++!"
I think many devs underestimate how important the JS world's Hot Module Replacement has become for frontend dev velocity. Live reload just makes visual work so much better.
Of course we all know the scourge that is Electron apps. Maybe now that native web view is becoming more available across desktop OS's we will see apps move to leaner frameworks. Tauri (which hit 1.0 yesterday) allows native system access, notifications, app tray, auto updates, polyglot backend via sidecars, and HTML/CSS/JS/TS frontend. Not native controls that many of us love, but much better than where we're at now.
How and when views reflect the new code would be more complex, but AFAICT (from https://www.geeksforgeeks.org/hot-reload-in-electronjs/) it's not exactly magic in Electron, either--browser views are reloaded in their entirety, and the main application is restarted entirely if its sources are changed, so you can lose state. You could probably do something more sophisticated in Lua, by dynamically updating the metatables of live objects (similar to prototypes in JS). That'd be a very leaky abstraction (presumably by Electron hot reload doesn't try it). You'd need to architect your code to be robust to missing or changed object state across versions of the code, or at least to annotate which objects are capable of being hot reloaded. But Smalltalk and, to a lesser extent, Objective-C developers have experience hot patching code this way, so it can be done.
That said, I find myself wishing that they'd have a page of screenshots and code snippets for each components, like web development frameworks typically have, for example: https://www.primefaces.org/primevue/calendar
Of course, you cannot run those components live, but might at least have screenshots of each component on each supported platform.
The samples folder in the distribution pretty well fills this need. See eg https://docs.wxwidgets.org/3.2/page_samples.html
If it had a Java wrapper so I can use it with Clojure, it would be another topic.
Unfortunately, they are both non-native options.
The next result in Google is sketchy because it's a "crack" and that doesn't apply to shareware.
[1] https://docs.wxwidgets.org/3.2/page_port.html#page_port_wxgt...