Having dipped into the undocumented frame class used by NSWindow to handle the parts of a window not directly under the control of the application program, its time to go further. Let's dig into the methods exposed by the frame class hierarchy. The hierarchy of undocumented classes will become obvious if you checked out the …
I started to read this article...
And then realised that life is too short.
There are 10 people in the world who are interested in this article.
yes, that IS binary.
Is MAC OS so bad that...
The API is generally locked to change window appearance?
I think i'm missing the point, why is this OS so good fan bois?
On two levels. One it's interesting to hear about undocumented features. Two it's interesting that anyone still thinks that undocumented features are something that should ever ever ever be used.
If you want to see...
...the long term effects of using undocumented OS features, can I recommend Raymond Chen's blog (http://blogs.msdn.com/oldnewthing/) or better still, his book (http://www.informit.com/store/product.aspx?isbn=0321440307) to see how much long term grief and lost features that result from s- called professional programmers using undocumented OS APIs.
"The API is generally locked to change window appearance?
I think i'm missing the point, why is this OS so good fan bois?"
Yup. You're missing the point. OS X is good precisely because some fuckwit programmer can't (easily) decide that Apple's UI guidelines are wrong and therefore I am going to enjoy my window title in 24-point Comic Sans with a flashing yellow background.
Jamie Zawinski expressed it better than I can when he said:
"Whenever a programmer thinks, "Hey, skins, what a cool idea", their computer's speakers should create some sort of cock-shaped soundwave and plunge it repeatedly through their skulls."
Paris, because she might be interested in that.
Been to MySpace at all? *That's* what happens when you let everybody design their own bit of interface for your software.
..i have no clue of OSX, but there must be an official way to get rid of any window decoration, surely (i'm thinking of apps like media players or widget style that pretend not to be a window).
Once you have that, it's out of your hands anyway. Speaking in Windows terms (as i don't know the Apple ones). Give the man a window handle (HWND) and its device context (HDC) and he has Width x Height of screen estate to fuck up.
But: While i agree with this Jamie Zawinski quote, there is plenty of room to mess up a GUI badly using standard controls and not really violating any UI guidelines. On top of that, yes a GUI is what the user sees of the app, but there are a bazillion other things you can do wrong and much worse. With a GUI, in the worst case it is not usable.
No icon because there is none with a red title, yellow background and excessive drop shadow in 4 directions.
It is possible to have a window with no header, essentially enabling you to make your own UI. Kai's PowerGoo is one application that decided to make their own GUI... and I think they intentionally made it confusing.
Windows has a lot more flexibility when controlling aspects of the GUI. However, there are some really ugly-assed Windows applications out there (mostly freeware and shareware) with no sense of good, usable GUI design at all.
The Mac OS X restrictions help reduce bad design. It's pretty rare that you find a freeware or shareware OS X application that looks like shit.
> The Mac OS X restrictions help reduce bad design. It's pretty
> rare that you find a freeware or shareware OS X application
> that looks like shit.
True enough. I remember when VB first came out for the PC, and everyone freaked because of the psychedelic user interfaces that could be put together with a few mouse-clicks.
Personally, in a commercial app, I'd hardly ever see the justification in using these specific techniques, unless I was intentionally setting out to create an alternative look like -- as you say -- the PowerGoo stuff. Next month, I promise to be much better behaved.... but still undocumented.... ;-)
I too am starting to wonder about the point
There are so many interesting _supported_ parts of Cocoa that could use articles like these...why do we care about hacking around in private methods?