D - Cross platform GUI library
- Craig Black (26/26) Aug 29 2002 Here is an excerpt from D docs:
- Pavel Minayev (12/24) Aug 29 2002 Look&feel only remains "native" as long as M$ doesn't change GUI
- Mark Evans (12/12) Aug 29 2002 The proper way to design cross-platform libraries is to minimize all
- Pavel Minayev (10/19) Aug 29 2002 Didn't heard of it... URL please?
- Mac Reiter (115/127) Aug 30 2002 The problem with this is that a "universal" set doesn't make anybody hap...
- andy (20/172) Aug 31 2002 poppycock. My wife is an accountant and when her hard drive crashed she...
- Walter (2/2) Sep 01 2002 Thanks for a great article. You should submit it to the D User's
- Toyotomi (9/13) Sep 01 2002 No actually this is the 'right way', but wrong is better here.
- Craig Black (7/15) Aug 30 2002 You are wrong about this. Delphi CLX libraries use Qt which calls
- Pavel Minayev (6/16) Aug 30 2002 Everybody still uses VCL when making programs for Windows.
- Toyotomi (4/10) Sep 01 2002 Actually CLX in Windows is fairly looked down upon because of the added
- Toyotomi (1/4) Sep 01 2002 Opera the web browser...
- Mark T (5/8) Nov 01 2002 We use a product (VectorCAST) at work that developed it's GUI with Qt. T...
- Ilya Minkov (8/11) Dec 29 2002 Not directly. Delphi's complete windows GUI class libarary was ported to...
- Toyotomi (5/10) Sep 01 2002 And don't forget the new SWT from IBM used with Java
- Mark Evans (23/24) Sep 02 2002 VCF was inspired by SWT, Delphi, and Qt among other things. It endeavor...
- Robert M. Münch (24/35) Sep 03 2002 source
- Mark Evans (10/13) Sep 06 2002 I have difficulty interpreting your comments. D is better than C++, and...
- Walter (5/8) Sep 06 2002 kind
- Pavel Minayev (2/3) Sep 07 2002 I'm afraid discussing which one to choose means starting a flame war. =)
- Walter (8/11) Sep 07 2002 I'd like to make the point that there will be no gui as part of D. There...
- Mark Evans (3/6) Sep 08 2002 Fully agreed, Walter! The more the better!
- Mark Evans (7/8) Sep 08 2002 That's possible. I would argue instead for something like a SWIG wrappe...
- Walter (8/17) Sep 08 2002 that
- Robert M. Münch (5/6) Sep 08 2002 more.
- Toyotomi (8/13) Sep 05 2002 If C++ had something as good as the VCL, we wouldn't even need D, that's
- Toyotomi (8/20) Sep 09 2002 The problem is, like C++, those C++ toolkits do not suit us.
- Pavel Minayev (2/6) Sep 09 2002 Where can I download SWT as a separate package?
- Walter (4/6) Sep 09 2002 Which is why Java is not a systems language.
- Curtis d'Entremont (6/32) Oct 30 2002 SWT is written almost completely in java. There is a small native dll/so...
Here is an excerpt from D docs: GUI styles, philosophies, etc., are not portable from machine to machine. A GUI Windows app should look like a Windows app when running on a Windows machine. It should not look and feel like a Mac app unless it is running on a Mac. Attempts to create a common GUI class library between Windows, Mac, and other GUI operating systems have all to my knowledge failed. Java has a successful GUI class library, but does so by creating its own GUI with its own look and feel. This approach is fine for a web language, but not for a systems language like D is. Windowing class libraries should be separate. I could help but notice the: "Attempts to create a common GUI class library between Windows, Mac, and other GUI operating systems have all to my knowledge failed." Qt is a feature-rich cross platform GUI framework for C++: www.trolltech.com Qt ports to Windows, Linux, and Mac all with a native look and feel. Qt is what KDE for linux is built on. Qt is what Borland Delphi, Borland C++ Builder, and Borland Kylix are built upon. I have used Qt for two years now and found it to be the absolute best solution for high-performance cross-platform software. My application is written in C++ and works on both Windows and Linux with a common source code base. As D's specs and compiler become more mature, it will be essential that D has a cross-platform GUI library. Perhaps Qt could eventually be ported to D? -Craig
Aug 29 2002
"Craig Black" <cblack ara.com> wrote in news:akljhr$mcr$2 digitaldaemon.com:I could help but notice the: "Attempts to create a common GUI class library between Windows, Mac, and other GUI operating systems have all to my knowledge failed." Qt is a feature-rich cross platform GUI framework for C++: www.trolltech.com Qt ports to Windows, Linux, and Mac all with a native look and feel.Look&feel only remains "native" as long as M$ doesn't change GUI once again (like they did in WinXP).Qt is what KDE for linux is built on. Qt is what Borland Delphi, Borland C++ Builder, and Borland Kylix are built upon. I have used QtDelphi is not Qt. Nor is C++Builder. Both are built on top of native Windows API, and they actually use _native_ widgets (and don't emulate them). So you can turn on XP styles for a Delphi program. I don't have anything against Qt. It is a great thing, but it has its limitations. Are you aware of any popular commercial Windows software written using Qt?..As D's specs and compiler become more mature, it will be essential that D has a cross-platform GUI library. Perhaps Qt could eventually be ported to D?Then, how would you track the changes? It is a hard job... probably it's better to make an import module for Qt.
Aug 29 2002
The proper way to design cross-platform libraries is to minimize all dependencies on the OS. That means drawing your own widgets using a generic, cross-platform device context layer, rather than relying on native OS widget implementations. A good example from the commercial world is LabVIEW, which is quite excellent on Windows, Mac, and Linux. In the open-source world, I most admire the VCF library's philosophy (although it is still in early stages of cross-platform development and retains a few Windows API entanglements). A poor example is wxWindows which basically wraps native APIs; consequently its code looks like a mess of #ifdefs. Recognizing their design flaw, they have recently begun an effort called wxUniversal to implement the correct approach. Mark
Aug 29 2002
Mark Evans <Mark_member pathlink.com> wrote in news:akm90b$1ebj$1 digitaldaemon.com:A good example from the commercial world is LabVIEW, which is quite excellent on Windows, Mac, and Linux. In the open-source world, IDidn't heard of it... URL please?most admire the VCF library's philosophy (although it is still in early stages of cross-platform development and retains a few Windows API entanglements).VCF is quite far from completion. We shall see what it can do when it is completed/A poor example is wxWindows which basically wraps native APIs; consequently its code looks like a mess of #ifdefs. Recognizing their design flaw, they have recently begun an effort called wxUniversal to implement the correct approach.Funny enough, I find wxWindows the best library. It is rather feature- rich (at least for multiplatform library), and also because it uses native widgets. I don't care for the source code - #ifdefs or whatever - it just works fine for me...
Aug 29 2002
The problem with this is that a "universal" set doesn't make anybody happy. People who use Windows generally do so because they like the way Windows looks and acts. People who use Macintosh do so because they like the way Macintosh looks and acts. People who use Linux do so because they like being able to make it act any way they want to... If you make a universal set, you force everybody on all platforms to use the same thing, and nobody is happy (unless you modelled your "universal" set on a pre-existing set, like the Windows controls, in which case Windows users are happy and everybody else hates you) A true cross platform system would require some way to specify extremely high level concepts about what the application is attempting to do. It would also have to have a constraint-based system for layout, since the application cannot be allowed to directly state where controls should go. For some of the high-level concepts, it would even need to be illegal to specify _any_ layout constraints, because the eventual concrete expression of the high-level concept may have to be too variable to be constrained. The a GAL (GUI abstraction layer) would have to be written that knew how to implement the high-level concepts in terms of not only the local native widgets, but also the local native GUI idioms. It isn't sufficient to use all Macintosh widgets if you lay them out in a Windows arrangement and confuse the user. It is also unacceptable to use Windows buttom naming and ordering schemes on Linux or Macintosh, where they expect different buttons and may be expecting (for example) OK and Cancel to be in the other order. Layout idioms are extremely powerful. My most hated example of breaking them comes from Microsoft itself. VB comes with an installation set creation tool. The resulting installation set eventually gets to a dialog that looks like: (my apologies to those of you using proportional width fonts -- I'll try to use some HTML to help at least some of you...) <pre> +-------------------------------------------------------------+ | | | +-------+ | | | Pic | | | +-------+ | | | | +-----------------------------------------------------+ | | | C:\program files\whatever | | | +-----------------------------------------------------+ | | | | +------------------+ | | | Stop Installation| | | +------------------+ | +-------------------------------------------------------------+ </pre> Now, if you read the button, you realize that it is going to abort the installation. However, that button is exactly where a default OK button should be. _Any_ sane Windows developer would have put the OK or Continue button there. Any _decent_ Windows developer would have put an OK button to the left of it, and then had the Cancel button. That idiom has been in use since Windows 1.0. Something else you may notice is that there is no OK button. You have to click on the "Pic", which is a non-obvious button that appears to simply be pointless icon on the dialog. Also notice that you can't do anything about the directory path from this dialog. Nor can you back up. You have to cancel and re-run the program... This dialog breaks every single Windows dialog design rule. Most existing cross-platform GUI libraries suffer from this sort of issue. Resulting apps look fine on the platform where they were developed, but look like they were developed by Martians to users on a different platform. As Microsoft wins the GUI wars (its happening, and I _really_ do not want to get into a flame war about it...) the other GUIs are taking on more and more of the Windows look-and-feel, or idioms. If this continues, it will eventually be trivial to write a cross platform GUI library, 'coz all the GUIs will look the same. Another issue is that for non-business applications, "platform standard" GUI idioms are increasingly irrelevant. Photoshop, GIMP, WinAMP, Lightwave, Blender, and others have all pretty much just made up their own interface. Sure, they use the native widgets for things like file dialogs, but getting a native file dialog is one function call away for most platforms. Everything else in the program is completely unique to their own program. That's cross platform. It's cross platform the way LabView does it. And it is really popular for these kinds of applications. But it will not fly for business applications. An accountant or a technical writer wants their spreadsheet/word processor to look and work just like every other program on their machine. And trust me on this, the average user cannot make the mental shift to a different user interface idiom. For most people, it took so long to figure out how to use whatever machine they started on that they are unwilling to even try to learn a different system unless forced. As programmers, we are used to more abstract thinking and are generally more flexible, which makes us think that it should be possible to make a "good enough" cross platform GUI library, or that we can just make up a whole new idiom and it'll be fine as long as we are consistent across platforms. Well, very few individual users ever use more than one platform, so they don't care if you are consistent _between_ platforms. But they definitely care if you are consistent with the hundred other applications they are already running. As a side note, wxWindows is going to a "universal" set to fill in advanced functionality on platforms that do not have a corresponding widget of their own. For example, not all platforms have drag-and-droppable tree views that also support icons. So, you either don't support it on any platform, or you make up something for the weaker platforms and continue to use the native widgets when available. You could use the universal set on all platforms, but I think you would be setting yourself up for a large number of tech support calls reporting "bugs" in how your program works (just because it doesn't work the way the user expects, based on what it looks like). If wxWindows users' code is full of #ifdef's, then wxWindows needs to be designed better -- they need to seriously investigate some of the abstract factory and related patterns. If users' code is clean, and the #ifdefs are all inside the wxWindows code, that is fine. Have you looked at STL source code? It is completely unreadable because of all the #ifdefs. Same for BOOST. That doesn't mean they are poorly designed, it just means that doing anything cross-platform is a pain in the ____. They are trying to hide all of that pain inside their libraries so that the users are not exposed to it. I would like a GUI inside the language as well, but then I look at all the headaches that Java has had with the original AWT, then trying to migrate to Swing, and neither of them are actually guaranteed to be in the language, so you still have to do some kinda goofy stuff just in case you find yourself on an antiquated jvm. On top of that, I don't like the look or the behavior of either AWT or Swing, but I would be stuck with it if I ever tried to do anything serious with Java. A built in GUI system would be great, but the right solution hasn't been developed yet, and I wouldn't want to be tied down to any of the existing cross-platform libraries. Maybe after everything else in D settles down, we can start developing that high-level abstract / GAL system I described earlier... Mac In article <akm90b$1ebj$1 digitaldaemon.com>, Mark Evans says...The proper way to design cross-platform libraries is to minimize all dependencies on the OS. That means drawing your own widgets using a generic, cross-platform device context layer, rather than relying on native OS widget implementations. A good example from the commercial world is LabVIEW, which is quite excellent on Windows, Mac, and Linux. In the open-source world, I most admire the VCF library's philosophy (although it is still in early stages of cross-platform development and retains a few Windows API entanglements). A poor example is wxWindows which basically wraps native APIs; consequently its code looks like a mess of #ifdefs. Recognizing their design flaw, they have recently begun an effort called wxUniversal to implement the correct approach. Mark
Aug 30 2002
poppycock. My wife is an accountant and when her hard drive crashed she walked right over to my computer and started using Gnome/Linux. Her only issues were with Mozilla operating differently, but only minor and I had the same issues. Why? The look and feel is similar enough and my "theme" setting is close enough that it didn't bother her and she barely noticed (I only had to explain "the foot is the start button" -- but I've had to explain to countless people you have to press start to shutdown on windows too). She actually had more trobule ajusting to XP's default theme/etc. Most user interface issues are faily universal and mimicing the windows look and feel on Linux or any other platform is generally elementry. The VB install screen was confusing....TO ANYONE used to any platform. However I should point out that IIRC it was relatively easy to modify. You give Microsoft way more credit than they deserve. They borrowed their ideas from others and others borrowed them back. The great thing is that bar for creating user interfaces is really low. Most user interfaces suck so horribly that you only have to make one as good as Windows, Gnome or KDE. -Andy Mac Reiter wrote:The problem with this is that a "universal" set doesn't make anybody happy. People who use Windows generally do so because they like the way Windows looks and acts. People who use Macintosh do so because they like the way Macintosh looks and acts. People who use Linux do so because they like being able to make it act any way they want to... If you make a universal set, you force everybody on all platforms to use the same thing, and nobody is happy (unless you modelled your "universal" set on a pre-existing set, like the Windows controls, in which case Windows users are happy and everybody else hates you) A true cross platform system would require some way to specify extremely high level concepts about what the application is attempting to do. It would also have to have a constraint-based system for layout, since the application cannot be allowed to directly state where controls should go. For some of the high-level concepts, it would even need to be illegal to specify _any_ layout constraints, because the eventual concrete expression of the high-level concept may have to be too variable to be constrained. The a GAL (GUI abstraction layer) would have to be written that knew how to implement the high-level concepts in terms of not only the local native widgets, but also the local native GUI idioms. It isn't sufficient to use all Macintosh widgets if you lay them out in a Windows arrangement and confuse the user. It is also unacceptable to use Windows buttom naming and ordering schemes on Linux or Macintosh, where they expect different buttons and may be expecting (for example) OK and Cancel to be in the other order. Layout idioms are extremely powerful. My most hated example of breaking them comes from Microsoft itself. VB comes with an installation set creation tool. The resulting installation set eventually gets to a dialog that looks like: (my apologies to those of you using proportional width fonts -- I'll try to use some HTML to help at least some of you...) <pre> +-------------------------------------------------------------+ | | | +-------+ | | | Pic | | | +-------+ | | | | +-----------------------------------------------------+ | | | C:\program files\whatever | | | +-----------------------------------------------------+ | | | | +------------------+ | | | Stop Installation| | | +------------------+ | +-------------------------------------------------------------+ </pre> Now, if you read the button, you realize that it is going to abort the installation. However, that button is exactly where a default OK button should be. _Any_ sane Windows developer would have put the OK or Continue button there. Any _decent_ Windows developer would have put an OK button to the left of it, and then had the Cancel button. That idiom has been in use since Windows 1.0. Something else you may notice is that there is no OK button. You have to click on the "Pic", which is a non-obvious button that appears to simply be pointless icon on the dialog. Also notice that you can't do anything about the directory path from this dialog. Nor can you back up. You have to cancel and re-run the program... This dialog breaks every single Windows dialog design rule. Most existing cross-platform GUI libraries suffer from this sort of issue. Resulting apps look fine on the platform where they were developed, but look like they were developed by Martians to users on a different platform. As Microsoft wins the GUI wars (its happening, and I _really_ do not want to get into a flame war about it...) the other GUIs are taking on more and more of the Windows look-and-feel, or idioms. If this continues, it will eventually be trivial to write a cross platform GUI library, 'coz all the GUIs will look the same. Another issue is that for non-business applications, "platform standard" GUI idioms are increasingly irrelevant. Photoshop, GIMP, WinAMP, Lightwave, Blender, and others have all pretty much just made up their own interface. Sure, they use the native widgets for things like file dialogs, but getting a native file dialog is one function call away for most platforms. Everything else in the program is completely unique to their own program. That's cross platform. It's cross platform the way LabView does it. And it is really popular for these kinds of applications. But it will not fly for business applications. An accountant or a technical writer wants their spreadsheet/word processor to look and work just like every other program on their machine. And trust me on this, the average user cannot make the mental shift to a different user interface idiom. For most people, it took so long to figure out how to use whatever machine they started on that they are unwilling to even try to learn a different system unless forced. As programmers, we are used to more abstract thinking and are generally more flexible, which makes us think that it should be possible to make a "good enough" cross platform GUI library, or that we can just make up a whole new idiom and it'll be fine as long as we are consistent across platforms. Well, very few individual users ever use more than one platform, so they don't care if you are consistent _between_ platforms. But they definitely care if you are consistent with the hundred other applications they are already running. As a side note, wxWindows is going to a "universal" set to fill in advanced functionality on platforms that do not have a corresponding widget of their own. For example, not all platforms have drag-and-droppable tree views that also support icons. So, you either don't support it on any platform, or you make up something for the weaker platforms and continue to use the native widgets when available. You could use the universal set on all platforms, but I think you would be setting yourself up for a large number of tech support calls reporting "bugs" in how your program works (just because it doesn't work the way the user expects, based on what it looks like). If wxWindows users' code is full of #ifdef's, then wxWindows needs to be designed better -- they need to seriously investigate some of the abstract factory and related patterns. If users' code is clean, and the #ifdefs are all inside the wxWindows code, that is fine. Have you looked at STL source code? It is completely unreadable because of all the #ifdefs. Same for BOOST. That doesn't mean they are poorly designed, it just means that doing anything cross-platform is a pain in the ____. They are trying to hide all of that pain inside their libraries so that the users are not exposed to it. I would like a GUI inside the language as well, but then I look at all the headaches that Java has had with the original AWT, then trying to migrate to Swing, and neither of them are actually guaranteed to be in the language, so you still have to do some kinda goofy stuff just in case you find yourself on an antiquated jvm. On top of that, I don't like the look or the behavior of either AWT or Swing, but I would be stuck with it if I ever tried to do anything serious with Java. A built in GUI system would be great, but the right solution hasn't been developed yet, and I wouldn't want to be tied down to any of the existing cross-platform libraries. Maybe after everything else in D settles down, we can start developing that high-level abstract / GAL system I described earlier... Mac In article <akm90b$1ebj$1 digitaldaemon.com>, Mark Evans says...The proper way to design cross-platform libraries is to minimize all dependencies on the OS. That means drawing your own widgets using a generic, cross-platform device context layer, rather than relying on native OS widget implementations. A good example from the commercial world is LabVIEW, which is quite excellent on Windows, Mac, and Linux. In the open-source world, I most admire the VCF library's philosophy (although it is still in early stages of cross-platform development and retains a few Windows API entanglements). A poor example is wxWindows which basically wraps native APIs; consequently its code looks like a mess of #ifdefs. Recognizing their design flaw, they have recently begun an effort called wxUniversal to implement the correct approach. Mark
Aug 31 2002
Thanks for a great article. You should submit it to the D User's Journal. -Walter
Sep 01 2002
On Thu, 29 Aug 2002 22:59:24 +0000 (UTC), Mark Evans <Mark_member pathlink.com> wrote:The proper way to design cross-platform libraries is to minimize all dependencies on the OS. That means drawing your own widgets using a generic, cross-platform device context layer, rather than relying on native OS widget implementations.No actually this is the 'right way', but wrong is better here. If wrong wasn't better I'd be using Swing, but Swing is horrid. See SWT from IBM, it's the best stab at this yet... I use it in COMPILED Java apps that end up being 600k completely self contained and redistributable without any Java crap on the user's PC... Some SWT articles here in a whole section title 'SWT' http://www.eclipse.org/articles/index.html
Sep 01 2002
Look&feel only remains "native" as long as M$ doesn't change GUI once again (like they did in WinXP). Delphi is not Qt. Nor is C++Builder. Both are built on top of native Windows API, and they actually use _native_ widgets (and don't emulate them). So you can turn on XP styles for a Delphi program.You are wrong about this. Delphi CLX libraries use Qt which calls native Win32 APIs. That's why you can now write completely portable Delphi code using CLX. Look and feel is preserved in all cases (even in WinXP).I don't have anything against Qt. It is a great thing, but it has itslimitations.Are you aware of any popular commercial Windows software written using Qt?..You could be using Qt apps and never know it. It's not like there's a big banner when the program starts that says "This app was built using Qt."
Aug 30 2002
"Craig Black" <cblack ara.com> wrote in news:akonln$1d4j$1 digitaldaemon.com:You are wrong about this. Delphi CLX libraries use Qt which calls native Win32 APIs. That's why you can now write completely portable Delphi code using CLX. Look and feel is preserved in all cases (even in WinXP).Everybody still uses VCL when making programs for Windows.If I turn on XP visual styles for Qt program, will it behave accordingly? An easy way to know...Are you aware of any popular commercial Windows software written using Qt?..You could be using Qt apps and never know it. It's not like there's a big banner when the program starts that says "This app was built using Qt."
Aug 30 2002
On Fri, 30 Aug 2002 16:28:45 -0500, "Craig Black" <cblack ara.com> wrote:You are wrong about this. Delphi CLX libraries use Qt which calls native Win32 APIs. That's why you can now write completely portable Delphi code using CLX. Look and feel is preserved in all cases (even in WinXP).Actually CLX in Windows is fairly looked down upon because of the added requirements of the QT runtime being distributed.You could be using Qt apps and never know it. It's not like there's a big banner when the program starts that says "This app was built using Qt."There is though... to those that know how to look.
Sep 01 2002
I don't have anything against Qt. It is a great thing, but it has its limitations. Are you aware of any popular commercial Windows software written using Qt?..Opera the web browser...
Sep 01 2002
I don't have anything against Qt. It is a great thing, but it has its limitations. Are you aware of any popular commercial Windows software written using Qt?..We use a product (VectorCAST) at work that developed it's GUI with Qt. They are a small outfit and they need to support Windows and UNIX/Linux platforms. As long as you are not doing pixel level type stuff then cross-platform GUI is a great way to achieve easy portability. It basically has a Windows "look and feel" on each platform.
Nov 01 2002
Mark T wrote:Not directly. Delphi's complete windows GUI class libarary was ported to other systems (Kylix for Linux) using Qt. It is said to reatain its complete functionality. I'm pretty much sure, that the GUI library that would resemble Delphi's would be good for D, since it contains no windows-specifics, and there has been done a lot: an X windows port made for FPK pascal already exists and is open-source, which may simplify further development.I don't have anything against Qt. It is a great thing, but it has its limitations. Are you aware of any popular commercial Windows software written using Qt?..
Dec 29 2002
On Thu, 29 Aug 2002 11:59:56 -0500, "Craig Black" <cblack ara.com> wrote:I could help but notice the: "Attempts to create a common GUI class library between Windows, Mac, and other GUI operating systems have all to my knowledge failed." Qt is a feature-rich cross platform GUI framework for C++: www.trolltech.comAnd don't forget the new SWT from IBM used with Java but written in a compiled language with multi-platform abstractions. Maybe D should even use SWT. Seriously, check it out if you have clout...
Sep 01 2002
And don't forget the new SWT from IBM used with JavaVCF was inspired by SWT, Delphi, and Qt among other things. It endeavors to be a pure, standard C++ cross-platform toolkit. It still has a long way to go, but having examined others (and their prices!) I think highly of it at least from a philosophical standpoint. Someone pointed out that layout managers are Good Things, and they are. It's pretty easy to create imitation look & feel for Mac/Win/Linux. Some toolkits call this technique "skinning." I've heard from more than one source that it's easier to do that, than to wrap all the native GUI APIs with their weird peculiarities, bugs, and endless changes. After all, wxWindows has been doing just that for 10 years, but finally came around to their wxUniversal concept. Another benefit of the "universal device context" approach is that I don't have to be expert in three different APIs to write new widgets, just expert in the library's API. A good cross-platform GUI library uses the OS only for minimal, baseline capabilities -- keystrokes, mouse clicks, cursor positions, and file services. I believe that REBOL uses this technique for its REBOL/View platform which runs on dozens of operating systems. Of course if one drops the cross-platform requirement on the GUI, then all of the above is meaningless. You can just use the native API. Still one should strive whenever possible to utilize cross-platform toolkits and I hope that D will someday rank as one of them! Mark
Sep 02 2002
"Mark Evans" <Mark_member pathlink.com> schrieb im Newsbeitrag news:al0tjq$1ovl$1 digitaldaemon.com...It's pretty easy to create imitation look & feel for Mac/Win/Linux. Some toolkits call this technique "skinning." I've heard from more than onesourcethat it's easier to do that, than to wrap all the native GUI APIs withtheirweird peculiarities, bugs, and endless changes. After all, wxWindows hasbeendoing just that for 10 years, but finally came around to their wxUniversal concept.Hi Mark, for a GUI library that draws the widget itselft have a look at OpenAmulet (http://www.openip.org) This library supports a layout manager as well. This concept is implemented by using constraints and a multi-way constraint solver. Very powerful concept.Another benefit of the "universal device context" approach is that I don'thaveto be expert in three different APIs to write new widgets, just expert inthelibrary's API.Right. In OpenAmulet the widgets are implemented using the basic library functions, and only these are mapped to the platform API.I believe that REBOL uses this technique for its REBOL/View platform whichrunson dozens of operating systems.(Hey Mark know you from the Rebol ML ;-)). IMO they have implemented a portable blitting engine. Most /View stuff is blitting etc. Graphic primitives like lines etc. are implemented within the Rebol interpreter utilizing only the blitting functions. So, yes, they have implemented line drawing algorithms etc. and yes, it's not as fast as if you would use the navtive OS functions (that are than perhaps mapped to the hardware implemented functions of the graphic card). For me using Rebol for the GUI and D for the things that need to be fast and efficient is a very powerful combination. That's what I want to do :-)). Robert
Sep 03 2002
Hi Mark, for a GUI library that draws the widget itselft have a look at OpenAmulet>I like OpenAmulet, but the project has gone stale; no one works on it any more. Yes, layout managers are powerful and cool.If C++ had something as good as the VCL, we wouldn't even need DI have difficulty interpreting your comments. D is better than C++, and of course we want it, VCF or otherwise. I see no evidence for VCF being vaporware or falling behind schedule. Sorry that the Berlin project did not make it. Maybe it's time to bring the discussion back around to the question, "what kind of GUI(s) should D have?". After all, having a great programming language that can't create interfaces will be bad news for D. I don't have an easy answer...Mark's disclaimer! Mark
Sep 06 2002
"Mark Evans" <Mark_member pathlink.com> wrote in message news:albltl$39t$1 digitaldaemon.com...Maybe it's time to bring the discussion back around to the question, "whatkindof GUI(s) should D have?". After all, having a great programming languagethatcan't create interfaces will be bad news for D.Why not just port one of the C++ open source ones?
Sep 06 2002
Walter wrote:Why not just port one of the C++ open source ones?I'm afraid discussing which one to choose means starting a flame war. =)
Sep 07 2002
"Pavel Minayev" <evilone omen.ru> wrote in message news:ald5be$1h7f$2 digitaldaemon.com...Walter wrote:I'd like to make the point that there will be no gui as part of D. There may be plenty of gui toolkits for D, and some may even ship with D compiler packages, but D itself should not be tied to any particular gui ideas. Anyone who believes strongly that a gui should be done a certain way won't get any argument from me, other than encouragement to implement it in D! D will be better off having a rich assortment of gui toolkits available.Why not just port one of the C++ open source ones?I'm afraid discussing which one to choose means starting a flame war. =)
Sep 07 2002
Anyone who believes strongly that a gui should be done a certain way won't get any argument from me, other than encouragement to implement it in D! D will be better off having a rich assortment of gui toolkits available.Fully agreed, Walter! The more the better! D does not need "built-in GUI support" any more than C++. Mark
Sep 08 2002
Why not just port one of the C++ open source ones?That's possible. I would argue instead for something like a SWIG wrapper that can make C++ accessible to D without rewriting the whole library; e.g. the way that wxPython works with wxWindows. Developing and maintaining a D port is a huge proposal, but maintaining a D interface to the C++ is manageable. The burden of feature enhancements and bug fixes remains on the shoulders of the C++ library developers. Mark
Sep 08 2002
"Mark Evans" <Mark_member pathlink.com> wrote in message news:algbei$2i6b$1 digitaldaemon.com...thatWhy not just port one of the C++ open source ones?That's possible. I would argue instead for something like a SWIG wrappercan make C++ accessible to D without rewriting the whole library; e.g. thewaythat wxPython works with wxWindows. Developing and maintaining a D port is a huge proposal, but maintaining aDinterface to the C++ is manageable. The burden of feature enhancementsand bugfixes remains on the shoulders of the C++ library developers.That's probably the right initial way to do it, especially if it is a large, complex code base.
Sep 08 2002
"Mark Evans" <Mark_member pathlink.com> schrieb im Newsbeitrag news:albltl$39t$1 digitaldaemon.com...I like OpenAmulet, but the project has gone stale; no one works on it anymore. Hi, yep that's the petty. I really don't have any time to spend on it.. :-(( even it has such a great concept. And noone else took the stake. Robert
Sep 08 2002
On Mon, 2 Sep 2002 23:52:26 +0000 (UTC), Mark Evans <Mark_member pathlink.com> wrote:If C++ had something as good as the VCL, we wouldn't even need D, that's how strong a supposedly impossible or constantly failing toolkit is. However, as long as something is vaporware there isn't much that can be said about it. I remember talking to Graydon Hoare of the Berlin Consortium about 4 or 5 years ago and being told about the now laughable and definitely missed timeline of that project. www.berlin-consortium.orgAnd don't forget the new SWT from IBM used with JavaVCF was inspired by SWT, Delphi, and Qt among other things. It endeavors to be a pure, standard C++ cross-platform toolkit. It still has a long way to go, but having examined others (and their prices!) I think highly of it at least from a philosophical standpoint.
Sep 05 2002
On Sun, 01 Sep 2002 20:43:26 -0500, Toyotomi <io219 attbi.com> wrote:On Thu, 29 Aug 2002 11:59:56 -0500, "Craig Black" <cblack ara.com> wrote:The problem is, like C++, those C++ toolkits do not suit us. SWT is the best I know of ( though VCL is more complete & flexible ) SWT was designed for use with Java but is NOT written in Java. ( Java2D is not written in Java either, it's straight portable C ) SWT is multiplatform, but uses native widgets when possible. Someone should work on getting SWT support in D. 90% of the many C++ toolkits are rather hilarious.I could help but notice the: "Attempts to create a common GUI class library between Windows, Mac, and other GUI operating systems have all to my knowledge failed." Qt is a feature-rich cross platform GUI framework for C++: www.trolltech.comAnd don't forget the new SWT from IBM used with Java but written in a compiled language with multi-platform abstractions. Maybe D should even use SWT. Seriously, check it out if you have clout...
Sep 09 2002
Toyotomi wrote:SWT was designed for use with Java but is NOT written in Java. ( Java2D is not written in Java either, it's straight portable C ) SWT is multiplatform, but uses native widgets when possible. Someone should work on getting SWT support in D.Where can I download SWT as a separate package?
Sep 09 2002
"Toyotomi" <io219 attbi.com> wrote in message news:rp2qnu8bdjp3j9helj81oai1cts650s4l7 4ax.com...SWT was designed for use with Java but is NOT written in Java.Which is why Java is not a systems language.90% of the many C++ toolkits are rather hilarious.Sure. That leaves 10% which can be mined for great ideas!
Sep 09 2002
Toyotomi wrote:On Sun, 01 Sep 2002 20:43:26 -0500, Toyotomi <io219 attbi.com> wrote:SWT is written almost completely in java. There is a small native dll/so written in C, but this is nothing more than a bridge to the native OS calls, with no functionality. Trust me on this one, I used to work on the SWT team. CurtOn Thu, 29 Aug 2002 11:59:56 -0500, "Craig Black" <cblack ara.com> wrote:The problem is, like C++, those C++ toolkits do not suit us. SWT is the best I know of ( though VCL is more complete & flexible ) SWT was designed for use with Java but is NOT written in Java. ( Java2D is not written in Java either, it's straight portable C ) SWT is multiplatform, but uses native widgets when possible. Someone should work on getting SWT support in D. 90% of the many C++ toolkits are rather hilarious.I could help but notice the: "Attempts to create a common GUI class library between Windows, Mac, and other GUI operating systems have all to my knowledge failed." Qt is a feature-rich cross platform GUI framework for C++: www.trolltech.comAnd don't forget the new SWT from IBM used with Java but written in a compiled language with multi-platform abstractions. Maybe D should even use SWT. Seriously, check it out if you have clout...
Oct 30 2002
SWT is written almost completely in java. There is a small native dll/so written in C, but this is nothing more than a bridge to the native OS calls, with no functionality. Trust me on this one, I used to work on the SWT team.I've been looking through the SWT code, very interesting, especially the thick layering (multipul versions of the same high level class) rather than more layers of wrapper classes (like the AWT with its Peer Classes). one complaint I would have about this is maintanability, and reliance on underlying OS support not changing features like CoolBars, are emulated under GTK, and are mapped to the Win32 common control if present on Win32. (good thing/bad thing I'm not 100% desided) so here's my 10pen'th on cross-platfrom GUI's Java forces some rather unpleasant effects within the SWT i.e. the win32 Control has 60+ virtual functions just to handle the windows messages. I know that Delphi has a dynamic method that the VCL uses to reduce the vtable usage (quite what they are I don't know) and my own beginings of a GUI Library I chose to use a uint to delegate assoc array to handle the messages. if there was a language feature many GUI libraries require its call by id, (where id is an int). the gtk's use of strings and callbacks lowers this to about 20. when I started working on my Gui code, I had the feeling it should be "all or nothing" with respect to features so I wrote it to just ease Message handling, so it processes all messages, WM_COMMAND/NOTIFY are separated out becuase they are message groups in themselves and WM_DESTROY is processed. every thing else is just a message including paint if you want the paint message you attach a delegate that takes a HDC as a param and in there all graphics are done by using standard win32 calls. meaning that the only difference between writing in Win32 C and my lib, is you never have to use SendMessage or write a WndProc. all the rest is the same (ish). then I intended to write a cross-platform GUI lib over the top using just two base classes (written for each underlying OS and with no dependant features) NativeRootFrame and NativeBaseWidget with all message passing, rendering and other stuff handled by OS/Platform independant code. but stumbled straight back to the "all or nothing", and just ended up with a list of questions: how rich does the 2D Gui API have to be ? you can get by with a renderable Widget that has horizontal and vertical straight line draw, pixel plot, rect fill, image 1:1 render, and text rendering support. draw/fill arc is nice if you want MacOS/PalmOS rounded buttons (transparent images can be use) OS/GUI library each have their own Mouse behaviours e.g. Windows, Beos, GTK, Java AWT which one is "right" ? can a widgets children overlap each other ? when you put radio buttons visually into a frame , should they be children of the frame or of the dialog (like the frame is) [my vote is no overlapping] ? Resources or Dynamic creation only ? [I'm in favor of a good XML based OS independant Resource format] which is more important syntax (and ease of programming an app) or implemented features ? [I think syntax, today, tomorrow I'll want features :) ] how cross platform is cross platform the same as the compiler (win32 and GTK), planned for most GUI OS's(win32, Beos, GTK, X (no gtk or motif), MacOs, WinCE, PalmOS) or anything with a screen (including embedded, Gamboy Advance, Playstations etc) ? well that was more like £2.50 but never mind.
Oct 31 2002
Just found this http://www.geocities.com/SiliconValley/Vista/7184/guitool.html the only item it misses that I know about is TurboVision even has a link to Netscapes IFC (Java)andI could help but notice the: "Attempts to create a common GUI class library between Windows, Mac,SWT is written almost completely in java. There is a small native dll/so written in C, but this is nothing more than a bridge to the native OS calls, with no functionality. Trust me on this one, I used to work on the SWT team.90% of the many C++ toolkits are rather hilarious.other GUI operating systems have all to my knowledge failed."
Oct 31 2002