[Mono-winforms-list] Forms Architecture

Nikolaus Heger nheger at gmail.com
Tue Mar 14 22:19:51 EST 2006

On Mar 15, 2006, at 8:40, Peter Dennis Bartok wrote:

> Nikolaus,
> The Winforms FAQ ( http://www.mono-project.com/FAQ:_Winforms ) has  
> a section
> on philosophy. I am surprised that you didn't read the paragraphs  
> right
> above what you quoted. It answers why we're doing it the way we are.

I did read these paragraphs. They mention GTK and Wine. IMHO, both  
are not suited for a native implementation approach. I agree with all  
that was said about why not to use these frameworks and I could think  
of a few more.
GTK sucks as a cross platform framework to begin with, and basing the  
forms implementation on it could not possibly make it better.
As "better" my definition would be that the Forms application is  
indistinguishable from a native application on the respective platform.

I was thinking about SWT. SWT is a native GUI framework for Java.  
Eclipse is based on it, and Azureus, too.

> I don't have the time for a philosophical discussion right now,  
> since we're
> nearing the Winforms Beta, but I do ask that you try it out before  
> you say
> it's no good. I've seen Swing apps and yes, they sucked. However,  
> purely
> going on my personal impressions, our (unoptimized) UI speed when  
> using SWF
> apps is much better than that of any Swing app I've ever seen.
> Also, our approach does allow native drawing of widgets, there is a  
> theme
> interface that does allow that, and I Alexander Olk has made a  
> driver for
> native Gtk drawing on Linux, for example.

That sounds very promising, I will definitely check it out.

> The fun thing is, Sun could pretty much define their own toolkit  
> API and it
> still sucked.

Agreed. I could elaborate on why Swing is broken, but that's not the  
topic here. The important thing is to learn from its failures.

There are two basic mistakes in the Swing architecture. These  
mistakes are conceptual and can not be fixed. I was somewhat afraid  
that the Forms project is about to repeat these mistakes.

#1 - Emulating native looks with theme
#2 - Hand-drawing widgets

If I can define a Forms theme that just uses the OS for widget- 
drawing, that might be enough to get around both. But I am concerned  
because the whole "theme and hand drawing" philosophy wasn't  
dismissed outright.

> We have a given API we need to implement. We don't have the
> luxury of defining what a control should do or not do, MS defined  
> that, and
> they defined it very close to Win32.
> To then say 'lets use native', unless that native is Win32 is  
> fatal, since
> the other 'native' toolkits just don't implement the same features.  
> And it
> does nobody any good if the app expects a feature that the native  
> toolkit
> doesn't deliver.

That's the problem with all cross platform GUIs. There certainly is  
validity to it, but the problem is limited in scale. SWT seems to  
deal with that just fine.

It seems to me that you want to achieve two things

1 - Provide Windows.Forms as a means to create a cross platform GUI.  
You can mark the windows-only functions of the API as "bad, do not  
use" and developers can develop wonderful cross platform GUIs with no  
problems by just avoiding these Win32-only things.

2 - Provide Forms as a way to quickly / easily port Windows native  
applications. This will be hard as MS will "allow" if not  
encourage .Net developers to dig deep into the Win32 API. The only  
solution to this is to provide workarounds for this on other  
platforms where possible, and skip the impossible-to-emulate things.  
Developers not wise enough to avoid those, or those who simply don't  
care just cannot be accommodated on other platforms.

I, for one, would be happy with just #1. There will always be people  
who program in a Windows-only way and MS will obviously not prevent  
them from doing that.

> As I said, give it a try before you say it's no good.

I didn't say it's no good. I can believe it's "fast enough" because  
on a modern machine almost anything is fast enough and there is  
differences in perception as to what constitutes fast enough. I have  
written Swing apps that are fast enough - at least on Windows. The  
bigger problem is that they stick out as non-native.

It is my experience that the Swing approach with themes is plainly  
wrong. The reason is that while themes are cute, no one really needs  
them. If you look at Swing themes, there are some nice ones from  
JGoodies - they are nice, but I would much rather have a 1:1 native  
look. The only reason I need the nice themes is that there isn't a  
1:1 native look that works everywhere.
And if you look at the most other themes (including and especially  
the ones from Sun) they are just horribly ugly.

Themes have little value other than to approximate the native look,  
and at that task, they are always worse than using native in the  
first place.

I have used Swing since it first came out, and written many client  
applications in it (yes, they can be fast) and never have I had the  
need to have themes. Every single app though had a problem with not  
looking exactly like a native app.

I didn't find an archive where these questions were discussed in the  
past. If there is such a thing, please let me know.

Best regards,


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-winforms-list/attachments/20060315/db6eb7ba/attachment-0001.html

More information about the Mono-winforms-list mailing list