Wasabi Overview By Brennan Underwood 27, Libra, likes monkeys What is wasabi? Wasabi is a completely configurable system for building skinnable applications, quickly and easily. It is written in C++ with some assembly code for optimizations. These are the major points of functionality: - a system of interrelated components providing new functionality o can introduce whatever new compiled code is required o lots of code in the SDK - a completely configurable skinnable user interface system o layout system o scripting system - portability o SDK code hides the OS o Skins and scripts 100% portable with no recompilation Basically, the components add new features to the system and the skin engine presents it to the user. What is a component? Something that becomes part of the system, and adds new functionality to it, and works with other components. Not just a plugin because it can introduce wholly new interfaces instead of just a reimplementation of a single interface. It can add an entirely new interface to the system or just a single new type of control or perhaps a new type of I/O capability entirely. Once the main kernel connects two components, they can communicate however they like. Components can expose certain variables as configurable, so that they will show up in the configuration screen, and be modifiable by both other components and scripts. Interfaces to the system and between components are built on the "Dispatchable" class, which allows you to add (and remove!) methods of your interface while minimizing breakage of other peoples' code. The system is built with its own SDK, and you get that source Our SDK is composed of the very same source files used to build the main kernel, so they automatically work well together. It's license is BSD-style, so you can also modify the files as needed. When the main program's source files are improved and debugged, those changes are reflected in the next version of the SDK, and vice versa. And there is a lot of source in the SDK. You get high quality code to create generic windows, List Windows, Tree Windows, controls, bitmaps, rotations, etc. Some basic STL-like code is included as well, and lots of helper code to use the various system interfaces easily. Also, all our code that displays bitmaps communicates with the skin engine, so the more of it you use, the more automatically skinnable your interface will be. It also A skinnable, completely configurable interface handler system A skinning engine and much more as well, it does the work of actually generating the data structures of the interface from XML (either provided on disk or dynamically generated by a component). The various sections in the XML are optionally skinnable, so users can replace a given bitmap, or font, or entire layout of a screen. A scripting engine: A portable virtual machine is provided with a compiled bytecode scripting language, which is mostly C-like with some C++-isms as well (overriding methods, user classes). Scripts can be attached to various events in the interface such as button clicks and system messages. Scripts can be loaded along with the skin or attached later, perhaps by another skin. Entire apps can be created just with the layout engine and scripting system. Of course, if you need to add more custom controls, you can just implement them in your component and reference the new control in your XML. The layout engine is very powerful, rendering in full 24-bit color with 8-bit alpha blending. Most common stretching and blending operations have been MMX accelerated, including bilinear filtering modes. It can dynamically resize elements or stretch and scale them. Portable Almost all operating system details are abstracted out and hidden within our SDK and main kernel. If you build entirely on our code, you will be able to recompile your app with almost no changes on any Wasabi platform (currently x86 win32 and x86 Linux, with more to come.) Skins and scripts are 100% portable with no recompilation. Winamp 3-specific system stuff Wasabi was originally created to build Winamp 3, and Winamp 3 serves to help define the makeup of Wasabi. However, in a short amount of time we will release a Wasabi-only SDK to allow developers to write their own app without any of our components being required. However, if you choose to create your app in the form of a Winamp 3 component or skin, you will have access to the following extra features. - audio playback system o gapless o any number of filters can be applied in any order o smart system to specify "from" and "to" (i.e. from "c:\file.mp3" to "waveout") and generate the required filter chain - database o mini db accessible to all components, does standard indexing etc and can handle text-parsed queries - jpg and PNG image loading components - auto-configuration component: enumerates all configurable variables within all components and dynamically builds a standard config screen for them