Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MapKit] Make P/Invokes have blittable signatures. #20006

Merged
merged 5 commits into from
Feb 5, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 21 additions & 14 deletions src/MapKit/MapKit.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
//

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using CoreGraphics;
using CoreLocation;
Expand Down Expand Up @@ -369,21 +370,19 @@ public override string ToString ()
}

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectContainsPoint")]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool MKMapRectContainsPoint (MKMapRect rect, MKMapPoint point);
static extern byte MKMapRectContainsPoint (MKMapRect rect, MKMapPoint point);

public bool Contains (MKMapPoint point)
{
return MKMapRectContainsPoint (this, point);
return MKMapRectContainsPoint (this, point) != 0;
}

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectContainsRect")]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool MKMapRectContainsRect (MKMapRect rect1, MKMapRect rect2);
static extern byte MKMapRectContainsRect (MKMapRect rect1, MKMapRect rect2);

public bool Contains (MKMapRect rect)
{
return MKMapRectContainsRect (this, rect);
return MKMapRectContainsRect (this, rect) != 0;
}

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectUnion")]
Expand All @@ -392,9 +391,13 @@ public bool Contains (MKMapRect rect)
[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectIntersection")]
static public extern MKMapRect Intersection (MKMapRect rect1, MKMapRect rect2);

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectIntersectsRect")]
[return: MarshalAs (UnmanagedType.I1)]
static public extern bool Intersects (MKMapRect rect1, MKMapRect rect2);
[DllImport (Constants.MapKitLibrary)]
static extern byte MKMapRectIntersectsRect (MKMapRect rect1, MKMapRect rect2);

public static bool Intersects (MKMapRect rect1, MKMapRect rect2)
{
return MKMapRectIntersectsRect (rect1, rect2) != 0;
}

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectInset")]
static extern MKMapRect MKMapRectInset (MKMapRect rect, double dx, double dy);
Expand All @@ -413,21 +416,25 @@ public MKMapRect Offset (double dx, double dy)
}

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectDivide")]
static extern void MKMapRectDivide (MKMapRect rect, out MKMapRect slice, out MKMapRect remainder, double amount, CGRectEdge edge);
unsafe static extern void MKMapRectDivide (MKMapRect rect, MKMapRect* slice, MKMapRect* remainder, double amount, CGRectEdge edge);

#if !COREBUILD
public MKMapRect Divide (double amount, CGRectEdge edge, out MKMapRect remainder)
{
MKMapRect slice;
MKMapRectDivide (this, out slice, out remainder, amount, edge);
remainder = default;
unsafe {
MKMapRectDivide (this, &slice, (MKMapRect*) Unsafe.AsPointer<MKMapRect> (ref remainder), amount, edge);
}
return slice;
}
#endif

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectSpans180thMeridian")]
[return: MarshalAs (UnmanagedType.I1)]
static extern bool MKMapRectSpans180thMeridian (MKMapRect rect);
static extern byte MKMapRectSpans180thMeridian (MKMapRect rect);

public bool Spans180thMeridian {
get { return MKMapRectSpans180thMeridian (this); }
get { return MKMapRectSpans180thMeridian (this) != 0; }
}

[DllImport (Constants.MapKitLibrary, EntryPoint = "MKMapRectRemainder")]
Expand Down
5 changes: 0 additions & 5 deletions tests/cecil-tests/BlittablePInvokes.KnownFailures.cs
Original file line number Diff line number Diff line change
Expand Up @@ -369,10 +369,6 @@ public partial class BlittablePInvokes {
"System.Boolean GameController.GCMicroGamepadSnapshot::GCMicroGamepadSnapshotDataFromNSData(GameController.GCMicroGamepadSnapshotData&,System.IntPtr)",
"System.Boolean GameController.GCMicroGamepadSnapshot::GCMicroGamepadSnapShotDataV100FromNSData(GameController.GCMicroGamepadSnapShotDataV100&,System.IntPtr)",
"System.Boolean HealthKit.HKAppleWalkingSteadiness::HKAppleWalkingSteadinessClassificationForQuantity(System.IntPtr,System.IntPtr&,System.IntPtr&)",
"System.Boolean MapKit.MKMapRect::Intersects(MapKit.MKMapRect,MapKit.MKMapRect)",
"System.Boolean MapKit.MKMapRect::MKMapRectContainsPoint(MapKit.MKMapRect,MapKit.MKMapPoint)",
"System.Boolean MapKit.MKMapRect::MKMapRectContainsRect(MapKit.MKMapRect,MapKit.MKMapRect)",
"System.Boolean MapKit.MKMapRect::MKMapRectSpans180thMeridian(MapKit.MKMapRect)",
"System.Boolean MediaAccessibility.MACaptionAppearance::MACaptionAppearanceAddSelectedLanguage(System.IntPtr,System.IntPtr)",
"System.Boolean MediaAccessibility.MAImageCaptioning::MAImageCaptioningSetCaption(System.IntPtr,System.IntPtr,System.IntPtr&)",
"System.Boolean MediaPlayer.MPVolumeSettings::AlertIsVisible()",
Expand Down Expand Up @@ -645,7 +641,6 @@ public partial class BlittablePInvokes {
"System.Void CoreText.CTFontManager::CTFontManagerRegisterFontURLs(System.IntPtr,CoreText.CTFontManagerScope,System.Boolean,ObjCRuntime.BlockLiteral*)",
"System.Void CoreVideo.CVPixelBuffer::CVPixelBufferGetExtendedPixels(System.IntPtr,System.UIntPtr&,System.UIntPtr&,System.UIntPtr&,System.UIntPtr&)",
"System.Void Foundation.NSObject::xamarin_release_managed_ref(System.IntPtr,System.Boolean)",
"System.Void MapKit.MKMapRect::MKMapRectDivide(MapKit.MKMapRect,MapKit.MKMapRect&,MapKit.MKMapRect&,System.Double,CoreGraphics.CGRectEdge)",
"System.Void Network.NWAdvertiseDescriptor::nw_advertise_descriptor_set_no_auto_rename(System.IntPtr,System.Boolean)",
"System.Void Network.NWBrowserDescriptor::nw_browse_descriptor_set_include_txt_record(System.IntPtr,System.Boolean)",
"System.Void Network.NWConnection::nw_connection_send(System.IntPtr,System.IntPtr,System.IntPtr,System.Boolean,ObjCRuntime.BlockLiteral*)",
Expand Down
Loading