47 lines
1.9 KiB
Text
47 lines
1.9 KiB
Text
Roo/E, the Kangaroo Punch Portable GUI Toolkit
|
|
Copyright (C) 2022-2025 Scott Duensing
|
|
|
|
http://kangaroopunch.com
|
|
|
|
|
|
GOALS
|
|
~~~~~
|
|
Roo/E is designed to run on any platform that provides at least keyboard and
|
|
mouse input with a bitmapped display. The current mimimum target is a 486
|
|
running MS-DOS with a VESA 2.0 compliant SVGA display.
|
|
|
|
Unlike most low-end windowing systems, Roo/E should provide "solid" rendering
|
|
at all times. Dragging and resizing windows should not result in wireframe
|
|
representations of the window, nor should window operations interrupt or pause
|
|
the content in the windows.
|
|
|
|
Minimized windows display a live view of the entire window contents so users
|
|
can continue to monitor their activity.
|
|
|
|
Widgets and other window contents should instantly appear. No watching them
|
|
being drawn to the display.
|
|
|
|
Roo/E should be thread friendly.
|
|
|
|
|
|
IMPLEMENTATION
|
|
~~~~~~~~~~~~~~
|
|
In order to reach these goals, Roo/E trades memory for speed. Many surface
|
|
caches are used to reduce the amount of redraw needed at any given time.
|
|
|
|
When new windows are defined, they specify the maximum bounds of their
|
|
content. This means no endlessly scrolling windows as is common in word
|
|
processors and web browsers. On creation, a new off-screen surface is
|
|
created with these maximum bounds. This allows widgets to be drawn in the
|
|
window without consideration for clipping. Just keep it inside the window!
|
|
|
|
The "window manager" handles window chrome and blitting window contents to yet
|
|
another surface. This cached surface is updated when anything in the window is
|
|
"damaged".
|
|
|
|
Finally, these chromed surfaces (or icons if minimized) are positioned and
|
|
dirty rectangles are calculated. Dirty rectangles are then merged, if
|
|
possible, to reduce the number of blits required to update the display. This
|
|
rectangle list is then blitted from the apporpriate cached surfaces to the
|
|
actual display. This results in the entire display being redrawn but with no
|
|
overdraw.
|