123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153 |
- //
- // 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 <UIKit/UIInterface.h>
- /**
-
- tvOS notes: alot of these properties are marked as unavailable on tvOS, not only is that a bald faced lie, but without using these values the UI gets completely screwy!
- i initially tried to do some creative macro undef/redef but that didnt work, so going to use good ole KVC, valueForKey: works on class methods as well! and this will work
- perfectly without needing to patch another SDK file for this to build for tvOS
-
- */
- #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(valueForKey:@"systemBackgroundColor", whiteColor);
- }
- + (UIColor *)primaryBackgroundColorWithAlpha:(CGFloat)alpha {
- return [[self primaryBackgroundColor] colorWithAlphaComponent:alpha];
- }
- + (UIColor *)secondaryBackgroundColor {
- return FLEXDynamicColor(
- valueForKey:@"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(valueForKey:@"systemGray4Color", lightGrayColor);
- }
- + (UIColor *)tertiaryBackgroundColorWithAlpha:(CGFloat)alpha {
- return [[self tertiaryBackgroundColor] colorWithAlphaComponent:alpha];
- }
- + (UIColor *)groupedBackgroundColor {
- return FLEXDynamicColor(
- valueForKey:@"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(valueForKey:@"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(valueForKey:@"secondaryLabelColor", lightGrayColor);
- }
- #pragma mark - UI Element Colors
- + (UIColor *)tintColor {
- #if FLEX_AT_LEAST_IOS13_SDK
- if (@available(iOS 13.0, *)) {
- return [UIColor valueForKey:@"systemBlueColor"];
- } else {
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- return UIApplication.sharedApplication.keyWindow.tintColor;
- #pragma clang diagnostic pop
- }
- #else
- return UIApplication.sharedApplication.keyWindow.tintColor;
- #endif
- }
- + (UIColor *)scrollViewBackgroundColor {
- return FLEXDynamicColor(
- valueForKey:@"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(
- valueForKey:@"quaternaryLabelColor",
- colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.6
- );
- }
- + (UIColor *)toolbarItemSelectedColor {
- return FLEXDynamicColor(
- valueForKey:@"secondaryLabelColor",
- colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.68
- );
- }
- + (UIColor *)hairlineColor {
- return FLEXDynamicColor(valueForKey:@"systemGray3Color", colorWithWhite:0.75 alpha:1);
- }
- + (UIColor *)destructiveColor {
- return FLEXDynamicColor(valueForKey:@"systemRedColor", redColor);
- }
- @end
|