This is a scratch pad for the Shaped Windows Google Summer of Code 2010 project, by Eli Gottlieb
The code is available here: http://hg.libsdl.org/SDL-gsoc2010_shaped_windows
Contents
Status
Documentation
Notes
===Pre-Processing===
Possible pre-processing pipeline:
input_mask surface -(1)-> 8bit alpha -(2)-> 1bit mask -(3)-> 2D region -(4)-> arch specific set shape
# some setting may be needed for this step, like a key color # optional, may be enabled via a mode or when architecture needs it # optional, depends on architecture requirements # this internal function can receive pointers to all the above and use what it needs
===Windows===
====Regions====
Most commonly used is code that essentially sets a "region" which defines which pixels are shown and which are not. Most algorithms uses the Win32 region functions to compose this shape which is simple but works. If Cocoa also uses a shape, it may be good to break out a common "2D shape calculation" algorithm that applies to both architectures. In any case, the input to this process is a binarized (1bit) image. Note that you don't get any "blending" on the edges with this approach.
Here some other sample code: * Sets shape by generating regions: http://comrade.ownz.com/docs/shapewnd.html * Shape of Form by using background key color: http://msdn.microsoft.com/en-us/beginner/cc963986.aspx * Setting per-Window alpha: http://msdn.microsoft.com/en-us/beginner/cc963986.aspx * Form app in .Net calling the Win32 Api: http://www.codeproject.com/KB/miscctrl/AlphaForm.aspx * Great summary with examples for all modes in Delphi: http://melander.dk/articles/alphasplash/
====Layered Window====
Now there is another way to provide transparency using a alpha-bitmap in Windows. The API now is the UpdateLayeredWindow() call: * MSDN info: http://msdn.microsoft.com/en-us/library/ms633556%28VS.85%29.aspx * Sample code: http://www.nuonsoft.com/blog/2009/05/27/how-to-use-updatelayeredwindow/
Even with this approach a shape may still be important to get rid of clicks to the window - a window that is almost transparent (i.e. alpha=1) seems to have no shape, but will still receive clicks on those pixels. Note also, that the layered window API is not supported on WinCE (but the shape API is).
