/* * Copyright (C) 2013-2015 RoboVM AB * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.robovm.apple.uikit; import org.robovm.apple.foundation.NSObject; import org.robovm.objc.ObjCClass; import org.robovm.objc.ObjCObject; import org.robovm.objc.ObjCRuntime; import org.robovm.objc.Selector; import org.robovm.rt.bro.annotation.Bridge; import org.robovm.rt.bro.annotation.Library; import org.robovm.rt.bro.annotation.Pointer; import org.robovm.rt.bro.annotation.Variadic; /*<javadoc>*/ /*</javadoc>*/ @Library("UIKit") public class UIAppearance { static { ObjCRuntime.bind(UIAppearance.class); } private static final Selector appearance = Selector.register("appearance"); @Bridge private static native @Pointer long objc_appearance(ObjCClass cls, Selector sel); private static final Selector appearanceWhenContainedIn = Selector.register("appearanceWhenContainedIn:"); @Bridge @Variadic(2) private static native @Pointer long objc_appearanceWhenContainedIn(ObjCClass cls, Selector sel, ObjCClass c01, ObjCClass c02, ObjCClass c03, ObjCClass c04, ObjCClass c05, ObjCClass c06, ObjCClass c07, ObjCClass c08, ObjCClass c09, ObjCClass c10, @Pointer long nil); private static final Selector appearanceForTraitCollection = Selector.register("appearanceForTraitCollection:"); @Bridge private static native @Pointer long objc_appearanceForTraitCollection(ObjCClass cls, Selector sel, UITraitCollection trait); private static final Selector appearanceForTraitCollectionWhenContainedIn = Selector.register("appearanceForTraitCollection:whenContainedIn:"); @Bridge @Variadic(3) private static native @Pointer long objc_appearanceForTraitCollectionWhenContainedIn(ObjCClass cls, Selector sel, UITraitCollection trait, ObjCClass c01, ObjCClass c02, ObjCClass c03, ObjCClass c04, ObjCClass c05, ObjCClass c06, ObjCClass c07, ObjCClass c08, ObjCClass c09, ObjCClass c10, @Pointer long nil); @SuppressWarnings("unchecked") private static ObjCClass toObjCClass(Class<?>[] array, int index) { return array.length > index ? ObjCClass.getByType((Class<? extends ObjCObject>) array[index]) : null; } public static <T extends NSObject & UIAppearanceContainer> T getAppearance(Class<T> type, Class<?> ... containedIn) { ObjCClass objCClass = ObjCClass.getByType(type); long proxyHandle = 0; if (containedIn == null || containedIn.length == 0) { proxyHandle = objc_appearance(objCClass, appearance); } else { if (containedIn.length > 10) { throw new IllegalArgumentException("A maximum of 10 container classes is supported"); } ObjCClass c01 = toObjCClass(containedIn, 0); ObjCClass c02 = toObjCClass(containedIn, 1); ObjCClass c03 = toObjCClass(containedIn, 2); ObjCClass c04 = toObjCClass(containedIn, 3); ObjCClass c05 = toObjCClass(containedIn, 4); ObjCClass c06 = toObjCClass(containedIn, 5); ObjCClass c07 = toObjCClass(containedIn, 6); ObjCClass c08 = toObjCClass(containedIn, 7); ObjCClass c09 = toObjCClass(containedIn, 8); ObjCClass c10 = toObjCClass(containedIn, 9); proxyHandle = objc_appearanceWhenContainedIn(objCClass, appearanceWhenContainedIn, c01, c02, c03, c04, c05, c06, c07, c08, c09, c10, 0); } return ObjCObject.toObjCObject(type, proxyHandle, 0, true); } public static <T extends NSObject & UIAppearanceContainer> T getAppearanceForTraitCollection(Class<T> type, UITraitCollection trait, Class<?> ... containedIn) { ObjCClass objCClass = ObjCClass.getByType(type); long proxyHandle = 0; if (containedIn == null || containedIn.length == 0) { proxyHandle = objc_appearanceForTraitCollection(objCClass, appearanceForTraitCollection, trait); } else { if (containedIn.length > 10) { throw new IllegalArgumentException("A maximum of 10 container classes is supported"); } ObjCClass c01 = toObjCClass(containedIn, 0); ObjCClass c02 = toObjCClass(containedIn, 1); ObjCClass c03 = toObjCClass(containedIn, 2); ObjCClass c04 = toObjCClass(containedIn, 3); ObjCClass c05 = toObjCClass(containedIn, 4); ObjCClass c06 = toObjCClass(containedIn, 5); ObjCClass c07 = toObjCClass(containedIn, 6); ObjCClass c08 = toObjCClass(containedIn, 7); ObjCClass c09 = toObjCClass(containedIn, 8); ObjCClass c10 = toObjCClass(containedIn, 9); proxyHandle = objc_appearanceForTraitCollectionWhenContainedIn(objCClass, appearanceForTraitCollectionWhenContainedIn, trait, c01, c02, c03, c04, c05, c06, c07, c08, c09, c10, 0); } return ObjCObject.toObjCObject(type, proxyHandle, 0, true); } }