2008-03-19 Marek Safar <marek.safar@gmail.com>
[mono.git] / web / winforms
index 5a6d68c6455ca21eb24929665b6a7f7b7c6cd0d0..a9a5e8ae54cd539a08ac0318e145162987b8534b 100644 (file)
@@ -1,98 +1,81 @@
 * System.Windows.Forms
 
-       Currently Windows.Forms support is not finished.
+       <p>Currently Windows.Forms support is under heavy development. Check Mono's <a 
+       href = "http://www.go-mono.com/mono-roadmap.html">Roadmap</a> for more 
+       details on when it is going to be available.
+
+       <p>System.Windows.Forms in Mono is implemented using System.Drawing. All controls
+       are natively drawn through System.Drawing. System.Windows.Forms implements it's own
+       driver interface to communicate with the host OS windowing system. Currently,
+       we have a driver for Win32 and a driver for X11. 
+       The drivers translate the native window messages into WndProc compatible messages,
+       to provide as much compatibility with native .Net as possible.
+       
+       <p>In terms of integrating visually with the desktop, we have a (still incomplete)
+       themeing interface, currently with a classic Win32 theme and a Gtk theme. 
+
+       <p>The current implementation is still very incomplete, with several large controls
+       (Edit, ListBox, ComboBox, Menus), etc, still being developed. It is too early to
+       file bugs if you cannot compile or run a certain application because of controls
+       missing.
 
-       The System.Windows.Forms effort is taking two paths: 
+* Why not use Wine?
 
        <ul>
-               <li>Win32/Wine-based: This effort will use the Win32
-               API, and use a stub program to run the with Wine.
-               This allows applications that use P/Invoke to
-               function, and event delivery through the Wndproc
-               method to work for the most advanced and custom
-               applications.  This is the path of best compatibility.
-
-               Also, work on a Gtk-based rendered for Wine will be
-               done, to make the user interface integrate with your
-               desktop look.
-
-               <li>Gtk# based: This effort will build a subset of
-               Windows.Forms that uses Gtk#.  This gives a better
-               integration with the desktop, but will not be
-               completely compatible with the Windows edition.  In
-               particular code that uses P/Invoke to call into Win32
-               or overwrite the Wndproc method to achieve special
-               effects will not work.
+
+       <li>Debugging with Wine was extremely hard, and Wine was a moving target, 
+       some of the calls we relied on changed from release to release.
+       <li>Wine/GDI+ interactions were not efficient.
+       <li>Too many cooks contributed to the core, so it was hard to maintain.
+       <li>To many dependencies on install, many people where having problems getting 
+       the very strict winelib requirements right.
+
        </ul>
 
-* Win32/Wine edition.
-
-       To get the Windows.Forms support working, you need a Mono
-       installation from CVS, and you need to install Wine plus the
-       <a href="http://www.openlinksw.com">OpenLink patch</a>, and
-       define the environment variable "SWF" (export SWF=1 from your
-       shell). For more information, see the <a
-       href="http://www.nullenvoid.com/mono/wiki/index.php/MonoWinePackages">Mono
-       Wine Packages</a> page in the Mono Wiki.
-
-       <table>
-       <tr>
-       <td>
-       System.Windows.Forms is currently being implemented using the
-       Win32 API, we will be using <a
-       href="http://www.winehq.com">WineLib</a> on Unix systems to
-       emulate the Win32 API.
-
-       This means that those who want to contribute to the effort can
-       develop and test classes today using Windows and P/Invoke
-       calls to Win32 and we will then just run the result on Unix. 
-
-       In terms of integrating visually with the desktop, we are
-       hoping to contribute to the Wine project an mechanism to make
-       it use the Gtk+ themes on X11 and Cocoa on MacOS to render the
-       widgets, and get the native look and feel on each of these
-       platforms. 
-       </td>
-       <td>
-       <a href="images/WINESWF.JPG"><img src="images/WINESWF-mini.JPG"></a>
-       </td>
-       
-       </table>
+       The driver interface should allow us to also create a Wine based driver for 
+       System.Windows.Forms, to support applications performing Win32 P/Invokes, but
+       for now this is not a priority.
 
-* Gtk# based
 
-       The code is contained in CVS.  
+* Installation
 
-       There are no current plans to support embedded devices, but
-       Gtk/FrameBuffer is an option.  If you have suggestions or
-       recommendations, please let us <a
-       href="mailto:mono-hackers-list@ximian.com">let us know</a>
+       <p>To get the Windows.Forms support working, you need:
+       
+       <ul>
+       
+       <li> The latest <a href = "http://www.go-mono.com/download.html">Mono</a> package.
+       <li> The latest <a href = "http://www.go-mono.com/download.html">libgdiplus</a> library.
+       <li> The latest <a href = "http://www.cairographics.org/download">Cairo</a> vector graphics library.
+       
+       </ul>
+
+       The current source of System.Windows.Forms resides in mcs/class/Managed.Windows.Forms.
+       The previous version of System.Windows.Forms, based on Wine, still can be found in 
+       mcs/class/System.Windows.Forms, but it is no longer being worked on.
+
+       <p>To use the latest version, go into Managed.Windows.Forms and issue a 'make clean',
+       followed by a 'make install'. Afterwards, the new implementation should be available
+       in the GAC for your use.
 
 * Contributing
 
-       The Winforms effort is being coordinated in the <a
-       href="mailto:mono-winforms-list@ximian.com:.com">mono-winforms-list@ximian.com</a>.
+       <p>The Winforms effort is being coordinated in the <a
+       href="mailto:mono-winforms-list@ximian.com">mono-winforms-list@ximian.com</a>.
        If you are interested in helping out with this effort,
        subscribe to it by sending an email message to <a
-       href="mailto:mono-winforms-list-request@ximian.com:.com">mono-winforms-list-request@ximian.com</a>.
-
-       If you want to help, you can start by writing a control and
-       testing it with Windows today (or you can also try to build
-       the existing library on Linux, but this is a bit more
-       complicated).  
-
-       See the file mcs/class/System.Windows.Forms/CheckOutList for
-       details on who is working on which class.
-
-       Please read the README document in the
-       System.Windows.Forms/WINElib directory for details about how
-       to build the Windows.Forms support for Mono.
+       href="mailto:mono-winforms-list-request@ximian.com">mono-winforms-list-request@ximian.com</a>.
+               
+       <p>If you want to help, you can pick a control and start implementing it's 
+       methods. You can do this either on Windows or on Linux. All controls must be drawn
+       using System.Drawing calls, tied into the themeing interface, and not stubbed.
+
+       <p>If you choose a particular control to work on, send a note to the 
+       winforms list to avoid duplication of effort. 
+       
 
 * System.Drawing
 
-       We currently have two code paths: the Wine-based
-       System.Drawing and the Cairo-based one.  We will eventually
-       unify everything to use Cairo, but currently the effort can
-       continue with the approach we have.
-
+       <p>For details, see the <a
+       href="drawing.html">System.Drawing implementation notes</a>
+       section of the web site.