# About Woopsi - Features

- Multiple screen support
- A full set of user interface components:

- Text buttons with text alignment functionality
- Image buttons
- Animated buttons
- Radio buttons and radio button groups
- Check boxes
- Single-line textboxes
- Multi-line text boxes
- Screens
- Windows
- Gradient backgrounds
- SuperBitmap, for persistent drawing and displaying large bitmaps in small gadgets
- Scrolling panels, for containing graphics or gadgets within regions that are larger than the parent container
- Scroll bars
- Slider bars
- Context-sensitive menu
- List boxes
- Progress bars

- Skinnable screens and windows
- Draggable gadgets, including draggable windows and screens
- Borderless gadgets, including borderless windows
- Intelligent, optimised gadget drawing and erasing
- Event system
- Depth sorting
- Complete API for constructing new gadgets:

- Extensible font system that supports:

- Fixed-width, bit-packed monochrome fonts
- Fixed-width, 16-bit colour bitmap fonts
- Compressed proportional fonts (monochrome and 16-bit).

- Text manipulation, including wrapping functions and width calculation
- Animation class with support for variable framerates and standard/pingpong looping
- GraphicsPort class providing depth-sorted, clipped, hardware-accelerated drawing functions:

- Pixel plotting
- Optimised horizontal/vertical lines
- Bresenham omni-directional lines
- Filled and unfilled rectangles
- Filled and unfilled circles
- Bitmap blitting
- Bitmap blitting with transparent colour key
- XOR horizontal/vertical lines and pixel plotting
- Flood fill

- Linked list, dynamic array and hashmap template container classes and iterator classes.

- Object-orientated design for easy integration into other C++ software
- Simple API for rapid GUI creation
- Simplistic "multitasking" - each window runs simultaneously
- Uses 16-bit framebuffer display mode
- Multiple build options:

- With/without PALib support
- SDL layer to facilitate native compilation on non-DS platforms and aid porting
- libwoopsi.a library build