2019-10-08 14:23:57 -07:00
|
|
|
/*
|
2021-12-30 15:08:43 -08:00
|
|
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
2019-10-08 14:23:57 -07:00
|
|
|
*
|
2019-10-15 10:30:08 -07:00
|
|
|
* This source code is licensed under the MIT license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree.
|
2019-10-08 14:23:57 -07:00
|
|
|
*/
|
2019-10-15 10:30:08 -07:00
|
|
|
|
2023-05-02 18:08:58 -07:00
|
|
|
#include <yoga/Yoga.h>
|
|
|
|
|
2019-10-08 17:48:32 -07:00
|
|
|
const short int LAYOUT_EDGE_SET_FLAG_INDEX = 0;
|
|
|
|
const short int LAYOUT_WIDTH_INDEX = 1;
|
|
|
|
const short int LAYOUT_HEIGHT_INDEX = 2;
|
|
|
|
const short int LAYOUT_LEFT_INDEX = 3;
|
|
|
|
const short int LAYOUT_TOP_INDEX = 4;
|
|
|
|
const short int LAYOUT_DIRECTION_INDEX = 5;
|
|
|
|
const short int LAYOUT_MARGIN_START_INDEX = 6;
|
|
|
|
const short int LAYOUT_PADDING_START_INDEX = 10;
|
|
|
|
const short int LAYOUT_BORDER_START_INDEX = 14;
|
|
|
|
|
2019-10-08 14:23:57 -07:00
|
|
|
namespace {
|
|
|
|
|
2019-10-08 17:48:32 -07:00
|
|
|
const int HAS_NEW_LAYOUT = 16;
|
|
|
|
|
2019-10-08 14:23:57 -07:00
|
|
|
union YGNodeContext {
|
2023-09-06 08:16:42 -07:00
|
|
|
int32_t edgesSet = 0;
|
2019-10-08 14:23:57 -07:00
|
|
|
void* asVoidPtr;
|
|
|
|
};
|
|
|
|
|
|
|
|
class YGNodeEdges {
|
2023-09-06 08:16:42 -07:00
|
|
|
int32_t edges_;
|
2019-10-08 14:23:57 -07:00
|
|
|
|
2023-09-13 20:12:55 -07:00
|
|
|
public:
|
2019-10-08 14:23:57 -07:00
|
|
|
enum Edge {
|
|
|
|
MARGIN = 1,
|
|
|
|
PADDING = 2,
|
|
|
|
BORDER = 4,
|
|
|
|
};
|
|
|
|
|
2024-03-04 02:28:02 -08:00
|
|
|
explicit YGNodeEdges(YGNodeRef node) {
|
2019-10-08 14:23:57 -07:00
|
|
|
auto context = YGNodeContext{};
|
2023-05-02 18:08:58 -07:00
|
|
|
context.asVoidPtr = YGNodeGetContext(node);
|
2019-10-08 14:23:57 -07:00
|
|
|
edges_ = context.edgesSet;
|
|
|
|
}
|
|
|
|
|
|
|
|
void setOn(YGNodeRef node) {
|
|
|
|
auto context = YGNodeContext{};
|
|
|
|
context.edgesSet = edges_;
|
2023-05-02 18:08:58 -07:00
|
|
|
YGNodeSetContext(node, context.asVoidPtr);
|
2019-10-08 14:23:57 -07:00
|
|
|
}
|
|
|
|
|
2023-09-13 20:12:55 -07:00
|
|
|
bool has(Edge edge) {
|
|
|
|
return (edges_ & edge) == edge;
|
|
|
|
}
|
2019-10-08 14:23:57 -07:00
|
|
|
|
|
|
|
YGNodeEdges& add(Edge edge) {
|
|
|
|
edges_ |= edge;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2023-09-13 20:12:55 -07:00
|
|
|
int get() {
|
|
|
|
return edges_;
|
|
|
|
}
|
2019-10-08 14:23:57 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
struct YogaValue {
|
|
|
|
static constexpr jint NAN_BYTES = 0x7fc00000;
|
|
|
|
|
|
|
|
static jlong asJavaLong(const YGValue& value) {
|
|
|
|
uint32_t valueBytes = 0;
|
|
|
|
memcpy(&valueBytes, &value.value, sizeof valueBytes);
|
2023-09-13 20:12:55 -07:00
|
|
|
return ((jlong)value.unit) << 32 | valueBytes;
|
2019-10-08 14:23:57 -07:00
|
|
|
}
|
|
|
|
constexpr static jlong undefinedAsJavaLong() {
|
2023-09-13 20:12:55 -07:00
|
|
|
return ((jlong)YGUnitUndefined) << 32 | NAN_BYTES;
|
2019-10-08 14:23:57 -07:00
|
|
|
}
|
|
|
|
};
|
|
|
|
} // namespace
|