FLEXColor.m 3.4 KB

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