WDL (whittle)
[re]usable C++, modestly
WDL is a free and open source C++ library that is designed to be easily used by other code.
Much of WDL is a set of simple C++ classes that do not attempt to do everything. You can use as little or as much of WDL as you like, mix it with whatever other toolkits you use, etc. It tries very hard not to get in your way.
WDL includes:
- SWELL - Simple Windows Emulation Layer (for OS X) -- allows you to target win32 and OS X by using a reasonable subset of the win32 API.
- LICE - Lightweight Image Compositing Engine -- 32bpp 2D image manipulation, primitives drawing, and image read/write.
- Plush2 - Portable, lightweight software 3D rendering engine -- 32bpp 3D rendering and scene management. Has multitexture support, colored lighting, Z-buffering, 3DS file import, integrates with LICE. (based on Plush)
- WDL Virtual Window system -- allows the building of dynamic, complex UIs within OS hosted windows. Support for common controls with full transparency, overlays, controls with shadows/highlights outside of their range, etc. Fully themeable. Uses LICE for compositing.
- FFT support (based on DJBFFT), and a fast realtime convolution engine.
- File reading/writing wrappers (to enable higher performance read/write modes on win32 among other things)
- Code for managing memory allocations, various lists, queues, resource pools, strings, etc
- Code for encoding/decoding audio using LAME or OGG Vorbis.
- EEL2 expression evaluation library/realtime compiler (allow users to write code that your programs execute) (based on AVS's EEL)
- win32_curses: A graphical Curses emulation library for Win32 and OS X (port or write curses applications in a window of a larger application, or standalone)
- SHA-1, Mersenne Twister implementations
- SHOUTcast source broadcaster
- Fast sinewave generator, dB to amplitude convertors, basic Reverb engine (based on FreeVerb2), functions to convert to/from integer PCM audio sample types.
- iPlug: a VST and AU plug-in framework
- and more!
WDL license:
Copyright (C) 2005 and later Cockos Incorporated
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
WDL includes the following 3rd party libraries (which are all similarly licensed):
Discuss WDL on the WDL forum
Send improvements to submissions@cockos.com.
Downloads
Current:
WDL v2009.07.02
- SWELL: mouse positioning updates (with synergy2 detection)
- SWELL: WM_CTLCOLOR*, WM_DISPLAYCHANGE support
- SWELL: BS_LEFTTEXT support for checkboxes
- SWELL: Fixed menu item updating for top level submenus
- SWELL: Implemented TreeView_HitTest
- SWELL: Exposed API for SetOpaque
- SWELL: nifty child window debug/diagnostic mode
- SWELL: (default) options to use non-round buttons etc
- SWELL: Fixed BitBltAlpha() for LICE sysbitmaps
- SWELL: Carbon hosted window updates (no menu, activation fixes for BFD2, etc)
- LICE: 8-bit PNG loading, JPG load from resource support
- LICE: optimized source alpha w/ constalpha=1.0, other cases
- virtwnd: listbox text drawing updates
- LICE: LICE_CachedFont fixes when using both cached fonts and OS rendering
- WDL_FileRead: support for synchronous unbuffered reads
- WDL_FileRead/Write: OS X native open()/pread/mmap support (large files and unbuffered reads etc)
- WDL_String: safer Get() for empty strings (returns read-write pointer)
- WDL_PtrList: FindSorted / InsertSorted, EmptySafe()
- WDL_Queue: optimized Compact() to autodetect pointless compacts
- WDL_MergeSort: optimized for in-order data (stays in place)
- EEL: safer locking of RAM
- IPlug: better bitmap caching, jpg loading, x64 support, OS X udpates
- AudioBufferContainer: supports wet/dry
- UTF8 support fixes
- Added WDL_AssocArray
Old versions:
WDL v2009.04.16
- UTF-8 support, win32_utf8.cpp for Win32 support (SWELL gets it automatically)
- LICE: line and circle updates for fractional coordinates
- LICE: preliminary SVG stuff
- LICE: CachedFont updates (can render natively if possible and desired, better owned font support)
- LICE: scaled blitting downsizing uses special filtering
- LICE: disabled experimental GL extensions by default
- LICE: better bezier stuff
- IPlug: OSX URL update, VST parameter index validation, other updates
- virtwnd: listbox improvements (horizontal mode etc)
- SWELL: preliminary WM_CTLCOLORDLG support, dialog background updates
- SWELL: better default button sizing
- PtrList: InsertSorted() and FindSorted() methods
- wndsize: margin querying api
- LAME support handles mono signals better, better search paths
- added basic blowfish implementation
- added basic IRC line parsing/formatting functions
- added incomplete non-working SHM datapipe class
- convolution engine updates
WDL v2009.01.18
- restored LICE bitmap ABI for compatability with older WDL versions
- Convolution engine optimizations and bugfixes, slightly updated impulse API
- simple reusable pitch shifter/time stretcher added
- WDL_Queue autocompact optimizations
- ADPCM decoder (IMA + MSADPCM + cADPCM), IMA/cADPCM encoder
- virtwnd comboboxes support SUB tags
- Vorbis encoder supports multichannel encoding
- Added LICE_DashedLine
- LICE_LoadPNGFromNamedResource() for OSX
- iPlug: added images for example
- LICE: Preliminary work for allowing LICE operations to be GL accelerated
- LICE: added effect names to test application
- LICE: added preliminary SVG support
- SWELL: Imagelists no longer free their bitmaps (to match win)
- WDL_WndSizer: reduced chance of HDWP leaks when invalid windows are stored
- Virtwnd: grayed state for buttons
- SWELL fixes for BitBlt/StretchBlt() with certain coordinates
- LICE HSV combining blend modes
- Plush2 multitexture fixes, fixed source-alpha modes
- Virtwnd: improved ordering of notification calls to allow deleting a vwnd from a command message
- WDL_String optimizations for empty strings
- LICE: line drawing improvements (changed signature of LICE_Line to use integers)
- SWELL: start on GTK implementations, far away from useful though
- EEL2 fixes for recent GCC versions on Linux, constness
- Added WDL_HeapBuf copy constructors
- LICE: RGB/HSV colorspace conversions
- LICE: overlay blend modes
- LICE: Better bezier drawing
- LICE: improved circle/arc drawing routes
WDL v2008.11.15
- LICE JPEG loading fixes, JPEG writing, PNG writing byteorder fixes
- LICE_FillCircle() (needs optimizing)
- LICE_LoadImage, LICE_GetImageExtensoinList(),and LICE_CmpBitmap()
- LICE test app has new "fly" demo
- LICE: fixed bug in LICE_SubBitmap
- JNetLib: optional interface modes so you can easily reuse jnetlib across modules
- LICE: bitmaps no longer flipped on OS X, made isFlipped() non-virtual to enable better compile-time optimization
- LICE: reduced image resize heap thrashing
- virtwnd detects at load whether backgrounds have alphachannel info in each section
- virtwnd backgrounds disable filtering when not stretching
- LICE: optimizations for 50/50 fills, fast unfiltered stretchblt, etc
- virtwnd overhauls (removing HICON use)
- LICE: .ico loading overhaul, support for OS X
- SWELL: faster BitBlt() support
- LICE_CachedText OS X fixes
- LICE: LICE_LoadBMP() OS X support
- SWELL: GetObject() API subset
- LICE_MultiplyAddRect updated documentation and internals
- LICE_IFonts can own/destroy HFONTs
- LICE: Fixed a lot of small accuracy bugs
- LICE: PCX reading support
- Plush2: fixed singletexture mode when only multitexture compiled in
- Plush2: fixed repeating textures in bilinear mode
WDL v2008.10.30
- Wndsizer: margin support
- Virtwnd: now uses LICE almost exclusively to draw controls
- Added Plush2: a port of the old 8bpp 3D rendering engine to a C++, 24 bit, LICE-combining multitexture capable colored lighting rendering engine
- Added LICE_FillTriangle(), LICE_HalveBlitAA(), fixed bug in LICE_StretchedBlit()
- Added iplug, a VST/AU plug-in framework
- LICE: LICE_SubBitmap for easy clipped rendering
- LICE: Added LICE_DrawRect(), LICE_DrawGlyph(), fast tiny circle drawing (glyph based), optimizations to internals
- LICE: Added LICE_IFont and LICE_CachedFont() for quick drawing and drawing to non-sysbitmaps. Also has certain useful other effects.
- LICE: Added LICE_DrawBezier
- Virtwnd: item backgrounds can now specify (with 255,255,0,255) outside-areas for some controls
- Added mergesort.h
- Added fast sinewave genereator (sinewavegen.h)
- SWELL: Keyboard fixes
- SWELL: Changed the way ScrollWindow() is implemented (scrolls children)
- Virtwnd: fixes for large canvas drawing
- Tweaks all around to reduce memory use (WDL_String gets WDL_HeapBuf granularity options etc in constructor)
- SWELL: Fixed MK_* VK_* bugs
- Win32_Curses updates, better OS X compatability, block cursor
- SWELL: ShowWindow(SW_HIDE) DestroyWindow() deal with focus better now
- Virtwnd: support for querying painter info, etc
- audiobuffercontainer fixes, optimizations
- Virtwnd sliders can optionally always send notifications on first click
- Overhauled pooling classes to be more general and reusable
- SWELL: Improved EndDialog() processing
- SWELL: Default menu for windows, modal windows
- SWELL: made GDI pooling threadsafe (Rosetta on 10.5 requires it)
- SWELL: fixed shift+mousewheel being sent correctly
- Fixed issues with Vorbis encoding-EOF-ness for NINJAM, added Vorbis comment support
- Cleaned up WDL_Queue's endian-converting functions
- Fixed WDL_String::Ellipsize()
- Added EEL2, a fast expression evaluator/code compiler that supports x86, x64 and PPC, MSVC and GCC.
- WDL v2008.07.27
-
- SWELL: fixed an issue with OS X hanging on fractional window positions
- Added WDL_String::Ellipsize()
- Win64 compatability, wdl_types.h has GetClassLongPtr() etc defines for MSVC6/OSX
- SWELL: GDI object pooling to reduce heap thrashing
- wndsize: fixed window positioning bug when used in SWELL.
- SWELL: LVNI_SELECTED support
- SWELL: better support for 64 bit OS X 10.5.
- VirtWnd slider mousewheel fixes
- SWELL: Treeview API improvements
- Added WDL_DLGRET for DLGPROC return type to ease compiler differences (use instead of BOOL CALLBACK or UINT_PTR CALLBACK)
- added win32_curses super-basic curses emulation for windows GUI
- LICE bitmap allocation changes (safer failures)
- SWELL: fixed GetCursorPos()/SetCursorPos() relationships
- SWELL: WM_MBUTTON* support
- Heapbuf can have optional small pre-allocations, heapbuf trace mode (to monitor heap use)
- LICE: Better bezierness
- SWELL: BitBltAlpha() and BitBltAlphaFromMem()
- WDL_FileWrite: fixed GetSize() at eof before flushing
- SWELL: many more bugfixes, initial work on 64 bit support, more
- Virtwnd: userdata for all virtwnd support
- WDL v2008.05.05
- SWELL updates (HUGE update including php to convert dialog resources too)
- LICE: support for quadratic nurbs (yay schwa)
- fileread: better handling of errors in async mode
- WDL v2008.02.09
- lineparser improvements
- slightly faster drawtext, text cleanups
- virtwnd buttons only refresh on changes of button images
- virtwnd buttons support overlay outlines
- SWELL: php converter for menus: .rc to cpp
- SWELL: cursor hiding support
- wndsize: fix for when no window set
- lice: png write support (thanks cryptomail)
- shoutcast source: better encoder reinitialization, IRC channel support
- FFT: more define options
- convolution engine: fixed some bugs, added test app, _Div mode which allows high-cpu ZL operation
- LICE: flipped surface support for arcs
- WDL v2007.12.18
- SWELL: BM_SETCHECK support for buttons, basic FindWindowEx() emulation, better control font size selection
- SWELL: Basic ScrollWindow() emulation
- LICE: Updated LICE_IBitmap to include getDC()
- SWELL: GetDC(), GetWindowDC() improvements, GetSystemMetrics()
- SWELL: better WM_MOUSEWHEEL, WM_CONTEXTMENU message propagation
- SWELL: WM_NCCALCSIZE, WM_NCHITTEST etc support
- SWELL: basic _controlfp() support for rounding control (on x86)
- WDL v2007.12.09
- SWELL: updated documentation in swell.h, GlobalAlloc supports GMEM_FIXED
- WDL v2007.12.03
- SWELL: GetProp API support, GetDC/GetWindowDC now usable during WM_PAINT/NCPAINT (they get the same HDC as BeginPaint)
- SWELL: dialogs can now have their window procedures subclassed, WM_NCPAINT support
- SWELL: fixed EnumClipboardFormats sometimes getting in an infinite loop
- SWELL: big DrawText overhaul (now uses NSAttributedString to draw)
- SWELL: added a bunch more compatibility defines to swell.h
- WDL v2007.11.23
- SWELL: tons of menu fixes, dialog fixes, API extensions, more. too much to list.
- LICE: LICE_line supports flipped surfaces
- SWELL: Owned window support, tons of updates
- Virtwnd: support for controls eating mousedowns without capturing
- WDL v2007.11.09
- Fixed distribution making to include more docs/etc
- LICE: Test app now uses SWELL to run on OS X, included OS X example test project
- SWELL: Extensive updates for child dialogs, modal/modeless dialogs (mouse messages, painting, etc etc)
- SWELL: Modal/Modeless windows now support having their own menus (via GetMenu/SetMenu)
- SWELL: Added user-defined control classes for dialog template loading
- Updated GIFlib config.h for OS X support
- WDL v2007.10.30
- LICE: Added bezier drawing (schwa)
- LICE: GIF, JPEG loading (included JPEG library and GifLib)
- SWELL: WM_PAINT/BeginPaint/EndPaint emulation for child dialogs
- SWELL: SendMessage for windows that support it, made virtwnd use sendmessage
- SWELL: 3-state checkboxes, SetWindowLong improvements, fake *Capture, more
- SWELL: DialogBox/CreateDialog emulation, timer fixes, tons more
- WDL v2007.10.24
- SWELL: DialogBox emulation, timer fixes, more
- LICE: scwha added LICE_ClipLine()
- WDL v2007.09.18
- virtual window system cleanups, sliders have mouse-hiding ctrl+ modifier mode
- virtual window system listbox custom drawing
- virtual window system, other improvements
- filewrite recovers from asynchronous failures from threads quitting
- pcmfmtcvt: corrected non-standard pcm format conversion
- LICE: fixed circle drawing with vc6 (template bug)
- LICE: faster rotating blit (fixed point)
- WDL v2007.09.01
- virtwnd: sliders can have centerline color defined in their skininfo
- LICE: faster more-fixed-point mode for LICE_ScaledBlit
- LICE: LICE_ScaledBlit properly obeys using a subimage source (and wont filter from outside)
- added db2val.h for easy dB<-->linear scale conversion
- virtwnd: stuff to let control bgs and window bg images have pink lines to define unstretched edges
- virtwnd: added listbox control
- LICE: defines for disabling Dodge, Add blend modes
- LICE: updated deltablit, added transformblit
- LICE: made LICE_FillRect support LICE_MODE_USE_ALPHA
- WDL v2007.08.21
- LICE: added LICE_BLIT_MODE_DODGE (thx schwa)
- LICE: added LICE_Blur, overloaded LICE_Blit() with better parameters
- LICE: added LICE_FillRect()
- filewrite: fixed GetSize() after flushed and unflushed writes in async mode
- virtwnd: made static text labels not refresh if text did not change
- WDL v2007.08.01
- WDL v2007.07.23
- WDL v2007.07.09
- WDL v2007.07.08
- WDL v2007.07.03
- WDL v2007.06.30
- WDL v2007.06.27
- WDL v2007.06.17
- WDL v2007.05.09
|