[abstract] Introductory note

  • From: Ray Gardener <rayg@xxxxxxxxxxxxxxxxxx>
  • To: abstract@xxxxxxxxxxxxx
  • Date: Sat, 19 Feb 2005 23:12:47 -0800

Abstract is a cross-platform C++ development framework using a 
platform-neutral API model. The distinguishing characteristic from other 
frameworks, however, is that Abstract tries to also minimize the amount 
of coding necessary to implement typical GUI applications. Since GUI 
computing extends now over two or three decades the time really has come 
to take the common elements and set the abstraction model higher.

This concept is gone over on the Abstract website at
but to quote part of it here as a convenience:

"Want a splitter bar between two windowpanes? Well, normally you would 
explicitly code for that functionality. But if the panes in question are 
resizable, and you've placed them next to each other in a parent window, 
the bar can be automatic. There's no need to provide any more 
information, because the attributes of the windowpanes themselves are 
indicative enough of how the interface should behave. If you don't want 
the splitter bar, you don't think “remove the bar”. Instead, you think 
“make the panes fixed in size so that there is no logical need for 
resizing them.” At this level, the entire concept of splitter bar has 
moved from your solution domain down to the system. It's a feature that 
falls out as a simple logical consequence of the things you do have to 
mind (like viewpanes), and it's one less thing to worry about. Or to put 
it another way:

Nobody wants splitter bars.
What they want is for users to be able to resize windows.

Here's another example. Consider a window showing a subset of some 
datum. Traditionally, one adds scrollbars to the window and then writes 
a bunch of code to allow panning and maybe zooming. But the truth is:

We should be able to just indicate the datum's size.
The system already knows how large the window is.
And while we're at it, mouse positions should be reported in datum 


Other related posts:

  • » [abstract] Introductory note