Woopsi - DS GUI Framework v1.3
Moderators:krom, SimonB, tepples, poslundc, wintermute, luna_s
Version 0.38 is now available!
http://www.sourceforge.net/projects/woopsi
There are quite a few under-the-hood changes this time around. First of all, Quirky (of Bunjalloo fame) supplied patches for half a dozen crashes, which are all now fixed. There are a number of other miscellanous bugfixes in there too. The only fix likely to have an impact on user code is the renaming of "Gadget::draw()" to "Gadget::redraw()", which is a workaround for a problem with GCC.
In terms of new features, it is possible to get at each gadget's child gadgets, and get a count of those children. The event system has had a major overhaul and is a lot easier to work with now. I've also done a lot of optimisation to try and speed things up, and added some new features to the GraphicsPort. It is now possible to copy rectangular areas of the framebuffer around, scroll rectangular areas, and dim rectangular areas (DimmedScreen style).
- Fixes:
- Removed PALib dependency from filerequester example.
- FileRequester gadget fixed for devKitARM r24 (Quirky).
- ListBox redraws correctly when an option is selected in single selection mode.
- Fixed crash in SliderVertical when trying to set value if max and min values are the same (Quirky).
- Fixed crash in SliderHorizontal when trying to set value if max and min values are the same.
- Fixed FileRequester crash when path has trailing slash (Quirky).
- Fixed double-click in SDL (Quirky).
- FileRequester fixed for SDL (Quirky).
- SDL path fixes (Quirky).
- Escape key to quit in SDL mode (Quirky).
- WindowBorderTop and SkinnedWindowBorderTop no longer have pointers to freed memory if window title changes (Quirky).
- ScreenTitle and SkinnedScreenTitle no longer have pointers to freed memory if screen title changes (Quirky).
- Flipping window depth with depth gadget no longer results in corrupted window contents.
- Fixed const-correctness of various Text class methods.
- SDL framebuffers initialised to black.
- More doxygen fixes.
- Removed WoopsiArray::begin().
- Removed LinkedList::begin().
- Renamed Gadget::draw() to Gadget::redraw() and removed unnecessary overloads from all classes.
- Const correctness fixes in Gadget class.
- ScrollingTextbox adjusts scrollbar grip position correctly when first initialised.
- Alert box draws XOR rect correctly when released.
- Requester draws XOR rect correctly when released.
- WoopsiKeyboard no longer adds itself as the decoration event handler twice; fixes XOR rect drawing when clicked/released.
- New Features:
- Added Gadget::getChild() and Gadget::getChildCount() (for leonelhs).
- Added context menu example (for leonelhs).
- ListData class raises events to ListDataEventHandler objects.
- ListBox listens for ListData events.
- Added base template class for event args passing.
- Refactored gadget event system:
- Replaced EventArgs struct with GadgetEventArgs class.
- Renamed EventHandler to GadgetEventHandler.
- Gadgets can now have multiple event handlers.
- Replaced handleEvent() method with multiple methods.
- Removed EventType enum from GadgetEventHandler.
- ListData events passed by references instead of pointers.
- WoopsiKeyboard includes a set of new events:
- Press
- Release
- Repeat
- WoopsiKeyboard no longer stores the last key clicked.
- WoopsiKeyboard has set of event-related classes:
- KeyboardEventHandler
- KeyboardEventArgs
- Refactored context menu event system:
- Added ContextMenuEventArgs class;
- Removed "_value" from ContextMenu;
- Removed "getContextMenuValue()" from Woopsi;
- Selected context menu item now accessible via ContextMenuEventArgs::getItem().
- Slider grip automatically resizes; no need to call resizeGrip().
- End point rects now cached (sans child rects) for extra speed.
- Gadget rect caching moved into separate RectCache class.
- RectCache::removeOverlappedRects made non-recursive.
- Gadget::clipRectToHierarchy made non-recursive.
- Added GraphicsPort::copy() to copy regions of the framebuffer around.
- Screen dragging code improved; uses new GraphicsPort::copy() method.
- Added GraphicsPort::scroll() to scroll regions of gadgets.
- Removed scrolling code from ScrollingPanel and rely on new scroll() method instead.
- Added GraphicsPort::dim() function to add DimmedScreen functionality to all gadgets.
http://www.sourceforge.net/projects/woopsi
There are quite a few under-the-hood changes this time around. First of all, Quirky (of Bunjalloo fame) supplied patches for half a dozen crashes, which are all now fixed. There are a number of other miscellanous bugfixes in there too. The only fix likely to have an impact on user code is the renaming of "Gadget::draw()" to "Gadget::redraw()", which is a workaround for a problem with GCC.
In terms of new features, it is possible to get at each gadget's child gadgets, and get a count of those children. The event system has had a major overhaul and is a lot easier to work with now. I've also done a lot of optimisation to try and speed things up, and added some new features to the GraphicsPort. It is now possible to copy rectangular areas of the framebuffer around, scroll rectangular areas, and dim rectangular areas (DimmedScreen style).
- Fixes:
- Removed PALib dependency from filerequester example.
- FileRequester gadget fixed for devKitARM r24 (Quirky).
- ListBox redraws correctly when an option is selected in single selection mode.
- Fixed crash in SliderVertical when trying to set value if max and min values are the same (Quirky).
- Fixed crash in SliderHorizontal when trying to set value if max and min values are the same.
- Fixed FileRequester crash when path has trailing slash (Quirky).
- Fixed double-click in SDL (Quirky).
- FileRequester fixed for SDL (Quirky).
- SDL path fixes (Quirky).
- Escape key to quit in SDL mode (Quirky).
- WindowBorderTop and SkinnedWindowBorderTop no longer have pointers to freed memory if window title changes (Quirky).
- ScreenTitle and SkinnedScreenTitle no longer have pointers to freed memory if screen title changes (Quirky).
- Flipping window depth with depth gadget no longer results in corrupted window contents.
- Fixed const-correctness of various Text class methods.
- SDL framebuffers initialised to black.
- More doxygen fixes.
- Removed WoopsiArray::begin().
- Removed LinkedList::begin().
- Renamed Gadget::draw() to Gadget::redraw() and removed unnecessary overloads from all classes.
- Const correctness fixes in Gadget class.
- ScrollingTextbox adjusts scrollbar grip position correctly when first initialised.
- Alert box draws XOR rect correctly when released.
- Requester draws XOR rect correctly when released.
- WoopsiKeyboard no longer adds itself as the decoration event handler twice; fixes XOR rect drawing when clicked/released.
- New Features:
- Added Gadget::getChild() and Gadget::getChildCount() (for leonelhs).
- Added context menu example (for leonelhs).
- ListData class raises events to ListDataEventHandler objects.
- ListBox listens for ListData events.
- Added base template class for event args passing.
- Refactored gadget event system:
- Replaced EventArgs struct with GadgetEventArgs class.
- Renamed EventHandler to GadgetEventHandler.
- Gadgets can now have multiple event handlers.
- Replaced handleEvent() method with multiple methods.
- Removed EventType enum from GadgetEventHandler.
- ListData events passed by references instead of pointers.
- WoopsiKeyboard includes a set of new events:
- Press
- Release
- Repeat
- WoopsiKeyboard no longer stores the last key clicked.
- WoopsiKeyboard has set of event-related classes:
- KeyboardEventHandler
- KeyboardEventArgs
- Refactored context menu event system:
- Added ContextMenuEventArgs class;
- Removed "_value" from ContextMenu;
- Removed "getContextMenuValue()" from Woopsi;
- Selected context menu item now accessible via ContextMenuEventArgs::getItem().
- Slider grip automatically resizes; no need to call resizeGrip().
- End point rects now cached (sans child rects) for extra speed.
- Gadget rect caching moved into separate RectCache class.
- RectCache::removeOverlappedRects made non-recursive.
- Gadget::clipRectToHierarchy made non-recursive.
- Added GraphicsPort::copy() to copy regions of the framebuffer around.
- Screen dragging code improved; uses new GraphicsPort::copy() method.
- Added GraphicsPort::scroll() to scroll regions of gadgets.
- Removed scrolling code from ScrollingPanel and rely on new scroll() method instead.
- Added GraphicsPort::dim() function to add DimmedScreen functionality to all gadgets.
Awesome, looks like I have some work ahead of me now! :)
fileNinja - https://sourceforge.net/projects/fileninja/
Version 0.39 is now available!
This release includes the usual set of bugfixes. New features are mainly centred around testing the library - there's a new "tests" folder which will grow into a comprehensive set of test harnesses for every UI gadget. The two existing tests have already highlighted a number of bugs in the tested gadgets, all of which have been fixed in this release.
Additionally, this release adds the ability for Woopsi applications to load and save 24-bit BMP files.
Download it at the usual place:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- Removed framebuffer-hitting code from DimmedScreen gadget and replaced with call to GraphicsPort::dim().
- ListBox removes itself from its ListData object when deleted.
- Keyboard example shows cursor.
- Moved DimmedScreen into woopsi folder as an official gadget.
- CycleButton::getPreferredDimensions() populates rect with correct values.
- Const fixed Gadget::getRefcon().
- Gadget::disable() and Gadget::enable() redraw the gadget by default.
- Fixed clipRectToHierarchy() bug introduced in switch to non-recursive function in last release.
- RadioButtonGroup redraws when resized.
- RadioButtonGroup returns correct dimensions from getPreferredDimensions().
- Updated copyright notice in defines.h.
- Bitmap::getPixel() works correctly for large bitmaps.
- Bitmap::drawBitmap() flushes mem correctly for DMA copy.
- Gadget::show() clears rect cache of sibling gadgets with a lower z-index to ensure that they do not draw over the top of the newly-shown gadget.
- A disabled gadget that overlaps another now intercepts clicks correctly, no longer allowing them to fall through to the gadget below.
- New Features:
- TextBox and MultiLineTextBox cursor moves when d-pad left/right are pressed and gadget has focus.
- Added tests folder:
- CycleButton test;
- RadioButtonGroup test.
- Added BinaryFile class to bonus folder.
- Added BitmapIO class to bonus folder - load/save BMP files using libfat.
- Added BitmapLoader example.
- Added SuperBitmap::drawBitmap() overload to handle Bitmap objects.
This release includes the usual set of bugfixes. New features are mainly centred around testing the library - there's a new "tests" folder which will grow into a comprehensive set of test harnesses for every UI gadget. The two existing tests have already highlighted a number of bugs in the tested gadgets, all of which have been fixed in this release.
Additionally, this release adds the ability for Woopsi applications to load and save 24-bit BMP files.
Download it at the usual place:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- Removed framebuffer-hitting code from DimmedScreen gadget and replaced with call to GraphicsPort::dim().
- ListBox removes itself from its ListData object when deleted.
- Keyboard example shows cursor.
- Moved DimmedScreen into woopsi folder as an official gadget.
- CycleButton::getPreferredDimensions() populates rect with correct values.
- Const fixed Gadget::getRefcon().
- Gadget::disable() and Gadget::enable() redraw the gadget by default.
- Fixed clipRectToHierarchy() bug introduced in switch to non-recursive function in last release.
- RadioButtonGroup redraws when resized.
- RadioButtonGroup returns correct dimensions from getPreferredDimensions().
- Updated copyright notice in defines.h.
- Bitmap::getPixel() works correctly for large bitmaps.
- Bitmap::drawBitmap() flushes mem correctly for DMA copy.
- Gadget::show() clears rect cache of sibling gadgets with a lower z-index to ensure that they do not draw over the top of the newly-shown gadget.
- A disabled gadget that overlaps another now intercepts clicks correctly, no longer allowing them to fall through to the gadget below.
- New Features:
- TextBox and MultiLineTextBox cursor moves when d-pad left/right are pressed and gadget has focus.
- Added tests folder:
- CycleButton test;
- RadioButtonGroup test.
- Added BinaryFile class to bonus folder.
- Added BitmapIO class to bonus folder - load/save BMP files using libfat.
- Added BitmapLoader example.
- Added SuperBitmap::drawBitmap() overload to handle Bitmap objects.
Version 0.40 is now out.
This release is the first alpha version. At this point I'm mainly concerned with bugfixing and tidying up than adding significant new features.
Big changes this time around include the removal of PALib support and a directory restructure. This is the first release of Woopsi that ships as a proper library. Installation instructions are included in the zip file, but it's essentially a matter of just copying the libwoopsi folder to the devkitpro folder.
Additionally, there are a lot of improvements to the graphics API, are a few new example and test projects, and a sizeable number of bugfixes.
Download from SourceForge as usual:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- PALib support removed.
- Pointer to selected day button in calendar resets to NULL when new month selected; prevents day button incorrectly popping up if same button is clicked in new month.
- Calendar::getPreferredSize() returns valid values.
- Label text is greyed out when disabled.
- Huge speed increase in Calendar::resize().
- Calendar's child controls correctly fill entire available space.
- Calendar correctly selects date if new day is the same as old day but in a different month.
- Gadget drag event only raised if stylus is actually moved whilst dragging mode active.
- ScrollingPanel drag and scroll events only raised if stylus is actually moved whilst dragging mode active.
- MultiLineTextBox greys out text when disabled.
- MultiLineTextBox::removeText() correctly repositions cursor.
- TextBox greys out text when disabled.
- Scrolltest compiles correctly.
- SimpleScreen and SimpleWindow helper gadgets removed.
- Renamed LinkedList to WoopsiLinkedList and LinkedListIterator to WoopsiLinkedListIterator to avoid type clashing with LinkedList in devkit.
- Tidied up woopsifuncs.h.
- SuperBitmap::getBitmap() returns a pointer to the Bitmap object instead of the Bitmap object's raw pixel data.
- Moved skinned gadgets out of main library and into bonus folder.
- Removed fatInitDefault() stub method for SDL out of individual .cpp files and into nds.h.
- dimmedscreen.h includes woopsi.h.
- Graphics::drawBitmap() clips correctly if bitmap destination co-ords are greater than the size of the destination bitmap.
- GraphicsPort::drawPixel() clips correctly.
- GraphicsPort::drawXORPixel() clips correctly.
- Replaced DMA_Force and DMA_Copy with woopsiDmaForce() and woopsiDmaCopy() to fix ancient problems with DMA not seeing latest RAM state.
- New Features:
- Calendar test added.
- MultiLineTextBox test added.
- TextBox test added.
- Added an overload to GraphicsPort to print a length of a string in a specific colour.
- Restructured directories into traditional library layout.
- Upgraded main project to VC++ 2008.
- Added libwoopsi.a to SVN.
- Added template example that uses libwoopsi.
- Reorganised demo code into new demo directory.
- BitmapIO class can load 16-bit BMP images with any pixel encoding.
- BitmapIO class can load V3, V4 and V5 DIB headers.
- BitmapLoader example illustrates loading of most supported BMP types.
- Added skinned gadget example.
- Added SkinIO class to bonus folder - loads skins from disk.
- Added BitmapBase class to define basic interface for a bitmap.
- Added BitmapWrapper to enable included (not loaded) bitmap data to be used as a read-only Bitmap object.
- Moved drawing code out of Bitmap class into new Graphics class.
- Added MutableBitmapBase class to define basic interface for an editable bitmap.
- Added FrameBuffer class to wrap framebuffer inside a bitmap class.
- All references to DrawBg array now work with frameBuffer array.
- Added GraphicsUnclipped to perform raw unclipped bitmap drawing.
- GraphicsPort inherits from GraphicsUnclipped in order to reduce code repetition.
- Font system uses new Bitmap object hierarchy.
- System fonts available as global objects.
- Rewritten clipping routine in Font and MonoFont.
- Reorganised VC++ project with more filters.
- Rect struct moved out of Gadget class and into separate header.
- SuperBitmap no longer includes drawing functions; instead it exposes a non-const pointer to its bitmap and a non-const pointer to a Graphics object that can draw to the bitmap.
- Added bitmapdrawing example.
- Added gadgetdrawing example.
- Added blit() and blitFill() methods to Bitmap and FrameBuffer, and signatures to MutableBitmapBase.
- Added getData(x, y) method to all bitmap classes.
This release is the first alpha version. At this point I'm mainly concerned with bugfixing and tidying up than adding significant new features.
Big changes this time around include the removal of PALib support and a directory restructure. This is the first release of Woopsi that ships as a proper library. Installation instructions are included in the zip file, but it's essentially a matter of just copying the libwoopsi folder to the devkitpro folder.
Additionally, there are a lot of improvements to the graphics API, are a few new example and test projects, and a sizeable number of bugfixes.
Download from SourceForge as usual:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- PALib support removed.
- Pointer to selected day button in calendar resets to NULL when new month selected; prevents day button incorrectly popping up if same button is clicked in new month.
- Calendar::getPreferredSize() returns valid values.
- Label text is greyed out when disabled.
- Huge speed increase in Calendar::resize().
- Calendar's child controls correctly fill entire available space.
- Calendar correctly selects date if new day is the same as old day but in a different month.
- Gadget drag event only raised if stylus is actually moved whilst dragging mode active.
- ScrollingPanel drag and scroll events only raised if stylus is actually moved whilst dragging mode active.
- MultiLineTextBox greys out text when disabled.
- MultiLineTextBox::removeText() correctly repositions cursor.
- TextBox greys out text when disabled.
- Scrolltest compiles correctly.
- SimpleScreen and SimpleWindow helper gadgets removed.
- Renamed LinkedList to WoopsiLinkedList and LinkedListIterator to WoopsiLinkedListIterator to avoid type clashing with LinkedList in devkit.
- Tidied up woopsifuncs.h.
- SuperBitmap::getBitmap() returns a pointer to the Bitmap object instead of the Bitmap object's raw pixel data.
- Moved skinned gadgets out of main library and into bonus folder.
- Removed fatInitDefault() stub method for SDL out of individual .cpp files and into nds.h.
- dimmedscreen.h includes woopsi.h.
- Graphics::drawBitmap() clips correctly if bitmap destination co-ords are greater than the size of the destination bitmap.
- GraphicsPort::drawPixel() clips correctly.
- GraphicsPort::drawXORPixel() clips correctly.
- Replaced DMA_Force and DMA_Copy with woopsiDmaForce() and woopsiDmaCopy() to fix ancient problems with DMA not seeing latest RAM state.
- New Features:
- Calendar test added.
- MultiLineTextBox test added.
- TextBox test added.
- Added an overload to GraphicsPort to print a length of a string in a specific colour.
- Restructured directories into traditional library layout.
- Upgraded main project to VC++ 2008.
- Added libwoopsi.a to SVN.
- Added template example that uses libwoopsi.
- Reorganised demo code into new demo directory.
- BitmapIO class can load 16-bit BMP images with any pixel encoding.
- BitmapIO class can load V3, V4 and V5 DIB headers.
- BitmapLoader example illustrates loading of most supported BMP types.
- Added skinned gadget example.
- Added SkinIO class to bonus folder - loads skins from disk.
- Added BitmapBase class to define basic interface for a bitmap.
- Added BitmapWrapper to enable included (not loaded) bitmap data to be used as a read-only Bitmap object.
- Moved drawing code out of Bitmap class into new Graphics class.
- Added MutableBitmapBase class to define basic interface for an editable bitmap.
- Added FrameBuffer class to wrap framebuffer inside a bitmap class.
- All references to DrawBg array now work with frameBuffer array.
- Added GraphicsUnclipped to perform raw unclipped bitmap drawing.
- GraphicsPort inherits from GraphicsUnclipped in order to reduce code repetition.
- Font system uses new Bitmap object hierarchy.
- System fonts available as global objects.
- Rewritten clipping routine in Font and MonoFont.
- Reorganised VC++ project with more filters.
- Rect struct moved out of Gadget class and into separate header.
- SuperBitmap no longer includes drawing functions; instead it exposes a non-const pointer to its bitmap and a non-const pointer to a Graphics object that can draw to the bitmap.
- Added bitmapdrawing example.
- Added gadgetdrawing example.
- Added blit() and blitFill() methods to Bitmap and FrameBuffer, and signatures to MutableBitmapBase.
- Added getData(x, y) method to all bitmap classes.
Last edited by ant512 on Mon Nov 16, 2009 10:08 am, edited 1 time in total.
sourceforce?ant512 wrote: http://www.sourceforce.net/projects/woopsi
Thanks, didn't spot that. Never attempt to release software whilst tired.elwing wrote:sourceforce?ant512 wrote: http://www.sourceforce.net/projects/woopsi
SourceForce is a good name for a website, though...
Version 0.41 is now available.
This version contains the usual set of bugfixes, optimisations and new test projects. The SDL compatibility layer has been greatly improved in this release - I compiled a quick test for the GP2X F-200 and it now runs at the same speed as the DS version.
New features are limited to some more graphics functions. It is now possible to draw bitmaps in greyscale, and convert a region of a bitmap to greyscale.
Downloads available from SourceForge:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- Removed Gadget::unregisterChildrenFromVBL() declaration from gadget.h as the function does not exist.
- Graphics::dim() draws to correct dimensions.
- GraphicsPort::dim() clips properly.
- BitmapButton::getPreferredDimensions() returns the correct size.
- AnimButton::getPreferredDimensions() returns the correct size.
- Anim button animation continues playing correctly when clicked if disabled.
- ListBox::getPreferredDimensions() returns the correct size.
- ListBox::draw() clips more effectively.
- Removed getEditableData() bodge from bitmap classes; all interaction with bitmap data happens through bitmap methods.
- Moved IK bitmaps out of demo folder/NDS into animbutton test.
- ScrollingListBox::getPreferredDimensions() returns the correct size.
- SliderHorizontal and SliderVertical produce correct values when they are showing a range of values large enough for the grip to be artificially enlarged.
- Scrollbar buttons scroll by amount based on max/min values and height of slider rather than arbitrary value.
- Removed ScrollbarVertical and ScrollbarHorizontal setButtonScrollAmount().
- AnimButton animations pause when the button is disabled.
- DMA copying function uses DMA for RAM->VRAM copies.
- New Features:
- SDL framebuffer code merged into FrameBuffer class.
- Added label test.
- Added button test.
- Added DOS batch files to build examples and tests.
- Added grayScale() function to GraphicsUnclipped, Graphics and GraphicsPort.
- BitmapButton greys out when disabled.
- Added bitmapbutton test.
- Added drawBitmapGreyScale() function to GraphicsUnclipped, Graphics and GraphicsPort.
- AnimButton greys out when disabled.
- Added animbutton test.
- Added listbox test.
- ListBox greys out when disabled.
- Added scrollinglistbox test.
This version contains the usual set of bugfixes, optimisations and new test projects. The SDL compatibility layer has been greatly improved in this release - I compiled a quick test for the GP2X F-200 and it now runs at the same speed as the DS version.
New features are limited to some more graphics functions. It is now possible to draw bitmaps in greyscale, and convert a region of a bitmap to greyscale.
Downloads available from SourceForge:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- Removed Gadget::unregisterChildrenFromVBL() declaration from gadget.h as the function does not exist.
- Graphics::dim() draws to correct dimensions.
- GraphicsPort::dim() clips properly.
- BitmapButton::getPreferredDimensions() returns the correct size.
- AnimButton::getPreferredDimensions() returns the correct size.
- Anim button animation continues playing correctly when clicked if disabled.
- ListBox::getPreferredDimensions() returns the correct size.
- ListBox::draw() clips more effectively.
- Removed getEditableData() bodge from bitmap classes; all interaction with bitmap data happens through bitmap methods.
- Moved IK bitmaps out of demo folder/NDS into animbutton test.
- ScrollingListBox::getPreferredDimensions() returns the correct size.
- SliderHorizontal and SliderVertical produce correct values when they are showing a range of values large enough for the grip to be artificially enlarged.
- Scrollbar buttons scroll by amount based on max/min values and height of slider rather than arbitrary value.
- Removed ScrollbarVertical and ScrollbarHorizontal setButtonScrollAmount().
- AnimButton animations pause when the button is disabled.
- DMA copying function uses DMA for RAM->VRAM copies.
- New Features:
- SDL framebuffer code merged into FrameBuffer class.
- Added label test.
- Added button test.
- Added DOS batch files to build examples and tests.
- Added grayScale() function to GraphicsUnclipped, Graphics and GraphicsPort.
- BitmapButton greys out when disabled.
- Added bitmapbutton test.
- Added drawBitmapGreyScale() function to GraphicsUnclipped, Graphics and GraphicsPort.
- AnimButton greys out when disabled.
- Added animbutton test.
- Added listbox test.
- ListBox greys out when disabled.
- Added scrollinglistbox test.
The source and binary for the GP2X version are available from my blog:
http://ant.simianzombie.com/?p=1122
However, as I say in the blog post, the GP2X touch screen is awful. There's no point in me trying to maintain a GP2X port. I'll do a Wiz version as soon as a decent set of instructions for getting a toolchain set up appears, but I'm fairly certain that the Wiz screen is even worse.
I'm excited about the prospect of a Pandora port, but that'll have to wait until the hardware's available.
http://ant.simianzombie.com/?p=1122
However, as I say in the blog post, the GP2X touch screen is awful. There's no point in me trying to maintain a GP2X port. I'll do a Wiz version as soon as a decent set of instructions for getting a toolchain set up appears, but I'm fairly certain that the Wiz screen is even worse.
I'm excited about the prospect of a Pandora port, but that'll have to wait until the hardware's available.
Version 0.42 is out now!
This release improves the functionality of the ListBox, ContextMenu and CycleButton gadgets. It separates management of data from the UI, allowing such things as adding/removing/sorting CycleButton options, custom sorting orders, etc. It improves the speed of the FileRequester and includes several bugfixes and optimisations.
Downloads available from SourceForge:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- ListData::swapItems() no longer raises a data changed event.
- ListData::sort() raises a data changed event.
- Woopsi class does not attempt to retrieve system font before it is initialised.
- ListBox canvas height no longer includes extra pixel.
- ListBox raises an action event when double-clicked.
- ListBox ignores double-clicks that occur across multiple items.
- Removed unused Gadget::_doubleClickTime member.
- ListBox redraws every time data changes.
- Double-click only counted as such if the gadget already has focus (ie. must be the same gadget clicked twice).
- ListBox::draw() calculates top and bottom visible options correctly, and does not overwrite options at the top of the list with those from the
bottom.
- ListBox automatically scrolls when items are removed from the ListData object to ensure it does not display past the end of the canvas.
- New Features:
- Split ListData class into ListData and ListDataItem classes for greater flexibility.
- Minor improvements to the ListBox's use of the ListData class.
- Altered ListData::quickSort() and added compareTo() method to ListDataItem to allow custom ordering of ListDataItem subclasses.
- ScrollingBase adds support for specifying planes on which scrolling can occur.
- ScrollingPanel implements ScrollingBase's allow/disallow scroll plane features to prevent scrolling on certain planes.
- ListBox does not allow horizontal scrolling.
- Added windowless example project.
- Added Gadget::isDoubleClick() to check for double-clicks.
- Combined various colour members in Gadget class into GadgetColours struct.
- Merged TextWriter into GraphicsXXX classes and removed original class.
- Added FileListDataItem class to store data for file requester.
- FileRequester uses new compareTo() functionality for substantial speed increase and lower memory usage.
- FileRequester displays "Loading..." message whilst directories are enumerated.
- Split ListDataItem into ListDataItem and ListBoxDataItem classes for greater flexibility.
- Split FileRequester into FileListBox and FileRequester classes for greater flexibility.
- CycleButton uses the ListData class to store its data - options can now be selected, removed, sorted, etc.
- ListBox::getPreferredDimensions() bases width on size of text in options.
- ContextMenu used a ListBox to store/view its data.
- ContextMenu includes getPreferredDimensions() method.
- ContextMenu sends ListDataItem objects with event arguments instead of ContextMenuItem objects.
- Deleted ContextMenuItem class.
- Added WoopsiString::copyToCharArray().
This release improves the functionality of the ListBox, ContextMenu and CycleButton gadgets. It separates management of data from the UI, allowing such things as adding/removing/sorting CycleButton options, custom sorting orders, etc. It improves the speed of the FileRequester and includes several bugfixes and optimisations.
Downloads available from SourceForge:
http://www.sourceforge.net/projects/woopsi
- Fixes:
- ListData::swapItems() no longer raises a data changed event.
- ListData::sort() raises a data changed event.
- Woopsi class does not attempt to retrieve system font before it is initialised.
- ListBox canvas height no longer includes extra pixel.
- ListBox raises an action event when double-clicked.
- ListBox ignores double-clicks that occur across multiple items.
- Removed unused Gadget::_doubleClickTime member.
- ListBox redraws every time data changes.
- Double-click only counted as such if the gadget already has focus (ie. must be the same gadget clicked twice).
- ListBox::draw() calculates top and bottom visible options correctly, and does not overwrite options at the top of the list with those from the
bottom.
- ListBox automatically scrolls when items are removed from the ListData object to ensure it does not display past the end of the canvas.
- New Features:
- Split ListData class into ListData and ListDataItem classes for greater flexibility.
- Minor improvements to the ListBox's use of the ListData class.
- Altered ListData::quickSort() and added compareTo() method to ListDataItem to allow custom ordering of ListDataItem subclasses.
- ScrollingBase adds support for specifying planes on which scrolling can occur.
- ScrollingPanel implements ScrollingBase's allow/disallow scroll plane features to prevent scrolling on certain planes.
- ListBox does not allow horizontal scrolling.
- Added windowless example project.
- Added Gadget::isDoubleClick() to check for double-clicks.
- Combined various colour members in Gadget class into GadgetColours struct.
- Merged TextWriter into GraphicsXXX classes and removed original class.
- Added FileListDataItem class to store data for file requester.
- FileRequester uses new compareTo() functionality for substantial speed increase and lower memory usage.
- FileRequester displays "Loading..." message whilst directories are enumerated.
- Split ListDataItem into ListDataItem and ListBoxDataItem classes for greater flexibility.
- Split FileRequester into FileListBox and FileRequester classes for greater flexibility.
- CycleButton uses the ListData class to store its data - options can now be selected, removed, sorted, etc.
- ListBox::getPreferredDimensions() bases width on size of text in options.
- ContextMenu used a ListBox to store/view its data.
- ContextMenu includes getPreferredDimensions() method.
- ContextMenu sends ListDataItem objects with event arguments instead of ContextMenuItem objects.
- Deleted ContextMenuItem class.
- Added WoopsiString::copyToCharArray().
Version 0.43 is now available.
This release mainly focuses on fonts. I've added dozens of new proportional fonts into Woopsi that can be used in place of the default. To aid in the creation of new font classes, Woopsi comes with three new .NET applications (sorry, non-Windows guys). One can create Woopsi fonts from BMP files, one can convert Windows fonts to BMP files, and one can perform the entire operation in one go and convert a Windows font directly to a Woopsi font.
I've replaced the old system font (Topaz, the default Amiga Workbench font) with a proportional font called NewTopaz, which greatly reduces the amount of space wasted when printing to the screen.
Other improvements include a redesigned "defaultStyle" system, a .NET utility to convert a BMP to a Woopsi bitmap class and a smattering of bugfixes.
Downloads available from SourceForge:
http://www.sourceforge.net/projects/woopsi
Additionally, here are some pre-built demos:
- Fixes:
- ListBox draws correctly when dragged (clipping problem from 0.41).
- Multiple fixes to the PackedFont set of classes.
- bmp2font checks the default Windows location for grit.
- bmp2font adds fonts to the WoopsiUI namespace.
- bmp2font follows #ifdef/#endif guard style.
- bmp2font uses more appropriate casing for filenames, etc.
- CycleButton redraws correctly when released if it contains no options.
- Label and subclasses recalculate their text position and redraw when their fonts are changed.
- TextBox does not attempt to move cursor when clicked if it contains no text.
- TextBox cursor moves correctly when clicked if a PackedFont font is used.
- Template project no longer references Gadget::Rect.
- MultiLineTextBox redraws and adjusts text position when font is changed.
- ListBox does not attempt to draw item -1 in list.
- PackedFontBase::isCharBlank() returns the correct value.
- Renamed DefaultStyle class to GadgetStyle.
- Instance of GadgetStyle created at Woopsi startup instead of using static properties of DefaultStyle class.
- Removed systemFont global; relying on defaultGadgetStyle instead.
- Removed tinyFont global; Debug class now creates its own instance.
- TinyFont follows class pattern used by Jeff's PackedFonts.
- Graphics::floodFill() no longer gets stuck in an infinite loop.
- Moved logos out of demo data folder and into new logos folder in bmp.
- Removed unused bitmaps from demo.
- Added missing FileListBox class.
- ScrollbarHorizontal passes font object (via style) to Gadget constructor correctly.
- BitmapWrapper::getData(x, y) no longer causes a compiler warning.
- Removed PAGfx binary from demo.
- Removed zombie.c file from demo and replaced with bmp2bitmap-generated class.
- Removed bittest files from demo and replaced with bmp2bitmap-generated classes.
- Removed all_gfx file from demo.
- Uses stack instead of heap for converting chars to strings.
- New Features:
- Added packedfonts example.
- Added dozens of packed fonts.
- Replaced font pointer in gadget constructors with a pointer to a GadgetStyle object.
- Changed default font to NewTopaz.
- Added old system font under the name Topaz using the same class pattern as the TinyFont.
- Added defaultstyle example.
- Built with devkitARM r27 and libnds 1.4.0.
- Replaced FontBitPacker with bmp2font, a .NET app that can convert a BMP to any of Woopsi's 4 font formats.
- Added bmp2bitmap, a .NET app that will convert a BMP to a Woopsi BitmapWrapper class.
- Added font2bmp, a .NET app that will produce a BMP from a Windows font.
- Added font2font, a .NET app that will convert a Windows font directly to a Woopsi font class.
- Added new GadgetEventHandlerList class and moved event raising code into it from the Gadget class.
- Duplicate gadget event handlers cannot be added to a gadget.
- Added build and deploy batch files for libwoopsi.
- Tests all build against libwoopsi instead of the raw Woopsi source.
- Most examples build against libwoopsi instead of the raw Woopsi source.[/list]
This release mainly focuses on fonts. I've added dozens of new proportional fonts into Woopsi that can be used in place of the default. To aid in the creation of new font classes, Woopsi comes with three new .NET applications (sorry, non-Windows guys). One can create Woopsi fonts from BMP files, one can convert Windows fonts to BMP files, and one can perform the entire operation in one go and convert a Windows font directly to a Woopsi font.
I've replaced the old system font (Topaz, the default Amiga Workbench font) with a proportional font called NewTopaz, which greatly reduces the amount of space wasted when printing to the screen.
Other improvements include a redesigned "defaultStyle" system, a .NET utility to convert a BMP to a Woopsi bitmap class and a smattering of bugfixes.
Downloads available from SourceForge:
http://www.sourceforge.net/projects/woopsi
Additionally, here are some pre-built demos:
- http://ant.simianzombie.com/wp-content/ ... tstyle.zip - Woopsi with a different default style (ie. different colours);
http://ant.simianzombie.com/wp-content/ ... rawing.zip - Drawing functionality;
http://ant.simianzombie.com/wp-content/ ... dfonts.zip - Demo of new fonts.
- Fixes:
- ListBox draws correctly when dragged (clipping problem from 0.41).
- Multiple fixes to the PackedFont set of classes.
- bmp2font checks the default Windows location for grit.
- bmp2font adds fonts to the WoopsiUI namespace.
- bmp2font follows #ifdef/#endif guard style.
- bmp2font uses more appropriate casing for filenames, etc.
- CycleButton redraws correctly when released if it contains no options.
- Label and subclasses recalculate their text position and redraw when their fonts are changed.
- TextBox does not attempt to move cursor when clicked if it contains no text.
- TextBox cursor moves correctly when clicked if a PackedFont font is used.
- Template project no longer references Gadget::Rect.
- MultiLineTextBox redraws and adjusts text position when font is changed.
- ListBox does not attempt to draw item -1 in list.
- PackedFontBase::isCharBlank() returns the correct value.
- Renamed DefaultStyle class to GadgetStyle.
- Instance of GadgetStyle created at Woopsi startup instead of using static properties of DefaultStyle class.
- Removed systemFont global; relying on defaultGadgetStyle instead.
- Removed tinyFont global; Debug class now creates its own instance.
- TinyFont follows class pattern used by Jeff's PackedFonts.
- Graphics::floodFill() no longer gets stuck in an infinite loop.
- Moved logos out of demo data folder and into new logos folder in bmp.
- Removed unused bitmaps from demo.
- Added missing FileListBox class.
- ScrollbarHorizontal passes font object (via style) to Gadget constructor correctly.
- BitmapWrapper::getData(x, y) no longer causes a compiler warning.
- Removed PAGfx binary from demo.
- Removed zombie.c file from demo and replaced with bmp2bitmap-generated class.
- Removed bittest files from demo and replaced with bmp2bitmap-generated classes.
- Removed all_gfx file from demo.
- Uses stack instead of heap for converting chars to strings.
- New Features:
- Added packedfonts example.
- Added dozens of packed fonts.
- Replaced font pointer in gadget constructors with a pointer to a GadgetStyle object.
- Changed default font to NewTopaz.
- Added old system font under the name Topaz using the same class pattern as the TinyFont.
- Added defaultstyle example.
- Built with devkitARM r27 and libnds 1.4.0.
- Replaced FontBitPacker with bmp2font, a .NET app that can convert a BMP to any of Woopsi's 4 font formats.
- Added bmp2bitmap, a .NET app that will convert a BMP to a Woopsi BitmapWrapper class.
- Added font2bmp, a .NET app that will produce a BMP from a Windows font.
- Added font2font, a .NET app that will convert a Windows font directly to a Woopsi font class.
- Added new GadgetEventHandlerList class and moved event raising code into it from the Gadget class.
- Duplicate gadget event handlers cannot be added to a gadget.
- Added build and deploy batch files for libwoopsi.
- Tests all build against libwoopsi instead of the raw Woopsi source.
- Most examples build against libwoopsi instead of the raw Woopsi source.[/list]
Version 0.44 is out now:
https://sourceforge.net/projects/woopsi/
This release adds system-wide support for unicode (UTF-8). Virtually all of the new features are related to text storage, manipulation or display.
In addition to that, the FileRequester is now an official part of libwoopsi and there are dozens of fixes and improvements.
It is worth noting that this release does *not* include any font classes that can render text beyond the standard ASCII set. This will come in a future release - TrueType support is in the works. Alternatively, you can roll your own font class.
Fixes:
- Moved fatInitDefault() SDL function into woopsifuncs.cpp (Quirky).
- ScrollingPanel::raiseScrollEvent() only fires if events are enabled.
- Gadget::raisesEvents() retrieves its value from the GadgetEventHandlerList object.
- Gadget::setRaisesEvents() alters the GadgetEventHandlerList object.
- Removed the raisesEvents flag from the Gadget class.
- Bmp2Font produces working Font classes.
- Deleted badly-converted fonts:
- Latha;
- Lucida10;
- Roman 10;
- Trebuchet8.
- FileRequester no longer has transparent regions.
- FileRequester sorts correctly.
- FileRequester does not attempt to draw when drawing is disabled.
- FilePath uses WoopsiString::lastIndexOf() to change to parse path string.
- Dragging a screen that isn't the top screen so that it is not visible no longer causes a crash.
- Removed glyphs from NewTopaz and Topaz fonts.
- Changed NewTopaz font to PackedFont1 from PackedFont16.
- Changed Topaz font to MonoFont from Font.
- Fixed memory leak when enumerating directories in FileListBox.
- FileListBox shows dummy file list when in SDL mode.
- Graphical corruption in GraphicsPort::clipScroll() fixed.
- Fixed FileRequester layout.
- Replaced magic number double click time with define in woopsifuncs.cpp.
- TestPanel class in scrolltest example draws its border correctly.
- Fixed a crash in GraphicsPort::drawText() when trying to draw text outside the clipRect with a PackedFont1 font; should provide a minor speedup.
- ScrollingPanel draws its border correctly.
- Removed Text::getLinePointer().
- MultiLineTextBox::drawCursor() uses a StringIterator to locate the cursor position.
- MultiLineTextBox::drawCursor() does not read past the end of the string when the cursor is positioned beyond the string.
- Text::wrap() does not perform an invalid comparison between line index and char index when truncating the line positions array.
- Text::wrap() correctly appends the string end position in all scenarios.
- Text::wrap() always assumes text height is at least one row.
- Text::getLineContainingCharIndex() returns the correct value if the character is in the last row.
- WoopsiString::insert() explicitly calls its own setText() and append() methods to prevent the Text class from wrapping twice.
- Added WoopsiString::encodeCodePoint().
- PackedFontBase::isCharBlank() returns correct value if character not present in font (fixes horizontal alignment in MulitLineTextBox).
- Key repeat values stored in defines.h.
- FileListBox does not show "." directory.
- Minor optimisation when building the FileListBox contents.
- Split Label::calculateTextPosition() split into horizontal and vertical methods.
- TextBox switches to left-aligned automatically if contents exceeds size of box.
- Fixed memory leak and logic problems when deleting gadgets.
New Features:
- Added FontBase::getCharHeight().
- WoopsiString supports UTF-8 (Lakedaemon).
- Split glyphs into separate GlyphFont.
- GadgetStyle includes a glyph font.
- All gadgets converted to use WoopsiStrings instead of raw chars/char arrays, meaning they support UTF-8.
- Various changes in Text class to support UTF-8.
- Changed parameters to GraphicsUnclipped::drawText() (and subclasses).
- Added StringIterator class, for efficient iteration over a UTF-8 string.
- Removed dependence on WoopsiString::getCharArray().
- Promoted FileRequester gadget from bonus folder to main library.
- libfat enabled by default in test projects and template.
- Added WoopsiString::lastIndexOf().
- Added WoopsiString::subString().
- Added WoopsiString::indexOf().
- TextBox implements key repeats when left or right d-pad is held down; cursor moves repeatedly until end of string reached or d-pad released.
- MultiLineTextBox implements key repeats when left or right d-pad is held down; cursor moves repeatedly until end of string reached or d-pad released.
- Textbox contents scrolls horizontally as cursor is moved.
- Added key repeat event handling to the entire system.
https://sourceforge.net/projects/woopsi/
This release adds system-wide support for unicode (UTF-8). Virtually all of the new features are related to text storage, manipulation or display.
In addition to that, the FileRequester is now an official part of libwoopsi and there are dozens of fixes and improvements.
It is worth noting that this release does *not* include any font classes that can render text beyond the standard ASCII set. This will come in a future release - TrueType support is in the works. Alternatively, you can roll your own font class.
Fixes:
- Moved fatInitDefault() SDL function into woopsifuncs.cpp (Quirky).
- ScrollingPanel::raiseScrollEvent() only fires if events are enabled.
- Gadget::raisesEvents() retrieves its value from the GadgetEventHandlerList object.
- Gadget::setRaisesEvents() alters the GadgetEventHandlerList object.
- Removed the raisesEvents flag from the Gadget class.
- Bmp2Font produces working Font classes.
- Deleted badly-converted fonts:
- Latha;
- Lucida10;
- Roman 10;
- Trebuchet8.
- FileRequester no longer has transparent regions.
- FileRequester sorts correctly.
- FileRequester does not attempt to draw when drawing is disabled.
- FilePath uses WoopsiString::lastIndexOf() to change to parse path string.
- Dragging a screen that isn't the top screen so that it is not visible no longer causes a crash.
- Removed glyphs from NewTopaz and Topaz fonts.
- Changed NewTopaz font to PackedFont1 from PackedFont16.
- Changed Topaz font to MonoFont from Font.
- Fixed memory leak when enumerating directories in FileListBox.
- FileListBox shows dummy file list when in SDL mode.
- Graphical corruption in GraphicsPort::clipScroll() fixed.
- Fixed FileRequester layout.
- Replaced magic number double click time with define in woopsifuncs.cpp.
- TestPanel class in scrolltest example draws its border correctly.
- Fixed a crash in GraphicsPort::drawText() when trying to draw text outside the clipRect with a PackedFont1 font; should provide a minor speedup.
- ScrollingPanel draws its border correctly.
- Removed Text::getLinePointer().
- MultiLineTextBox::drawCursor() uses a StringIterator to locate the cursor position.
- MultiLineTextBox::drawCursor() does not read past the end of the string when the cursor is positioned beyond the string.
- Text::wrap() does not perform an invalid comparison between line index and char index when truncating the line positions array.
- Text::wrap() correctly appends the string end position in all scenarios.
- Text::wrap() always assumes text height is at least one row.
- Text::getLineContainingCharIndex() returns the correct value if the character is in the last row.
- WoopsiString::insert() explicitly calls its own setText() and append() methods to prevent the Text class from wrapping twice.
- Added WoopsiString::encodeCodePoint().
- PackedFontBase::isCharBlank() returns correct value if character not present in font (fixes horizontal alignment in MulitLineTextBox).
- Key repeat values stored in defines.h.
- FileListBox does not show "." directory.
- Minor optimisation when building the FileListBox contents.
- Split Label::calculateTextPosition() split into horizontal and vertical methods.
- TextBox switches to left-aligned automatically if contents exceeds size of box.
- Fixed memory leak and logic problems when deleting gadgets.
New Features:
- Added FontBase::getCharHeight().
- WoopsiString supports UTF-8 (Lakedaemon).
- Split glyphs into separate GlyphFont.
- GadgetStyle includes a glyph font.
- All gadgets converted to use WoopsiStrings instead of raw chars/char arrays, meaning they support UTF-8.
- Various changes in Text class to support UTF-8.
- Changed parameters to GraphicsUnclipped::drawText() (and subclasses).
- Added StringIterator class, for efficient iteration over a UTF-8 string.
- Removed dependence on WoopsiString::getCharArray().
- Promoted FileRequester gadget from bonus folder to main library.
- libfat enabled by default in test projects and template.
- Added WoopsiString::lastIndexOf().
- Added WoopsiString::subString().
- Added WoopsiString::indexOf().
- TextBox implements key repeats when left or right d-pad is held down; cursor moves repeatedly until end of string reached or d-pad released.
- MultiLineTextBox implements key repeats when left or right d-pad is held down; cursor moves repeatedly until end of string reached or d-pad released.
- Textbox contents scrolls horizontally as cursor is moved.
- Added key repeat event handling to the entire system.
Version 0.45 is now available:
http://www.sourceforge.net/projects/woopsi
This version includes TrueType font support via wrappers around the open-source FreeType library. Coupled with the unicode support added in the last release, this means that it is now possible to develop GUIs with characters outside of the standard ASCII set. Many thank to Lakedaemon for his work with both unicode and FreeType.
Instructions for installing the bundled FreeType library are included in the "Installation.txt" file in the source archive.
The release includes a number of API improvements. Wiring up the keyboard gadget to a textbox is now very simple. In fact, double-clicking a textbox now automatically shuffles the touchscreen display into the top display and opens a keyboard on the touchscreen. Closing it shuffles everything back to how it was.
The various click(), release(), etc, methods that needed to be overridden when creating new UI gadgets have been replaced with simpler alternatives, called onClick(), onRelease(), and so on. The shift-click system (in which the shoulder buttons work as modifier keys to enable right-click style functionality and a context-sensitive menu) has been greatly simplified.
The drawing API has similarly been simplified, and all drawing - whether done to a bitmap or a gadget - can now take advantage of the clipping system.
There are more improvements, bugfixes, tests and examples, which are detailed in the changelog below.
Fixes:
- Fixed error when subclassing MultiLineTextBox.
- Fixed keyboard secondary repeat timer - now uses correct time.
- Delete key deletes character in front of cursor in MultiLineTextBox, not character at end of text.
- Moved raiseScrollEvent() out of ScrollingPanel and into GadgetEventHandlerList.
- Removed parameters from GadgetEventHandlerList::raiseActionEvent().
- Renamed Gadget::setDragging() to Gadget::startDragging().
- Decorations cannot receive focus.
- Increased accuracy of slider calculations from 8-bit fractions to 16-bit fractions.
- Requester resize implemented.
- Alert resize implemented.
- FileRequester resize implemented.
- Made various Gadget method non-virtual to prevent overriding.
- Gadget::resize() limits to parent dimensions correctly.
- Window drags correctly if it belongs to a gadget other than the screen.
- MultiLineTextBox resizing works correctly.
- Moved skins and bitmaploader examples and the bonus folder to a new
"extras" top-level repository. They will no longer be included in the main distro.
- Moved documentation folder into new extras directory.
- Fixed FileListBox resizing and initial child gadget dimensions.
- Removed Gadget::clear().
- Removed Gadget::clear(clipRect).
- Removed Gadget::newInternalGraphicsPort(isForeground).
- GraphicsPort no longer tries to delete null pointer if clipRect is not initialised.
- Replaced Gadget::draw(rect) with Gadget::drawContents(port) and Gadget::drawBorder(port).
- Fixed WoopsiString::remove(start, length).
- Removed AmigaWindow::getBorderSize().
- Removed Screen::getBorderSize().
- Removed TextBox::getBorderSize().
- Made Gadget::getClientRect() non-virtual.
- Gadget::getClientRect() uses new GadgetBorderSize struct to calculate size of client rect.
- Removed Screen::getTitleHeight().
- Removed AmigaWindow::getTitleHeight().
- AnimButton, BitmapButton, CycleButton, ContextMenu, ListBox, RadioButtonGroup, Label and Calendar use new GadgetBorderSize struct to calculate preferred dimensions.
- Removed Gadget::getBackgroundRegions().
- Removed redundant style initialisation from Woopsi class.
- Swapped Gadget::_style from pointer instantiation to standard instantiation.
- Removed Woopsi::closeChild(), shelveChild(), release(), drag(), click(), shiftClick() and shelve().
- Made Gadget::closeChild(), shelveChild(), release(), drag(), click() and shiftClick() non-virtual.
- Renamed Woopsi::click() to handleClick().
- Renamed Woopsi::shiftClick() to handleShiftClick().
- Tidied up Gadget::shelve() and Gadget::shelveChild().
- Refactored various methods in Gadget class to use guards instead of nested if statements.
- Gadget::closeChild() and Gadget::shelveChild() no longer cause focus to jump around if the child does not have focus.
- Gadget::click(), Gadget::shiftClick() and Gadget::doubleClick() only respond to clicks that occur within portions of themselves that are not obscured by gadgets higher in the hierarchy than their children (prevents
context menus bleeding through from a lower screen/window to a higher screen/window).
- Refactored Woopsi::handleKeys() into handleKeys() and handleKey().
- Removed _padding variable from Label, Requester, FileRequester, Alert and MultiLineTextBox classes; switched to using border sizes instead.
- Tidied up CycleButton, BitmapButton, AnimButton, Button and TextBox drawing methods.
- WoopsiKeyboard no longer inherits from AmigaWindow for greater flexibility.
- Added two blank screens to Woopsi gadget to ensure that background always draws correctly.
- Increased scrollbar width in ScrollingTextBox and ScrollingListBox.
- Increased minimum size of slider grips.
- Removed GraphicsPort::clear().
- GraphicsPort does not query Gadget for its x/y co-ordinates.
- GraphicsPort does not query Gadget for its enabled/disabled state.
- Removed GraphicsPort::drawBevelledRect() method that relied on gadget state.
- Removed Gadget::OutlineType enum and related usage.
- Removed drawing from Woopsi::eraseRect() - new background screens make it unnecessary.
- Removed drawing from Woopsi entirely for same reason.
- Deleted GraphicsUnclipped class.
- GraphicsPort is a wrapper around a Graphics object instead of a subclass.
- GraphicsPort drawing commands all accept values which are relative to itself.
- GraphicsPort::getClipRect() returns a rect relative to the GraphicsPort.
- Screen::onDrag() uses woopsiApplication's GraphicsPort instead of its own.
- MultiLineTextBox rendering problems when padding (now bordersize) greater than 2 fixed.
- MultiLineTextBox top vertical alignment works correctly.
New Features:
- Added goToParent() and goToRoot() to FilePath class.
- Added FreeType support.
- Added FreeType to template makefile.
- Added keyboard_textbox example.
- TextBox inherits from KeyboardEventHandler, so it can be connected directly to a keyboard object without the need for an intermediary.
- Added fire example.
- MultiLineTextBox inherits from KeyboardEventHandler, so it can be connected directly to a keyboard object without the need for an intermediary.
- Added TextBox::removeText() methods.
- GadgetEventHandlerList::raiseScrollEvent() receives distance scrolled as parameters.
- Added stub methods to remove the need to override critical Woopsi methods:
- onClick()
- onRelease()
- onReleaseOutside()
- onDoubleClick()
- onShiftClick()
- onDrag()
- onDragStart()
- onDragStop()
- onKeyPress()
- onKeyRepeat()
- onKeyRelease()
- onFocus()
- onBlur()
- onLidOpen()
- onLidClose()
- onEnable()
- onDisable()
- onResize()
- Swapped to using stub overrides in all gadgets.
- Added ListBox::isDoubleClick().
- Removed setDragging() from Gadget::click(); should be called by onClick() in subclasses if required.
- Added canReceiveFocus flag to Gadget::Flags struct.
- Added canReceiveFocus() method to Gadget class.
- Split Gadget::release() into release() and stopDragging() methods.
- Added AmigaWindow::resizeTitleBarToFit().
- Added Gadget::getGlyphFont() and Gadget::setGlyphFont().
- Added AmigaWindow::redrawBorder().
- Expanded ScrollingTextBox functionality to match MultiLineTextBox.
- Removed shiftClickChildren concept from Gadget class; shift clicks are only captured by a gadget if it defines any context menu items, so clicks automatically get directed to the most relevant gadget.
- Added alert test.
- Added requester test.
- Added filerequester test.
- Added freetype example.
- Added GadgetBorderSize struct to contain sizes of the four borders around a gadget.
- Added Gadget::checkCollisionWithForegroundRects().
- Added XOR drawing routines that accept a colour to XOR against.
- Added WoopsiKeyboardScreen.
- Double-clicking a textbox gadget causes the WoopsiKeyboardScreen to pop into the bottom display.
- TextBox only draws cursor when it has focus.
- TextBox redraws when it loses focus.
- Added Gadget::setBorderSize().
- Added WoopsiKey::setStuckDown() to control border type.
- Added CalendarDayButton gadget.
- Graphics class implements clipping and no longer inherits from GraphicsUnclipped.
- Added cliprect to the bitmapdrawing demo.
- Graphics class includes scroll() and drawBevelledRect() methods.
- Graphics::floodFill() is clipped.
http://www.sourceforge.net/projects/woopsi
This version includes TrueType font support via wrappers around the open-source FreeType library. Coupled with the unicode support added in the last release, this means that it is now possible to develop GUIs with characters outside of the standard ASCII set. Many thank to Lakedaemon for his work with both unicode and FreeType.
Instructions for installing the bundled FreeType library are included in the "Installation.txt" file in the source archive.
The release includes a number of API improvements. Wiring up the keyboard gadget to a textbox is now very simple. In fact, double-clicking a textbox now automatically shuffles the touchscreen display into the top display and opens a keyboard on the touchscreen. Closing it shuffles everything back to how it was.
The various click(), release(), etc, methods that needed to be overridden when creating new UI gadgets have been replaced with simpler alternatives, called onClick(), onRelease(), and so on. The shift-click system (in which the shoulder buttons work as modifier keys to enable right-click style functionality and a context-sensitive menu) has been greatly simplified.
The drawing API has similarly been simplified, and all drawing - whether done to a bitmap or a gadget - can now take advantage of the clipping system.
There are more improvements, bugfixes, tests and examples, which are detailed in the changelog below.
Fixes:
- Fixed error when subclassing MultiLineTextBox.
- Fixed keyboard secondary repeat timer - now uses correct time.
- Delete key deletes character in front of cursor in MultiLineTextBox, not character at end of text.
- Moved raiseScrollEvent() out of ScrollingPanel and into GadgetEventHandlerList.
- Removed parameters from GadgetEventHandlerList::raiseActionEvent().
- Renamed Gadget::setDragging() to Gadget::startDragging().
- Decorations cannot receive focus.
- Increased accuracy of slider calculations from 8-bit fractions to 16-bit fractions.
- Requester resize implemented.
- Alert resize implemented.
- FileRequester resize implemented.
- Made various Gadget method non-virtual to prevent overriding.
- Gadget::resize() limits to parent dimensions correctly.
- Window drags correctly if it belongs to a gadget other than the screen.
- MultiLineTextBox resizing works correctly.
- Moved skins and bitmaploader examples and the bonus folder to a new
"extras" top-level repository. They will no longer be included in the main distro.
- Moved documentation folder into new extras directory.
- Fixed FileListBox resizing and initial child gadget dimensions.
- Removed Gadget::clear().
- Removed Gadget::clear(clipRect).
- Removed Gadget::newInternalGraphicsPort(isForeground).
- GraphicsPort no longer tries to delete null pointer if clipRect is not initialised.
- Replaced Gadget::draw(rect) with Gadget::drawContents(port) and Gadget::drawBorder(port).
- Fixed WoopsiString::remove(start, length).
- Removed AmigaWindow::getBorderSize().
- Removed Screen::getBorderSize().
- Removed TextBox::getBorderSize().
- Made Gadget::getClientRect() non-virtual.
- Gadget::getClientRect() uses new GadgetBorderSize struct to calculate size of client rect.
- Removed Screen::getTitleHeight().
- Removed AmigaWindow::getTitleHeight().
- AnimButton, BitmapButton, CycleButton, ContextMenu, ListBox, RadioButtonGroup, Label and Calendar use new GadgetBorderSize struct to calculate preferred dimensions.
- Removed Gadget::getBackgroundRegions().
- Removed redundant style initialisation from Woopsi class.
- Swapped Gadget::_style from pointer instantiation to standard instantiation.
- Removed Woopsi::closeChild(), shelveChild(), release(), drag(), click(), shiftClick() and shelve().
- Made Gadget::closeChild(), shelveChild(), release(), drag(), click() and shiftClick() non-virtual.
- Renamed Woopsi::click() to handleClick().
- Renamed Woopsi::shiftClick() to handleShiftClick().
- Tidied up Gadget::shelve() and Gadget::shelveChild().
- Refactored various methods in Gadget class to use guards instead of nested if statements.
- Gadget::closeChild() and Gadget::shelveChild() no longer cause focus to jump around if the child does not have focus.
- Gadget::click(), Gadget::shiftClick() and Gadget::doubleClick() only respond to clicks that occur within portions of themselves that are not obscured by gadgets higher in the hierarchy than their children (prevents
context menus bleeding through from a lower screen/window to a higher screen/window).
- Refactored Woopsi::handleKeys() into handleKeys() and handleKey().
- Removed _padding variable from Label, Requester, FileRequester, Alert and MultiLineTextBox classes; switched to using border sizes instead.
- Tidied up CycleButton, BitmapButton, AnimButton, Button and TextBox drawing methods.
- WoopsiKeyboard no longer inherits from AmigaWindow for greater flexibility.
- Added two blank screens to Woopsi gadget to ensure that background always draws correctly.
- Increased scrollbar width in ScrollingTextBox and ScrollingListBox.
- Increased minimum size of slider grips.
- Removed GraphicsPort::clear().
- GraphicsPort does not query Gadget for its x/y co-ordinates.
- GraphicsPort does not query Gadget for its enabled/disabled state.
- Removed GraphicsPort::drawBevelledRect() method that relied on gadget state.
- Removed Gadget::OutlineType enum and related usage.
- Removed drawing from Woopsi::eraseRect() - new background screens make it unnecessary.
- Removed drawing from Woopsi entirely for same reason.
- Deleted GraphicsUnclipped class.
- GraphicsPort is a wrapper around a Graphics object instead of a subclass.
- GraphicsPort drawing commands all accept values which are relative to itself.
- GraphicsPort::getClipRect() returns a rect relative to the GraphicsPort.
- Screen::onDrag() uses woopsiApplication's GraphicsPort instead of its own.
- MultiLineTextBox rendering problems when padding (now bordersize) greater than 2 fixed.
- MultiLineTextBox top vertical alignment works correctly.
New Features:
- Added goToParent() and goToRoot() to FilePath class.
- Added FreeType support.
- Added FreeType to template makefile.
- Added keyboard_textbox example.
- TextBox inherits from KeyboardEventHandler, so it can be connected directly to a keyboard object without the need for an intermediary.
- Added fire example.
- MultiLineTextBox inherits from KeyboardEventHandler, so it can be connected directly to a keyboard object without the need for an intermediary.
- Added TextBox::removeText() methods.
- GadgetEventHandlerList::raiseScrollEvent() receives distance scrolled as parameters.
- Added stub methods to remove the need to override critical Woopsi methods:
- onClick()
- onRelease()
- onReleaseOutside()
- onDoubleClick()
- onShiftClick()
- onDrag()
- onDragStart()
- onDragStop()
- onKeyPress()
- onKeyRepeat()
- onKeyRelease()
- onFocus()
- onBlur()
- onLidOpen()
- onLidClose()
- onEnable()
- onDisable()
- onResize()
- Swapped to using stub overrides in all gadgets.
- Added ListBox::isDoubleClick().
- Removed setDragging() from Gadget::click(); should be called by onClick() in subclasses if required.
- Added canReceiveFocus flag to Gadget::Flags struct.
- Added canReceiveFocus() method to Gadget class.
- Split Gadget::release() into release() and stopDragging() methods.
- Added AmigaWindow::resizeTitleBarToFit().
- Added Gadget::getGlyphFont() and Gadget::setGlyphFont().
- Added AmigaWindow::redrawBorder().
- Expanded ScrollingTextBox functionality to match MultiLineTextBox.
- Removed shiftClickChildren concept from Gadget class; shift clicks are only captured by a gadget if it defines any context menu items, so clicks automatically get directed to the most relevant gadget.
- Added alert test.
- Added requester test.
- Added filerequester test.
- Added freetype example.
- Added GadgetBorderSize struct to contain sizes of the four borders around a gadget.
- Added Gadget::checkCollisionWithForegroundRects().
- Added XOR drawing routines that accept a colour to XOR against.
- Added WoopsiKeyboardScreen.
- Double-clicking a textbox gadget causes the WoopsiKeyboardScreen to pop into the bottom display.
- TextBox only draws cursor when it has focus.
- TextBox redraws when it loses focus.
- Added Gadget::setBorderSize().
- Added WoopsiKey::setStuckDown() to control border type.
- Added CalendarDayButton gadget.
- Graphics class implements clipping and no longer inherits from GraphicsUnclipped.
- Added cliprect to the bitmapdrawing demo.
- Graphics class includes scroll() and drawBevelledRect() methods.
- Graphics::floodFill() is clipped.