HIG
From SkyOS
Lakedaemon
Modern OS do desktop compositing. Why not go all the way and implement desktop compositing like the image manipulation software do it with : layers, clipping, alpha channels ? In pour desktop, let's use all the good stuff found by the image manipulation guys ! (the desktop is an image after all).
For example, a nice improvement to the windows paradigm would be Windows / Borders /Buttons that can have any (non-rectangular) shape :
Basically, in most OS (except Beos,...) windows do have rectangle shapes as rectangles are one of the simplest and most useful shape there is. Yet, rectangles aren't the best solution for every problem : there have been times when I wished the windows/borders/buttons of some of my apps had other shapes.
Possible Applications
The start menu : what about a ROUND button.
The Dock : why a rectangle ? I'm sure we can find a better looking shape for that.
The icons on my desktop : what if I want to change the shape of this shortcuts that clutter my desktop to make them transparent and take exactly the shape of the objects featured in my background wall paper :
What if I want a mp3 app that have the look of a stereo, mixers that look like reality mixers, etc...
For looks
Would you rather have rectangular shoes or shoes with a shape adapted to your feet and with a great design ? Human interfaces and GUI aren't shoes, yet you like them better when they are nice looking, with the right amount of eye-candy.
Now, there have been little efforts in most oses to enhance the appearance of windows : with transparent borders, round corners...or weird shape inside a clipped rectangular window. Well, this is fine...but it is just a band aid on the problem : having windows/borders/icons/buttons that can have any shape is a much more flexible and powerful solution.
Borders could be asymetric, skin designers would have the power to truly design UI that surpasses 10 times the best that Apple can produce today.
For productivity
Damn, if you maximize your firefox window while surfing on the web, you will understand the problem : half of the screen is useful stuff (the actual HTML page) but the other half is just white empty void, because a rectangular window encompasses everything. And this useless empty white void hides what is behind and that could be a nice background (everything is nicer than a few millions white pixels) or another usefull window.
And what if you want to divide your screen in two triangles separated by the upper right corner to lower left corner diagonal ? This could be done easily with 2 windows that can have triangular shape but what about our 20 years old windows....
For new usages
Now...if buttons can have any shape, you could have a background image (say a picture of a room) and have the buttons take the shape of the objects in the room, say for example that the button on the drawer goes to your HD, the buttons on your stereo launches a mp3player, ...
On the technical side
First, let's define how a non-rectangular window could be designed : with horizontal lines (say the coordinates for the first pixel of a line and the length of the line) Some example of non-rectangular window :
----
---------
------------
-------------
-------------
-------------
-------------
-------------
Now...this non-rectangular window is not that different of a rectangular window : As you still use horizontal lines (yet with varying length and offset), you can still paint it very quick (you still move/copy long length of bytes with asm/C++ code). So you don't have to trade of speed of drawing for shape.
Second : of course, you need to know if the mouse is over a non-rectangular button/window so that you can implement events like mouse clicks, drag and drop, resize operation...
Now, this could be done quite easily, without losing lots of speed as you could divide your screen in little rectangles say in 256 rectangles with dimension 100*75 (for a 1600*1200 resolution) and all these rectangles would point to a (very short, you can't sanely put that much buttons in such a little rectangle) list of button that intersect with the rectangle.
Now, looping through the few buttons of the rectangle and checking if the mouse is inside or not is quite fast as you first get the horizontal lines that correspond to the y mouse coordinates and then you only have a few comparisons to make with the x mouse coordinates.
This algorithm is probably not the better way to do that, but my point is :
if a talented coder want to implement non-rectangular windows/borders/buttons, he can easily do it and find an efficient (better than the one suggested) algorithm.
You only have to think a little bit about it.
So basically, you only have to divide by 16 (move bits right) your mouse coordinates to know in which rectangle you are
Robert
SkyOS does all this already, the desktop composing uses images and plugins which can manipulate this images when composing. (e.g. the transparent windows are done with the alpha_blending_layer_plugin. Every window can have any window shape (check the new theme documentation for this). So to conclude, its just a matter of a new theme with different window shapes
Sir Geoff
Why do we even have to use the background that a program (or a web page) gives us?
The generic wiki page layout is a good example of this. There are the useful bits and pieces, like the text insertion box that I'm typing in right now, and the links around the page that will take me where I want to go after this, but there is a lot of white and gray space that isn't being used. Could interactable pieces of web pages be extracted from the source and presented with whatever else you're working on in the background? Imagine writing in a clear text box where the words are appearing over top of whatever else you have running in the background! (yes, not always beneficial, but there would be times...)
Alternatively, what if each piece of useful interaction on a page (for example: the navigation, search, and toolbox boxes on the side of the wiki page) could act within it's own window. Perhaps I don't want to use the navigation box. Why should it be there? I want to be able to use that space to show something else. Perhaps a history of all the pages I've been to recently. Or perhaps I'm used to firefox's search box being in the top right hand corner of the screen? why should I have to leave the wiki search box on the left hand side of the page? I want to put it up with the other search boxes in the corner.
