* Drawing
Mono provides two mechanism to draw. The first exposes the
Microsoft System.Drawing API and the second exposes the Cairo API.
* System.Drawing
The System.Drawing implementation in Mono is designed to be
compatible with the Microsoft API. The imaging model is very
similar to the PDF 1.4 composition-based imaging model.
Our implementation is a C# wrapper around the GDI+ C API (also
called the "GDI+
Flat API").
This means that the C# code is the same for Windows and Unix
systems. The following graph explains the situation:
In Windows Mono uses the GDI+ library that is included with
the operating system (GDIPLUS.DLL, while in Unix we
provide an implementation of this API in the
libgdiplus.so shared library. Our
libgdiplus.so has the same C Flat API as the
GDIPLUS.DLL. Our implementation uses Cairo to do
the heavy lifting.
The implementation of GDI+ lives in the libgdiplus cvs module
and requires Cairo to be installed
to get the package built.
The C# code that implement System.Drawing is the same for
Windows and Unix builds.
Since this is an implementation of an existing Microsoft API
no architectural changes go here.
* Mono.Cairo
The Mono.Cairo.dll assembly exposes the Cairo API to managed
applications. The mapping is a pretty straightforward one,
and the programming model is very close to the C API.
This API is still unstable due to the nature of the underlying
API being used and will be revisited as Cairo evolves.