// // FLEXColor.m // FLEX // // Created by Benny Wong on 6/18/19. // Copyright © 2020 FLEX Team. All rights reserved. // #import "FLEXColor.h" #import "FLEXUtility.h" #import /** A note about tvOS Support: i tried to briefly undefine the API_UNAVAILABLE macro in an attempt to avoid the need to patch the SDK to get this working, this properties are actually available on tvOS and if we don't use them the UI gets comlpetely out of whack. */ #undef API_UNAVAILABLE #define API_UNAVAILABLE(...) API_AVAILABLE(...) #if FLEX_AT_LEAST_IOS13_SDK #define FLEXDynamicColor(dynamic, static) ({ \ UIColor *c; \ if (@available(iOS 13.0, *)) { \ c = [UIColor dynamic]; \ } else { \ c = [UIColor static]; \ } \ c; \ }); #else #define FLEXDynamicColor(dynamic, static) [UIColor static] #endif @implementation FLEXColor #pragma mark - Background Colors + (UIColor *)primaryBackgroundColor { return FLEXDynamicColor(systemBackgroundColor, whiteColor); } + (UIColor *)primaryBackgroundColorWithAlpha:(CGFloat)alpha { return [[self primaryBackgroundColor] colorWithAlphaComponent:alpha]; } + (UIColor *)secondaryBackgroundColor { return FLEXDynamicColor( secondarySystemBackgroundColor, colorWithHue:2.0/3.0 saturation:0.02 brightness:0.97 alpha:1 ); } + (UIColor *)secondaryBackgroundColorWithAlpha:(CGFloat)alpha { return [[self secondaryBackgroundColor] colorWithAlphaComponent:alpha]; } + (UIColor *)tertiaryBackgroundColor { // All the background/fill colors are varying shades // of white and black with really low alpha levels. // We use systemGray4Color instead to avoid alpha issues. return FLEXDynamicColor(systemGray4Color, lightGrayColor); } + (UIColor *)tertiaryBackgroundColorWithAlpha:(CGFloat)alpha { return [[self tertiaryBackgroundColor] colorWithAlphaComponent:alpha]; } + (UIColor *)groupedBackgroundColor { return FLEXDynamicColor( systemGroupedBackgroundColor, colorWithHue:2.0/3.0 saturation:0.02 brightness:0.97 alpha:1 ); } + (UIColor *)groupedBackgroundColorWithAlpha:(CGFloat)alpha { return [[self groupedBackgroundColor] colorWithAlphaComponent:alpha]; } + (UIColor *)secondaryGroupedBackgroundColor { return FLEXDynamicColor(secondarySystemGroupedBackgroundColor, whiteColor); } + (UIColor *)secondaryGroupedBackgroundColorWithAlpha:(CGFloat)alpha { return [[self secondaryGroupedBackgroundColor] colorWithAlphaComponent:alpha]; } #pragma mark - Text colors + (UIColor *)primaryTextColor { return FLEXDynamicColor(labelColor, blackColor); } + (UIColor *)deemphasizedTextColor { return FLEXDynamicColor(secondaryLabelColor, lightGrayColor); } #pragma mark - UI Element Colors + (UIColor *)tintColor { #if FLEX_AT_LEAST_IOS13_SDK if (@available(iOS 13.0, *)) { return UIColor.systemBlueColor; } else { return UIApplication.sharedApplication.keyWindow.tintColor; } #else return UIApplication.sharedApplication.keyWindow.tintColor; #endif } + (UIColor *)scrollViewBackgroundColor { return FLEXDynamicColor( systemGroupedBackgroundColor, colorWithHue:2.0/3.0 saturation:0.02 brightness:0.95 alpha:1 ); } + (UIColor *)iconColor { return FLEXDynamicColor(labelColor, blackColor); } + (UIColor *)borderColor { return [self primaryBackgroundColor]; } + (UIColor *)toolbarItemHighlightedColor { return FLEXDynamicColor( quaternaryLabelColor, colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.6 ); } + (UIColor *)toolbarItemSelectedColor { return FLEXDynamicColor( secondaryLabelColor, colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.68 ); } + (UIColor *)hairlineColor { return FLEXDynamicColor(systemGray3Color, colorWithWhite:0.75 alpha:1); } + (UIColor *)destructiveColor { return FLEXDynamicColor(systemRedColor, redColor); } @end