YGStyle.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. /**
  2. * Copyright (c) Facebook, Inc. and its affiliates.
  3. *
  4. * This source code is licensed under the MIT license found in the LICENSE
  5. * file in the root directory of this source tree.
  6. */
  7. #pragma once
  8. #include <algorithm>
  9. #include <array>
  10. #include <initializer_list>
  11. #include "CompactValue.h"
  12. #include "YGEnums.h"
  13. #include "YGFloatOptional.h"
  14. #include "Yoga-internal.h"
  15. #include "Yoga.h"
  16. #if !defined(ENUM_BITFIELDS_NOT_SUPPORTED)
  17. #define BITFIELD_ENUM_SIZED(num) : num
  18. #else
  19. #define BITFIELD_ENUM_SIZED(num)
  20. #endif
  21. struct YGStyle {
  22. private:
  23. using CompactValue = facebook::yoga::detail::CompactValue;
  24. public:
  25. using Dimensions = facebook::yoga::detail::Values<2>;
  26. using Edges =
  27. facebook::yoga::detail::Values<facebook::yoga::enums::count<YGEdge>()>;
  28. /* Some platforms don't support enum bitfields,
  29. so please use BITFIELD_ENUM_SIZED(BITS_COUNT) */
  30. YGDirection direction BITFIELD_ENUM_SIZED(2);
  31. YGFlexDirection flexDirection BITFIELD_ENUM_SIZED(2);
  32. YGJustify justifyContent BITFIELD_ENUM_SIZED(3);
  33. YGAlign alignContent BITFIELD_ENUM_SIZED(3);
  34. YGAlign alignItems BITFIELD_ENUM_SIZED(3);
  35. YGAlign alignSelf BITFIELD_ENUM_SIZED(3);
  36. YGPositionType positionType BITFIELD_ENUM_SIZED(1);
  37. YGWrap flexWrap BITFIELD_ENUM_SIZED(2);
  38. YGOverflow overflow BITFIELD_ENUM_SIZED(2);
  39. YGDisplay display BITFIELD_ENUM_SIZED(1);
  40. YGFloatOptional flex = {};
  41. YGFloatOptional flexGrow = {};
  42. YGFloatOptional flexShrink = {};
  43. CompactValue flexBasis = CompactValue::ofAuto();
  44. Edges margin = {};
  45. Edges position = {};
  46. Edges padding = {};
  47. Edges border = {};
  48. Dimensions dimensions{CompactValue::ofAuto()};
  49. Dimensions minDimensions = {};
  50. Dimensions maxDimensions = {};
  51. // Yoga specific properties, not compatible with flexbox specification
  52. YGFloatOptional aspectRatio = {};
  53. YGStyle()
  54. : direction(YGDirectionInherit),
  55. flexDirection(YGFlexDirectionColumn),
  56. justifyContent(YGJustifyFlexStart),
  57. alignContent(YGAlignFlexStart),
  58. alignItems(YGAlignStretch),
  59. alignSelf(YGAlignAuto),
  60. positionType(YGPositionTypeRelative),
  61. flexWrap(YGWrapNoWrap),
  62. overflow(YGOverflowVisible),
  63. display(YGDisplayFlex) {}
  64. ~YGStyle() = default;
  65. };
  66. bool operator==(const YGStyle& lhs, const YGStyle& rhs);
  67. inline bool operator!=(const YGStyle& lhs, const YGStyle& rhs) {
  68. return !(lhs == rhs);
  69. }