[coreimage] Add new CoreImage filters from Xcode 11 beta 2. Fixes #6340 (#6358)

Update intro tests to generate bindings with more comments - which makes
it easier to bind `NSNumber` to the correct/better .net type.

https://github.com/xamarin/xamarin-macios/issues/6340
This commit is contained in:
Sebastien Pouliot 2019-06-19 05:26:40 -07:00 коммит произвёл GitHub
Родитель 0d5c664779
Коммит 50701e6e94
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 105 добавлений и 35 удалений

Просмотреть файл

@ -2719,11 +2719,8 @@ namespace CoreImage {
[CoreImageFilter]
[iOS (9,0)]
[BaseType (typeof (CIFilter))]
[BaseType (typeof (CIReductionFilter))]
interface CIAreaAverage {
[CoreImageFilterProperty ("inputExtent")]
CIVector Extent { get; set; }
}
[CoreImageFilter]
@ -5653,7 +5650,7 @@ namespace CoreImage {
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIFilter))]
[BaseType (typeof (CIReductionFilter))]
interface CIKMeans {
[CoreImageFilterProperty ("inputMeans")]
@ -5662,9 +5659,6 @@ namespace CoreImage {
[CoreImageFilterProperty ("inputCount")]
float Count { get; set; }
[CoreImageFilterProperty ("inputExtent")]
CIVector Extent { get; set; }
[CoreImageFilterProperty ("inputPasses")]
int Passes { get; set; }
@ -5677,7 +5671,8 @@ namespace CoreImage {
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIFilter))]
interface CIMorphologyRectangleMaximum {
[Abstract]
interface CIMorphologyRectangle {
[CoreImageFilterProperty ("inputHeight")]
int Height { get; set; }
@ -5690,14 +5685,16 @@ namespace CoreImage {
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIFilter))]
[BaseType (typeof (CIMorphologyRectangle))]
interface CIMorphologyRectangleMaximum {
}
[CoreImageFilter]
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIMorphologyRectangle))]
interface CIMorphologyRectangleMinimum {
[CoreImageFilterProperty ("inputHeight")]
int Height { get; set; }
[CoreImageFilterProperty ("inputWidth")]
int Width { get; set; }
}
[CoreImageFilter]
@ -5727,4 +5724,80 @@ namespace CoreImage {
[CoreImageFilterProperty ("inputPerceptual")]
bool Perceptual { get; set; }
}
[CoreImageFilter]
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIFilter))]
[Abstract]
interface CIKeystoneCorrection {
[CoreImageFilterProperty ("inputFocalLength")]
float FocalLength { get; set; }
[CoreImageFilterProperty ("inputTopRight")]
CIVector TopRight { get; set; }
[CoreImageFilterProperty ("inputBottomRight")]
CIVector BottomRight { get; set; }
[CoreImageFilterProperty ("inputTopLeft")]
CIVector TopLeft { get; set; }
[CoreImageFilterProperty ("inputBottomLeft")]
CIVector BottomLeft { get; set; }
}
[CoreImageFilter]
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIKeystoneCorrection))]
interface CIKeystoneCorrectionCombined {
}
[CoreImageFilter]
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIKeystoneCorrection))]
interface CIKeystoneCorrectionHorizontal {
}
[CoreImageFilter]
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIKeystoneCorrection))]
interface CIKeystoneCorrectionVertical {
}
[CoreImageFilter]
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIFilter))]
interface CIPerspectiveRotate {
[CoreImageFilterProperty ("inputFocalLength")]
float FocalLength { get; set; }
[CoreImageFilterProperty ("inputRoll")]
float Roll { get; set; }
[CoreImageFilterProperty ("inputPitch")]
float Pitch { get; set; }
[CoreImageFilterProperty ("inputYaw")]
float Yaw { get; set; }
}
[CoreImageFilter]
[iOS (13,0)]
[TV (13,0)]
[Mac (10,15, onlyOn64: true)]
[BaseType (typeof (CIFilter))]
interface CIGaborGradients {
}
}

Просмотреть файл

@ -54,6 +54,12 @@ namespace Introspection {
static Type CIFilterType = typeof (CIFilter);
#if false
static TextWriter BindingOutput;
#else
static TextWriter BindingOutput = Console.Out;
#endif
protected virtual bool Skip (Type type)
{
return Skip (type.Name) || SkipDueToAttribute (type);
@ -66,13 +72,6 @@ namespace Introspection {
// NSUnknownKeyException [<CIDepthOfField 0x158586970> valueForUndefinedKey:]: this class is not key value coding-compliant for the key inputPoint2.
case "CIDepthOfField":
return true;
// TODO: https://github.com/xamarin/xamarin-macios/issues/6340
case "CIGaborGradients":
case "CIKeystoneCorrectionCombined":
case "CIKeystoneCorrectionHorizontal":
case "CIKeystoneCorrectionVertical":
case "CIPerspectiveRotate":
return true;
// Apple does **not** document filters as API (like we do)
// uncomment calls to `GenerateBinding` to use introspection code to generate the skeleton binding code and complete it
// e.g. picking better types like `bool` instead of `NSNumber'
@ -95,8 +94,8 @@ namespace Introspection {
string type_name = qname.Replace ("CIFilter", filter_name);
if (Type.GetType (type_name, false, true) == null) {
filters.Add (filter_name);
// uncomment to generate bindings for any new native filter
// GenerateBinding (CIFilter.FromName (filter_name), Console.Out);
if (BindingOutput != null)
GenerateBinding (CIFilter.FromName (filter_name), BindingOutput);
}
n++;
}
@ -137,7 +136,7 @@ namespace Introspection {
if (!superFilters.Contains (super)) {
superFilters.Add (super);
Console.WriteLine ("[GENERATED] {0}", super);
GenerateBinding (CIFilter.FromName (super), Console.Out);
GenerateBinding (CIFilter.FromName (super), BindingOutput);
}
}
#endif
@ -201,22 +200,20 @@ namespace Introspection {
writer.WriteLine ();
var dict = attributes [k] as NSDictionary;
var type = dict [(NSString) "CIAttributeClass"];
writer.WriteLine ("\t[CoreImageFilterProperty (\"{0}\")]", key);
writer.WriteLine ($"\t[CoreImageFilterProperty (\"{key}\")]");
// by default we drop the "input" prefix, but keep the "output" prefix to avoid confusion
if (key.StartsWith ("input", StringComparison.Ordinal))
key = Char.ToUpperInvariant (key [5]) + key.Substring (6);
var ptype = type.ToString ();
// Too many things ends up in NSNumber but we do a better job in our bindings
if (ptype == "NSNumber") {
ptype = "float";
writer.WriteLine ("\t// TODO: this was an NSNumber transformed to float, but maybe an int or bool is more appropriate");
}
writer.WriteLine ("\t{0} {1} {{ get; set; }}", ptype, key);
writer.WriteLine ("\t/* REMOVE-ME");
writer.WriteLine (dict);
writer.WriteLine ("\t*/");
writer.WriteLine ($"\t{type} {key} {{ get; set; }}");
}
writer.WriteLine ("}");
writer.WriteLine ();
writer.Flush ();
}
}
}