123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- /*
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
- #pragma once
- #include "BitUtils.h"
- #include "YGFloatOptional.h"
- #include "Yoga-internal.h"
- using namespace facebook::yoga;
- struct YGLayout {
- std::array<float, 4> position = {};
- std::array<float, 2> dimensions = {{YGUndefined, YGUndefined}};
- std::array<float, 4> margin = {};
- std::array<float, 4> border = {};
- std::array<float, 4> padding = {};
- private:
- static constexpr size_t directionOffset = 0;
- static constexpr size_t didUseLegacyFlagOffset =
- directionOffset + facebook::yoga::detail::bitWidthFn<YGDirection>();
- static constexpr size_t doesLegacyStretchFlagAffectsLayoutOffset =
- didUseLegacyFlagOffset + 1;
- static constexpr size_t hadOverflowOffset =
- doesLegacyStretchFlagAffectsLayoutOffset + 1;
- uint8_t flags = 0;
- public:
- uint32_t computedFlexBasisGeneration = 0;
- YGFloatOptional computedFlexBasis = {};
- // Instead of recomputing the entire layout every single time, we cache some
- // information to break early when nothing changed
- uint32_t generationCount = 0;
- YGDirection lastOwnerDirection = (YGDirection) -1;
- uint32_t nextCachedMeasurementsIndex = 0;
- std::array<YGCachedMeasurement, YG_MAX_CACHED_RESULT_COUNT>
- cachedMeasurements = {};
- std::array<float, 2> measuredDimensions = {{YGUndefined, YGUndefined}};
- YGCachedMeasurement cachedLayout = YGCachedMeasurement();
- YGDirection direction() const {
- return facebook::yoga::detail::getEnumData<YGDirection>(
- flags, directionOffset);
- }
- void setDirection(YGDirection direction) {
- facebook::yoga::detail::setEnumData<YGDirection>(
- flags, directionOffset, direction);
- }
- bool didUseLegacyFlag() const {
- return facebook::yoga::detail::getBooleanData(
- flags, didUseLegacyFlagOffset);
- }
- void setDidUseLegacyFlag(bool val) {
- facebook::yoga::detail::setBooleanData(flags, didUseLegacyFlagOffset, val);
- }
- bool doesLegacyStretchFlagAffectsLayout() const {
- return facebook::yoga::detail::getBooleanData(
- flags, doesLegacyStretchFlagAffectsLayoutOffset);
- }
- void setDoesLegacyStretchFlagAffectsLayout(bool val) {
- facebook::yoga::detail::setBooleanData(
- flags, doesLegacyStretchFlagAffectsLayoutOffset, val);
- }
- bool hadOverflow() const {
- return facebook::yoga::detail::getBooleanData(flags, hadOverflowOffset);
- }
- void setHadOverflow(bool hadOverflow) {
- facebook::yoga::detail::setBooleanData(
- flags, hadOverflowOffset, hadOverflow);
- }
- bool operator==(YGLayout layout) const;
- bool operator!=(YGLayout layout) const { return !(*this == layout); }
- };
|