Most active commenters
  • wiseowise(4)
  • pjmlp(4)
  • liontwist(3)
  • Kwpolska(3)

←back to thread

377 points porterde | 50 comments | | HN request time: 1.252s | source | bottom
1. wiseowise ◴[] No.42142078[source]
Still don't understand how we went from this to modern GUI toolkits.

It looks and works so intuitively.

replies(14): >>42142147 #>>42142252 #>>42142509 #>>42142582 #>>42142873 #>>42143270 #>>42143473 #>>42145120 #>>42145467 #>>42146571 #>>42147144 #>>42147616 #>>42148647 #>>42155384 #
2. Onavo ◴[] No.42142147[source]
The answer is simple, mobile and relative layouts. GUI builders are easy when you can just use absolute positioning for everything (see Retool and the dozens of Retool clones). They become insanely complex when you can't.
replies(5): >>42142262 #>>42142267 #>>42142329 #>>42142436 #>>42145326 #
3. RandallBrown ◴[] No.42142252[source]
This is fairly similar to how Interface Builder in Xcode works for macOS and iOS apps.

Like others have said, it works well until you need to support different screen sizes, layouts, animations, touch interaction, etc.

replies(4): >>42142523 #>>42142715 #>>42142961 #>>42145321 #
4. ok123456 ◴[] No.42142262[source]
Windows Forms didn't use absolute positioning for everything. You could anchor things relatively to other controls or components. You would test how things behave when you maximize and resize windows, similar to how Devtools tests reactive designs now.

If it were a very simple window or dialog that always showed the same amount of information, you would disable maximize, resize, and position it absolutely. This allowed you to add "reactivity" incrementally instead of forcing everything to be reactive up front.

replies(1): >>42143422 #
5. wiseowise ◴[] No.42142267[source]
I don’t buy it. Android has amazing Constraint/Motion layout that adapts on screen size. Instead of improving XML tooling they’ve decided to follow latest fad and created Compose.
replies(1): >>42145331 #
6. rkagerer ◴[] No.42142329[source]
I did extensive work in Visual Basic 6. Nearly all of the GUI's I created had resizeable windows that scaled gracefully. It was really straightforward to hook the Resize event.

I considered this table stakes for any thoughtfully-written piece of software. There were of course exceptions for fixed dialogs that weren't interacted with for long and comfortably fit any small screen.

The page or two of hand-crafted code tended to be at least as readable, and often moreso, than the declarative HTML and CSS gooblygook that's common today. And in practice as a user I found the result tended to be more useful than many of the so-called "responsive" websites I see today - which tend to hide content in annoying ways, ignore opportunities to compact whitespace, plaster the screen with outsized ads, etc. - to the point I sometimes request the "desktop" site in my mobile browser in an effort to chase down a more humane experience.

7. mattmanser ◴[] No.42142436[source]
Just want to add to what other people are saying, not only did VB6 support relative positioning, but the history of responsive sizing in applications wasn't because of mobiles.

It was when monitors started changing sizes. Everyone used to have 800 x 600. Then the market exploded.

And different monitor resolutions appeared and became divergent way before the iPhone came out.

There was a period in desktop applications where some apps were absolutely positioned and didn't support anything apart from the 800 x 600 layout. You'd get this huge gutter on the right and bottom of the application window.

It was fairly brief, as changing forms from absolute positioning to relative positioning in VB6 was pretty easy.

replies(1): >>42143410 #
8. swatcoder ◴[] No.42142509[source]
Taste moved towards elaborate, deeply styled designs that communicated branding and away from familiar widgets that didn't call attention to themselves as all.

It turned out that focusing on a splashy and idiosyncratic brand not only excited prospective new users but inhibited them from going elsewhere since it made transitions more awkward and frustrating. That made more money, more easily, than focusing on user efficiency and feature distinctions as had been the trend before then.

The technology then trailed behind this fashion and invested its complexity budget in style customizability, animations and type rendering enhancements, etc and gave up on trying to encourage a standard design language that publishers and users could both build fluency in.

replies(1): >>42150539 #
9. ericb ◴[] No.42142523[source]
I can't speak to Interface Builder, but in VB 6 Hooking resize was SO easy, and the math you do inside it was so easy, too. It took maybe 5 minutes to do almost any layout.

It was frankly, a shock to see how easy this model was and then see the monstrosity that came to pass for HTML and CSS positioning. Baffling.

Everything you just listed was easy in VB 6 IMHO (well, touch wasn't a thing exactly).

replies(1): >>42144465 #
10. qingcharles ◴[] No.42142582[source]
Every version of Visual Studio since this has the same builder. I use this builder every day to build little apps for myself. It is practically 100% identical in the new version of Visual Studio 2022 that came out yesterday.

In fact, it's better now because it's easier to line things up and change their properties etc, but the interface is the same. It has literally not changed in 25 years.

Here, I booted VS2022 and made this app in under 60 seconds:

https://imgur.com/a/qHOCasJ

replies(3): >>42143199 #>>42144850 #>>42147863 #
11. mixmastamyk ◴[] No.42142715[source]
90s toolkits had "layout managers" to avoid hardcoding widget locations and sizes. Might need to extend a feature or two but probably could have been done without starting from scratch.
12. xmstr ◴[] No.42142873[source]
Microsoft carried this style of layout builder into the original asp.net web-forms in the first couple versions of Visual Studio.NET. If I remember correctly it worked just like the form builder for VB6/MFC-C++, but it's been a while.
13. runjake ◴[] No.42142961[source]

  > This is fairly similar to how Interface Builder in Xcode works for macOS and iOS apps.
Having extensive experience with both: Hard, hard disagree. They might look similar in static screenshots but work completely differently.

Totally agree with your second point and I wish Microsoft would have addressed that. Maybe they have. The last time I messed with their stuff I was writing XAML.

Anyone know if they brought RAD back?

Edit: apparently they had/have layout managers.

replies(1): >>42146270 #
14. pests ◴[] No.42143199[source]
The tools haven't changed, we have.
15. analog31 ◴[] No.42143270[source]
Two things initially drew me to VB. Being able to draw the GUI was certainly a very cool and empowering thing. I could make software that "looked like software" by the standards of the day, with minimal effort.

The other was that the alternative to VB for GUI creation was wrestling with class libraries, at a point when OOP was utterly baffling to many casual programmers like myself. Just the bare minimum "hello world" kind of app on either Windows or a Mac was page after page of instructions.

I suspect that over the span of subsequent decades, demands on high quality GUIs have increased -- as mentioned by others. But also, the programming skills needed to build a small GUI using code have become more mainstream, maybe because the languages have gradually made it easier.

Today, for the quality of GUIs that I need, I'm actually happier to just code them, and let (in my case) Tkinter lay them out in an acceptable default arrangement. My victims, er, users haven't asked for anything better.

replies(1): >>42144940 #
16. epcoa ◴[] No.42143410{3}[source]
> Just want to add to what other people are saying, not only did VB6 support relative positioning

Did it? I know .NET WinForms does with Control.Anchor, but that is VB.NET, not VB6.

It’s been many years but I don’t recall any method for that in VB6. As someone else noted you could handle the resize handler and move things around yourself.

17. epcoa ◴[] No.42143422{3}[source]
> You could anchor things relatively to other controls or components.

I don’t believe this was a feature that came out of the box in VB6. There is Control.Anchor in WinForms that is post VB6.

18. signaru ◴[] No.42143473[source]
Having built both desktop-native and browser-based apps, I think there is an efficiency in doing the widget layouts textually via code/markup once you get over the learning curve. I believe Qt and wxWidgets also have automatic layout features, but doing this on top of C++ maybe makes the experience less smooth. So far form designers in Visual Studio require manual pixel layouting, which becomes tedious as the GUI evolves to be more complex. This is great for beginners as dragging and dropping controls is so easy to learn. But as soon as you have a dozen or so controls, you start to notice the time spent manually dragging/aligning/sizing that is absent in markup-based or procedurally generated GUIs that do the layout calculations for you.
replies(1): >>42144263 #
19. happyweasel ◴[] No.42144263[source]
mfc has resizable ui layouts called Dynamic layouts (since the 2015 update?), and for wxwidgets there is wxformbuilder. Most stuff for mfc can be set in the dialog builder wrt to resizing, or in code. I cant remember doing manual pixel layouting ever, there are dialog base units or sth like this. People have been setting the ui to 120dpi from the 96dpi standard already decades ago. And the dialogs automatically readjusted without recompiling.

I also recently found out my mfc tools are per monitor high dpi aware without any interference from my side.

replies(1): >>42148083 #
20. ygra ◴[] No.42144465{3}[source]
Having done a few such forms in the past, it was easy enough for a simple dialog with a list, two buttons and a text field, but it quickly got unwieldy.

Which was okay back in the day. Everyone had low display resolutions, so simply scaling a window's controls when resizing was okay. No need for responsive layout and even too fancy layouts, I guess. But what we got later with anchor in WinForms, layout panels in WinForms or WPF, layout managers in Swing, and CSS layout die help reduce the math you'd have to do yourself, especially for more complex layouts or even when the layouts change due to different requirements.

21. wiseowise ◴[] No.42144850[source]
That’s Windows only.
replies(3): >>42144963 #>>42148301 #>>42155038 #
22. anthk ◴[] No.42144940[source]
Ditto with Motif under Unix, a Hello World was crazily verbose (even more with Xaw), while something in TCL/Tk was about two or three brief lines.
replies(1): >>42145319 #
23. jeroenhd ◴[] No.42144963{3}[source]
Qt has a very powerful GUI editor that also works quite well. Using QML and Python it's not hard to create a cross platform app. Distributing may be a pain though.

Then there's Gambas on Linux (though tbat requires WSL2 or Cygwin to work on Windows). Gambas does almost everything VB6 does using an obviously copued GUI and language.

replies(1): >>42145753 #
24. alkonaut ◴[] No.42145120[source]
At the same time it's common to hear "how does this not support high DPI?" or "How does this app not have a dark mode, it's 2024!" etc.

Modern toolkits just do a lot of stuff that older toolkits didn't. Some times at the expense of not being as quick to get off the ground as VB was.

The original winforms implementation in the early 2000's was pretty close to VB in terms of efficiency but its warts were numerous, e.g. the DPI used in the designer view (when writing the code) affected what happens when you run it, and so on.

replies(2): >>42145500 #>>42147171 #
25. pjmlp ◴[] No.42145319{3}[source]
One of the reasons I hardly bothered with Motif back on its heyday, was that it was much worse than Win32.
26. pjmlp ◴[] No.42145321[source]
Most of those builders, including VB, have the option to support dynamic layouts, it is up to devs to actually learn to use them, instead of the default approach.
27. pjmlp ◴[] No.42145326[source]
Layout managers are supported for decades now.
28. pjmlp ◴[] No.42145331{3}[source]
Thank the Kotlin crowd at Mountain View.
29. xandrius ◴[] No.42145467[source]
It's that when we were kids we didn't really care about whether was free, open source, made by M$ or not, we didn't care about politics or how things should be (tm).

We were just amazed things existed at all.

Now, people shame people using WYSIWYG or VSCode or whatever else makes the life of people easier, other than top hard-core users.

And that's why even placing a centred text in the middle of a web page requires to know a whole stack of tech, and no step is you actually placing it there directly.

30. Grumbledour ◴[] No.42145500[source]
It used to have darkmode++ back in the day, because windows allowed you to just choose all the controls colors in any way you wanted. Of course it lacks features we want today, especially things we are used to from the web, like highlighting fields with errors in them etc., but I often think new features can't entirely explain why the newer toolkits are so much less ergonomically useable.
replies(1): >>42148663 #
31. wiseowise ◴[] No.42145753{4}[source]
That’s not available on Web. Also relying on anything C++ is huge PITA (I’m aware of JS and QML).
32. memsom ◴[] No.42146270{3}[source]
So - to answer you two points:

Interface Builder was a lot more like VB and Delphi in the past, but around the time of iOS 3, Apple completely broke the UI programming metaphor in it. It used to be all drag and drop (with quirks) but actions were like event handlers and outlets like events. Before it was "code first" you could do it all in the UI. I used it quite a bit before XCode existed (XCode used to be ProjectBuilder, even on like Jaguar/Panther IIRC) and it was very close to the version of the same on OpenStep.

Xaml designer - well, the designer is not really a thing because Xaml is usually not created as an absolute layout. There was a version of the Xaml designer early on that would attempt to build a UI that looked absolute, but it did a lot of horrible Xaml markup in the background and made maintaining the UI way harder than it should have been. We (Xaml users) all migrated to using it as pure markup and mos of us now use hot-reload over a designer.

replies(1): >>42151667 #
33. peutetre ◴[] No.42146571[source]
Uno Platform will release a new visual editor soon:

https://platform.uno/blog/uno-platform-studio-featuring-hot-...

34. liontwist ◴[] No.42147144[source]
Motif is another great example where every component is focused on functionality. Everything can be driven by a keyboard, there is accessibility features, etc.
35. liontwist ◴[] No.42147171[source]
Dark mode would have been trivial with old toolkits because they used standardize look and feel. In fact motif lets you customize the color scheme through a text file.

Which can make each app fit the appearance of the given desktop.

Old guis also had more accssibility features.

The only thing modern ones have going for them is animation and visual customization.

replies(1): >>42148646 #
36. Pxtl ◴[] No.42147616[source]
Because web.

That said, the VB6 drag-and-drop interface was always flawed. 90% of the time you want to lay out controls in some kind of nest of layouts with clearly-defined resize and reflow behavior instead of "drag and drop wherever and YOLO if something changes size". A good GUI framework would nudge you towards that instead of free-form drag-and-drop wherever.

replies(1): >>42148627 #
37. shortrounddev2 ◴[] No.42147863[source]
I thought vs2022 deprecated the visual builder for some ui frameworks
38. throwaway2037 ◴[] No.42148083{3}[source]
I had no idea about Dynamic Layouts for MFC. Check it out! https://learn.microsoft.com/en-us/cpp/mfc/dynamic-layout?vie...
39. ◴[] No.42148301{3}[source]
40. lelanthran ◴[] No.42148627[source]
> Because web.

Which is a pity; I was watching a client do some crud work in a webapp.

Web - 1 form per page:

Click "back". Copy some text. Click forward. Paste it. Repeat for 3 different fields. Click submit.

Native apps (VB/Delphi/etc) used to be:

Open both forms. Copy and paste from one to the other. Open another one on the side to lookup some information, etc.

Webapps, even moreso with MPA, force a wizard-style interface - you only go forward through the form. This is not how people used to work; they would frequently have multiple forms in the same app open at the same time.

With SPA and html "windows" made out of movable divs you can probably support multiple forms open at the same time, but who does that?

41. Kwpolska ◴[] No.42148646{3}[source]
Old toolkits make it much easier to set the text color of some label to #444, which looks fine on a light background, but is very hard to read on a black background. Setting it to some well-defined MutedText color requires more effort, and it requires the toolkit vendor to have thought about named colors in the first place (and if there are named colors, they might not be meaningful like Muted or Success, but instead ButtonBackground or TooltipText).
replies(1): >>42150528 #
42. ibejoeb ◴[] No.42148647[source]
They really got it right the first(ish) time. The notion that you can examine a visual component and jump directly to the code is perfect. No files. Just the logical things that you're actually dealing with. Keeping a mental map of a filesystem and code is such an annoying mental burden.
43. Kwpolska ◴[] No.42148663{3}[source]
Changing control colors tends to break, since developers may set the text color to "really dark grey" without changing the background, so you get black on black.
44. liontwist ◴[] No.42150528{4}[source]
You can change background and button colors too.

Other point is noted. But let’s compare the alternative:

1. Fiddle with a config file for each app for a week. Distro includes this in dark mode set. 2. Each app writes custom code to listen for and adapt to dark mode events.

replies(1): >>42155753 #
45. marssaxman ◴[] No.42150539[source]
> Taste moved towards elaborate, deeply styled designs that communicated branding and away from familiar widgets that didn't call attention to themselves as all.

My taste did not; I experienced this shift as the triumph of designer ego over humble usability, and a little bit of my youthful love for computing died in the process.

46. runjake ◴[] No.42151667{4}[source]
> Interface Builder was a lot more like VB and Delphi in the past, but around the time of iOS 3, Apple completely broke the UI programming metaphor in it.

I guess I can see your point. I started with IB on OPENSTEP, then onto macOS in the 10.1 days. But even back then, I still think the feel wasn't quite the same, from my subjective viewpoint.

I keep having these strong urges of using Windows again and creating WinForms apps. But then I go and use Windows for a day and the lack of polish is so jarring. But gosh, Microsoft development was almost always fun.

47. tonyedgecombe ◴[] No.42155038{3}[source]
In general tools written for a single platform are better than their cross platform alternatives.
48. eternityforest ◴[] No.42155384[source]
HTML/CSS is still amazing if you aren't using one of the flat frameworks. Modern UIs are really nice for actual function, it's just the obsession with flatness that's the problem.

But with CSS you can get this kind of look, and then go even further, adding rounding and textures and all the things that are natural and obvious extensions on a high res screen.

49. Kwpolska ◴[] No.42155753{5}[source]
Let me restate the problem: I set my system-wide window background to black and text color to white. An app developer sets a label to dark gray text and default/transparent background. The end result is that I cannot read the label. Or the developer uses black icons on the toolbar — and I cannot use the toolbar, because I can’t see anything.

macOS introduced system-wide dark mode a few years ago, but app developers had to recompile and opt into it. This was done so that they could adjust their artwork and overridden colors to it. Windows 10 added dark mode, but only for "modern"/UWP apps. Classic Win32 apps need to implement their own dark mode with custom themes/controls (like Explorer does).

replies(1): >>42156352 #
50. alkonaut ◴[] No.42156352{6}[source]
Black-on-black is a big problem. You can't make an app use a dark mode unless it's painstakingly crafted to support it. Only trivial apps would work by changing some system-wide palette. Also, if there is any artwork (button icons etc) then that has to be done in two or more sets, for varying backgrounds. Few icons would work well on both a light and dark background.