Remember when releasing:
- Change configure.ac - AC_INIT(ClanLib, 2.0.x) and CLANLIB_MICRO_VERSION=x
- Change API/Core.h - CL_VERSION_STRING and CL_CURRENT_VERSION

- Change windows to default use unicode:
  - Modify configure app to make this default
  - Change all tests/examples to use unicode

- CL_DisplayMessageQueue::process() rename to CL_MessageQueue::process() ?
  - Should other process_events functions be renamed to just process() ?

- GraphicContext::set_primitives_array() uses CL_PrimitivesArrayData
  Internally we use some standard settings as follows:
 	0: POSITION
	1: COLOR
	2: TEXTURE
	3: SPRITE TEXINDEX
        4: NORMAL (GL1 target only)
  Should be values be enum'ed somehow ?

- CL_Texture API issue
  The copy_image_from() functions contains "CL_GraphicContext *gc = 0"
  First - gc must not be 0, as "gc->get_provider()" is used (in texture.cpp)
  Second - Why is CL_GraphicContext required? 
    For an unknown reason, it is used by the TextureStateTracker (instead of gc_provider from the constructor)
  Third - Why is TextureStateTracker even required - No states change

- GL1 Texture (NPOT)
   CL_GL1TextureProvider::set_subimage() copies the image edges into the unused part of the texture, so linear filtering works correctly
   However: This needs corrected. It should be optimised and currently it does not write to the lower right quadrant
   Also other GL1 set image functions should contain this fix.

- ClanLib Linux Issues
  Examples/Sound : Choosing "Choose New Sound", crashes in ClanGUI
  Unicode build for CTalk

- VFS Issues
  CL_FontProvider_Vector is not VFS aware
  JPEG - The saving assumes the i/o source is a file. This should be modified (like how png does it)

X11 / Linux:
 - Implement icons - http://standards.freedesktop.org/wm-spec/wm-spec-1.3.html#id2507733
 - "ideally you'd also support _NET_WM_PING, WM_CLIENT_MACHINE and _NET_WM_PID that way a linux user can kill our app like in Windows if it goes unresponsive"

Disposable objects:
- The gui cache should add itself to the disposable list, instead of using that signal thing it uses now

- Texture Packer:
  - Add UI to select which resource file to pack. 
    (Currently hardcoded in MainWindow::load_resources())

- GDI
  - The output from Tests/Display/2D is different for OpenGL and GDI
  - The output from Tests/Display/Image1 is different for OpenGL and GDI

  - You cannot set the projection matrix in the GDI target
    CL_GDIGraphicContextProvider::set_projection(const CL_Mat4f &matrix)
    is empty
    Add pixel_canvas->set_projection(matrix);

- GUI Component issues:
  - Scrollbar buttons should use separate glyph part
  - Window close/min/max/etc buttons should use separate glyph part
  - scrollbar trackarea and buttonarea overlap with 1 pixel
  - checkbox draw something wrong? (compare with vista screenshot, especially disabled)
  - slider - thumb size for horizontal is too small (compare to vertical)
  - slider - support focused
  - lineedit - use readonly and focused gfx
  - lineedit - set states on parts (hot doesn't show)
  - checkbox support excluded and implicit
  - button - support animated state?
  - lineedit - selecting with mouse when there is only one char is difficult
  - spin - disabled state is not shown visually
  - groupbox - no clickthrough  - progressbar - Does not work!
  - ToolTip - No components use it at present, and the API is incomplete
  - Window - texture wm - clicking on window client area does not bring it to front
  - Tab - redo parts so we won't have to use header_border, and resizing of active tagpage part
  - Frame vs GroupBox - whats the difference - do we need both?
  - Popupmenu separator part is too short
  - ToolBar: You cannot switch between horizontal and Vertical Toolbar
  - ToolBar: It uses CL_Sprite, not CL_Image
  - ToolBar: It would be nice to be able to attach a component to the toolbar, like CL_StatusBar

- GUI Modal Window
  There currently is a inconsistancy in the way modal windows are handled (for example, CL_ComboBox_Impl::on_btn_arrow_clicked() )
  The System WM, has its own modal loop
  The Texture WM intercept the main gui loop via gui_manager.func_exec_handler().set(this, &CL_MenuModalLoop::exec_handler); 
  Ideally, the System WM should use the Texture WM method - This gives the user control of external objects (network i/o  etc)
 
- GUI Render
  Issue: If a component alters the state during rendering (for example calls gc.set_texture(index, texture) ),
   currently there is no way to restore the previous texture
   Maybe, we could have: texture = gc.get_texture(index) - And texture.is_null() if it was not set.
   etc.

- GUI Texture Manager
  Since the GUI is now based on a single texture  (when the CL_TextureGroup has been set)
   There are issues with setting the Stencil and Depth buffer
   To be valid, they must be the same size as the texture (for the frame buffer object to work)
   A quick fix, is to set the default CL_TextureGroup size to 0 by 0, which indirectly would force a single texture -
   to be created for each window.

- Add thread safety to CL_Logger:
  The three places the vector is accessed needs to be mutex locked 
  (add a static CL_Mutex to the class, CL_MutexSection the three places its used)
- Logger: If you do "CL_ConsoleLogger logger; logger.enable();" it will have two instances
  of logging!

- ClanSound
   Adjust clanSound, so you that can set the frequency rate of an sample - Thus, make the Methane example sounds play correctly.
	1) It only supports 2.0 sound (stuuuupid)
	2) It was designed for DirectSound, then detached from that design. The effect is that it thinks in 'sound buffers' which is bit silly
	3) It was designed back when .wav was king, but we kinda have .ogg and .mp3s now. The consequence of this is that our ogg sound provider sucks
	4) The API itself was designed in the 0.6.x age of clanlib, which means it doesnt have Providers or anything like it


- Modifying existing display window
  Is this function required: void CL_Win32Window::modify_window(const CL_DisplayWindowDescription &desc) 
  Adds extra complexity, to modify a window that has already been created. Should we force the user, to call set_size() etc manually. 
  This function is not supported in linux.

- D3D9
	1) Create a hidden window and create a Direct3DDevice9 for it
	2) Create all textures on this device
	3) For each CL_DisplayWindow, it creates an additional swap chain 
	4) The CL_GraphicContext for each window shares the same Direct3DDevice, and thus shares states (oh no, now we are f**ked)
	5) When you call flip() or update() on the display window, it calls Present on the swap chain
	6) When you resize the window, it destroys the swap chain and creates a new one
	7) If we had fullscreen support, it would destroy the swap chain and create a fullscreen one
	8) If the fullscreen window loses focus, we have to manually destroy the fullscreen swap chain and hide 

- Folder structure
  Projects/* Can this be moved into Setup?

