[Mono-bugs] [Bug 75997][Wis] New - Mono.Cairo 100% non-usable on win32.

bugzilla-daemon at bugzilla.ximian.com bugzilla-daemon at bugzilla.ximian.com
Tue Sep 6 06:26:27 EDT 2005

Please do not reply to this email- if you want to comment on the bug, go to the
URL shown below and enter your comments there.

Changed by idan at fastmail.fm.


--- shadow/75997	2005-09-06 06:26:27.000000000 -0400
+++ shadow/75997.tmp.32276	2005-09-06 06:26:27.000000000 -0400
@@ -0,0 +1,78 @@
+Bug#: 75997
+Product: Mono: Class Libraries
+Version: 1.1
+OS Details: WinXP, Mono
+Status: NEW   
+Priority: Wishlist
+Component: Mono.Cairo
+AssignedTo: hisham.mardambey at gmail.com                            
+ReportedBy: idan at fastmail.fm               
+QAContact: mono-bugs at ximian.com
+TargetMilestone: ---
+Summary: Mono.Cairo 100% non-usable on win32.
+Mono.Cairo doesn't do the win32 dance.
+The reason for this is that Cairo.Graphics.SetTargetDrawable() wraps only 
+cairo_xlib_surface_create(), and not also cairo_win32_surface_create().
+There's also a set of "examples" in the win32 mono distribution which look
+like they will work, but they don't, as they try:
+static extern IntPtr gdk_x11_drawable_get_xdisplay (IntPtr raw);
+static extern IntPtr gdk_x11_drawable_get_xid (IntPtr raw);
+Obviously, these don't exist in libgdk-win32. Probably, they should be
+removed from the Mono/win32 distribution until they do work as they are
+What to do to fix the problem:
+I don't understand why this isn't done via overloaded Cairo.Graphics
+// create a win32 cairo.graphics
+public Graphics(IntPtr hdc) {...}
+// create a xlibs cairo.graphics
+public Graphics(IntPtr dpy, IntPtr drawable, IntPtr visual, int width, int
+height) {...}
+or even, via some static constructor
+public static Cairo.Graphics GetGraphicsWin32(IntPtr hdc) {...}
+etc... you get the idea. 
+There's no reason not to provide an overloaded SetTargetDrawable() function
+either, but it seems silly to do this for something that *must* happen at
+the time the class is instanced, if somebody actually wants to make use of
+the class. Seems sensible to do it via the constructor.
+The Alternate Solution
+I notice that there's a gdk function:
+gdk_cairo_create ()
+but then it depends if this function correctly senses which platform it's
+running on and calls the appropriate cairo_XXX_surface_create(). I've not
+yet taken a look at the sources for this.
+I'd be happy to take on this task, I think it's something I could
+contribute to, however I am going away for a week on business, so I will
+only be back to look at this on 14th sept.

More information about the mono-bugs mailing list