OK, so maybe going with WPF wasn’t such a great idea after all. It is just so incredibly over-generalized and over-engineered. I am hitting my gag limit. I don’t have the time or the interest to become an expert on this monstrosity. I am scared of having to debug the mysteries hidden within this black box. They are simplifying it for Silverlight, but that is not ready. I have this sinking feeling that I have made a big mistake.
I am also feeling uncomfortable with C#. It is just different enough from Java to be confusing. The library docs are not very good. Speaking of which, they don’t even have a Javadoc equivalent – they have an XML format for embedded docs, but there is no way to compile it to a human readable form! Weak stories on version control and unit testing – you need to go with crufty Microsoft tools (SourceSafe is famous for corrupting repositories) or thinly supported third party tools. Jetbrains makes an amazing plugin for Visual Studio called Resharper that eclipses Eclipse. Unfortunately it doesn’t support the C# 3.0 language features, and I would rather forgo them than give up Resharper. Overall, C# feels a little provincial – Java has a more diverse and vibrant community.
What got me into this situation is my anger with Swing. Here is an anecdote. Take a look at the SwingSet2 demo that ships with every JDK. It is only in 1.6, 10 years on, that it finally uses antialiased fonts on Windows. They have been able to do this since 1.4. What is wrong with these guys? What kind of UI framework team doesn’t care how ugly its demo app looks? Why did they wait till 1.6 to make this a default?
I am really at a loss about how to handle my UI. Flash looks like the right thing, but ActionScript is too limited. Silverlight and JavaFX look promising, but they are not ready.
Vineet suggested I check out Draw2D. I also just discovered Zest, which builds on it. Draw2D is a SWT framework for box-and-line diagrams, which comes close to my needs. It supports the layout of overlapping graphical components carrying behavior. There is support for scaling. Some primitive (synchronous) animation. No transparency. Maybe I can hack it up to add the features I need. That might be easier than using WPF. Ironically, the SWT team is currently porting to WPF.
There is also SWG, which is essentially a Flash clone on SWT. Unfortunately it forked SWT and is not being maintained. But maybe I could copy parts of it, like the animation framework. That is the beauty of open source – you can pierce the API to read it or hack it. The impenetrable black box of WPF is scaring me.