| |
| Posted by Shawn Liu in reply to Matthias Spycher | PermalinkReply |
|
Shawn Liu
Posted in reply to Matthias Spycher
| Frankly speaking, I'm not a GUI expert neither, but a fan, and spend a lot of time on it. I began to learn java at the beginning of 2004. Attracted by Eclipse and SWT (but don't like the VM of java). At the end of 2004, I firstly encountered D by chance. Wow, like the words in main page of D, "Great, just what I need.. ". But seems there wasn't a very powerful GUI library for then. I tried to pick up DWT on Dsource.org and made some attempts in 2005. So far the DWT win32 reaches v0.35.
A well designed GUI library is important especially for a system language, since it is used more in desktop than in server side. Where were many argues about cross-platform GUI library and many available libraries. http://freshmeat.net/articles/view/928 http://www.brayden.org/twiki/bin/view/Software/GuiToolkits http://www.cuj.com/link/subject36.htm?topic=link
There are mainly 3 approaches to make a cross platform gui library, distinguished by heavyweight/lightweight or native primitive/emulation.
1) lightweigh and fully emulation
a top level window is native primitive as a container and any other widgets
are emulated by "drawing". In win32, only the top-level window wrap the
HWND.
java SWING is such a toolkit, and some SDL/OpenGL based library, and Andrew
Fedoniouk's "Harmonia"
http://www.terrainformatica.com/wiki/pmwiki.php?pagename=Harmonia.Harmonia
Seems that google's picasa2 uses such library
http://www.google.com/picasa/
pro : Easy to implement rendering, texture, zoom, skin etc. since there is
a graphics engine under the GUI toolkit. Java2D is such a easy to use thing.
The maintenance is not heavy.
con: may different look-n-feel from the native app. Some application can not work with it. For example, an on screen dictionary application. Try as possible to emulate the native widgets and theme is not easy and may cause performance issue. Open File Dialog in SWING is such a thing. Font in picasa sometimes seems not clear and sharp enough.
2) heavyweight and emulation
widgets are native primitive but don't use the controls provide by platform
and emulate the behaviors. In win32, behind every widget there is a HWND.
QT and FoxGUI http://www.fox-toolkit.org/ are such libraries.
google earth is written using QT
http://earth.google.com/
pro: height performance as native widgets. maintain the source in a high
level.
con: look-n-feel still different from native app.
3) heavyweiht and use native widget as possible
SWT and wxWidget are such toolkits.
pro: native look-n-feel, themes by the platform, high performance. Upgrade
with the system.
con: maintain the source for different platform is a heavy burden. Still
need emulate some widget in some platform.
We can see every approach has its benefit and drawbacks.
To D, if we make a GUI library from ground, I'd agree to Andrew Fedoniouk and choose 1). This is the minimal cost way to support D in more platforms. I don't mean to port SWING to D is a good idea. SWING is based on AWT and has some performance issue since the class hierarchy is too deep. I mean from ground and in pure D. Harmonia is interesting and should go further. But build one from ground may be a long time run. It is not easy for D community to bring such a toolkit for now.
If port some thing available, I'd like it be SWT. Java seems a sibling to D. Port java to D is far easy than C++ does. Eclipse/SWT is well designed and maintained. And seems it is accepted and supported by the industry. Port it to D is easier than invent new.
Just my thoughts. Sorry for my poor English.
"Matthias Spycher" <matthias@coware.com> says:dsapvp$2n1n$1@digitaldaemon.com...
> I'm not an expert UI designer, but I've had the opportunity to work in groups that use (or have used) all the mentioned toolkits. It's very difficult to make a decision based on technical merit alone. QT is great for high-performance static apps (not much dynamism/configurability at runtime). The Java toolkits are quite good in the more dynamic environment of a JRE (reflecting the smalltalk heritage). I would argue that AWT/Swing and SWT will continue to benefit from the competition on the Java platform. The SWT/JFace combo in eclipse demonstrate that you can build very large sophisticated apps in Java. Performance is not as good as QT, but it is sufficient for many apps. Take a look at IBM's Workplace Client technology for example:
>
> http://www-128.ibm.com/developerworks/workplace/products/clienttechnology/
>
> I vote for DWT, not for technical reasons, but because it's a good business decision. I very much agree with Shawn Liu's assessment of the benefits of "getting close" to the eclipse ecosystem. SWT -> DWT may be just a launch pad for something much bigger. Anyone who has used eclipse with EMF and GEF knows where this train is heading. The model-driven architecture (MDA), where most of an application's code is generated, is becoming a reality. And if D can ride this wave, it has a much better chance of survival.
>
> Matthias
|