Bling is a C#-based library for easily programming images, animations, interactions, and visualizations on Microsoft's WPF/.NET. Bling is oriented towards design
technologists, i.e., designers who sometimes program, to aid in the rapid prototyping of rich UI design ideas. Students, artists, researchers, and hobbyists will also find Bling useful as a tool for quickly expressing ideas or visualizations. Bling's APIs
and constructs are optimized for the fast programming of throw away code as opposed to the careful programming of production code.
Some features of Bling:Declarative constraints that maintain dynamic relationships in the UI without the need for complex event handling. For example, button.Width
= 100 - slider.Value causes button to shrink as the slider thumb is moved to the right, or grow as it is moved to the left. Constraints have many benefits: they allow rich custom layouts to be expressed with very little code, they are easy animate, and they
support UIs with lots of dynamic behavior. Simplified animation with one line of code. For example, button.Left.Animate.Duration(500).To = label.Right will cause
button to move to the right of label in 500 milliseconds. Pixel shader effects without the need to write HLSL code or boilerplate code! For example, canvas.CustomEffect = (input, uv) => new ColorBl(new
Point3DBl(1,1,1) - input[uv].ScRGB, input[uv].ScA); defines and installs a pixel shader on a canvas that inverts the canvas's colors. Pixel shading in Bling takes advantage of your graphics card to create rich, pixel-level effects.
Support for multi-pass bitmap effects such as diffuse lighting.
An experimental UI physics engine for integrating physics into user interfaces! The physics supported by Bling is flexible, controllable, and easy
to program. Support for 2.5D lighting.
A rich library of geometry routines; e.g., finding where two lines intersect, the base of a triangle, the area of triangle, or a point on Bezier curve.
These routines are compatible with all of Bling's features; e.g., they can be used in express constraints, pixel shaders, or physical constraints. Bling also provides a rich API for manipulating angles in both degrees and radians.
And many smaller things; e.g., a frame-based background animation manager and slide presentation system.
As a lightweight wrapper around WPF, Bling code is completely compatible with conventional WPF code written in C#, XAML, or other .NET languages.
Sounds very interesting. Well, Erik and I wanted to find out more about Bling (Is it a library or a DSL? Is WPF programming really that hard? How is Bling designed and what makes it a simplified abstraction over a full featured platform technology
like WPF?). It just so happened that Bling creator and software developer Sean McDirmid was in town recently (he works at Microsof's Advanced Technology Center located in Beijing, China). Tune in to see how the latest E2E unfolded (you must realize by now
that we never really plan anything and E2Es just happen as you see them - it's just part of the game we play). Bling is an interesting idea with potential. Simplifying complexity is an important goal.