Version 28 contains a long list of changes.
Firstly, I wrote a new version of the graphics library, for the higher resolution of 640x480. This library contains speed optimizations that the older 320x200 version did not. For example, many line drawing routines inline pixel drawing.
Where possible, groups of pixels are drawn at a time. Additionally, loops were optimized to rely more on temporary registers instead of memory accesses via stack operations.
Secondly, the GUI framework has been updated to rely on the new graphics library. This means that GUI applications now have access to more than four times the screen real estate as before.
Synchronization between GUI applications has been added. This allows starting GUI applications more easily. It also allows switching between such tasks seamlessly. The messaging system added in the previous version was used to implement this synchronization.
For quality of life, GUI applications can now invert palette (for a darker environment) and also switch all text to double-width, for ease of reading.
I wrote the DESKTOP application to serve as a hub from which GUI applications are started. Applications are specified in its configuration file - each receiving an icon on screen.
I also wrote the DRAW application, which lets the user draw on a canvas, using the mouse. The user can also load and save his masterpieces as bitmap (BMP) files. To help with saving, I wrote a new library called BMPS.
I've tested the bitmaps created by BMPS and they loaded successfully in both MSPaint and GIMP.
To make DRAW work, I introduced GUI framework's extension interface. This is a contract which allows new GUI components (extensions) to be written, without the need to modify the GUI framework core. The first two extensions I wrote were a colour picker and a text box.
An additional advantage of GUI framework extensions is that consumer applications select them "à la carte", thus avoiding unnecessary binary size increases.
To find out more, visit the Snowdrop OS pages