It's a little known fact but, since Cairo 1.4 was released, libgdiplus no more requires any patch (to Cairo) in order to work properly. Well that's 99.9% true as the only required changes/patches are related to embedding Cairo inside libgdiplus.
So, if you have Cairo 1.4.x installed, it is now possible to build libgdiplus using your distro libcairo, like this:
The resulting library (about 2.5 times smaller and a lot faster to compile) pass all
System.Drawing's unit tests.
Still this isn't, at the moment, a supported option and the minimum Cairo version (1.4 right now) is subject to change.
E.g. we may end up patching Cairo again (hopefully not) and/or Cairo 1.6 roadmap includes some stuff
that we might require in the future and, who knows, maybe someone will even implement the documented, but missing,
Anyway please feel free to test, and report bugs, for this new configuration.
So why adding this option if it's not supported ? because it's required to start working with Pango to render (measure and draw) text.
So if you have Pango 1.10 or later (and that's subject to change too) you can try:
That one is totally unsupported and, at this stage, I don't even want to know about bugs -
unless you provide a patch to fix them (in part because the current code use the high-level API,
PangoLayout and some of them missing features may requires us to use the low-level API soon.
Unit tests wise this Pango-enabled build does fine, only three
tests are failing (out of 1759).
However I fear this indicates more a lack of tests than an almost-total success.
Our own logic rendered with Cairo
Pango's logic rendered with PangoCairo
- Textbox performance is really bad, because it measure every character one-by-one (and setting up a Pango Layout is more expansive than our old logic);
- Text selection (Textbox, ComboBox) and multilines don't render correctly (didn't look why);
- and probably a lot more ;-)
finally moved into
The first Cecil-based tool I built (years ago) was...
but a complete version of
The previous one (in
/mcs SVN) was incomplete because the 1.x framework
lacked the API required to read the security attributes.
New Old Stuff
The old permview was replaced by the new Cecil-based version. It will be part of the Mono 1.2.6 release. Now that was a long wait but I don't think it (permview) mattered to many people, at least compared to Cecil ;-)
The views expressed on this website/weblog are mine alone and do not necessarily reflect the views of my employer.