Libgdiplus

From Mono

Libgdiplus is the Mono library that provide a GDI+ comptible API on non-Windows operating systems. Our implementation uses Cairo (http://www.cairographics.org) to do most of the heavy lifting.

Mono's implementation of GDI+ lives in the libgdiplus SVN module (http://anonsvn.mono-project.com/viewcvs/trunk/libgdiplus/) and includes it's own internal copy of Cairo (version 1.4.6 in Mono 1.2.5, version 1.4.10 in SVN).

Table of contents

Plans

Due to it's tight relation with System.Drawing new versions of libgdiplus are released with (almost) every new version of Mono.

Maintenance releases (Mono 1.2.x)

  • update to latest Cairo 1.x (bugs/performance)
  • bug fixes (crashes, memory leaks...)
  • missing codec support for
    • Windows metafiles (WMF, EMF) info (http://wvware.sourceforge.net/caolan/ora-wmf.html) (partial support from Mono 1.2.4+)
    • icons (available from Mono 1.2.3+)
  • clean up public/private API definition
    • support C developers (new include file, GdiPlusFlat.h) (Mono 1.2.4+)
  • refactoring
    • split code for a future non-Cairo backend, like the metafile recording one (Mono 1.2.5+)

Next major release (Mono 2.0)

  • updated to use latest Cairo (bugs/performance/features)
  • use PangoCairo for font and text rendering (#79594, #77496)
    • in progress and unsupported at this stage. You can use --with-cairo=system and --with-pango to enable it

Other Tasks

Cairo doesn't provide 100% of the functionalities required to implement GDI+ or System.Drawing. A few features were added directly in libgdiplus (unmanaged) or System.Drawing (managed). However some features are still missing.

  • add missing implementation for
    • path gradient brush (#78293)
    • path widen (#78110)
    • path warp
    • other missing stuff required for System.Drawing (fill bugs for them)
    • other missing stuff, e.g. parts of the GDI+ API isn't exposed in System.Drawing (fill bugs for them)
  • clean up public/private API definition (Mono 1.2.5+)
    • support C developers (new include file, gdiplusflat.h)
  • refactoring
    • more descriptive error reporting (logiclrd)
    • call logging infrastructure (in DEBUG builds)
    • use system's libcairo when possible (which seems to be the case after Cairo 1.4.0) (in SVN, unsupported at this stage, use --with-cairo=system to try it)

Some of the missing features may be available in Mono 2.0.