FLEXColor.m 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. //
  2. // FLEXColor.m
  3. // FLEX
  4. //
  5. // Created by Benny Wong on 6/18/19.
  6. // Copyright © 2020 FLEX Team. All rights reserved.
  7. //
  8. #import "FLEXColor.h"
  9. #import "FLEXUtility.h"
  10. #import <UIKit/UIInterface.h>
  11. /**
  12. 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
  13. on tvOS and if we don't use them the UI gets comlpetely out of whack.
  14. */
  15. #undef API_UNAVAILABLE
  16. #define API_UNAVAILABLE(...) API_AVAILABLE(...)
  17. #if FLEX_AT_LEAST_IOS13_SDK
  18. #define FLEXDynamicColor(dynamic, static) ({ \
  19. UIColor *c; \
  20. if (@available(iOS 13.0, *)) { \
  21. c = [UIColor dynamic]; \
  22. } else { \
  23. c = [UIColor static]; \
  24. } \
  25. c; \
  26. });
  27. #else
  28. #define FLEXDynamicColor(dynamic, static) [UIColor static]
  29. #endif
  30. @implementation FLEXColor
  31. #pragma mark - Background Colors
  32. + (UIColor *)primaryBackgroundColor {
  33. return FLEXDynamicColor(systemBackgroundColor, whiteColor);
  34. }
  35. + (UIColor *)primaryBackgroundColorWithAlpha:(CGFloat)alpha {
  36. return [[self primaryBackgroundColor] colorWithAlphaComponent:alpha];
  37. }
  38. + (UIColor *)secondaryBackgroundColor {
  39. return FLEXDynamicColor(
  40. secondarySystemBackgroundColor,
  41. colorWithHue:2.0/3.0 saturation:0.02 brightness:0.97 alpha:1
  42. );
  43. }
  44. + (UIColor *)secondaryBackgroundColorWithAlpha:(CGFloat)alpha {
  45. return [[self secondaryBackgroundColor] colorWithAlphaComponent:alpha];
  46. }
  47. + (UIColor *)tertiaryBackgroundColor {
  48. // All the background/fill colors are varying shades
  49. // of white and black with really low alpha levels.
  50. // We use systemGray4Color instead to avoid alpha issues.
  51. return FLEXDynamicColor(systemGray4Color, lightGrayColor);
  52. }
  53. + (UIColor *)tertiaryBackgroundColorWithAlpha:(CGFloat)alpha {
  54. return [[self tertiaryBackgroundColor] colorWithAlphaComponent:alpha];
  55. }
  56. + (UIColor *)groupedBackgroundColor {
  57. return FLEXDynamicColor(
  58. systemGroupedBackgroundColor,
  59. colorWithHue:2.0/3.0 saturation:0.02 brightness:0.97 alpha:1
  60. );
  61. }
  62. + (UIColor *)groupedBackgroundColorWithAlpha:(CGFloat)alpha {
  63. return [[self groupedBackgroundColor] colorWithAlphaComponent:alpha];
  64. }
  65. + (UIColor *)secondaryGroupedBackgroundColor {
  66. return FLEXDynamicColor(secondarySystemGroupedBackgroundColor, whiteColor);
  67. }
  68. + (UIColor *)secondaryGroupedBackgroundColorWithAlpha:(CGFloat)alpha {
  69. return [[self secondaryGroupedBackgroundColor] colorWithAlphaComponent:alpha];
  70. }
  71. #pragma mark - Text colors
  72. + (UIColor *)primaryTextColor {
  73. return FLEXDynamicColor(labelColor, blackColor);
  74. }
  75. + (UIColor *)deemphasizedTextColor {
  76. return FLEXDynamicColor(secondaryLabelColor, lightGrayColor);
  77. }
  78. #pragma mark - UI Element Colors
  79. + (UIColor *)tintColor {
  80. #if FLEX_AT_LEAST_IOS13_SDK
  81. if (@available(iOS 13.0, *)) {
  82. return UIColor.systemBlueColor;
  83. } else {
  84. return UIApplication.sharedApplication.keyWindow.tintColor;
  85. }
  86. #else
  87. return UIApplication.sharedApplication.keyWindow.tintColor;
  88. #endif
  89. }
  90. + (UIColor *)scrollViewBackgroundColor {
  91. return FLEXDynamicColor(
  92. systemGroupedBackgroundColor,
  93. colorWithHue:2.0/3.0 saturation:0.02 brightness:0.95 alpha:1
  94. );
  95. }
  96. + (UIColor *)iconColor {
  97. return FLEXDynamicColor(labelColor, blackColor);
  98. }
  99. + (UIColor *)borderColor {
  100. return [self primaryBackgroundColor];
  101. }
  102. + (UIColor *)toolbarItemHighlightedColor {
  103. return FLEXDynamicColor(
  104. quaternaryLabelColor,
  105. colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.6
  106. );
  107. }
  108. + (UIColor *)toolbarItemSelectedColor {
  109. return FLEXDynamicColor(
  110. secondaryLabelColor,
  111. colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.68
  112. );
  113. }
  114. + (UIColor *)hairlineColor {
  115. return FLEXDynamicColor(systemGray3Color, colorWithWhite:0.75 alpha:1);
  116. }
  117. + (UIColor *)destructiveColor {
  118. return FLEXDynamicColor(systemRedColor, redColor);
  119. }
  120. @end