Wiki Page Content

Revision 5 as of 2010-05-18 14:14:46

Clear message

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

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:

Layered Window

Now there is another way to provide transparency using a alpha-bitmap in Windows. The API now is the UpdateLayeredWindow() call:

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).

(Page Info.)
Feedback
Please include your contact information if you'd like to receive a reply.
Submit