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.