Marker for baseline callbacks
Summary: @public Wraps baseline callbacks with a marker. Reviewed By: SidharthGuglani Differential Revision: D13896861 fbshipit-source-id: 848ec697977a0a68b9943f1159f6562d54724f89
This commit is contained in:
committed by
Facebook Github Bot
parent
0d026bd1a0
commit
5121fef5d8
@@ -211,6 +211,21 @@ TEST_F(MarkerTest, measure_functions_get_wrapped) {
|
||||
<< "have " << markerCookies.size() << " recorded markers";
|
||||
}
|
||||
|
||||
TEST_F(MarkerTest, baseline_functions_get_wrapped) {
|
||||
auto root = makeNode();
|
||||
auto child = addChild(root);
|
||||
YGNodeSetBaselineFunc(
|
||||
child.get(), [](YGNodeRef, float, float) { return 0.0f; });
|
||||
YGNodeStyleSetFlexDirection(root.get(), YGFlexDirectionRow);
|
||||
YGNodeStyleSetAlignItems(root.get(), YGAlignBaseline);
|
||||
|
||||
calculateLayout(root);
|
||||
auto& markerCookie = findLastMarker(YGMarkerBaselineFn);
|
||||
|
||||
ASSERT_EQ(markerCookie.start.marker, YGMarkerBaselineFn)
|
||||
<< "have " << markerCookies.size() << " recorded markers";
|
||||
}
|
||||
|
||||
void* MarkerTest::startMarker(
|
||||
YGMarker marker,
|
||||
YGNodeRef node,
|
||||
@@ -233,6 +248,7 @@ void MarkerTest::endMarker(
|
||||
cookie->end.markerData.layout = *marker::data<YGMarkerLayout>(data);
|
||||
break;
|
||||
case YGMarkerMeasure:
|
||||
case YGMarkerBaselineFn:
|
||||
break;
|
||||
};
|
||||
}
|
||||
@@ -263,6 +279,8 @@ const char* markerTypeName(YGMarker type) {
|
||||
return "YGMarkerLayout";
|
||||
case YGMarkerMeasure:
|
||||
return "YGMarkerMeasure";
|
||||
case YGMarkerBaselineFn:
|
||||
return "YGMarkerBaselineFn";
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -16,6 +16,7 @@ typedef struct YGConfig* YGConfigRef;
|
||||
typedef YG_ENUM_BEGIN(YGMarker){
|
||||
YGMarkerLayout,
|
||||
YGMarkerMeasure,
|
||||
YGMarkerBaselineFn,
|
||||
} YG_ENUM_END(YGMarker);
|
||||
|
||||
typedef struct {
|
||||
@@ -66,14 +67,19 @@ struct MarkerData<YGMarkerLayout> {
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct MarkerData<YGMarkerMeasure> {
|
||||
struct NoMarkerData {
|
||||
using type = YGMarkerNoData;
|
||||
static type*& get(YGMarkerData& d) {
|
||||
return d.noData;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct MarkerData<YGMarkerMeasure> : NoMarkerData {};
|
||||
|
||||
template <>
|
||||
struct MarkerData<YGMarkerBaselineFn> : NoMarkerData {};
|
||||
|
||||
} // namespace detail
|
||||
|
||||
template <YGMarker M>
|
||||
|
@@ -1074,7 +1074,9 @@ static inline YGAlign YGNodeAlignItem(
|
||||
|
||||
static float YGBaseline(const YGNodeRef node) {
|
||||
if (node->getBaseline() != nullptr) {
|
||||
const float baseline = node->getBaseline()(
|
||||
const float baseline = marker::MarkerSection<YGMarkerBaselineFn>::wrap(
|
||||
node,
|
||||
node->getBaseline(),
|
||||
node,
|
||||
node->getLayout().measuredDimensions[YGDimensionWidth],
|
||||
node->getLayout().measuredDimensions[YGDimensionHeight]);
|
||||
|
Reference in New Issue
Block a user