C# Baseline function

Summary:
same as Measure function, based on #317
Closes https://github.com/facebook/yoga/pull/321

Reviewed By: emilsjolander

Differential Revision: D4385336

Pulled By: splhack

fbshipit-source-id: b583ec79861d2e9abba31a72503e2f706bfda8e8
This commit is contained in:
Kazuki Sakamoto
2017-01-07 09:06:06 -08:00
committed by Facebook Github Bot
parent 8d320ceac2
commit 70a4221b9e
6 changed files with 111 additions and 2 deletions

View File

@@ -21,6 +21,8 @@ namespace Facebook.Yoga
private List<YogaNode> _children;
private MeasureFunction _measureFunction;
private YogaMeasureFunc _ygMeasureFunc;
private BaselineFunction _baselineFunction;
private YogaBaselineFunc _ygBaselineFunc;
private object _data;
public YogaNode()
@@ -37,6 +39,7 @@ namespace Facebook.Yoga
public void Reset()
{
_measureFunction = null;
_baselineFunction = null;
_data = null;
Native.YGNodeReset(_ygNode);
@@ -84,6 +87,14 @@ namespace Facebook.Yoga
}
}
public bool IsBaselineDefined
{
get
{
return _baselineFunction != null;
}
}
public void CopyStyle(YogaNode srcNode)
{
Native.YGNodeCopyStyle(_ygNode, srcNode._ygNode);
@@ -585,6 +596,13 @@ namespace Facebook.Yoga
Native.YGNodeSetMeasureFunc(_ygNode, _ygMeasureFunc);
}
public void SetBaselineFunction(BaselineFunction baselineFunction)
{
_baselineFunction = baselineFunction;
_ygBaselineFunc = baselineFunction != null ? BaselineInternal : (YogaBaselineFunc)null;
Native.YGNodeSetBaselineFunc(_ygNode, _ygBaselineFunc);
}
public void CalculateLayout()
{
Native.YGNodeCalculateLayout(
@@ -609,6 +627,16 @@ namespace Facebook.Yoga
return _measureFunction(this, width, widthMode, height, heightMode);
}
private float BaselineInternal(IntPtr node, float width, float height)
{
if (_baselineFunction == null)
{
throw new InvalidOperationException("Baseline function is not defined.");
}
return _baselineFunction(this, width, height);
}
public string Print(YogaPrintOptions options =
YogaPrintOptions.Layout|YogaPrintOptions.Style|YogaPrintOptions.Children)
{