Dark Side of the Mac: Appearance and Materials
mackuba.eu
mackuba.eu
It’s kind of funny/sad to see how Apple operates with APIs. None of these concepts are really “new”: they were there, in Carbon, prior to Mac OS 8, in the days when that OS was meant to support really elaborate themes.
The original theme APIs were huge, and 3rd parties were expected to adopt them as needed (e.g. using appropriate theme selectors for fonts and background patterns). For about a year, things looked really cool: you could create a great Platinum-esque UI for any custom control, and it would fit right in.
Then, they threw it ALL away for Mac OS X, ironically right about the time when an appearance-agnostic API would make a lot of sense. They didn’t even bother to update their API implementation to ease migration: really trivial changes that would have been helpful, like “update the damned font/color/pattern value returned for X to resemble Aqua”, were not done. This meant that an app full of seemingly-appearance-agnostic code would look like crap under Aqua, and you had to rip it all out.
And it’s not like Mac OS X didn’t change its look. Heck, for a long time you could find 3rd party app bundles chock full of images that were there just to implement the Apple-Look-and-Feel-of-the-Week, because the SDK didn’t offer any reasonable way to do half of what they came up with.
So yeah, 14 versions later, the Mac wants to be appearance-agnostic again. Sounds great. My advice: always have the option of doing your own UI as a backup.
- xterm
- Paint
- Wordpad
We can argue how useful those versions of Wordpad and Paint are, especially with modern file formats, but they are usable. I won't blame you for disagreeing with xterm, but over 30 after it was first shipped it's still the closest thing to a standard terminal, and the UI is decent once you get used to it (and much like emacs, it's partially jarring at first because it predates some expectations).
In my experience as a Mac + iOS user and developer for the past 8 years, and for the rest of my life before that on Microsoft platforms, Apple's record has been much better compared to Microsoft re: abandoning APIs or pulling the rug out from under devs.
Take NSDocument for example. It has been around for almost 20 years. All you usually needed to do was inherit from it and adopt its interface and your app would often get new features for free with each release of macOS, like autosaving and version histories.
The foundations for multiple UI appearances have been there since macOS 10.10 Yosemite, 4 years ago. They were hard not to notice.
As a user and developer I'm glad they took the time to work out a sensible implementation that is very easy to adopt now and makes good sense for the future. It definitely seems to be in a better spot than Windows' support for multiple appearances currently, if it has any.
If you see the WWDC sessions on Dark Mode, you might come to appreciate the thought and effort they've put into it:
[0] Introducing Dark Mode: https://developer.apple.com/videos/play/wwdc2018/210/
[1] Advanced Dark Mode: https://developer.apple.com/videos/play/wwdc2018/218/
Often not making many APIs available in their latest programming technologies like .NET/C# (at least initially.)
WPF, Silverlight, the "Metro" experiment that lasted for a single (!) version of Windows (8), and great discontinued apps like PhotoDraw, are some of the other cases that personally affected me.
They changed the name to Modern UI, some reported [1] because it clashed with their German partner Metro AG. In any case Modern UI started with Zune and you could get for the time nifty looking media player for it on XP [2]. You can still see it in newer parts of Windows 10 with its aversion to skeuomorphic design, preferring text and minimalist 1 color icons.
[1](https://arstechnica.com/information-technology/2012/08/micro...) [2] https://archive.ledfrog.com/2011/06/microsoft-zune-software-...
Is that dichotomy still present in Windows 10?
See, it's a confusing exercise to even figure out what their sub-platforms are supposed to be called. Apparently they are now "Universal Windows Platform (UWP) apps (formerly Windows Store apps and Metro-style apps)" [0]
Do they have access to the full feature set of DirectX etc.? Do they have support for multiple appearances, Dark Mode, etc.?
[0] https://en.wikipedia.org/wiki/Universal_Windows_Platform_app...
UWP is what was WinRT on Windows 8, they have just been improving it all these years.
Of course they have access to full DirectX 11 and 12.
All new APIs are UWP based, and with they learned with the Desktop Bridge for Win32, they changed their strategy and are now merging UWP and Wi32 into a single container/store model.
Some of the talks related with it were done at MSBUILD 2018, check MSIX, .NET Core 3.0 roadmap, XAML Islands, XAML Direct.
If they don't change direction, in a couple of Windows releases they will be merged, with UWP continuously taking over Win32, like Win32 did before to Win16.
As for Apple, I can quickly refer to Object Pascal, Quickdraw 3D, JavaBridge, Quickdraw Java APIs, A/UX, Dylan, Newton, MCL, Hypercard....
Active Desktop, Briefcase, CardSpace, Meeting Space, NetMeeting, Windows Sidebar, Desktop Gadgets and Windows SideShow (which displayed gadgets in a secondary screen on laptop lids etc., kinda cool at the time but I never saw an implementation in the wild), Office Assistant (Clippy in the File Explorer), Encarta and the rest of the edutainment product line (which were actually great and often used as a selling point for PCs at the time), XP themes, HTML thumbnails, the Comic Chat IRC client (my first gateway to social interaction on the internet), the SideWinder game controllers for PC (including the Dual Strike [0] which was way ahead of its time), MSN/Live Messenger, Photo Gallery, Movie Maker, Visual Basic, FoxPro and many others... :)
(Although Comic Chat was pretty cool, with all those Jim Woodring characters and backgrounds, and the emotional pie menu.)
http://www.mermeliz.com/files/mschat_summary.htm
One question: After being exposed to Comic Chat as your first chat client, do you now visualize everyone you chat with and your online environment as if they were drawn by Jim Woodring?
http://www.jimwoodring.com/artwork/gallery
You lucky bastard!
The discontinuation of many of those things personally affected or disappointed me at the time. I distinctly remember mourning some of them:
- Losing people who only ever used Comic Chat and didn't make the migration to other services.
- The end of offline Encarta at a time when my internet wasn't very cheap, fast or reliable.
- Owning some great PC joysticks but not being able to utilize their full haptic features with newer APIs, before the joysticks themselves went out of production, when Microsoft's console division cannibalized their PC gaming division.
- A cool vector graphics editor [0] that worked better for me than Adobe or Corel getting discontinued after 2 versions.
The point of this whole thread is developer confidence, and I have felt betrayed and abandoned by Microsoft many times but I have yet to experience that during my time on Apple platforms.
Apple's current APIs are impressive and very forward-looking, and the only times I felt that optimistic about Microsoft was just before they broke their promises.
Cool link by the way, I hadn't known of Jim Woodring before today!
I made my first game with HyperCard, sadly lost to time unless the floppy is still sitting in some middle-school computing lab's storage room and hasn't degraded beyond readability.
Even recently I had a hobby project where VB 1.0 for DOS was a quick and easy way to hack together a GUI.
I'm saddened by the fact that "modern" desktops are increasingly becoming consumption-only devices. Personal computing is near death and no one seems to care much.
I have been lamenting the loss of the ability to code as soon as you switched on a computer, ever since I moved from a Commodore 64 to an IBM PC clone. :)
You can’t even use $500+ devices as a simple calculator without an “app.”
We need more stuff like Swift Playgrounds, preinstalled on operating systems, but would people care?
The first thing almost everyone wants to do is open a browser and log on Facebook etc.
What's worse, it's even more difficult for me to build them a solution. If these systems came with something as powerful as Hypercard was on Macs in the early 90s, I could make them something they could maintain themselves, and it would have a GUI and everything. Today I have to go through an enormous build process and all kinds of hoops just to wrap simple tasks in a usable UI. This is NOT personal computing!
I think one part of the issue is that an entire generation or two of personal computing users has now grown up with only this "consumer" mentality and they have no idea what they're missing, what was abandoned more or less in the 90s. It's a very frustrating and sad state of affairs — but also one primed for a change.
QuickTime Wired Sprites.
http://www.itg.yale.edu/2008/03/28/quicktime-media-skins-and...
ScriptX.
Apple Media Tool.
Sk8.
Gestalt Manager.
Code Fragment Manager.
Now where did I put those Abandoned Apple API BINGO cards???
The best that could be said for most of Apple's file systems is that at least they didn't murder your wife.
https://en.wikipedia.org/w/index.php?title=Comparison_of_fil...
It was barely dogfooded at all by Microsoft themselves and the future we got instead was the bland, inferior “Metro” experience.
WPF was used in Visual Studio.
Not even Calculator or Notepad used WPF as far as I know, which would have been the simplest apps to port and could have bolstered developer confidence in the technology (the point of this whole discussion.)
And why is it "was"; does VS now not use WPF?
[0] https://en.wikipedia.org/wiki/Microsoft_Expression_Studio
For that matter even winforms is still available.
The Metro UI evolved into windows 10 UWP, and practically everything that was in Metro UI can be transferred to UWP, down to the homescreen widgets.
Silverlight and DirectInput are still available, though they are deprecated they haven't been removed. Silverlight even had security updates released as late as a year ago [2]even though it has been deprecated since 2015
[1] - https://github.com/Microsoft/dotnet-framework-early-access/b...
[2] - https://www.microsoft.com/getsilverlight/locale/en-us/html/M...
Support for the Win16 API has been abysmal recently. My limited experience of old DOS and Windows applications is that they often run better under dosbox or wine than native.
https://en.wikipedia.org/wiki/Microsoft_Speech_API
While Apple's speech APIs, for all their huff and puff and other legitimate work on accessibility, are totally lacking, way behind, locked away from third party developers, and sadly deficient for application developers who need more than the most basic off-the-shelf features.
For example, SAPI has for decades been able to a send mouth positions (visemes) synchronized with the speech, to animate the lips of the Wizard or Rover the Dog or Clippy (or whatever a paperclip uses to articulate), which is proven to improve speech understanding. But not a peep from Apple's speech API -- their lips are sealed.
https://www.codeproject.com/Articles/1609/Converting-Text-To...
Actually abandoning APIs is very much one of them.
While programs written in older API still work, MS is notorious for abandoning APIs (as opposed to removing them) and asking developers to support its new shiny thing even faster than Apple changes frameworks (heck, you could still compile NeXT apps 30+ years later, and the frameworks where still supported, albeit with some alterations).
MS always invents new frameworks and APIs every 2-3 years for the same thing, e.g. GUI programming (or at least used to, haven't followed for the last several years).
It has had pretty much what Apple are implementing since Windows 10. Dark mode and a custom highlight colour that gets applied across the OS.
Of course like on MacOS developers have to be using the latest UI framework to take advantage of this which unfortunately on Windows developers are a fair bit slower on the uptake than on MacOS.
Then again, I don't expect to see much uptake on the Mac side either considering I can't remember the last time I installed a new app and it was a native AppKit(?) UI and not just an Electron app.
The last time I checked Windows 10 did not support Dark Mode across all apps, not even its own File Explorer (unlike Finder and almost all other apps and applets that come with macOS Mojave.)
Has that changed? Do many third-party Windows apps support Dark Mode by now?
> Of course like on MacOS developers have to be using the latest UI framework
From what I remember from the WWDC sessions, I think you can choose to target the second-last macOS release (10.13 High Sierra) and still opt-into Dark Mode support on 10.14 Mojave.
> Then again, I don't expect to see much uptake on the Mac side
Pretty much all "heavy editing" apps like Final Cut, Affinity, Pixelmator Pro or even players like VLC use native AppKit and already offer an option for a custom dark mode or the official limited opt-in version that has been available since macOS 10.10 Yosemite.
That’s because apps were supposed to migrate to Cocoa rather than sticking with Carbon.
> 14 versions later, the Mac wants to be appearance-agnostic again
Ten versions. NSAppearance is 10.10+.
Next time you can stop here:
I’m not sure I trust Apple.
That's almost 20 years ago, and for very good reasons: moving to a whole new OS, with a new graphics pipeline and UI engine, and one they especially wanted to tout.
If that's the reason you don't trust Apple to support the "dark mode" APIs going forward, then that's bogus.
>So yeah, 14 versions later, the Mac wants to be appearance-agnostic again.
Were "the Mac" is a very different OS (the legacy Mac OS vs NeXT based OS X), by an almost totally different company compared to the one that created the original Mac OS 6, 7, 8, 9 and co. And 14 versions later is 18+ years on.
At which point do you draw the line?
Should we also be concerned for what Sculley era Apple did to some APIs?
Furthermore, an awful lot from those days had recently been touted as “the future”, encouraging developers to invest more heavily than they might have otherwise. It would have been more future-proof to not to adopt the API wholesale and just hack in fonts and metrics everywhere but no one knew it at the time.
Had they simply kept using the API, it would have naturally evolved over 20 years. It wouldn’t look the same today (it would probably be way more powerful than NSAppearance) and developers wouldn’t feel like time was wasted.
They could have even created an immediate NS-wrapper for the older API back then (as they did for certain things), if supporting C long-term wasn’t palatable.
No, but they were also created for the previous OS. Not merely the previous release of the OS, a totally different OS.
>Furthermore, an awful lot from those days had recently been touted as “the future”, encouraging developers to invest more heavily than they might have otherwise
Sure, that was bad. But that was the last steps of a dying company, and probably touted as such before Jobs and co took the helms. The decision to drop lots of existing stuff and focus on a totally new platform is what turned the fate of the company around. At least in retrospect we can say it worked great, even if there were some casualties along the way.
Compared to the theme API, I'd more lament Yellow Box (which was a NeXT based technology anyway), and perhaps WebObjects (ditto, and ahead of its time).
That said, I really liked the "Platinum" (I think was the name) OS 8 look, and used to mimic it on Linux through cheapo wm themes.
(which, in the case of 8 and 10, is close to no style, little more than lines on solid rectangles.)
Honest question: how simple would this have been considering the fact that they switched to an entirely different OS, as coldtea points out?
I vaguely recall finding a few bugs with Finder as well, where if you switched back and forth it wouldn't update all colors correctly. Of course, it worked fine after restarting the app... But if Apple's own apps have bugs relating to this, it wouldn't surprise me if it's a common problem for other third-party apps.
Another thing people might wanna try out relating to macOS appearance is going to System Preferences -> Accessibility -> Display, and enabling "Increase contrast". It makes some colors look a bit uglier, but I really love how it makes all UI elements stand out. For anyone that doesn't have macOS, or is too lazy to try it out, here's two comparison pictures:
* Default appearance: https://imgur.com/W93o3Md
* Increased contrast: https://imgur.com/oocjMPs
A bit tangential... I'm hoping that at some point you can use a media query on the browser to test for this value. For example, there's already prefers-reduced-motion [0] on WebKit. I've definitely seen a GitHub issue at some point suggesting that a similar media query be added for users that prefer higher contrast interfaces, but I can't find it at the moment. Unfortunately when I last checked it didn't seem like there was much interest; as usual, accessibility features seem to take a backseat with many browser vendors.
[0] https://webkit.org/blog/7551/responsive-design-for-motion/
You can also try increasing the "Display contrast" slider (to around the 3rd notch) while in Mojave Dark Mode, to remove the soft gray from the window chrome and replace it with truer black.
It affects all other colors of course, but it can improve reading/writing for those of us burning the midnight oil.
Here's a link to previews of some popular schemes (from the Internet Archive): https://web.archive.org/web/20060925184709fw_/http://www.kal...
Sadly, modern OS will probably never allow this level of customizability...
[1] https://en.wikipedia.org/wiki/Kaleidoscope_(software) [2] https://en.wikipedia.org/wiki/Copland_(operating_system)