Add licensing info
[mono.git] / mcs / class / System.Windows.Forms / System.Windows.Forms / Cursor.cs
index a8baeb441bf42c31698bd640b0fba7492781c606..5cf620f041b504e9c477fd996d6f40fdd4ba37bf 100644 (file)
-//\r
-// System.Windows.Forms.Cursor.cs\r
-//\r
-// Author:\r
-//   stubbed out by Jaak Simm (jaaksimm@firm.ee)\r
-//   Dennis Hayes (dennish@Raytek.com)\r
-//\r
-// (C) Ximian, Inc., 2002\r
-//\r
-\r
-using System.ComponentModel;\r
-using System.Runtime.Serialization;\r
-using System.IO;\r
-using System.Drawing;\r
-\r
-namespace System.Windows.Forms {\r
-\r
-       /// <summary>\r
-       /// Represents the image used to paint the mouse pointer.\r
-       /// </summary>\r
-\r
-       [MonoTODO]\r
-       [Serializable]\r
-       public sealed class Cursor : IDisposable, ISerializable {\r
-\r
-               #region Fields\r
-               #endregion\r
-               \r
-               #region Constructors\r
-               [MonoTODO]\r
-               public Cursor(IntPtr handle) \r
-               {\r
-                       \r
-               }\r
-               \r
-               [MonoTODO]\r
-               public Cursor(Stream stream) \r
-               {\r
-                       \r
-               }\r
-               \r
-               [MonoTODO]\r
-               public Cursor(string fileName) \r
-               {\r
-                       \r
-               }\r
-               \r
-               [MonoTODO]\r
-               public Cursor(Type type,string resource) \r
-               {\r
-                       \r
-               }\r
-               #endregion\r
-               \r
-               #region Properties\r
-               [MonoTODO]\r
-               public static Rectangle Clip {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static Cursor Current {\r
-                       get { \r
-                               throw new NotImplementedException (); \r
-                       }\r
-                       set { \r
-                               throw new NotImplementedException (); \r
-                       }\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public IntPtr Handle {\r
-                       get { throw new NotImplementedException (); }\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static Point Position {\r
-                       get { throw new NotImplementedException (); }\r
-                       set { throw new NotImplementedException (); }\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public Size Size {\r
-                       get { throw new NotImplementedException (); }\r
-               }\r
-               #endregion\r
-               \r
-               #region Methods\r
-               [MonoTODO]\r
-               public IntPtr CopyHandle() \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public void Dispose() \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public void Draw(Graphics g,Rectangle targetRect) \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public void DrawStretched(Graphics g,Rectangle targetRect) \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public override bool Equals(object obj) \r
-               {\r
-                       //FIXME:\r
-                       return base.Equals(obj);\r
-               }\r
-               \r
-               [MonoTODO]\r
-               ~Cursor() {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public override int GetHashCode() \r
-               {\r
-                       //FIXME:\r
-                       return base.GetHashCode();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static void Hide() \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               /// ISerializable.GetObjectData only supports .NET framework:\r
-               [MonoTODO]\r
-               void ISerializable.GetObjectData(SerializationInfo si,StreamingContext context) \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static void Show() \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public override string ToString() \r
-               {\r
-                       //FIXME:\r
-                       return base.ToString();\r
-               }\r
-               #endregion\r
-               \r
-               #region Operators\r
-               [MonoTODO]\r
-               public static bool operator ==(Cursor left, Cursor right) \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               \r
-               [MonoTODO]\r
-               public static bool operator !=(Cursor left, Cursor right) \r
-               {\r
-                       throw new NotImplementedException ();\r
-               }\r
-               #endregion\r
-       }\r
-}\r
+//
+// System.Windows.Forms.Cursor.cs
+//
+// Author:
+//   stubbed out by Jaak Simm (jaaksimm@firm.ee)
+//   Dennis Hayes (dennish@Raytek.com)
+//   Aleksey Ryabchuk (ryabchuk@yahoo.com)
+//
+// (C) Ximian, Inc., 2002
+//
+
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+// 
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+// 
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+using System;
+using System.ComponentModel;
+using System.Runtime.Serialization;
+using System.IO;
+using System.Drawing;
+
+namespace System.Windows.Forms {
+
+       /// <summary>
+       /// Represents the image used to paint the mouse pointer.
+       /// </summary>
+
+       [MonoTODO]
+       [Serializable]
+       public sealed class Cursor : IDisposable, ISerializable {
+
+               #region Fields
+               private IntPtr handle;
+               private bool   fromResource    = false;
+               private bool   disposed        = false;
+               private CursorType ctype;
+               #endregion
+               
+               #region Constructors
+               private Cursor(){
+               }
+               internal Cursor ( CursorType type )//For signiture compatablity.
+               {
+                       handle = Win32.LoadCursor ( IntPtr.Zero, type );
+                       fromResource = true;
+                       ctype  = type;
+               }
+
+               [MonoTODO]
+               public Cursor( IntPtr handle ) 
+               {
+                       this.handle = handle;   
+               }
+               
+               [MonoTODO]
+               public Cursor(Stream stream) 
+               {
+                       
+               }
+               
+               [MonoTODO]
+               public Cursor(string fileName) 
+               {
+                       
+               }
+               
+               [MonoTODO]
+               public Cursor(Type type,string resource) 
+               {
+                       
+               }
+               #endregion
+               
+               #region Properties
+               [MonoTODO]
+               public static Rectangle Clip {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+                       set {
+                               throw new NotImplementedException ();
+                       }
+               }
+               
+               [MonoTODO]
+               public static Cursor Current {
+                       get { 
+                               throw new NotImplementedException (); 
+                       }
+                       set { 
+                               throw new NotImplementedException (); 
+                       }
+               }
+               
+               [MonoTODO]
+               public IntPtr Handle {
+                       get { return handle; }
+               }
+               
+               [MonoTODO]
+               public static Point Position {
+                       get { throw new NotImplementedException (); }
+                       set { throw new NotImplementedException (); }
+               }
+               
+               [MonoTODO]
+               public Size Size {
+                       get { throw new NotImplementedException (); }
+               }
+               #endregion
+               
+               #region Methods
+
+               public IntPtr CopyHandle() 
+               {
+                       return Win32_WineLess.CopyCursor ( Handle );
+               }
+               
+               public void Dispose() 
+               {
+                       GC.SuppressFinalize( this );
+                       Dispose( true );
+               }
+               
+               private void Dispose( bool disposing )
+               {
+                       lock ( this ) {
+                               if ( disposing ) {
+                                       // dispose managed resources
+                               }
+                               if ( !this.disposed ) {
+                                       // release all unmanaged resources
+                                       // shared cursor should not be destroyed
+                                       if ( !fromResource )
+                                               Win32.DestroyCursor ( handle );
+                                       handle = IntPtr.Zero;
+                               }
+                               disposed = true;         
+                       }
+               }
+
+               [MonoTODO]
+               public void Draw(Graphics g,Rectangle targetRect) 
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               [MonoTODO]
+               public void DrawStretched(Graphics g,Rectangle targetRect) 
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               [MonoTODO]
+               public override bool Equals(object obj) 
+               {
+                       if ( obj == null ) return false;
+                       if ( this.GetType ( ) != obj.GetType ( ) ) return false;
+                       Cursor other = ( Cursor ) obj;
+                       if ( !fromResource.Equals ( other.fromResource ) ) return false;
+                       if ( !ctype.Equals ( other.ctype ) ) return false;
+
+                       return true;
+               }
+               
+               ~Cursor() {
+                       Dispose ( false );
+               }
+               
+               [MonoTODO]
+               public override int GetHashCode() 
+               {
+                       //FIXME:
+                       return base.GetHashCode();
+               }
+               
+               public static void Hide() 
+               {
+                       Win32.ShowCursor ( false );
+               }
+               
+               /// ISerializable.GetObjectData only supports .NET framework:
+               [MonoTODO]
+               void ISerializable.GetObjectData(SerializationInfo si,StreamingContext context) 
+               {
+                       throw new NotImplementedException ();
+               }
+               
+               public static void Show() 
+               {
+                       Win32.ShowCursor ( true );
+               }
+               
+               [MonoTODO]
+               public override string ToString() 
+               {
+                       //FIXME:
+                       return base.ToString();
+               }
+               #endregion
+               
+               #region Operators
+               [MonoTODO]
+               public static bool operator ==(Cursor left, Cursor right) 
+               {
+                       return Object.Equals ( left, right );
+               }
+               
+               [MonoTODO]
+               public static bool operator !=(Cursor left, Cursor right) 
+               {
+                       return ! ( left == right );
+               }
+               #endregion
+       }
+}