Added notes.

This commit is contained in:
Scott Duensing 2025-01-01 18:07:35 -06:00
parent be6c0a9439
commit 211c49d23e

47
roo_e/notes.txt Normal file
View file

@ -0,0 +1,47 @@
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.