Author: gnorton
Date: 2008-01-23 09:03:22 -0500 (Wed, 23 Jan 2008)
New Revision: 93656

Modified:
   trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog
   trunk/mcs/class/System.Drawing/System.Drawing/Graphics.cs
   trunk/mcs/class/System.Drawing/System.Drawing/carbonFunctions.cs
   trunk/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs
Log:
In .:
2008-01-23  Geoff Norton  <[EMAIL PROTECTED]>

        * carbonFunctions.cs: If we get a -ve size from carbon, swizzle to 
        0 to prevent a OOM from cairo malloc.  Remove support for
        GetCGContextForNSView as its deprecated and doesn't work.
        * gdipFunctions.cs: Refactor the environment variable support out
        and make the Carbon driver the default on a Mac.  Fix RunningOnUnix
        to report true on the mac.
        * Graphics.cs: Drop support for CocoaDrawable.



Modified: trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog     2008-01-23 
13:34:30 UTC (rev 93655)
+++ trunk/mcs/class/System.Drawing/System.Drawing/ChangeLog     2008-01-23 
14:03:22 UTC (rev 93656)
@@ -1,3 +1,13 @@
+2008-01-23  Geoff Norton  <[EMAIL PROTECTED]>
+
+       * carbonFunctions.cs: If we get a -ve size from carbon, swizzle to 
+       0 to prevent a OOM from cairo malloc.  Remove support for
+       GetCGContextForNSView as its deprecated and doesn't work.
+       * gdipFunctions.cs: Refactor the environment variable support out
+       and make the Carbon driver the default on a Mac.  Fix RunningOnUnix
+       to report true on the mac.
+       * Graphics.cs: Drop support for CocoaDrawable.
+
 2008-01-21  Geoff Norton  <[EMAIL PROTECTED]>
 
        * Graphics.cs: Support Graphics.FromHwnd (IntPtr.Zero) on X11

Modified: trunk/mcs/class/System.Drawing/System.Drawing/Graphics.cs
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/Graphics.cs   2008-01-23 
13:34:30 UTC (rev 93655)
+++ trunk/mcs/class/System.Drawing/System.Drawing/Graphics.cs   2008-01-23 
14:03:22 UTC (rev 93656)
@@ -188,7 +188,7 @@
 
                        if (GDIPlus.UseX11Drawable) {
                                CopyFromScreenX11 (sourceX, sourceY, 
destinationX, destinationY, blockRegionSize, copyPixelOperation);
-                       } else if (GDIPlus.UseCocoaDrawable || 
GDIPlus.UseQuartzDrawable) {
+                       } else if (GDIPlus.UseCarbonDrawable) {
                                CopyFromScreenMac (sourceX, sourceY, 
destinationX, destinationY, blockRegionSize, copyPixelOperation);
                        } else {
                                CopyFromScreenWin32 (sourceX, sourceY, 
destinationX, destinationY, blockRegionSize, copyPixelOperation);
@@ -274,7 +274,7 @@
                {
                        Status status;
                        if (! disposed) {
-                               if ((GDIPlus.UseQuartzDrawable || 
GDIPlus.UseCocoaDrawable) && context.ctx != IntPtr.Zero) {
+                               if (GDIPlus.UseCarbonDrawable && context.ctx != 
IntPtr.Zero) {
                                        Flush ();
                                        Carbon.CGContextSynchronize 
(context.ctx);
                                        Carbon.ReleaseContext (context.port, 
context.ctx);
@@ -1665,7 +1665,7 @@
 
                        Status status = GDIPlus.GdipFlush (nativeObject, 
intention);
                         GDIPlus.CheckStatus (status);                    
-                       if ((GDIPlus.UseQuartzDrawable || 
GDIPlus.UseCocoaDrawable) && context.ctx != IntPtr.Zero)
+                       if (GDIPlus.UseCarbonDrawable && context.ctx != 
IntPtr.Zero)
                                Carbon.CGContextSynchronize (context.ctx);
                }
 
@@ -1698,21 +1698,9 @@
                {
                        IntPtr graphics;
 
-                       if (GDIPlus.UseCocoaDrawable) {
-                               throw new NotImplementedException ();
-/* TODO: Fix this code to handle the new libgdiplus
-                               CarbonContext context = 
Carbon.GetCGContextForNSView (hwnd);
-                               GDIPlus.GdipCreateFromQuartz_macosx 
(context.ctx, context.width, context.height, out graphics);
-                               
-                               Graphics g = new Graphics (graphics);
-                               g.context = context;
-                               
-                               return g;
-*/
-                       }
-                       if (GDIPlus.UseQuartzDrawable) {
+                       if (GDIPlus.UseCarbonDrawable) {
                                CarbonContext context = 
Carbon.GetCGContextForView (hwnd);
-                               GDIPlus.GdipCreateFromQuartz_macosx 
(context.ctx, context.width, context.height, out graphics);
+                               GDIPlus.GdipCreateFromContext_macosx 
(context.ctx, context.width, context.height, out graphics);
                                
                                Graphics g = new Graphics (graphics);
                                g.context = context;

Modified: trunk/mcs/class/System.Drawing/System.Drawing/carbonFunctions.cs
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/carbonFunctions.cs    
2008-01-23 13:34:30 UTC (rev 93655)
+++ trunk/mcs/class/System.Drawing/System.Drawing/carbonFunctions.cs    
2008-01-23 14:03:22 UTC (rev 93656)
@@ -51,15 +51,6 @@
                        }
                }
 
-               internal static CarbonContext GetCGContextForNSView (IntPtr 
handle) {
-                       IntPtr context = IntPtr.Zero;
-                       Rect view_bounds = new Rect ();
-
-                       context = objc_msgSend (objc_msgSend (objc_getClass 
("NSGraphicsContext"), sel_registerName ("currentContext")), sel_registerName 
("graphicsPort"));
-                       objc_msgSend_stret (ref view_bounds, handle, 
sel_registerName ("bounds"));
-                       return new CarbonContext (IntPtr.Zero, context, 
(int)view_bounds.size.width, (int)view_bounds.size.height);
-               }
-
                internal static CarbonContext GetCGContextForView (IntPtr 
handle) {
                        IntPtr context = IntPtr.Zero;
                        IntPtr port = IntPtr.Zero;
@@ -88,6 +79,9 @@
                        HIViewGetBounds (handle, ref view_bounds);
 
                        HIViewConvertRect (ref view_bounds, handle, 
IntPtr.Zero);
+                       
+                       if (view_bounds.size.height < 0) 
view_bounds.size.height = 0;
+                       if (view_bounds.size.width < 0) view_bounds.size.width 
= 0;
 
                        CGContextTranslateCTM (context, view_bounds.origin.x, 
(window_bounds.bottom - window_bounds.top) - (view_bounds.origin.y + 
view_bounds.size.height));
 

Modified: trunk/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs
===================================================================
--- trunk/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs      
2008-01-23 13:34:30 UTC (rev 93655)
+++ trunk/mcs/class/System.Drawing/System.Drawing/gdipFunctions.cs      
2008-01-23 14:03:22 UTC (rev 93656)
@@ -59,9 +59,8 @@
                public const int FACESIZE = 32;
                public const int LANG_NEUTRAL = 0;
                public static IntPtr Display = IntPtr.Zero;
-               public static bool UseX11Drawable;
-               public static bool UseQuartzDrawable = 
(Environment.GetEnvironmentVariable ("MONO_MWF_USE_CARBON_BACKEND") != null);
-               public static bool UseCocoaDrawable = 
(Environment.GetEnvironmentVariable ("MONO_GDIP_USE_COCOA_BACKEND") != null);
+               public static bool UseX11Drawable = false;
+               public static bool UseCarbonDrawable = false;
 
                #region gdiplus.dll functions
 
@@ -99,10 +98,27 @@
 
                static GDIPlus ()
                {
-                       // check for Unix platforms - see FAQ for more details
-                       // 
http://www.mono-project.com/FAQ:_Technical#How_to_detect_the_execution_platform_.3F
                        int platform = (int) Environment.OSVersion.Platform;
-                       UseX11Drawable = ((platform == 4) || (platform == 128));
+                       if ((platform == 4) || (platform == 128)) {
+                               if (Environment.GetEnvironmentVariable 
("not_supported_MONO_MWF_USE_NEW_X11_BACKEND") != null || 
Environment.GetEnvironmentVariable ("MONO_MWF_MAC_FORCE_X11") != null) {
+                                       UseX11Drawable = true;
+                               } else {
+                                       IntPtr buf = Marshal.AllocHGlobal 
(8192);
+                                       // This is kind of a hack but gets us 
sysname from uname (struct utsname *name) on
+                                       // linux and darwin
+                                       if (uname (buf) != 0) {
+                                               // WTH: We couldn't detect the 
OS; lets default to X11
+                                               UseX11Drawable = true;
+                                       } else {
+                                               string os = 
Marshal.PtrToStringAnsi (buf);
+                                               if (os == "Darwin")
+                                                       UseCarbonDrawable = 
true;
+                                               else
+                                                       UseX11Drawable = true;
+                                       }
+                                       Marshal.FreeHGlobal (buf);
+                               }
+                       }
 
                        GdiplusStartupInput input = 
GdiplusStartupInput.MakeGdiplusStartupInput();
                        GdiplusStartupOutput output = 
GdiplusStartupOutput.MakeGdiplusStartupOutput();
@@ -122,12 +138,12 @@
 
                static public bool RunningOnWindows ()
                {
-                       return !UseX11Drawable;
+                       return !UseX11Drawable && !UseCarbonDrawable;
                }
 
                static public bool RunningOnUnix ()
                {
-                       return UseX11Drawable;
+                       return UseX11Drawable || UseCarbonDrawable;
                }
                
                // Copies a Ptr to an array of Points and releases the memory
@@ -1922,7 +1938,7 @@
                
                /* Mac only function calls */
                [DllImport("gdiplus.dll")]
-               internal static extern Status GdipCreateFromQuartz_macosx 
(IntPtr cgref, int width, int height, out IntPtr graphics);
+               internal static extern Status GdipCreateFromContext_macosx 
(IntPtr cgref, int width, int height, out IntPtr graphics);
 
                /* Linux only function calls*/
                [DllImport("gdiplus.dll")]
@@ -1963,6 +1979,9 @@
                        StreamGetBytesDelegate getBytes, StreamPutBytesDelegate 
putBytes, StreamSeekDelegate doSeek, 
                        StreamCloseDelegate close, StreamSizeDelegate size, 
IntPtr hdc, EmfType type, ref Rectangle frameRect, 
                        MetafileFrameUnit frameUnit, [MarshalAs 
(UnmanagedType.LPWStr)] string description, out IntPtr metafile);
+
+               [DllImport ("libc")]
+               static extern int uname (IntPtr buf);
 #endregion
        }
 }

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to