// // ASEnvironment.mm // AsyncDisplayKit // // Copyright (c) 2014-present, Facebook, Inc. All rights reserved. // This source code is licensed under the BSD-style license found in the // LICENSE file in the root directory of this source tree. An additional grant // of patent rights can be found in the PATENTS file in the same directory. // #import "ASEnvironmentInternal.h" #import "ASAvailability.h" #import "ASObjectDescriptionHelpers.h" ASEnvironmentLayoutOptionsState ASEnvironmentLayoutOptionsStateMakeDefault() { return (ASEnvironmentLayoutOptionsState) { // Default values can be defined in here }; } ASEnvironmentHierarchyState ASEnvironmentHierarchyStateMakeDefault() { return (ASEnvironmentHierarchyState) { // Default values can be defined in here }; } ASEnvironmentTraitCollection ASEnvironmentTraitCollectionMakeDefault() { return (ASEnvironmentTraitCollection) { // Default values can be defined in here .userInterfaceIdiom = UIUserInterfaceIdiomUnspecified, .containerSize = CGSizeZero, }; } ASEnvironmentTraitCollection ASEnvironmentTraitCollectionFromUITraitCollection(UITraitCollection *traitCollection) { ASEnvironmentTraitCollection environmentTraitCollection = ASEnvironmentTraitCollectionMakeDefault(); if (AS_AT_LEAST_IOS8) { environmentTraitCollection.displayScale = traitCollection.displayScale; environmentTraitCollection.horizontalSizeClass = traitCollection.horizontalSizeClass; environmentTraitCollection.verticalSizeClass = traitCollection.verticalSizeClass; environmentTraitCollection.userInterfaceIdiom = traitCollection.userInterfaceIdiom; if (AS_AT_LEAST_IOS9) { environmentTraitCollection.forceTouchCapability = traitCollection.forceTouchCapability; } } return environmentTraitCollection; } BOOL ASEnvironmentTraitCollectionIsEqualToASEnvironmentTraitCollection(ASEnvironmentTraitCollection lhs, ASEnvironmentTraitCollection rhs) { return lhs.verticalSizeClass == rhs.verticalSizeClass && lhs.horizontalSizeClass == rhs.horizontalSizeClass && lhs.displayScale == rhs.displayScale && lhs.userInterfaceIdiom == rhs.userInterfaceIdiom && lhs.forceTouchCapability == rhs.forceTouchCapability && CGSizeEqualToSize(lhs.containerSize, rhs.containerSize); } // Named so as not to conflict with a hidden Apple function, in case compiler decides not to inline ASDISPLAYNODE_INLINE NSString *AS_NSStringFromUIUserInterfaceIdiom(UIUserInterfaceIdiom idiom) { switch (idiom) { case UIUserInterfaceIdiomTV: return @"TV"; case UIUserInterfaceIdiomPad: return @"Pad"; case UIUserInterfaceIdiomPhone: return @"Phone"; case UIUserInterfaceIdiomCarPlay: return @"CarPlay"; default: return @"Unspecified"; } } // Named so as not to conflict with a hidden Apple function, in case compiler decides not to inline ASDISPLAYNODE_INLINE NSString *AS_NSStringFromUIForceTouchCapability(UIForceTouchCapability capability) { switch (capability) { case UIForceTouchCapabilityAvailable: return @"Available"; case UIForceTouchCapabilityUnavailable: return @"Unavailable"; default: return @"Unknown"; } } // Named so as not to conflict with a hidden Apple function, in case compiler decides not to inline ASDISPLAYNODE_INLINE NSString *AS_NSStringFromUIUserInterfaceSizeClass(UIUserInterfaceSizeClass sizeClass) { switch (sizeClass) { case UIUserInterfaceSizeClassCompact: return @"Compact"; case UIUserInterfaceSizeClassRegular: return @"Regular"; default: return @"Unspecified"; } } NSString *NSStringFromASEnvironmentTraitCollection(ASEnvironmentTraitCollection traits) { NSMutableArray *props = [NSMutableArray array]; [props addObject:@{ @"userInterfaceIdiom": AS_NSStringFromUIUserInterfaceIdiom(traits.userInterfaceIdiom) }]; [props addObject:@{ @"containerSize": NSStringFromCGSize(traits.containerSize) }]; [props addObject:@{ @"horizontalSizeClass": AS_NSStringFromUIUserInterfaceSizeClass(traits.horizontalSizeClass) }]; [props addObject:@{ @"verticalSizeClass": AS_NSStringFromUIUserInterfaceSizeClass(traits.verticalSizeClass) }]; [props addObject:@{ @"forceTouchCapability": AS_NSStringFromUIForceTouchCapability(traits.forceTouchCapability) }]; return ASObjectDescriptionMakeWithoutObject(props); } ASEnvironmentState ASEnvironmentStateMakeDefault() { return (ASEnvironmentState) { .layoutOptionsState = ASEnvironmentLayoutOptionsStateMakeDefault(), .hierarchyState = ASEnvironmentHierarchyStateMakeDefault(), .environmentTraitCollection = ASEnvironmentTraitCollectionMakeDefault() }; }