コード例 #1
0
        static void ApplierCallback(IntPtr info, IntPtr element_ptr)
        {
            GCHandle gch = GCHandle.FromIntPtr(info);
            // note: CGPathElementType is an untyped enum, always 32bits
            CGPathElement   element = new CGPathElement(Marshal.ReadInt32(element_ptr, 0));
            ApplierFunction func    = (ApplierFunction)gch.Target;

            IntPtr ptr    = Marshal.ReadIntPtr(element_ptr, IntPtr.Size);
            int    ptsize = Marshal.SizeOf(typeof(CGPoint));

            switch (element.Type)
            {
            case CGPathElementType.CloseSubpath:
                break;

            case CGPathElementType.MoveToPoint:
            case CGPathElementType.AddLineToPoint:
                element.Point1 = (CGPoint)Marshal.PtrToStructure(ptr, typeof(CGPoint));
                break;

            case CGPathElementType.AddQuadCurveToPoint:
                element.Point1 = (CGPoint)Marshal.PtrToStructure(ptr, typeof(CGPoint));
                element.Point2 = (CGPoint)Marshal.PtrToStructure(((IntPtr)(((long)ptr) + ptsize)), typeof(CGPoint));
                break;

            case CGPathElementType.AddCurveToPoint:
                element.Point1 = (CGPoint)Marshal.PtrToStructure(ptr, typeof(CGPoint));
                element.Point2 = (CGPoint)Marshal.PtrToStructure(((IntPtr)(((long)ptr) + ptsize)), typeof(CGPoint));
                element.Point3 = (CGPoint)Marshal.PtrToStructure(((IntPtr)(((long)ptr) + (2 * ptsize))), typeof(CGPoint));
                break;
            }

            func(element);
        }
コード例 #2
0
		static void ApplierCallback (IntPtr info, IntPtr element_ptr)
		{
			GCHandle gch = GCHandle.FromIntPtr (info);
			// note: CGPathElementType is an untyped enum, always 32bits
			CGPathElement element = new CGPathElement (Marshal.ReadInt32(element_ptr, 0));
			ApplierFunction func = (ApplierFunction) gch.Target;

			IntPtr ptr = Marshal.ReadIntPtr (element_ptr, IntPtr.Size);
			int ptsize = Marshal.SizeOf (typeof (CGPoint));

			switch (element.Type){
			case CGPathElementType.CloseSubpath:
				break;

			case CGPathElementType.MoveToPoint:
			case CGPathElementType.AddLineToPoint:
				element.Point1 = (CGPoint) Marshal.PtrToStructure (ptr, typeof (CGPoint));
				break;

			case CGPathElementType.AddQuadCurveToPoint:
				element.Point1 = (CGPoint) Marshal.PtrToStructure (ptr, typeof (CGPoint));
				element.Point2 = (CGPoint) Marshal.PtrToStructure (((IntPtr) (((long)ptr) + ptsize)), typeof (CGPoint));
				break;

			case CGPathElementType.AddCurveToPoint:
				element.Point1 = (CGPoint) Marshal.PtrToStructure (ptr, typeof (CGPoint));
				element.Point2 = (CGPoint) Marshal.PtrToStructure (((IntPtr) (((long)ptr) + ptsize)), typeof (CGPoint));
				element.Point3 = (CGPoint) Marshal.PtrToStructure (((IntPtr) (((long)ptr) + (2*ptsize))), typeof (CGPoint));
				break;
			}

			func (element);
		}