The big change this time around is the rendering system. Instead of each gadget needing to redraw itself when its appearance changes, gadgets now push their damaged rectangles to a queue that is redrawn every VBL.
In short - redrawing the screen is faster and the code is simpler.
The FreeType library and associated classes are no longer being distributed as part of Woopsi. Instead, Lakedaemon has put together a distribution of Woopsi that includes ported libraries and extra classes. These provide Woopsi with a wealth of extra functionality. His distribution can be found here:
On top of the FreeType library, Woopsi font classes and an "XmlBox" gadget, it includes DS ports of:
- libjpeg
- libmxml
- libpng
- libsqlite3
- libz
The full changelog is below.
Fixes:
- Removed freetype classes, library and example (Lakedaemon's distro will provide this functionality).
- Examples build script uses for loop instead of explicitly named folders.
- Gadget::checkCollision(Gadget) works correctly.
- Tests build script uses for loop instead of explicitly named folders.
- Fixed memory leaks in Text::getLineTrimmedLength().
- Rewrote RectCache::splitRectangles() for speed and clarity.
- Increased delays for SDL double click and key repeat times.
- Fixed memory leak in demo.
- Fixed memory leak in PackedFontBase::getStringWidth().
- Fixed memory leak in MultiLineTextBox::moveCursorToPosition().
- ScrollingPanel::scroll() redraws correctly on top screen.
- Renamed Text class to Document.
- Document class contains a WoopsiString instead of inheriting from it.
- Removed DimmedScreen class (not compatible with new rendering system).
- Removed erased flag from Gadget.
- Removed Gadget::erase().
- Removed Gadget::eraseGadget().
- Removed Gadget::redraw().
- Removed Gadget::redrawDirty().
- Removed Gadget::drawChildren().
- Removed Gadget::redrawDirtyChildren().
- ListData destructor does not fire list changed events.
- Removed AmigaWindow::redrawBorder().
- Removed Woopsi::eraseRect().
- Gadget::getChild() no longer returns a const gadget.
- Removed visibleRegionCacheInvalid flag from gadget.
- Removed Gadget::enableDrawing().
- Removed Gadget::disableDrawing().
- Removed drawingEnabled flag from Gadget.
- Gadget::remove() and removeChild() will trigger a redraw of the gadget's visible regions (ie. erase it) automatically.
- Pong uses a SuperBitmap as its display.
- WoopsiArray doubles in size each time it needs to grow instead of increasing by 100.
- ScrollingPanel::scroll() uses the new rendering system.
- Fixed FileRequester border.
- FileListBox re-raises ListBox value changed events.
- ListBox no longer raises events when deselecting options when double-clicked (correctly raised when selecting the correct option).
- Fixed horizontal position of text in left-aligned text box.
- ScrollingTextBox scrolls line-by-line when scrollbar is dragged instead of smooth-scrolling (easier to read).
- Added virtual destructor to ListBoxBase.
- Moved border size defines from window.h to amigawindow.h and made them consts.
- Changed DYNAMIC_ARRAY_SIZE define in woopsiarray.h to a const.
- Changed GLYPH_MAP_SIZE define in fontbase.h to a const.
- Changed defines in glyphs.h to consts.
- Moved SCREEN_WIDTH and SCREEN_HEIGHT defines into sdl/nds.h.
- Changed defines in defines.h to consts.
- Woopsi::handleKey() expects an s32 instead of a u32 as the heldTime argument.
- PadHeldTime struct stores values as s32 instead of u32.
- Gadget::getCloseType() is const.
- ScrollingTextBox and ScrollingListBox scrollbars move in steps instead of smoothly as their lists are scrolled.
- Rewritten slider logic again.
- ScrollingListBox scrollbar updates correctly as list changes or gadget is resized.
- ScrollingTextBox scrollbar updates correctly if gadget is resized.
New Features:
- Added makefile for demo - can now be built from command line.
- Added Rect::splitIntersection().
- Gadget rendering re-written to use damaged rects.
- Added equality and inequality operator overloads to Rect class.
- WoopsiArray accepts an initial reserved size parameter in its constructor.
- FileRequester includes filename textbox.
- Added FileRequester::getTextBoxFileName().
- Added Range class.