Summary: X-link: https://github.com/facebook/react-native/pull/46984 Pull Request resolved: https://github.com/facebook/yoga/pull/1725 The legacy (wrong) absolute positioning path positions in two places, including work that is definitely always overwritten in the new absolute layout path. This came up before for position: static, but we didn't clean this up at the time. This code is also now leading display: contents impl being more annoying. This diff tries to converge to the more spec correct implementation of positioning here, that also only happens in one place. Previous path would potentially also incorrectly justify when `justify-content` was non-default, but not handled in the previous few cases? We don't have access to the flexLine at this point later, and apart from the existing tests now passing I reused the new correct logic for justification (spec says we should position child as if its the only child in the container https://www.w3.org/TR/css-flexbox-1/#abspos-items). I added a new, more scoped errata `AbsolutePositionWithoutInsetsExcludesPadding` to preserve some of the legacy behavior that showed as very breaking. I also did not try removing `AbsolutePercentAgainstInnerSize` which I suspect would be more breaking than this change. Changelog: [General][Breaking] - More spec compliant absolute positioning Reviewed By: joevilches Differential Revision: D64244949 fbshipit-source-id: ca97570e0de82e8f0424a0912adfd0b05254559e
42 lines
1.0 KiB
Java
42 lines
1.0 KiB
Java
/*
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
// @generated by enums.py
|
|
|
|
package com.facebook.yoga;
|
|
|
|
public enum YogaErrata {
|
|
NONE(0),
|
|
STRETCH_FLEX_BASIS(1),
|
|
ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING(2),
|
|
ABSOLUTE_PERCENT_AGAINST_INNER_SIZE(4),
|
|
ALL(2147483647),
|
|
CLASSIC(2147483646);
|
|
|
|
private final int mIntValue;
|
|
|
|
YogaErrata(int intValue) {
|
|
mIntValue = intValue;
|
|
}
|
|
|
|
public int intValue() {
|
|
return mIntValue;
|
|
}
|
|
|
|
public static YogaErrata fromInt(int value) {
|
|
switch (value) {
|
|
case 0: return NONE;
|
|
case 1: return STRETCH_FLEX_BASIS;
|
|
case 2: return ABSOLUTE_POSITION_WITHOUT_INSETS_EXCLUDES_PADDING;
|
|
case 4: return ABSOLUTE_PERCENT_AGAINST_INNER_SIZE;
|
|
case 2147483647: return ALL;
|
|
case 2147483646: return CLASSIC;
|
|
default: throw new IllegalArgumentException("Unknown enum value: " + value);
|
|
}
|
|
}
|
|
}
|