diff --git a/csharp/Facebook.Yoga.sln b/csharp/Facebook.Yoga.sln
deleted file mode 100644
index 3e8b4078ab..0000000000
--- a/csharp/Facebook.Yoga.sln
+++ /dev/null
@@ -1,46 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.25420.1
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Yoga", "Yoga\Yoga.vcxproj", "{0446C86B-F47B-4C46-B673-C7AE0CFF35D5}"
-EndProject
-Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Facebook.Yoga", "Facebook.Yoga\Facebook.Yoga.xproj", "{75BB7605-E54B-4EDE-8F5A-FF1F24464236}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|Any CPU = Release|Any CPU
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|Any CPU.ActiveCfg = Debug|Win32
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.ActiveCfg = Debug|x64
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.Build.0 = Debug|x64
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.ActiveCfg = Debug|Win32
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.Build.0 = Debug|Win32
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|Any CPU.ActiveCfg = Release|Win32
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.ActiveCfg = Release|x64
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.Build.0 = Release|x64
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.ActiveCfg = Release|Win32
- {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.Build.0 = Release|Win32
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Debug|x64.ActiveCfg = Debug|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Debug|x64.Build.0 = Debug|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Debug|x86.ActiveCfg = Debug|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Debug|x86.Build.0 = Debug|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Release|Any CPU.Build.0 = Release|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Release|x64.ActiveCfg = Release|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Release|x64.Build.0 = Release|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Release|x86.ActiveCfg = Release|Any CPU
- {75BB7605-E54B-4EDE-8F5A-FF1F24464236}.Release|x86.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/csharp/Facebook.Yoga/Facebook.Yoga.Shared.projitems b/csharp/Facebook.Yoga/Facebook.Yoga.Shared.projitems
new file mode 100644
index 0000000000..5889d249a4
--- /dev/null
+++ b/csharp/Facebook.Yoga/Facebook.Yoga.Shared.projitems
@@ -0,0 +1,40 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ 91c42d32-291d-4b72-90b4-551663d60b8b
+
+
+ Facebook.Yoga.Shared
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga/Facebook.Yoga.Shared.shproj b/csharp/Facebook.Yoga/Facebook.Yoga.Shared.shproj
new file mode 100644
index 0000000000..6d2da463c2
--- /dev/null
+++ b/csharp/Facebook.Yoga/Facebook.Yoga.Shared.shproj
@@ -0,0 +1,13 @@
+
+
+
+ 91c42d32-291d-4b72-90b4-551663d60b8b
+ 14.0
+
+
+
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga/Facebook.Yoga.xproj b/csharp/Facebook.Yoga/Facebook.Yoga.xproj
deleted file mode 100644
index 0341d153b2..0000000000
--- a/csharp/Facebook.Yoga/Facebook.Yoga.xproj
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
- 14.0
- $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
-
-
-
-
- 75bb7605-e54b-4ede-8f5a-ff1f24464236
- Facebook.Yoga
- .\obj
- .\bin\
- v4.5.2
-
-
-
- 2.0
-
-
-
diff --git a/csharp/Facebook.Yoga/Native.cs b/csharp/Facebook.Yoga/Native.cs
index 36a54733da..cb7371d315 100644
--- a/csharp/Facebook.Yoga/Native.cs
+++ b/csharp/Facebook.Yoga/Native.cs
@@ -1,4 +1,4 @@
-/**
+/**
* Copyright (c) 2014-present, Facebook, Inc.
* All rights reserved.
*
@@ -42,75 +42,75 @@ protected override bool ReleaseHandle()
}
}
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGInteropSetLogger(
[MarshalAs(UnmanagedType.FunctionPtr)] YogaLogger.Func func);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YGNodeHandle YGNodeNew();
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeFree(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeReset(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern int YGNodeGetInstanceCount();
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGSetExperimentalFeatureEnabled(
YogaExperimentalFeature feature,
bool enabled);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern bool YGIsExperimentalFeatureEnabled(
YogaExperimentalFeature feature);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeInsertChild(YGNodeHandle node, YGNodeHandle child, uint index);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeRemoveChild(YGNodeHandle node, YGNodeHandle child);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeCalculateLayout(YGNodeHandle node,
float availableWidth,
float availableHeight,
YogaDirection parentDirection);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeMarkDirty(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool YGNodeIsDirty(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodePrint(YGNodeHandle node, YogaPrintOptions options);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool YGValueIsUndefined(float value);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeCopyStyle(YGNodeHandle dstNode, YGNodeHandle srcNode);
#region YG_NODE_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeSetMeasureFunc(
YGNodeHandle node,
[MarshalAs(UnmanagedType.FunctionPtr)] YogaMeasureFunc measureFunc);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.FunctionPtr)]
public static extern YogaMeasureFunc YGNodeGetMeasureFunc(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeSetHasNewLayout(YGNodeHandle node, [MarshalAs(UnmanagedType.I1)] bool hasNewLayout);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool YGNodeGetHasNewLayout(YGNodeHandle node);
@@ -118,206 +118,206 @@ public static extern void YGNodeSetMeasureFunc(
#region YG_NODE_STYLE_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetDirection(YGNodeHandle node, YogaDirection direction);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaDirection YGNodeStyleGetDirection(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexDirection(YGNodeHandle node, YogaFlexDirection flexDirection);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaFlexDirection YGNodeStyleGetFlexDirection(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetJustifyContent(YGNodeHandle node, YogaJustify justifyContent);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaJustify YGNodeStyleGetJustifyContent(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAlignContent(YGNodeHandle node, YogaAlign alignContent);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaAlign YGNodeStyleGetAlignContent(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAlignItems(YGNodeHandle node, YogaAlign alignItems);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaAlign YGNodeStyleGetAlignItems(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAlignSelf(YGNodeHandle node, YogaAlign alignSelf);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaAlign YGNodeStyleGetAlignSelf(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPositionType(YGNodeHandle node, YogaPositionType positionType);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaPositionType YGNodeStyleGetPositionType(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexWrap(YGNodeHandle node, YogaWrap flexWrap);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaWrap YGNodeStyleGetFlexWrap(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetOverflow(YGNodeHandle node, YogaOverflow flexWrap);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaOverflow YGNodeStyleGetOverflow(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlex(YGNodeHandle node, float flex);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexGrow(YGNodeHandle node, float flexGrow);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetFlexGrow(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexShrink(YGNodeHandle node, float flexShrink);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetFlexShrink(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexBasis(YGNodeHandle node, float flexBasis);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexBasisPercent(YGNodeHandle node, float flexBasis);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetFlexBasis(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetWidth(YGNodeHandle node, float width);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetWidthPercent(YGNodeHandle node, float width);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetWidth(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetHeight(YGNodeHandle node, float height);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetHeightPercent(YGNodeHandle node, float height);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetHeight(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMinWidth(YGNodeHandle node, float minWidth);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMinWidthPercent(YGNodeHandle node, float minWidth);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetMinWidth(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMinHeight(YGNodeHandle node, float minHeight);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMinHeightPercent(YGNodeHandle node, float minHeight);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetMinHeight(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMaxWidth(YGNodeHandle node, float maxWidth);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMaxWidthPercent(YGNodeHandle node, float maxWidth);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetMaxWidth(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMaxHeight(YGNodeHandle node, float maxHeight);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMaxHeightPercent(YGNodeHandle node, float maxHeight);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetMaxHeight(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAspectRatio(YGNodeHandle node, float aspectRatio);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetAspectRatio(YGNodeHandle node);
#endregion
#region YG_NODE_STYLE_EDGE_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPosition(YGNodeHandle node, YogaEdge edge, float position);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPositionPercent(YGNodeHandle node, YogaEdge edge, float position);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetPosition(YGNodeHandle node, YogaEdge edge);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMargin(YGNodeHandle node, YogaEdge edge, float margin);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMarginPercent(YGNodeHandle node, YogaEdge edge, float margin);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetMargin(YGNodeHandle node, YogaEdge edge);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPadding(YGNodeHandle node, YogaEdge edge, float padding);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPaddingPercent(YGNodeHandle node, YogaEdge edge, float padding);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaValue YGNodeStyleGetPadding(YGNodeHandle node, YogaEdge edge);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetBorder(YGNodeHandle node, YogaEdge edge, float border);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetBorder(YGNodeHandle node, YogaEdge edge);
#endregion
#region YG_NODE_LAYOUT_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetLeft(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetTop(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetRight(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetBottom(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetWidth(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetHeight(YGNodeHandle node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaDirection YGNodeLayoutGetDirection(YGNodeHandle node);
#endregion
}
-}
+}
\ No newline at end of file
diff --git a/csharp/Windows/Build/Facebook.Yoga.NativeInterop.targets b/csharp/Windows/Build/Facebook.Yoga.NativeInterop.targets
new file mode 100644
index 0000000000..9681d32482
--- /dev/null
+++ b/csharp/Windows/Build/Facebook.Yoga.NativeInterop.targets
@@ -0,0 +1,131 @@
+
+
+
+ $(SolutionDir)..\Yoga\bin\
+ $(NativeRootPath)x86\
+ $(NativeRootPath)x64\
+ $(NativeRootPath)ARM\
+ Yoga
+ AMD64
+ ARM
+
+
+
+
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+
+ $(NativeDLLMoniker).dll
+ PreserveNewest
+ False
+
+
+ $(NativeDLLMoniker).pdb
+ PreserveNewest
+ False
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Desktop.Tests/Facebook.Yoga.Desktop.Tests.csproj b/csharp/Windows/Facebook.Yoga.Desktop.Tests/Facebook.Yoga.Desktop.Tests.csproj
new file mode 100644
index 0000000000..7ae64e28d4
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Desktop.Tests/Facebook.Yoga.Desktop.Tests.csproj
@@ -0,0 +1,104 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}
+ Library
+ Properties
+ Facebook.Yoga
+ Facebook.Yoga.Desktop.Tests
+ v4.5.1
+ 512
+
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ true
+ bin\Debug\
+ DEBUG;TRACE
+ true
+ full
+ AnyCPU
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\Release\
+ TRACE
+ true
+ pdbonly
+ AnyCPU
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+
+ ..\packages\NUnit.2.6.4\lib\nunit.framework.dll
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+ {3aace384-fdec-4d91-a3b2-eeb21b46c9ad}
+ Facebook.Yoga
+
+
+
+
+
+
+
+
+
+
+ This project references a native interop target that is missing. The missing build target is {0}.
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Desktop.Tests/Properties/AssemblyInfo.cs b/csharp/Windows/Facebook.Yoga.Desktop.Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..3947118cda
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Desktop.Tests/Properties/AssemblyInfo.cs
@@ -0,0 +1,28 @@
+/**
+ * Copyright (c) 2014-present, Facebook, Inc.
+ * All rights reserved.
+ *
+ * This source code is licensed under the BSD-style license found in the
+ * LICENSE file in the root directory of this source tree. An additional grant
+ * of patent rights can be found in the PATENTS file in the same directory.
+ */
+
+using System.Reflection;
+using System.Resources;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("Facebook.Yoga.Desktop.Tests")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Facebook, Inc.")]
+[assembly: AssemblyProduct("Facebook.Yoga")]
+[assembly: AssemblyCopyright("Copyright (c) 2014-present, Facebook, Inc.")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("ac23f444-5545-4196-8b9f-5c1f6b3e7fb3")]
+
+[assembly: NeutralResourcesLanguage("en")]
+
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+
diff --git a/csharp/Windows/Facebook.Yoga.Desktop.Tests/packages.config b/csharp/Windows/Facebook.Yoga.Desktop.Tests/packages.config
new file mode 100644
index 0000000000..b25e5bda35
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Desktop.Tests/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Desktop.sln b/csharp/Windows/Facebook.Yoga.Desktop.sln
new file mode 100644
index 0000000000..5738d06217
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Desktop.sln
@@ -0,0 +1,102 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5289E508-8386-45A1-A12B-258A5899CD45}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Native", "Native", "{51A8E803-C084-431F-9130-F277481C2BB2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NETStandard", "NETStandard", "{DCF7899B-A487-49C0-BCDE-DC088B6750C2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yoga", "..\Yoga\Yoga.vcxproj", "{0446C86B-F47B-4C46-B673-C7AE0CFF35D5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{39A2FFDA-C093-4FA6-8143-45B5019E7DAC}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared", "..\Facebook.Yoga\Facebook.Yoga.Shared.shproj", "{91C42D32-291D-4B72-90B4-551663D60B8B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga", "Facebook.Yoga\Facebook.Yoga.csproj", "{3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5} = {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}
+ EndProjectSection
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared.Tests", "..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.shproj", "{4EDC82D9-A201-4831-8FE0-98F468F8E4AE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Desktop.Tests", "Facebook.Yoga.Desktop.Tests\Facebook.Yoga.Desktop.Tests.csproj", "{AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}"
+EndProject
+Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ ..\Facebook.Yoga\Facebook.Yoga.Shared.projitems*{3aace384-fdec-4d91-a3b2-eeb21b46c9ad}*SharedItemsImports = 4
+ ..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems*{4edc82d9-a201-4831-8fe0-98f468f8e4ae}*SharedItemsImports = 13
+ ..\Facebook.Yoga\Facebook.Yoga.Shared.projitems*{91c42d32-291d-4b72-90b4-551663d60b8b}*SharedItemsImports = 13
+ ..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems*{ac23f444-5545-4196-8b9f-5c1f6b3e7fb3}*SharedItemsImports = 4
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|ARM.Build.0 = Debug|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.Build.0 = Debug|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.ActiveCfg = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.Build.0 = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|Any CPU.ActiveCfg = Release|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|ARM.ActiveCfg = Release|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|ARM.Build.0 = Release|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.ActiveCfg = Release|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.Build.0 = Release|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.ActiveCfg = Release|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.Build.0 = Release|Win32
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|ARM.ActiveCfg = Debug|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|ARM.Build.0 = Debug|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x64.ActiveCfg = Debug|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x64.Build.0 = Debug|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x86.ActiveCfg = Debug|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x86.Build.0 = Debug|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|ARM.ActiveCfg = Release|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|ARM.Build.0 = Release|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x64.ActiveCfg = Release|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x64.Build.0 = Release|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x86.ActiveCfg = Release|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x86.Build.0 = Release|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|ARM.Build.0 = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x64.ActiveCfg = Debug|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x64.Build.0 = Debug|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x86.ActiveCfg = Debug|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x86.Build.0 = Debug|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|ARM.ActiveCfg = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|ARM.Build.0 = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x64.ActiveCfg = Release|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x64.Build.0 = Release|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x86.ActiveCfg = Release|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x86.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5} = {51A8E803-C084-431F-9130-F277481C2BB2}
+ {91C42D32-291D-4B72-90B4-551663D60B8B} = {39A2FFDA-C093-4FA6-8143-45B5019E7DAC}
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD} = {DCF7899B-A487-49C0-BCDE-DC088B6750C2}
+ {4EDC82D9-A201-4831-8FE0-98F468F8E4AE} = {39A2FFDA-C093-4FA6-8143-45B5019E7DAC}
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3} = {5289E508-8386-45A1-A12B-258A5899CD45}
+ EndGlobalSection
+EndGlobal
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/LockScreenLogo.scale-200.png b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 0000000000..428cabb6d4
Binary files /dev/null and b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/LockScreenLogo.scale-200.png differ
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/SplashScreen.scale-200.png b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/SplashScreen.scale-200.png
new file mode 100644
index 0000000000..d1937479a7
Binary files /dev/null and b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/SplashScreen.scale-200.png differ
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square150x150Logo.scale-200.png b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 0000000000..eb507ab9ce
Binary files /dev/null and b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square150x150Logo.scale-200.png differ
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.scale-200.png b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 0000000000..2121ca588d
Binary files /dev/null and b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.scale-200.png differ
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 0000000000..69053b7281
Binary files /dev/null and b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/StoreLogo.png b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/StoreLogo.png
new file mode 100644
index 0000000000..8f628550d6
Binary files /dev/null and b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/StoreLogo.png differ
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Wide310x150Logo.scale-200.png b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 0000000000..6429d98629
Binary files /dev/null and b/csharp/Windows/Facebook.Yoga.Universal.Tests/Assets/Wide310x150Logo.scale-200.png differ
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Facebook.Yoga.Universal.Tests.csproj b/csharp/Windows/Facebook.Yoga.Universal.Tests/Facebook.Yoga.Universal.Tests.csproj
new file mode 100644
index 0000000000..d83cf0d9ea
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/Facebook.Yoga.Universal.Tests.csproj
@@ -0,0 +1,143 @@
+
+
+
+
+ Debug
+ x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}
+ AppContainerExe
+ Properties
+ Facebook.Yoga.Universal.Tests
+ Facebook.Yoga.Universal.Tests
+ en-US
+ UAP
+ 10.0.10586.0
+ 10.0.10240.0
+ 14
+ 512
+ {A5A43C5B-DE2A-4C0C-9213-0A381AF9435A};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Facebook.Yoga.Universal.Tests_TemporaryKey.pfx
+ 14.0
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ ;2008
+ full
+ x86
+ false
+ prompt
+ true
+
+
+ bin\x86\Release\
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ ;2008
+ pdbonly
+ x86
+ false
+ prompt
+ true
+ true
+
+
+ true
+ bin\ARM\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ ;2008
+ full
+ ARM
+ false
+ prompt
+ true
+
+
+ bin\ARM\Release\
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ ;2008
+ pdbonly
+ ARM
+ false
+ prompt
+ true
+ true
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP
+ ;2008
+ full
+ x64
+ false
+ prompt
+ true
+
+
+ bin\x64\Release\
+ TRACE;NETFX_CORE;WINDOWS_UWP
+ true
+ ;2008
+ pdbonly
+ x64
+ false
+ prompt
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+ UnitTestApp.xaml
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {3aace384-fdec-4d91-a3b2-eeb21b46c9ad}
+ Facebook.Yoga
+
+
+
+ 14.0
+
+
+
+
+
+ This project references a native interop target that is missing. The missing build target is {0}.
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Package.appxmanifest b/csharp/Windows/Facebook.Yoga.Universal.Tests/Package.appxmanifest
new file mode 100644
index 0000000000..d4ec072f82
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/Package.appxmanifest
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+ Facebook.Yoga.Universal.Tests
+ anforste
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Properties/AssemblyInfo.cs b/csharp/Windows/Facebook.Yoga.Universal.Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..2f35c3d33f
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/Properties/AssemblyInfo.cs
@@ -0,0 +1,30 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("Facebook.Yoga.Universal.Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("BlueJeans")]
+[assembly: AssemblyProduct("Facebook.Yoga.Universal.Tests")]
+[assembly: AssemblyCopyright("Copyright © BlueJeans 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: AssemblyMetadata("TargetPlatform","UAP")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Build and Revision Numbers
+// by using the '*' as shown below:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+[assembly: ComVisible(false)]
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/Properties/UnitTestApp.rd.xml b/csharp/Windows/Facebook.Yoga.Universal.Tests/Properties/UnitTestApp.rd.xml
new file mode 100644
index 0000000000..efee59d278
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/Properties/UnitTestApp.rd.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml b/csharp/Windows/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml
new file mode 100644
index 0000000000..d8e15f8279
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml.cs b/csharp/Windows/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml.cs
new file mode 100644
index 0000000000..b9564ac8f5
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml.cs
@@ -0,0 +1,102 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices.WindowsRuntime;
+using Windows.ApplicationModel;
+using Windows.ApplicationModel.Activation;
+using Windows.Foundation;
+using Windows.Foundation.Collections;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Controls.Primitives;
+using Windows.UI.Xaml.Data;
+using Windows.UI.Xaml.Input;
+using Windows.UI.Xaml.Media;
+using Windows.UI.Xaml.Navigation;
+
+namespace Facebook.Yoga.Universal.Tests
+{
+ ///
+ /// Provides application-specific behavior to supplement the default Application class.
+ ///
+ sealed partial class App : Application
+ {
+ ///
+ /// Initializes the singleton application object. This is the first line of authored code
+ /// executed, and as such is the logical equivalent of main() or WinMain().
+ ///
+ public App()
+ {
+ this.InitializeComponent();
+ this.Suspending += OnSuspending;
+ }
+
+ ///
+ /// Invoked when the application is launched normally by the end user. Other entry points
+ /// will be used such as when the application is launched to open a specific file.
+ ///
+ /// Details about the launch request and process.
+ protected override void OnLaunched(LaunchActivatedEventArgs e)
+ {
+
+#if DEBUG
+ if (System.Diagnostics.Debugger.IsAttached)
+ {
+ this.DebugSettings.EnableFrameRateCounter = true;
+ }
+#endif
+
+ Frame rootFrame = Window.Current.Content as Frame;
+
+ // Do not repeat app initialization when the Window already has content,
+ // just ensure that the window is active
+ if (rootFrame == null)
+ {
+ // Create a Frame to act as the navigation context and navigate to the first page
+ rootFrame = new Frame();
+
+ rootFrame.NavigationFailed += OnNavigationFailed;
+
+ if (e.PreviousExecutionState == ApplicationExecutionState.Terminated)
+ {
+ //TODO: Load state from previously suspended application
+ }
+
+ // Place the frame in the current Window
+ Window.Current.Content = rootFrame;
+ }
+
+ Microsoft.VisualStudio.TestPlatform.TestExecutor.UnitTestClient.CreateDefaultUI();
+
+ // Ensure the current window is active
+ Window.Current.Activate();
+
+ Microsoft.VisualStudio.TestPlatform.TestExecutor.UnitTestClient.Run(e.Arguments);
+ }
+
+ ///
+ /// Invoked when Navigation to a certain page fails
+ ///
+ /// The Frame which failed navigation
+ /// Details about the navigation failure
+ void OnNavigationFailed(object sender, NavigationFailedEventArgs e)
+ {
+ throw new Exception("Failed to load Page " + e.SourcePageType.FullName);
+ }
+
+ ///
+ /// Invoked when application execution is being suspended. Application state is saved
+ /// without knowing whether the application will be terminated or resumed with the contents
+ /// of memory still intact.
+ ///
+ /// The source of the suspend request.
+ /// Details about the suspend request.
+ private void OnSuspending(object sender, SuspendingEventArgs e)
+ {
+ var deferral = e.SuspendingOperation.GetDeferral();
+ //TODO: Save application state and stop any background activity
+ deferral.Complete();
+ }
+ }
+}
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs b/csharp/Windows/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs
new file mode 100644
index 0000000000..1030fe107c
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs
@@ -0,0 +1,417 @@
+using System;
+using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
+using Facebook.Yoga;
+
+namespace Facebook.Yoga.Universal.Tests
+{
+ [TestClass]
+ public class YogaNodeTest
+ {
+ [TestMethod]
+ public void TestAddChildGetParent()
+ {
+ YogaNode parent = new YogaNode();
+ YogaNode child = new YogaNode();
+
+ Assert.IsNull(child.Parent);
+ Assert.AreEqual(0, parent.Count);
+
+ parent.Insert(0, child);
+
+ Assert.AreEqual(1, parent.Count);
+ Assert.AreEqual(child, parent[0]);
+ Assert.AreEqual(parent, child.Parent);
+
+ parent.RemoveAt(0);
+
+ Assert.IsNull(child.Parent);
+ Assert.AreEqual(0, parent.Count);
+ }
+
+ [TestMethod]
+ public void TestChildren()
+ {
+ YogaNode parent = new YogaNode();
+ foreach (YogaNode node in parent)
+ {
+ Assert.Fail(node.ToString());
+ }
+
+ YogaNode child0 = new YogaNode();
+ Assert.AreEqual(-1, parent.IndexOf(child0));
+ parent.Insert(0, child0);
+ foreach (YogaNode node in parent)
+ {
+ Assert.AreEqual(0, parent.IndexOf(node));
+ }
+
+ YogaNode child1 = new YogaNode();
+ parent.Insert(1, child1);
+ int index = 0;
+ foreach (YogaNode node in parent)
+ {
+ Assert.AreEqual(index++, parent.IndexOf(node));
+ }
+
+ parent.RemoveAt(0);
+ Assert.AreEqual(-1, parent.IndexOf(child0));
+ Assert.AreEqual(0, parent.IndexOf(child1));
+
+ parent.Clear();
+ Assert.AreEqual(0, parent.Count);
+
+ parent.Clear();
+ Assert.AreEqual(0, parent.Count);
+ }
+
+ [TestMethod]
+ public void TestRemoveAtFromEmpty()
+ {
+ YogaNode parent = new YogaNode();
+
+ try
+ {
+ parent.RemoveAt(0);
+ }
+ catch (System.NullReferenceException)
+ {
+ return;
+ }
+
+ Assert.Fail("Excepted exception of type 'System.NullReferenceException'.");
+ }
+
+ [TestMethod]
+ public void TestRemoveAtOutOfRange()
+ {
+ YogaNode parent = new YogaNode();
+ YogaNode child = new YogaNode();
+ parent.Insert(0, child);
+
+ try
+ {
+ parent.RemoveAt(1);
+ }
+ catch (System.ArgumentOutOfRangeException)
+ {
+ return;
+ }
+
+ Assert.Fail("Excepted exception of type 'System.ArgumentOutOfRangeException'.");
+ }
+
+ [TestMethod]
+ public void TestCannotAddChildToMultipleParents()
+ {
+ YogaNode parent1 = new YogaNode();
+ YogaNode parent2 = new YogaNode();
+ YogaNode child = new YogaNode();
+
+ parent1.Insert(0, child);
+
+ try
+ {
+ parent2.Insert(0, child);
+ }
+ catch (System.InvalidOperationException)
+ {
+ return;
+ }
+
+ Assert.Fail("Excepted exception of type 'System.InvalidOperationException'.");
+ }
+
+ [TestMethod]
+ public void TestReset()
+ {
+ int instanceCount = YogaNode.GetInstanceCount();
+ YogaNode node = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ node.Reset();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ }
+
+ [TestMethod]
+ public void TestResetParent()
+ {
+ YogaNode parent = new YogaNode();
+ YogaNode child = new YogaNode();
+ parent.Insert(0, child);
+
+ try
+ {
+ parent.Reset();
+ }
+ catch (System.InvalidOperationException)
+ {
+ return;
+ }
+
+ Assert.Fail("Excepted exception of type 'System.InvalidOperationException'.");
+ }
+
+ [TestMethod]
+ public void TestResetChild()
+ {
+ YogaNode parent = new YogaNode();
+ YogaNode child = new YogaNode();
+ parent.Insert(0, child);
+
+ try
+ {
+ child.Reset();
+ }
+ catch (System.InvalidOperationException)
+ {
+ return;
+ }
+
+ Assert.Fail("Excepted exception of type 'System.InvalidOperationException'.");
+ }
+
+ [TestMethod]
+ public void TestClear()
+ {
+ int instanceCount = YogaNode.GetInstanceCount();
+ YogaNode parent = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ YogaNode child = new YogaNode();
+ Assert.AreEqual(instanceCount + 2, YogaNode.GetInstanceCount());
+ parent.Insert(0, child);
+ Assert.AreEqual(1, parent.Count);
+ Assert.AreEqual(parent, child.Parent);
+ parent.Clear();
+ Assert.AreEqual(0, parent.Count);
+ Assert.IsNull(child.Parent);
+ Assert.AreEqual(instanceCount + 2, YogaNode.GetInstanceCount());
+ }
+
+ [TestMethod]
+ public void TestMeasureFunc()
+ {
+ YogaNode node = new YogaNode();
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => {
+ return MeasureOutput.Make(100, 150);
+ });
+ node.CalculateLayout();
+ Assert.AreEqual(100, node.LayoutWidth);
+ Assert.AreEqual(150, node.LayoutHeight);
+ }
+
+ [TestMethod]
+ public void TestMeasureFuncWithFloat()
+ {
+ YogaNode node = new YogaNode();
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => {
+ return MeasureOutput.Make(123.4f, 81.7f);
+ });
+ node.CalculateLayout();
+ Assert.AreEqual(123, node.LayoutWidth);
+ Assert.AreEqual(81, node.LayoutHeight);
+ }
+
+ [TestMethod]
+ public void TestChildWithMeasureFunc()
+ {
+ YogaNode node = new YogaNode();
+
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => {
+ return MeasureOutput.Make(100, 150);
+ });
+ YogaNode child = new YogaNode();
+
+ try
+ {
+ node.Insert(0, child);
+ }
+ catch (System.InvalidOperationException)
+ {
+ return;
+ }
+
+ Assert.Fail("Excepted exception of type 'System.InvalidOperationException'.");
+ }
+
+ [TestMethod]
+ public void TestMeasureFuncWithChild()
+ {
+ YogaNode node = new YogaNode();
+ YogaNode child = new YogaNode();
+ node.Insert(0, child);
+
+ try
+ {
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => {
+ return MeasureOutput.Make(100, 150);
+ });
+ }
+ catch (System.InvalidOperationException)
+ {
+ return;
+ }
+
+ Assert.Fail("Excepted exception of type 'System.InvalidOperationException'.");
+ }
+
+ [TestMethod]
+ public void TestPrint()
+ {
+ YogaNode parent = new YogaNode();
+ parent.Width = 100;
+ parent.Height = 120;
+ YogaNode child0 = new YogaNode();
+ child0.Width = 30;
+ child0.Height = 40;
+ YogaNode child1 = new YogaNode();
+ child1.Width = 35;
+ child1.Height = 45;
+ parent.Insert(0, child0);
+ parent.Insert(0, child1);
+ parent.CalculateLayout();
+ Assert.AreEqual(parent.Print(), "{layout: {width: 100, height: 120, top: 0, left: 0}, flexDirection: 'column', alignItems: 'stretch', flexGrow: 0, flexShrink: 0, overflow: 'visible', width: 100, height: 120, children: [\n {layout: {width: 35, height: 45, top: 0, left: 0}, flexDirection: 'column', alignItems: 'stretch', flexGrow: 0, flexShrink: 0, overflow: 'visible', width: 35, height: 45, },\n {layout: {width: 30, height: 40, top: 45, left: 0}, flexDirection: 'column', alignItems: 'stretch', flexGrow: 0, flexShrink: 0, overflow: 'visible', width: 30, height: 40, },\n]},\n");
+ }
+
+ [TestMethod]
+ public void TestCopyStyle()
+ {
+ YogaNode node0 = new YogaNode();
+ Assert.IsTrue(YogaConstants.IsUndefined(node0.MaxHeight));
+
+ YogaNode node1 = new YogaNode();
+ node1.MaxHeight = 100;
+
+ node0.CopyStyle(node1);
+ Assert.AreEqual(100, node0.MaxHeight);
+ }
+
+#if !UNITY_EDITOR
+ private void ForceGC()
+ {
+ GC.Collect(GC.MaxGeneration);
+ GC.WaitForPendingFinalizers();
+ }
+
+ [TestMethod]
+ public void TestDestructor()
+ {
+ ForceGC();
+ int instanceCount = YogaNode.GetInstanceCount();
+ TestDestructorForGC(instanceCount);
+ ForceGC();
+ Assert.AreEqual(instanceCount, YogaNode.GetInstanceCount());
+ }
+
+ private void TestDestructorForGC(int instanceCount)
+ {
+ YogaNode node = new YogaNode();
+ Assert.IsNotNull(node);
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ node = null;
+ }
+
+ [TestMethod]
+ public void TestDestructorWithChildren()
+ {
+ ForceGC();
+ int instanceCount = YogaNode.GetInstanceCount();
+ TestDestructorWithChildrenForGC1(instanceCount);
+ ForceGC();
+ Assert.AreEqual(instanceCount, YogaNode.GetInstanceCount());
+ }
+
+ private void TestDestructorWithChildrenForGC1(int instanceCount)
+ {
+ YogaNode node = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+
+ TestDestructorWithChildrenForGC2(node, instanceCount + 1);
+ ForceGC();
+ Assert.AreEqual(instanceCount + 2, YogaNode.GetInstanceCount());
+
+ TestDestructorWithChildrenForGC2(node, instanceCount + 2);
+ ForceGC();
+ Assert.AreEqual(instanceCount + 3, YogaNode.GetInstanceCount());
+
+ node = null;
+ }
+
+ private void TestDestructorWithChildrenForGC2(YogaNode parent, int instanceCount)
+ {
+ YogaNode child = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+
+ parent.Insert(0, child);
+ child = null;
+ }
+
+ [TestMethod]
+ public void TestParentDestructor()
+ {
+ ForceGC();
+ int instanceCount = YogaNode.GetInstanceCount();
+ YogaNode child = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+
+ TestParentDestructorForGC(child, instanceCount + 1);
+ ForceGC();
+
+ Assert.IsNull(child.Parent);
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ }
+
+ private void TestParentDestructorForGC(YogaNode child, int instanceCount)
+ {
+ YogaNode parent = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ parent.Insert(0, child);
+ }
+
+ [TestMethod]
+ public void TestClearWithChildDestructor()
+ {
+ ForceGC();
+ int instanceCount = YogaNode.GetInstanceCount();
+ YogaNode node = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ TestClearWithChildDestructorForGC(node, instanceCount + 1);
+ ForceGC();
+ Assert.AreEqual(instanceCount + 2, YogaNode.GetInstanceCount());
+ node.Clear();
+ Assert.AreEqual(0, node.Count);
+ ForceGC();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ }
+
+ private void TestClearWithChildDestructorForGC(YogaNode parent, int instanceCount)
+ {
+ YogaNode child = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ parent.Insert(0, child);
+ }
+
+ [TestMethod]
+ public void TestMeasureFuncWithDestructor()
+ {
+ ForceGC();
+ int instanceCount = YogaNode.GetInstanceCount();
+ YogaNode parent = new YogaNode();
+ Assert.AreEqual(instanceCount + 1, YogaNode.GetInstanceCount());
+ TestMeasureFuncWithDestructorForGC(parent);
+ ForceGC();
+ Assert.AreEqual(instanceCount + 2, YogaNode.GetInstanceCount());
+ parent.CalculateLayout();
+ Assert.AreEqual(120, (int)parent.LayoutWidth);
+ Assert.AreEqual(130, (int)parent.LayoutHeight);
+ }
+
+ private void TestMeasureFuncWithDestructorForGC(YogaNode parent)
+ {
+ YogaNode child = new YogaNode();
+ parent.Insert(0, child);
+ child.SetMeasureFunction((_, width, widthMode, height, heightMode) => {
+ return MeasureOutput.Make(120, 130);
+ });
+ }
+#endif
+ }
+}
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Universal.Tests/project.json b/csharp/Windows/Facebook.Yoga.Universal.Tests/project.json
new file mode 100644
index 0000000000..32d927479d
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.Tests/project.json
@@ -0,0 +1,16 @@
+{
+ "dependencies": {
+ "Microsoft.NETCore.UniversalWindowsPlatform": "5.2.2"
+ },
+ "frameworks": {
+ "uap10.0": {}
+ },
+ "runtimes": {
+ "win10-arm": {},
+ "win10-arm-aot": {},
+ "win10-x86": {},
+ "win10-x86-aot": {},
+ "win10-x64": {},
+ "win10-x64-aot": {}
+ }
+}
\ No newline at end of file
diff --git a/csharp/Windows/Facebook.Yoga.Universal.sln b/csharp/Windows/Facebook.Yoga.Universal.sln
new file mode 100644
index 0000000000..6fadb75216
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.Universal.sln
@@ -0,0 +1,105 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5289E508-8386-45A1-A12B-258A5899CD45}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Native", "Native", "{51A8E803-C084-431F-9130-F277481C2BB2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NETStandard", "NETStandard", "{DCF7899B-A487-49C0-BCDE-DC088B6750C2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yoga", "..\Yoga\Yoga.vcxproj", "{0446C86B-F47B-4C46-B673-C7AE0CFF35D5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{39A2FFDA-C093-4FA6-8143-45B5019E7DAC}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared", "..\Facebook.Yoga\Facebook.Yoga.Shared.shproj", "{91C42D32-291D-4B72-90B4-551663D60B8B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga", "Facebook.Yoga\Facebook.Yoga.csproj", "{3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5} = {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}
+ EndProjectSection
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared.Tests", "..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.shproj", "{4EDC82D9-A201-4831-8FE0-98F468F8E4AE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Universal.Tests", "Facebook.Yoga.Universal.Tests\Facebook.Yoga.Universal.Tests.csproj", "{0C76D2FE-6767-44FE-B03D-21B2076BAA73}"
+EndProject
+Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ ..\Facebook.Yoga\Facebook.Yoga.Shared.projitems*{3aace384-fdec-4d91-a3b2-eeb21b46c9ad}*SharedItemsImports = 4
+ ..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems*{4edc82d9-a201-4831-8fe0-98f468f8e4ae}*SharedItemsImports = 13
+ ..\Facebook.Yoga\Facebook.Yoga.Shared.projitems*{91c42d32-291d-4b72-90b4-551663d60b8b}*SharedItemsImports = 13
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|ARM.Build.0 = Debug|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.Build.0 = Debug|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.ActiveCfg = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.Build.0 = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|Any CPU.ActiveCfg = Release|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|ARM.ActiveCfg = Release|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|ARM.Build.0 = Release|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.ActiveCfg = Release|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.Build.0 = Release|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.ActiveCfg = Release|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.Build.0 = Release|Win32
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|ARM.ActiveCfg = Debug|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|ARM.Build.0 = Debug|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x64.ActiveCfg = Debug|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x64.Build.0 = Debug|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x86.ActiveCfg = Debug|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x86.Build.0 = Debug|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|ARM.ActiveCfg = Release|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|ARM.Build.0 = Release|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x64.ActiveCfg = Release|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x64.Build.0 = Release|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x86.ActiveCfg = Release|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x86.Build.0 = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|ARM.Build.0 = Debug|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|ARM.Deploy.0 = Debug|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x64.ActiveCfg = Debug|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x64.Build.0 = Debug|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x64.Deploy.0 = Debug|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x86.ActiveCfg = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x86.Build.0 = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x86.Deploy.0 = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|Any CPU.ActiveCfg = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|ARM.ActiveCfg = Release|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|ARM.Build.0 = Release|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|ARM.Deploy.0 = Release|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x64.ActiveCfg = Release|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x64.Build.0 = Release|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x64.Deploy.0 = Release|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x86.ActiveCfg = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x86.Build.0 = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x86.Deploy.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5} = {51A8E803-C084-431F-9130-F277481C2BB2}
+ {91C42D32-291D-4B72-90B4-551663D60B8B} = {39A2FFDA-C093-4FA6-8143-45B5019E7DAC}
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD} = {DCF7899B-A487-49C0-BCDE-DC088B6750C2}
+ {4EDC82D9-A201-4831-8FE0-98F468F8E4AE} = {39A2FFDA-C093-4FA6-8143-45B5019E7DAC}
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73} = {5289E508-8386-45A1-A12B-258A5899CD45}
+ EndGlobalSection
+EndGlobal
diff --git a/csharp/Windows/Facebook.Yoga.sln b/csharp/Windows/Facebook.Yoga.sln
new file mode 100644
index 0000000000..5326a92aba
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga.sln
@@ -0,0 +1,125 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{5289E508-8386-45A1-A12B-258A5899CD45}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Native", "Native", "{51A8E803-C084-431F-9130-F277481C2BB2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NETStandard", "NETStandard", "{DCF7899B-A487-49C0-BCDE-DC088B6750C2}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yoga", "..\Yoga\Yoga.vcxproj", "{0446C86B-F47B-4C46-B673-C7AE0CFF35D5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared", "Shared", "{39A2FFDA-C093-4FA6-8143-45B5019E7DAC}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared", "..\Facebook.Yoga\Facebook.Yoga.Shared.shproj", "{91C42D32-291D-4B72-90B4-551663D60B8B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga", "Facebook.Yoga\Facebook.Yoga.csproj", "{3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}"
+ ProjectSection(ProjectDependencies) = postProject
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5} = {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}
+ EndProjectSection
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared.Tests", "..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.shproj", "{4EDC82D9-A201-4831-8FE0-98F468F8E4AE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Desktop.Tests", "Facebook.Yoga.Desktop.Tests\Facebook.Yoga.Desktop.Tests.csproj", "{AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Universal.Tests", "Facebook.Yoga.Universal.Tests\Facebook.Yoga.Universal.Tests.csproj", "{0C76D2FE-6767-44FE-B03D-21B2076BAA73}"
+EndProject
+Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ ..\Facebook.Yoga\Facebook.Yoga.Shared.projitems*{3aace384-fdec-4d91-a3b2-eeb21b46c9ad}*SharedItemsImports = 4
+ ..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems*{4edc82d9-a201-4831-8fe0-98f468f8e4ae}*SharedItemsImports = 13
+ ..\Facebook.Yoga\Facebook.Yoga.Shared.projitems*{91c42d32-291d-4b72-90b4-551663d60b8b}*SharedItemsImports = 13
+ ..\tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems*{ac23f444-5545-4196-8b9f-5c1f6b3e7fb3}*SharedItemsImports = 4
+ EndGlobalSection
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|ARM.Build.0 = Debug|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.ActiveCfg = Debug|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x64.Build.0 = Debug|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.ActiveCfg = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Debug|x86.Build.0 = Debug|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|Any CPU.ActiveCfg = Release|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|ARM.ActiveCfg = Release|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|ARM.Build.0 = Release|ARM
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.ActiveCfg = Release|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x64.Build.0 = Release|x64
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.ActiveCfg = Release|Win32
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5}.Release|x86.Build.0 = Release|Win32
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|ARM.ActiveCfg = Debug|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|ARM.Build.0 = Debug|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x64.ActiveCfg = Debug|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x64.Build.0 = Debug|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x86.ActiveCfg = Debug|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Debug|x86.Build.0 = Debug|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|ARM.ActiveCfg = Release|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|ARM.Build.0 = Release|ARM
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x64.ActiveCfg = Release|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x64.Build.0 = Release|x64
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x86.ActiveCfg = Release|x86
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}.Release|x86.Build.0 = Release|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|ARM.Build.0 = Debug|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x64.ActiveCfg = Debug|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x64.Build.0 = Debug|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x86.ActiveCfg = Debug|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Debug|x86.Build.0 = Debug|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|ARM.ActiveCfg = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|ARM.Build.0 = Release|Any CPU
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x64.ActiveCfg = Release|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x64.Build.0 = Release|x64
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x86.ActiveCfg = Release|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|x86.Build.0 = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|ARM.ActiveCfg = Debug|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|ARM.Build.0 = Debug|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|ARM.Deploy.0 = Debug|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x64.ActiveCfg = Debug|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x64.Build.0 = Debug|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x64.Deploy.0 = Debug|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x86.ActiveCfg = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x86.Build.0 = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Debug|x86.Deploy.0 = Debug|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|Any CPU.ActiveCfg = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|ARM.ActiveCfg = Release|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|ARM.Build.0 = Release|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|ARM.Deploy.0 = Release|ARM
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x64.ActiveCfg = Release|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x64.Build.0 = Release|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x64.Deploy.0 = Release|x64
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x86.ActiveCfg = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x86.Build.0 = Release|x86
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73}.Release|x86.Deploy.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {0446C86B-F47B-4C46-B673-C7AE0CFF35D5} = {51A8E803-C084-431F-9130-F277481C2BB2}
+ {91C42D32-291D-4B72-90B4-551663D60B8B} = {39A2FFDA-C093-4FA6-8143-45B5019E7DAC}
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD} = {DCF7899B-A487-49C0-BCDE-DC088B6750C2}
+ {4EDC82D9-A201-4831-8FE0-98F468F8E4AE} = {39A2FFDA-C093-4FA6-8143-45B5019E7DAC}
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3} = {5289E508-8386-45A1-A12B-258A5899CD45}
+ {0C76D2FE-6767-44FE-B03D-21B2076BAA73} = {5289E508-8386-45A1-A12B-258A5899CD45}
+ EndGlobalSection
+EndGlobal
diff --git a/csharp/Windows/Facebook.Yoga/Facebook.Yoga.csproj b/csharp/Windows/Facebook.Yoga/Facebook.Yoga.csproj
new file mode 100644
index 0000000000..1fe5a14447
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga/Facebook.Yoga.csproj
@@ -0,0 +1,113 @@
+
+
+
+
+ 14.0
+ Debug
+ AnyCPU
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD}
+ Library
+ Properties
+ Facebook.Yoga
+ Facebook.Yoga
+ en-US
+ 512
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ v5.0
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+ bin\ARM\Debug\
+ DEBUG;TRACE
+ true
+ full
+ ARM
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\ARM\Release\
+ TRACE
+ true
+ true
+ pdbonly
+ ARM
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ true
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ true
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga/Properties/AssemblyInfo.cs b/csharp/Windows/Facebook.Yoga/Properties/AssemblyInfo.cs
similarity index 53%
rename from csharp/Facebook.Yoga/Properties/AssemblyInfo.cs
rename to csharp/Windows/Facebook.Yoga/Properties/AssemblyInfo.cs
index bc0b992975..c6fc18bb28 100644
--- a/csharp/Facebook.Yoga/Properties/AssemblyInfo.cs
+++ b/csharp/Windows/Facebook.Yoga/Properties/AssemblyInfo.cs
@@ -11,22 +11,19 @@
using System.Resources;
using System.Runtime.InteropServices;
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
+[assembly: AssemblyTitle("Facebook.Yoga")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Facebook, Inc.")]
[assembly: AssemblyProduct("Facebook.Yoga")]
-[assembly: AssemblyTrademark("Copyright (c) 2014-present, Facebook, Inc.")]
+[assembly: AssemblyDescription("A subset of CSS's flexbox layout algorithm and box model.")]
+[assembly: AssemblyCopyright("Copyright (c) 2014-present, Facebook, Inc.")]
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
-// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("75bb7605-e54b-4ede-8f5a-ff1f24464236")]
[assembly: NeutralResourcesLanguage("en")]
-[assembly: AssemblyVersion("3.0.0.0")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+
diff --git a/csharp/Windows/Facebook.Yoga/project.json b/csharp/Windows/Facebook.Yoga/project.json
new file mode 100644
index 0000000000..58c1ea2a73
--- /dev/null
+++ b/csharp/Windows/Facebook.Yoga/project.json
@@ -0,0 +1,12 @@
+{
+ "dependencies": {
+ "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
+ "NETStandard.Library": "1.6.0"
+ },
+ "frameworks": {
+ "netstandard1.1": {}
+ },
+ "language": "en",
+ "supports": {},
+ "version": "3.0.0-*"
+}
\ No newline at end of file
diff --git a/csharp/Yoga/Yoga.rc b/csharp/Yoga/Yoga.rc
new file mode 100644
index 0000000000..e684194ea7
Binary files /dev/null and b/csharp/Yoga/Yoga.rc differ
diff --git a/csharp/Yoga/Yoga.vcxproj b/csharp/Yoga/Yoga.vcxproj
index 7303d22d98..789cf9ba9d 100755
--- a/csharp/Yoga/Yoga.vcxproj
+++ b/csharp/Yoga/Yoga.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM
+
Debug
Win32
+
+ Release
+ ARM
+
Release
Win32
@@ -23,7 +31,8 @@
Win32Proj
yoga
Yoga
- 10.0.14393.0
+ 8.1
+ true
@@ -32,6 +41,12 @@
v140
Unicode
+
+ DynamicLibrary
+ true
+ v140
+ Unicode
+
DynamicLibrary
false
@@ -39,6 +54,13 @@
true
Unicode
+
+ DynamicLibrary
+ false
+ v140
+ true
+ Unicode
+
DynamicLibrary
true
@@ -60,9 +82,15 @@
+
+
+
+
+
+
@@ -72,15 +100,33 @@
true
+ bin\$(PlatformTarget)\$(Configuration)\
+ obj\$(PlatformTarget)\$(Configuration)\
+
+
+ true
+ bin\$(PlatformTarget)\$(Configuration)\
+ obj\$(PlatformTarget)\$(Configuration)\
true
+ bin\$(PlatformTarget)\$(Configuration)\
+ obj\$(PlatformTarget)\$(Configuration)\
false
+ bin\$(PlatformTarget)\$(Configuration)\
+ obj\$(PlatformTarget)\$(Configuration)\
+
+
+ false
+ bin\$(PlatformTarget)\$(Configuration)\
+ obj\$(PlatformTarget)\$(Configuration)\
false
+ bin\$(PlatformTarget)\$(Configuration)\
+ obj\$(PlatformTarget)\$(Configuration)\
@@ -97,12 +143,26 @@
true
-
+
Level3
Disabled
+ WIN32;_DEBUG;_WINDOWS;_USRDLL;YOGA_EXPORTS;FB_ASSERTIONS_ENABLED=0;%(PreprocessorDefinitions)
+ true
+ $(ProjectDir)..\..\;%(AdditionalIncludeDirectories)
+
+
+ Windows
+ true
+
+
+
+
+ NotUsing
+ Level3
+ Disabled
_DEBUG;_WINDOWS;_USRDLL;YOGA_EXPORTS;FB_ASSERTIONS_ENABLED=0;%(PreprocessorDefinitions)
true
$(ProjectDir)..\..\;%(AdditionalIncludeDirectories)
@@ -115,8 +175,25 @@
Level3
-
-
+ NotUsing
+ MaxSpeed
+ true
+ true
+ WIN32;NDEBUG;_WINDOWS;_USRDLL;YOGA_EXPORTS;FB_ASSERTIONS_ENABLED=0;%(PreprocessorDefinitions)
+ true
+ $(ProjectDir)..\..\;%(AdditionalIncludeDirectories)
+
+
+ Windows
+ true
+ true
+ true
+
+
+
+
+ Level3
+ NotUsing
MaxSpeed
true
true
@@ -134,8 +211,7 @@
Level3
-
-
+ NotUsing
MaxSpeed
true
true
@@ -154,6 +230,7 @@
+
@@ -164,21 +241,30 @@
false
+ false
+
+
false
false
+ false
+
+
false
+
+
+
-
+
\ No newline at end of file
diff --git a/csharp/Yoga/Yoga.vcxproj.filters b/csharp/Yoga/Yoga.vcxproj.filters
index c3afcf6320..46d05f8ae7 100755
--- a/csharp/Yoga/Yoga.vcxproj.filters
+++ b/csharp/Yoga/Yoga.vcxproj.filters
@@ -33,6 +33,9 @@
Header Files
+
+ Header Files
+
@@ -51,4 +54,9 @@
Source Files
-
+
+
+ Resource Files
+
+
+
\ No newline at end of file
diff --git a/csharp/Yoga/resource.h b/csharp/Yoga/resource.h
new file mode 100644
index 0000000000..e96fe63d2b
--- /dev/null
+++ b/csharp/Yoga/resource.h
@@ -0,0 +1,14 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by Yoga.rc
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 101
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1001
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif
diff --git a/csharp/nuget/Facebook.Yoga.Native.nuspec b/csharp/nuget/Facebook.Yoga.Native.nuspec
new file mode 100644
index 0000000000..5e90f2fa25
--- /dev/null
+++ b/csharp/nuget/Facebook.Yoga.Native.nuspec
@@ -0,0 +1,38 @@
+
+
+
+ Facebook.Yoga.Native
+ 1.0.1-pre
+ Facebook.Yoga.Native
+ Facebook
+ Facebook
+ https://github.com/facebook/css-layout/blob/master/LICENSE
+ https://github.com/facebook/css-layout
+ false
+ A subset of CSS's flexbox layout algorithm and box model.
+ Copyright 2016 Facebook
+ native flexbox flex-box css layout css-layout yoga facebook
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/nuget/Facebook.Yoga.Native.targets b/csharp/nuget/Facebook.Yoga.Native.targets
new file mode 100644
index 0000000000..3a2c768062
--- /dev/null
+++ b/csharp/nuget/Facebook.Yoga.Native.targets
@@ -0,0 +1,36 @@
+
+
+
+
+ x86\%(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+ x64\%(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
diff --git a/csharp/nuget/Facebook.Yoga.nuspec b/csharp/nuget/Facebook.Yoga.nuspec
new file mode 100644
index 0000000000..599c3e776b
--- /dev/null
+++ b/csharp/nuget/Facebook.Yoga.nuspec
@@ -0,0 +1,46 @@
+
+
+
+ Facebook.Yoga
+ 1.0.1-pre
+ Facebook.Yoga
+ Facebook
+ Facebook
+ https://github.com/facebook/css-layout/blob/master/LICENSE
+ https://github.com/facebook/css-layout
+ false
+ A subset of CSS's flexbox layout algorithm and box model.
+ Copyright 2016 Facebook
+ flexbox flex-box css layout css-layout yoga facebook native
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/nuget/Facebook.Yoga.targets b/csharp/nuget/Facebook.Yoga.targets
new file mode 100644
index 0000000000..799fdb7891
--- /dev/null
+++ b/csharp/nuget/Facebook.Yoga.targets
@@ -0,0 +1,51 @@
+
+
+
+
+ x86\%(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+ x64\%(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+ %(Filename)%(Extension)
+ PreserveNewest
+ False
+
+
+
\ No newline at end of file
diff --git a/csharp/nuget/_._ b/csharp/nuget/_._
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.projitems b/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.projitems
new file mode 100644
index 0000000000..e593c942e6
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.projitems
@@ -0,0 +1,28 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ 4edc82d9-a201-4831-8fe0-98f468f8e4ae
+
+
+ Facebook.Yoga.Shared.Tests
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.shproj b/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.shproj
new file mode 100644
index 0000000000..75c61845f5
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.shproj
@@ -0,0 +1,13 @@
+
+
+
+ 4edc82d9-a201-4831-8fe0-98f468f8e4ae
+ 14.0
+
+
+
+
+
+
+
+