FLEXColor.m 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  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. @implementation UIView (darkMode)
  11. #pragma clang diagnostic push
  12. #pragma clang diagnostic ignored "-Wunguarded-availability-new"
  13. #pragma clang diagnostic ignored "-Wunguarded-availability"
  14. - (BOOL)darkMode {
  15. if ([[self traitCollection] respondsToSelector:@selector(userInterfaceStyle)]){
  16. return ([[self traitCollection] userInterfaceStyle] == UIUserInterfaceStyleDark);
  17. } else {
  18. return false;
  19. }
  20. return false;
  21. }
  22. #pragma clang diagnostic pop
  23. @end
  24. #if FLEX_AT_LEAST_IOS13_SDK
  25. #define FLEXDynamicColor(dynamic, static) ({ \
  26. UIColor *c; \
  27. if (@available(iOS 13.0, *)) { \
  28. c = [UIColor dynamic]; \
  29. } else { \
  30. c = [UIColor static]; \
  31. } \
  32. c; \
  33. });
  34. #else
  35. #define FLEXDynamicColor(dynamic, static) [UIColor static]
  36. #endif
  37. @implementation FLEXColor
  38. #pragma mark - Background Colors
  39. + (UIColor *)primaryBackgroundColor {
  40. return FLEXDynamicColor(systemBackgroundColor, whiteColor);
  41. }
  42. + (UIColor *)primaryBackgroundColorWithAlpha:(CGFloat)alpha {
  43. return [[self primaryBackgroundColor] colorWithAlphaComponent:alpha];
  44. }
  45. + (UIColor *)secondaryBackgroundColor {
  46. return FLEXDynamicColor(
  47. secondarySystemBackgroundColor,
  48. colorWithHue:2.0/3.0 saturation:0.02 brightness:0.97 alpha:1
  49. );
  50. }
  51. + (UIColor *)secondaryBackgroundColorWithAlpha:(CGFloat)alpha {
  52. return [[self secondaryBackgroundColor] colorWithAlphaComponent:alpha];
  53. }
  54. + (UIColor *)tertiaryBackgroundColor {
  55. // All the background/fill colors are varying shades
  56. // of white and black with really low alpha levels.
  57. // We use systemGray4Color instead to avoid alpha issues.
  58. return FLEXDynamicColor(systemGray4Color, lightGrayColor);
  59. }
  60. + (UIColor *)tertiaryBackgroundColorWithAlpha:(CGFloat)alpha {
  61. return [[self tertiaryBackgroundColor] colorWithAlphaComponent:alpha];
  62. }
  63. + (UIColor *)groupedBackgroundColor {
  64. return FLEXDynamicColor(
  65. systemGroupedBackgroundColor,
  66. colorWithHue:2.0/3.0 saturation:0.02 brightness:0.97 alpha:1
  67. );
  68. }
  69. + (UIColor *)groupedBackgroundColorWithAlpha:(CGFloat)alpha {
  70. return [[self groupedBackgroundColor] colorWithAlphaComponent:alpha];
  71. }
  72. + (UIColor *)secondaryGroupedBackgroundColor {
  73. return FLEXDynamicColor(secondarySystemGroupedBackgroundColor, whiteColor);
  74. }
  75. + (UIColor *)secondaryGroupedBackgroundColorWithAlpha:(CGFloat)alpha {
  76. return [[self secondaryGroupedBackgroundColor] colorWithAlphaComponent:alpha];
  77. }
  78. #pragma mark - Text colors
  79. + (UIColor *)primaryTextColor {
  80. return FLEXDynamicColor(labelColor, blackColor);
  81. }
  82. + (UIColor *)deemphasizedTextColor {
  83. return FLEXDynamicColor(secondaryLabelColor, lightGrayColor);
  84. }
  85. #pragma mark - UI Element Colors
  86. + (UIColor *)tintColor {
  87. #if FLEX_AT_LEAST_IOS13_SDK
  88. if (@available(iOS 13.0, *)) {
  89. return UIColor.systemBlueColor;
  90. } else {
  91. return UIApplication.sharedApplication.keyWindow.tintColor;
  92. }
  93. #else
  94. return UIApplication.sharedApplication.keyWindow.tintColor;
  95. #endif
  96. }
  97. + (UIColor *)scrollViewBackgroundColor {
  98. return FLEXDynamicColor(
  99. systemGroupedBackgroundColor,
  100. colorWithHue:2.0/3.0 saturation:0.02 brightness:0.95 alpha:1
  101. );
  102. }
  103. + (UIColor *)iconColor {
  104. return FLEXDynamicColor(labelColor, blackColor);
  105. }
  106. + (UIColor *)borderColor {
  107. return [self primaryBackgroundColor];
  108. }
  109. + (UIColor *)toolbarItemHighlightedColor {
  110. return FLEXDynamicColor(
  111. quaternaryLabelColor,
  112. colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.6
  113. );
  114. }
  115. + (UIColor *)toolbarItemSelectedColor {
  116. return FLEXDynamicColor(
  117. secondaryLabelColor,
  118. colorWithHue:2.0/3.0 saturation:0.1 brightness:0.25 alpha:0.68
  119. );
  120. }
  121. + (UIColor *)hairlineColor {
  122. return FLEXDynamicColor(systemGray3Color, colorWithWhite:0.75 alpha:1);
  123. }
  124. + (UIColor *)destructiveColor {
  125. return FLEXDynamicColor(systemRedColor, redColor);
  126. }
  127. @end