Modify private apis to set, store, and get intrinsic sizing keywords (#1721)
Summary: Pull Request resolved: https://github.com/facebook/yoga/pull/1721 X-link: https://github.com/facebook/react-native/pull/46938 The private internals of how we store styles needed to change a bit to support 3 new keyword values. Right now the only other keyword that can be stored is `auto`. As a result there isn't much fancy logic to support storing this and its just stored as a specific type inside of `StyleValueHandle`. There are only 3 bits for types (8 values), so it is not sustainable to just stuff every keyword in there. So the change writes the keyword as a value with a new `keyword` `Type`. I chose not to put `auto` in there even though it is a keyword since it is a hot path, I did not want to regress perf when I did not need to. I also make a new `StyleSizeValue` class to store size values - so values for `width`, `height`, etc. This way these new keywords are kept specific to sizes and we will not be able to create, for example, a margin: `max-content`. Changelog: [Internal] Reviewed By: NickGerleman Differential Revision: D63927512 fbshipit-source-id: 7285469d37ac4b05226183b56275c77f0c06996c
This commit is contained in:
committed by
Facebook GitHub Bot
parent
6fed4dfe30
commit
f52ec78584
@@ -128,4 +128,19 @@ TEST(StyleValuePool, store_undefined_after_large_int) {
|
||||
EXPECT_EQ(pool.getLength(handle), StyleLength::undefined());
|
||||
}
|
||||
|
||||
TEST(StyleValuePool, store_keywords) {
|
||||
StyleValuePool pool;
|
||||
StyleValueHandle handleMaxContent;
|
||||
StyleValueHandle handleFitContent;
|
||||
StyleValueHandle handleStretch;
|
||||
|
||||
pool.store(handleMaxContent, StyleSizeLength::ofMaxContent());
|
||||
pool.store(handleFitContent, StyleSizeLength::ofFitContent());
|
||||
pool.store(handleStretch, StyleSizeLength::ofStretch());
|
||||
|
||||
EXPECT_EQ(pool.getSize(handleMaxContent), StyleSizeLength::ofMaxContent());
|
||||
EXPECT_EQ(pool.getSize(handleFitContent), StyleSizeLength::ofFitContent());
|
||||
EXPECT_EQ(pool.getSize(handleStretch), StyleSizeLength::ofStretch());
|
||||
}
|
||||
|
||||
} // namespace facebook::yoga
|
||||
|
Reference in New Issue
Block a user