Author: miguel
Date: 2005-04-26 15:54:31 -0400 (Tue, 26 Apr 2005)
New Revision: 43619
Modified:
trunk/gtk-sharp/ChangeLog
trunk/gtk-sharp/gtkdotnet/Graphics.cs
Log:
2005-04-26 Miguel de Icaza <[EMAIL PROTECTED]>
* gtkdotnet/Graphics.cs: Contribution from Sebastian Faltoni
<[EMAIL PROTECTED]> that implements support for using
System.Drawing on Windows.
Modified: trunk/gtk-sharp/ChangeLog
===================================================================
--- trunk/gtk-sharp/ChangeLog 2005-04-26 18:59:48 UTC (rev 43618)
+++ trunk/gtk-sharp/ChangeLog 2005-04-26 19:54:31 UTC (rev 43619)
@@ -1,3 +1,9 @@
+2005-04-26 Miguel de Icaza <[EMAIL PROTECTED]>
+
+ * gtkdotnet/Graphics.cs: Contribution from Sebastian Faltoni
+ <[EMAIL PROTECTED]> that implements support for using
+ System.Drawing on Windows.
+
2005-04-26 Mike Kestner <[EMAIL PROTECTED]>
* gtk/NodeStore.cs : implement IEnumerable.
Modified: trunk/gtk-sharp/gtkdotnet/Graphics.cs
===================================================================
--- trunk/gtk-sharp/gtkdotnet/Graphics.cs 2005-04-26 18:59:48 UTC (rev
43618)
+++ trunk/gtk-sharp/gtkdotnet/Graphics.cs 2005-04-26 19:54:31 UTC (rev
43619)
@@ -33,7 +33,16 @@
private Graphics () {}
+ [DllImport("libgdk-win32-2.0-0.dll")]
+ internal static extern IntPtr
gdk_win32_drawable_get_handle(IntPtr raw);
+
[DllImport("libgdk-win32-2.0-0.dll")]
+ internal static extern IntPtr gdk_win32_hdc_get(IntPtr
drawable, IntPtr gc, int usage);
+
+ [DllImport("libgdk-win32-2.0-0.dll")]
+ internal static extern void gdk_win32_hdc_release(IntPtr
drawable,IntPtr gc,int usage);
+
+ [DllImport("libgdk-win32-2.0-0.dll")]
internal static extern IntPtr gdk_x11_drawable_get_xdisplay
(IntPtr raw);
[DllImport("libgdk-win32-2.0-0.dll")]
@@ -41,28 +50,54 @@
public static System.Drawing.Graphics FromDrawable
(Gdk.Drawable drawable)
{
+ return FromDrawable (drawable, true);
+ }
+
+ public static System.Drawing.Graphics FromDrawable(Gdk.Drawable
drawable, bool double_buffered)
+ {
IntPtr x_drawable;
int x_off = 0, y_off = 0;
-
- if (drawable is Gdk.Window)
- ((Gdk.Window)
drawable).GetInternalPaintInfo(out drawable, out x_off, out y_off);
+ PlatformID osversion = Environment.OSVersion.Platform;
- x_drawable = drawable.Handle;
-
- IntPtr display = gdk_x11_drawable_get_xdisplay
(x_drawable);
-
- Type graphics = typeof (System.Drawing.Graphics);
- MethodInfo mi = graphics.GetMethod ("FromXDrawable",
BindingFlags.Static | BindingFlags.NonPublic);
- if (mi == null)
- throw new NotImplementedException ("In this
implementation I can not get a graphics from a drawable");
- object [] args = new object [2] { (IntPtr)
gdk_x11_drawable_get_xid (drawable.Handle), (IntPtr) display };
- object r = mi.Invoke (null, args);
- System.Drawing.Graphics g = (System.Drawing.Graphics) r;
+ if (osversion == PlatformID.Win32Windows || osversion
== PlatformID.Win32NT ||
+ osversion == PlatformID.Win32S || osversion ==
PlatformID.WinCE){
+ if (drawable is Gdk.Window && double_buffered)
+
((Gdk.Window)drawable).GetInternalPaintInfo(out drawable, out x_off, out y_off);
- g.TranslateTransform (-x_off, -y_off);
-
- return g;
+ Gdk.GC gcc = new Gdk.GC(drawable);
+
+ IntPtr windc =
gdk_win32_hdc_get(drawable.Handle, gcc.Handle, 0);
+
+ System.Drawing.Graphics g =
System.Drawing.Graphics.FromHdc(windc);
+
+ if (double_buffered) {
+ gdk_win32_hdc_release(drawable.Handle,
gcc.Handle, 0);
+ }
+
+ g.TranslateTransform(-x_off, -y_off);
+
+ return g;
+ } else {
+ if (drawable is Gdk.Window && double_buffered)
+ ((Gdk.Window)
drawable).GetInternalPaintInfo(out drawable, out x_off, out y_off);
+
+ x_drawable = drawable.Handle;
+
+ IntPtr display = gdk_x11_drawable_get_xdisplay
(x_drawable);
+
+ Type graphics = typeof
(System.Drawing.Graphics);
+ MethodInfo mi = graphics.GetMethod
("FromXDrawable", BindingFlags.Static | BindingFlags.NonPublic);
+ if (mi == null)
+ throw new NotImplementedException ("In
this implementation I can not get a graphics from a drawable");
+ object [] args = new object [2] { (IntPtr)
gdk_x11_drawable_get_xid (drawable.Handle), (IntPtr) display };
+ object r = mi.Invoke (null, args);
+ System.Drawing.Graphics g =
(System.Drawing.Graphics) r;
+
+ g.TranslateTransform (-x_off, -y_off);
+
+ return g;
+ }
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches