From 807efadf3838d4bb28ff1fe8a1b4561b074de8ec Mon Sep 17 00:00:00 2001 From: Sebastien Pouliot Date: Wed, 29 Aug 2018 13:29:34 -0400 Subject: [PATCH] [coreimage] Add generator support for CIVector[] and enable it in CIMeshGenerator. Fix #4226 (#4715) --- src/coreimage.cs | 5 ++--- src/generator-filters.cs | 18 ++++++++++++++++++ tests/monotouch-test/CoreImage/FilterTest.cs | 14 ++++++++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/coreimage.cs b/src/coreimage.cs index 97b14bcab7..a3a1ad4f0c 100644 --- a/src/coreimage.cs +++ b/src/coreimage.cs @@ -5569,9 +5569,8 @@ namespace CoreImage { [Mac (10,14, onlyOn64: true)] [BaseType (typeof (CIFilter))] interface CIMeshGenerator { - // https://github.com/xamarin/xamarin-macios/issues/4226 - //[CoreImageFilterProperty ("inputMesh")] - //CIVector [] Mesh { get; set; } + [CoreImageFilterProperty ("inputMesh")] + CIVector [] Mesh { get; set; } [CoreImageFilterProperty ("inputWidth")] float Width { get; set; } [CoreImageFilterProperty ("inputColor")] diff --git a/src/generator-filters.cs b/src/generator-filters.cs index bb5c90eb03..ef3ff02d39 100644 --- a/src/generator-filters.cs +++ b/src/generator-filters.cs @@ -199,6 +199,10 @@ public partial class Generator { // NSString should not be added - it should be bound as a string print ("return (string) (ValueForKey (\"{0}\") as NSString);", propertyName); break; + case "CIVector[]": + print ($"var handle = GetHandle (\"{propertyName}\");"); + print ("return NSArray.ArrayFromHandle (handle);"); + break; default: throw new BindingException (1018, true, "Unimplemented CoreImage property type {0}", propertyType); } @@ -247,6 +251,20 @@ public partial class Generator { print ("SetValue (\"{0}\", ns);", propertyName); indent--; break; + case "CIVector[]": + print ("if (value == null) {"); + indent++; + print ($"SetHandle (\"{propertyName}\", IntPtr.Zero);"); + indent--; + print ("} else {"); + indent++; + print ("using (var array = NSArray.FromNSObjects (value))"); + indent++; + print ($"SetHandle (\"{propertyName}\", array.GetHandle ());"); + indent--; + indent--; + print ("}"); + break; default: throw new BindingException (1018, true, "Unimplemented CoreImage property type {0}", propertyType); } diff --git a/tests/monotouch-test/CoreImage/FilterTest.cs b/tests/monotouch-test/CoreImage/FilterTest.cs index 33d8b5c686..6b3a565341 100644 --- a/tests/monotouch-test/CoreImage/FilterTest.cs +++ b/tests/monotouch-test/CoreImage/FilterTest.cs @@ -153,6 +153,20 @@ namespace MonoTouchFixtures.CoreImage { } } } + + [Test] + public void CIVectorArray () + { + TestRuntime.AssertXcodeVersion (10, 0); + + using (var f = new CIMeshGenerator ()) { + Assert.Null (f.Mesh, "Mesh/Null"); + f.Mesh = new CIVector [1] { new CIVector (1) }; + Assert.That (f.Mesh.Length, Is.EqualTo (1), "Mesh/Non-null"); + f.Mesh = null; + Assert.Null (f.Mesh, "Mesh/Null/again"); + } + } } }