Author: gnorton
Date: 2008-01-23 19:48:16 -0500 (Wed, 23 Jan 2008)
New Revision: 93753

Modified:
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Hwnd.cs
   trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUICarbon.cs
Log:
In .:
        * Hwnd.cs: Refactor Whole/Client pointer to 1 element for Cursors.
        * XplatUICarbon.cs: Refactor some dead code out to Cursor.cs and make
        it work again.  Handle HITTEST events.

2008-01-23  Geoff Norton  <[EMAIL PROTECTED]>



Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2008-01-24 00:42:28 UTC (rev 93752)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/ChangeLog        
2008-01-24 00:48:16 UTC (rev 93753)
@@ -11,6 +11,12 @@
 
 2008-01-23  Geoff Norton  <[EMAIL PROTECTED]>
 
+       * Hwnd.cs: Refactor Whole/Client pointer to 1 element for Cursors.
+       * XplatUICarbon.cs: Refactor some dead code out to Cursor.cs and make
+       it work again.  Handle HITTEST events.
+
+2008-01-23  Geoff Norton  <[EMAIL PROTECTED]>
+
        * XplatUICarbon.cs: Ensure that we always have a host window.  Prevents
        a crash in certain cases.  Support for fullscreen windows in certain 
cases.
 

Modified: trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Hwnd.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Hwnd.cs  
2008-01-24 00:42:28 UTC (rev 93752)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/Hwnd.cs  
2008-01-24 00:48:16 UTC (rev 93753)
@@ -44,8 +44,7 @@
                private IntPtr          handle;
                internal IntPtr         client_window;
                internal IntPtr         whole_window;
-               internal IntPtr         client_cursor;
-               internal IntPtr         whole_cursor;
+               internal IntPtr         cursor;
                internal Menu           menu;
                internal TitleStyle     title_style;
                internal FormBorderStyle        border_style;
@@ -103,6 +102,7 @@
                        border_style = FormBorderStyle.None;
                        client_window = IntPtr.Zero;
                        whole_window = IntPtr.Zero;
+                       cursor = IntPtr.Zero;
                        handle = IntPtr.Zero;
                        parent = null;
                        invalid_list = new ArrayList();
@@ -409,13 +409,13 @@
                        }
                }
 
-               public IntPtr ClientCursor {
+               public IntPtr Cursor {
                        get {
-                               return client_cursor;
+                               return cursor;
                        }
 
                        set {
-                               client_cursor = value;
+                               cursor = value;
                        }
                }
 
@@ -681,16 +681,6 @@
                        }
                }
 
-               public IntPtr WholeCursor {
-                       get {
-                               return whole_cursor;
-                       }
-
-                       set {
-                               whole_cursor = value;
-                       }
-               }
-
                public IntPtr WholeWindow {
                        get {
                                return whole_window;

Modified: 
trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUICarbon.cs
===================================================================
--- trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUICarbon.cs 
2008-01-24 00:42:28 UTC (rev 93752)
+++ trunk/mcs/class/Managed.Windows.Forms/System.Windows.Forms/XplatUICarbon.cs 
2008-01-24 00:48:16 UTC (rev 93753)
@@ -1064,77 +1064,16 @@
                        return CreateWindow(create_params);
                }
 
-               [MonoTODO]
-               internal override Bitmap DefineStdCursorBitmap (StdCursor id)
-               {
-                       throw new NotImplementedException ();
+               internal override Bitmap DefineStdCursorBitmap (StdCursor id) {
+                       return Carbon.Cursor.DefineStdCursorBitmap (id);
                }
-               [MonoTODO]
-               internal override IntPtr DefineCursor(Bitmap bitmap, Bitmap 
mask, Color cursor_pixel, Color mask_pixel, int xHotSpot, int yHotSpot) {
-                       return IntPtr.Zero;
+
+               internal override IntPtr DefineCursor (Bitmap bitmap, Bitmap 
mask, Color cursor_pixel, Color mask_pixel, int xHotSpot, int yHotSpot) {
+                       return Carbon.Cursor.DefineCursor (bitmap, mask, 
cursor_pixel, mask_pixel, xHotSpot, yHotSpot);
                }
                
-               internal override IntPtr DefineStdCursor(StdCursor id) {
-                       switch (id) {
-                               case StdCursor.AppStarting:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeSpinningCursor;
-                               case StdCursor.Arrow:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.Cross:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeCrossCursor;
-                               case StdCursor.Default:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.Hand:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeOpenHandCursor;
-                               case StdCursor.Help:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.HSplit:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeResizeLeftRightCursor;
-                               case StdCursor.IBeam:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeIBeamCursor;
-                               case StdCursor.No:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeNotAllowedCursor;
-                               case StdCursor.NoMove2D:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeNotAllowedCursor;
-                               case StdCursor.NoMoveHoriz:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeNotAllowedCursor;
-                               case StdCursor.NoMoveVert:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeNotAllowedCursor;
-                               case StdCursor.PanEast:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeResizeRightCursor;
-                               case StdCursor.PanNE:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.PanNorth:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.PanNW:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.PanSE:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.PanSouth:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.PanSW:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.PanWest:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeResizeLeftCursor;
-                               case StdCursor.SizeAll:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeResizeLeftRightCursor;
-                               case StdCursor.SizeNESW:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.SizeNS:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.SizeNWSE:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.SizeWE:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.UpArrow:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.VSplit:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                               case StdCursor.WaitCursor:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeSpinningCursor;
-                               default:
-                                       return 
(IntPtr)Carbon.ThemeCursor.kThemeArrowCursor;
-                       }
+               internal override IntPtr DefineStdCursor (StdCursor id) {
+                       return Carbon.Cursor.DefineStdCursor (id);
                }
                
                internal override IntPtr DefWndProc(ref Message msg) {
@@ -1174,6 +1113,57 @@
                                        }
                                        break;
                                }
+                               case Msg.WM_SETCURSOR: {
+                                       // Pass to parent window first
+                                       while ((hwnd.parent != null) && 
(msg.Result == IntPtr.Zero)) {
+                                               hwnd = hwnd.parent;
+                                               msg.Result = 
NativeWindow.WndProc(hwnd.Handle, Msg.WM_SETCURSOR, msg.HWnd, msg.LParam);
+                                       }
+
+                                       if (msg.Result == IntPtr.Zero) {
+                                               IntPtr handle;
+
+                                               
switch((HitTest)(msg.LParam.ToInt32() & 0xffff)) {
+                                                       case HitTest.HTBOTTOM:  
        handle = Cursors.SizeNS.handle; break;
+                                                       case HitTest.HTBORDER:  
        handle = Cursors.SizeNS.handle; break;
+                                                       case 
HitTest.HTBOTTOMLEFT:      handle = Cursors.SizeNESW.handle; break;
+                                                       case 
HitTest.HTBOTTOMRIGHT:     handle = Cursors.SizeNWSE.handle; break;
+                                                       case HitTest.HTERROR:   
        if ((msg.LParam.ToInt32() >> 16) == (int)Msg.WM_LBUTTONDOWN) {
+                                                                               
                //FIXME: AudibleAlert();
+                                                                               
        }
+                                                                               
        handle = Cursors.Default.handle;
+                                                                               
        break;
+
+                                                       case HitTest.HTHELP:    
        handle = Cursors.Help.handle; break;
+                                                       case HitTest.HTLEFT:    
        handle = Cursors.SizeWE.handle; break;
+                                                       case HitTest.HTRIGHT:   
        handle = Cursors.SizeWE.handle; break;
+                                                       case HitTest.HTTOP:     
        handle = Cursors.SizeNS.handle; break;
+                                                       case HitTest.HTTOPLEFT: 
        handle = Cursors.SizeNWSE.handle; break;
+                                                       case 
HitTest.HTTOPRIGHT:        handle = Cursors.SizeNESW.handle; break;
+
+                                                       #if SameAsDefault
+                                                       case HitTest.HTGROWBOX:
+                                                       case HitTest.HTSIZE:
+                                                       case HitTest.HTZOOM:
+                                                       case HitTest.HTVSCROLL:
+                                                       case HitTest.HTSYSMENU:
+                                                       case HitTest.HTREDUCE:
+                                                       case HitTest.HTNOWHERE:
+                                                       case 
HitTest.HTMAXBUTTON:
+                                                       case 
HitTest.HTMINBUTTON:
+                                                       case HitTest.HTMENU:
+                                                       case HitTest.HSCROLL:
+                                                       case HitTest.HTBOTTOM:
+                                                       case HitTest.HTCAPTION:
+                                                       case HitTest.HTCLIENT:
+                                                       case HitTest.HTCLOSE:
+                                                       #endif
+                                                       default: handle = 
Cursors.Default.handle; break;
+                                               }
+                                               SetCursor(msg.HWnd, handle);
+                                       }
+                                       return (IntPtr)1;
+                               }
                        }
                        return IntPtr.Zero;
                }
@@ -1674,10 +1664,7 @@
                internal override void SetCursor(IntPtr window, IntPtr cursor) {
                        Hwnd hwnd = Hwnd.ObjectFromHandle (window);
 
-                       if (hwnd.Handle == window)
-                               hwnd.ClientCursor = cursor;
-                       else
-                               hwnd.WholeCursor = cursor;
+                       hwnd.Cursor = cursor;
                }
                
                internal override void SetCursorPos(IntPtr handle, int x, int 
y) {

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

Reply via email to