You've already forked linux-packaging-mono
							
							
		
			
				
	
	
		
			246 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			246 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| // 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.
 | |
| //
 | |
| // Copyright (c) 2008 Novell, Inc.
 | |
| //
 | |
| // Authors:
 | |
| //	Geoff Norton (gnorton@novell.com)
 | |
| //
 | |
| //
 | |
| 
 | |
| 
 | |
| using System;
 | |
| using System.Drawing;
 | |
| using System.Windows.Forms;
 | |
| using System.Runtime.InteropServices;
 | |
| 
 | |
| namespace System.Windows.Forms.CarbonInternal {
 | |
| 	internal class Cursor {
 | |
| 		internal static CarbonCursor defcur = new CarbonCursor (StdCursor.Default);
 | |
| 
 | |
|                 internal static Bitmap DefineStdCursorBitmap (StdCursor id) {
 | |
| 			// FIXME
 | |
| 			return new Bitmap (16, 16);
 | |
|                 }
 | |
|                 internal static IntPtr DefineCursor (Bitmap bitmap, Bitmap mask, Color cursor_pixel, Color mask_pixel, int xHotSpot, int yHotSpot) {
 | |
| 			CarbonCursor cc = new CarbonCursor (bitmap, mask, cursor_pixel, mask_pixel, xHotSpot, yHotSpot);
 | |
| 
 | |
| 			return (IntPtr) GCHandle.Alloc (cc);
 | |
|                 }
 | |
| 		internal static IntPtr DefineStdCursor (StdCursor id) {
 | |
| 			CarbonCursor cc = new CarbonCursor (id);
 | |
| 		
 | |
| 			return (IntPtr) GCHandle.Alloc (cc);
 | |
| 		}
 | |
| 		internal static void SetCursor (IntPtr cursor) {
 | |
| 			if (cursor == IntPtr.Zero) {
 | |
| 				defcur.SetCursor ();
 | |
| 				return;
 | |
| 			}
 | |
| 
 | |
| 			CarbonCursor cc = (CarbonCursor) ((GCHandle) cursor).Target;
 | |
| 
 | |
| 			cc.SetCursor ();
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	internal struct CarbonCursor {
 | |
| 		private Bitmap bmp;
 | |
| 		private Bitmap mask;
 | |
| 		private Color cursor_color;
 | |
| 		private Color mask_color;
 | |
| 		private int hot_x;
 | |
| 		private int hot_y;
 | |
| 		private StdCursor id;
 | |
| 		private bool standard;
 | |
| 
 | |
|                 public CarbonCursor (Bitmap bitmap, Bitmap mask, Color cursor_pixel, Color mask_pixel, int xHotSpot, int yHotSpot) {
 | |
| 			this.id = StdCursor.Default;
 | |
| 			this.bmp = bitmap;
 | |
| 			this.mask = mask;
 | |
| 			this.cursor_color = cursor_pixel;
 | |
| 			this.mask_color = mask_pixel;
 | |
| 			this.hot_x = xHotSpot;
 | |
| 			this.hot_y = yHotSpot;
 | |
| 			standard = true;
 | |
| 		}
 | |
| 
 | |
| 		public CarbonCursor (StdCursor id) {
 | |
| 			this.id = id;
 | |
| 			this.bmp = null;
 | |
| 			this.mask = null;
 | |
| 			this.cursor_color = Color.Black;
 | |
| 			this.mask_color = Color.Black;
 | |
| 			this.hot_x = 0;
 | |
| 			this.hot_y = 0;
 | |
| 			standard = true;
 | |
| 		}
 | |
| 
 | |
| 		public StdCursor StdCursor {
 | |
| 			get {
 | |
| 				return id;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public Bitmap Bitmap {
 | |
| 			get { 
 | |
| 				return bmp;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public Bitmap Mask {
 | |
| 			get { 
 | |
| 				return mask;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public Color CursorColor {
 | |
| 			get {
 | |
| 				return cursor_color;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public Color MaskColor {
 | |
| 			get {
 | |
| 				return mask_color;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public int HotSpotX {
 | |
| 			get { 
 | |
| 				return hot_x;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public int HotSpotY {
 | |
| 			get { 
 | |
| 				return hot_y;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		public void SetCursor () {
 | |
| 			if (standard)
 | |
| 				SetStandardCursor ();
 | |
| 			else	
 | |
| 				SetCustomCursor ();
 | |
| 		}
 | |
| 
 | |
| 		public void SetCustomCursor () {
 | |
| 			throw new NotImplementedException ("We dont support custom cursors yet");
 | |
| 		}
 | |
| 
 | |
| 		public void SetStandardCursor () {
 | |
| 			switch (id) {
 | |
| 				case StdCursor.AppStarting:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeSpinningCursor);
 | |
| 					break;
 | |
| 				case StdCursor.Arrow:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.Cross:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeCrossCursor);
 | |
| 					break;
 | |
| 				case StdCursor.Default:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.Hand:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeOpenHandCursor);
 | |
| 					break;
 | |
| 				case StdCursor.Help:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.HSplit:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeResizeLeftRightCursor);
 | |
| 					break;
 | |
| 				case StdCursor.IBeam:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeIBeamCursor);
 | |
| 					break;
 | |
| 				case StdCursor.No:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeNotAllowedCursor);
 | |
| 					break;
 | |
| 				case StdCursor.NoMove2D:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeNotAllowedCursor);
 | |
| 					break;
 | |
| 				case StdCursor.NoMoveHoriz:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeNotAllowedCursor);
 | |
| 					break;
 | |
| 				case StdCursor.NoMoveVert:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeNotAllowedCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanEast:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeResizeRightCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanNE:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanNorth:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanNW:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanSE:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanSouth:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanSW:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.PanWest:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeResizeLeftCursor);
 | |
| 					break;
 | |
| 				case StdCursor.SizeAll:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeResizeLeftRightCursor);
 | |
| 					break;
 | |
| 				case StdCursor.SizeNESW:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.SizeNS:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.SizeNWSE:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.SizeWE:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.UpArrow:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.VSplit:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 				case StdCursor.WaitCursor:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeSpinningCursor);
 | |
| 					break;
 | |
| 				default:
 | |
| 					SetThemeCursor (ThemeCursor.kThemeArrowCursor);
 | |
| 					break;
 | |
| 			}
 | |
| 			return;
 | |
| 		}
 | |
| 
 | |
| 		[DllImport ("/System/Library/Frameworks/Carbon.framework/Versions/Current/Carbon")]
 | |
| 		static extern int SetThemeCursor (ThemeCursor cursor);
 | |
| 
 | |
| 	}
 | |
| }
 |