RCTConversions.h 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. /*
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the
  5. * LICENSE file in the root directory of this source tree.
  6. */
  7. #import <UIKit/UIKit.h>
  8. #import <react/components/view/AccessibilityPrimitives.h>
  9. #import <react/components/view/primitives.h>
  10. #import <react/core/LayoutPrimitives.h>
  11. #import <react/graphics/Color.h>
  12. #import <react/graphics/Geometry.h>
  13. #import <react/graphics/Transform.h>
  14. NS_ASSUME_NONNULL_BEGIN
  15. inline NSString *RCTNSStringFromString(
  16. const std::string &string,
  17. const NSStringEncoding &encoding = NSUTF8StringEncoding)
  18. {
  19. return [NSString stringWithCString:string.c_str() encoding:encoding];
  20. }
  21. inline NSString *_Nullable RCTNSStringFromStringNilIfEmpty(
  22. const std::string &string,
  23. const NSStringEncoding &encoding = NSUTF8StringEncoding)
  24. {
  25. return string.empty() ? nil : RCTNSStringFromString(string, encoding);
  26. }
  27. inline std::string RCTStringFromNSString(NSString *string, const NSStringEncoding &encoding = NSUTF8StringEncoding)
  28. {
  29. return [string cStringUsingEncoding:encoding];
  30. }
  31. inline UIColor *_Nullable RCTUIColorFromSharedColor(const facebook::react::SharedColor &sharedColor)
  32. {
  33. return sharedColor ? [UIColor colorWithCGColor:sharedColor.get()] : nil;
  34. }
  35. inline CF_RETURNS_NOT_RETAINED CGColorRef
  36. RCTCGColorRefUnretainedFromSharedColor(const facebook::react::SharedColor &sharedColor)
  37. {
  38. return sharedColor ? sharedColor.get() : nil;
  39. }
  40. inline CF_RETURNS_RETAINED CGColorRef RCTCGColorRefFromSharedColor(const facebook::react::SharedColor &sharedColor)
  41. {
  42. return sharedColor ? CGColorCreateCopy(sharedColor.get()) : nil;
  43. }
  44. inline CGPoint RCTCGPointFromPoint(const facebook::react::Point &point)
  45. {
  46. return {point.x, point.y};
  47. }
  48. inline CGSize RCTCGSizeFromSize(const facebook::react::Size &size)
  49. {
  50. return {size.width, size.height};
  51. }
  52. inline CGRect RCTCGRectFromRect(const facebook::react::Rect &rect)
  53. {
  54. return {RCTCGPointFromPoint(rect.origin), RCTCGSizeFromSize(rect.size)};
  55. }
  56. inline UIEdgeInsets RCTUIEdgeInsetsFromEdgeInsets(const facebook::react::EdgeInsets &edgeInsets)
  57. {
  58. return {edgeInsets.top, edgeInsets.left, edgeInsets.bottom, edgeInsets.right};
  59. }
  60. inline UIAccessibilityTraits RCTUIAccessibilityTraitsFromAccessibilityTraits(
  61. facebook::react::AccessibilityTraits accessibilityTraits)
  62. {
  63. using AccessibilityTraits = facebook::react::AccessibilityTraits;
  64. UIAccessibilityTraits result = UIAccessibilityTraitNone;
  65. if ((accessibilityTraits & AccessibilityTraits::Button) != AccessibilityTraits::None) {
  66. result |= UIAccessibilityTraitButton;
  67. }
  68. if ((accessibilityTraits & AccessibilityTraits::Link) != AccessibilityTraits::None) {
  69. result |= UIAccessibilityTraitLink;
  70. }
  71. if ((accessibilityTraits & AccessibilityTraits::Image) != AccessibilityTraits::None) {
  72. result |= UIAccessibilityTraitImage;
  73. }
  74. if ((accessibilityTraits & AccessibilityTraits::Selected) != AccessibilityTraits::None) {
  75. result |= UIAccessibilityTraitSelected;
  76. }
  77. if ((accessibilityTraits & AccessibilityTraits::PlaysSound) != AccessibilityTraits::None) {
  78. result |= UIAccessibilityTraitPlaysSound;
  79. }
  80. if ((accessibilityTraits & AccessibilityTraits::KeyboardKey) != AccessibilityTraits::None) {
  81. result |= UIAccessibilityTraitKeyboardKey;
  82. }
  83. if ((accessibilityTraits & AccessibilityTraits::StaticText) != AccessibilityTraits::None) {
  84. result |= UIAccessibilityTraitStaticText;
  85. }
  86. if ((accessibilityTraits & AccessibilityTraits::SummaryElement) != AccessibilityTraits::None) {
  87. result |= UIAccessibilityTraitSummaryElement;
  88. }
  89. if ((accessibilityTraits & AccessibilityTraits::NotEnabled) != AccessibilityTraits::None) {
  90. result |= UIAccessibilityTraitNotEnabled;
  91. }
  92. if ((accessibilityTraits & AccessibilityTraits::UpdatesFrequently) != AccessibilityTraits::None) {
  93. result |= UIAccessibilityTraitUpdatesFrequently;
  94. }
  95. if ((accessibilityTraits & AccessibilityTraits::SearchField) != AccessibilityTraits::None) {
  96. result |= UIAccessibilityTraitSearchField;
  97. }
  98. if ((accessibilityTraits & AccessibilityTraits::StartsMediaSession) != AccessibilityTraits::None) {
  99. result |= UIAccessibilityTraitStartsMediaSession;
  100. }
  101. if ((accessibilityTraits & AccessibilityTraits::Adjustable) != AccessibilityTraits::None) {
  102. result |= UIAccessibilityTraitAdjustable;
  103. }
  104. if ((accessibilityTraits & AccessibilityTraits::AllowsDirectInteraction) != AccessibilityTraits::None) {
  105. result |= UIAccessibilityTraitAllowsDirectInteraction;
  106. }
  107. if ((accessibilityTraits & AccessibilityTraits::CausesPageTurn) != AccessibilityTraits::None) {
  108. result |= UIAccessibilityTraitCausesPageTurn;
  109. }
  110. if ((accessibilityTraits & AccessibilityTraits::Header) != AccessibilityTraits::None) {
  111. result |= UIAccessibilityTraitHeader;
  112. }
  113. return result;
  114. };
  115. inline CATransform3D RCTCATransform3DFromTransformMatrix(const facebook::react::Transform &transformMatrix)
  116. {
  117. return {(CGFloat)transformMatrix.matrix[0],
  118. (CGFloat)transformMatrix.matrix[1],
  119. (CGFloat)transformMatrix.matrix[2],
  120. (CGFloat)transformMatrix.matrix[3],
  121. (CGFloat)transformMatrix.matrix[4],
  122. (CGFloat)transformMatrix.matrix[5],
  123. (CGFloat)transformMatrix.matrix[6],
  124. (CGFloat)transformMatrix.matrix[7],
  125. (CGFloat)transformMatrix.matrix[8],
  126. (CGFloat)transformMatrix.matrix[9],
  127. (CGFloat)transformMatrix.matrix[10],
  128. (CGFloat)transformMatrix.matrix[11],
  129. (CGFloat)transformMatrix.matrix[12],
  130. (CGFloat)transformMatrix.matrix[13],
  131. (CGFloat)transformMatrix.matrix[14],
  132. (CGFloat)transformMatrix.matrix[15]};
  133. }
  134. inline facebook::react::Point RCTPointFromCGPoint(const CGPoint &point)
  135. {
  136. return {point.x, point.y};
  137. }
  138. inline facebook::react::Size RCTSizeFromCGSize(const CGSize &size)
  139. {
  140. return {size.width, size.height};
  141. }
  142. inline facebook::react::Rect RCTRectFromCGRect(const CGRect &rect)
  143. {
  144. return {RCTPointFromCGPoint(rect.origin), RCTSizeFromCGSize(rect.size)};
  145. }
  146. inline facebook::react::EdgeInsets RCTEdgeInsetsFromUIEdgeInsets(const UIEdgeInsets &edgeInsets)
  147. {
  148. return {edgeInsets.left, edgeInsets.top, edgeInsets.right, edgeInsets.bottom};
  149. }
  150. inline facebook::react::LayoutDirection RCTLayoutDirection(BOOL isRTL)
  151. {
  152. return isRTL ? facebook::react::LayoutDirection::RightToLeft : facebook::react::LayoutDirection::LeftToRight;
  153. }
  154. NS_ASSUME_NONNULL_END