I’ve actually been able to use QW for writing lately, hurrah! Specifically I’ve gotten back to editing my first book (it’s been close to a year since I last looked at it) and found that I actually quite like my own writing and I’m not polishing a turd, double hurrah!!
But my mind is again turning to the future of QW and to that end I started trying to get the Mac version up and running.
I’ll save you the long version so you can stop reading now. QW on a Mac won’t be happening for quite a while. Not until at least version 3 when I plan to move QW to JavaFX which is the replacement for Java Swing.
Over the past week I’ve been tinkering around, trying to make QW not look like utter arse on my Mac. But there are so many things wrong I’ve come to the conclusion that I’m best off waiting.
QW is currently uses Java Swing, which is a fantastic toolkit for doing just about anything that you might want to do in a GUI. The problem is that it is also a verbose, complicated mess that is poorly documented, has non-intuitive design and tempremental behavior. A substantial amount of my development time is spent dealing with these quirks and oddities (don’t get me started on layouts and component sizes). However, with effort, as QW shows, you can produce something that looks nice and behaves well. A lot of this success comes from the use of a amazing LNF (look-n-feel) called JGoodies. It handles a lot of the underlying gubbins needed to make components look like they should on Windows.
Now, Macs have a similar project, called Quaqua however it is has recently fallen into disrepair, for example it doesn’t use the new font for El Capitan and there are a number of visual issues with it. Don’t get me wrong it is also an amzing project but the number of tweaks and twists required to make QW look even close to how it does on Windows would be huge and some behavior I struggling to understand. For example, in some places moving your mouse over a button shows a background, in other places it doesn’t. I would have to change that behavior and probably have to create new components to get the look and feel I’m after.
The way full screen works on Macs is also different. QW spoofs full screen behavior, this is because Windows handles full screen apps very badly, Java Swing handles it even worse. QW’s full screen is designed to give you a semi-locked in space, where you attention can be kept on the text but you can break off to do something else then come back to it. Java’s full screen behavior is to exit from full screen whenever you give focus to some other window which is NOT what you want. So QW just makes the window full screen size and removes the chrome (the title bar and buttons) so you can’t do anything with the window. You get the look of full screen but the behavior of a standard window. Now on a Mac QW has the app menu bar at the top, this means I’ll have to change the behavior to use real full screen to get rid of it. Lions, tigers and bears, oh my…
I’ve always known that Macs handle tabs badly and nothing I’ve been able to do has made it better. The default way of handling a tabbed panel in Quaqua is to put a god-awful border around the panel obliterating the visual design. I can remove the border at the expense of how the tabs themselves look and I’d have to start drawing my own borders around components. Spiders, wolves and snakes have now joined the throng…
The menu bar itself is a problem for QW. I’ve had a couple of people complain about the lack of a menu bar in QW but I’ll be honest, menu bars need to die. They are great at hiding functionality but they actively hamper feature discovery and muscle memory. Menus are needed, QW uses them in many places but sticking everything on a bar and hoping the user can find the relevant function by digging around in multiple menus is what I consider an antifeature (I’m aware I’m using this word in the wrong way, there isn’t a better term). It makes the user’s life difficult for no tangible benefit and I consider it to be lazy design. There is a reason browsers removed menu bars and why Microsoft introduced the Ribbon. So QW will never have a standard menu bar. There are certain global features that you could put on one but they would be limited, perhaps a list of open projects, open a project and preferences, help, contact support. Even preferences is contextual though, different preferences are shown and relevant in the Projects window and in a standard Project.
I could go on, and so I will, but briefly. The default colors for highlights aren’t compatible with QWs design using Quaqua, the drop shadow on popups is too dark, the mouse behavior is different, the control key is different (Macs effectively have 2 control keys), nothing seems to have the correct opacity and there are suprious borders drawn in various places. All this and I haven’t even checked the functionality!
So, to sum up, there are lots of issues in the way for making a Mac version of QW. I’m hoping that when I move to JavaFX many of these problems will disappear but that remains to be seen. Apparently JavaFX uses a CSS style component skinning (think web pages) so changing how things are styled between platforms would be simple, if Mac, use this, if Windows, use this instead.
The next obvious question of course is when will QW version 3 appear? To be honest I don’t know. It is something I’m going to start looking at but I’ll be moving to a whole new architecture and way of doing things which means time. Yes you can embed Java Swing components in JavaFX but how that works in practice (and how well it works) is something I’m ignorant of.
Watch this space, I’ll keep you updated 🙂