diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.config b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.config
new file mode 100644
index 00000000..9c05822f
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.xaml
new file mode 100644
index 00000000..7530644e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.xaml.cs
new file mode 100644
index 00000000..92dadf31
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/App.xaml.cs
@@ -0,0 +1,8 @@
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class App : Application
+ {
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Facebook.Yoga.AnyCPU.App.csproj b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Facebook.Yoga.AnyCPU.App.csproj
new file mode 100644
index 00000000..f68b0ff4
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Facebook.Yoga.AnyCPU.App.csproj
@@ -0,0 +1,154 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}
+ WinExe
+ Properties
+ Facebook.Yoga.App
+ Facebook.Yoga.App
+ v4.5.1
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+ true
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+ false
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+ {3aace384-fdec-4d91-a3b2-eeb21b46c9ad}
+ Facebook.Yoga
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/MainWindow.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/MainWindow.xaml
new file mode 100644
index 00000000..b9eaf2f5
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/MainWindow.xaml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/MainWindow.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/MainWindow.xaml.cs
new file mode 100644
index 00000000..1d055165
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/MainWindow.xaml.cs
@@ -0,0 +1,47 @@
+using Facebook.Yoga;
+using System;
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ this.Loaded += MainWindow_Loaded;
+ }
+
+ private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ string result = "Success";
+
+ try
+ {
+ var node = new YogaNode();
+
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => MeasureOutput.Make(100f, 150f));
+ node.CalculateLayout();
+
+ if (Math.Abs(100f - node.LayoutWidth) > 0.01)
+ {
+ throw new Exception("Unexpected Width");
+ }
+ if (Math.Abs(150f - node.LayoutHeight) > 0.01)
+ {
+ throw new Exception("Unexpected Height");
+ }
+ }
+ catch (Exception ex)
+ {
+ result = ex.Message + Environment.NewLine + ex.StackTrace;
+ }
+
+ if (textBlock != null)
+ {
+ textBlock.Text = result;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/AssemblyInfo.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..d145b1a0
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 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.AnyCPU.App")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Facebook")]
+[assembly: AssemblyProduct("Facebook.Yoga.AnyCPU.App")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// 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")]
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Resources.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..b997e904
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Facebook.Yoga.App.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Resources.resx b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Settings.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..620b824b
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Settings.settings b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Settings.settings
new file mode 100644
index 00000000..033d7a5e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU.App/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.config b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.config
new file mode 100644
index 00000000..9c05822f
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.xaml
new file mode 100644
index 00000000..7530644e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.xaml.cs
new file mode 100644
index 00000000..92dadf31
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/App.xaml.cs
@@ -0,0 +1,8 @@
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class App : Application
+ {
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Facebook.Yoga.AnyCPU32Bit.App.csproj b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Facebook.Yoga.AnyCPU32Bit.App.csproj
new file mode 100644
index 00000000..b4f41fb5
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Facebook.Yoga.AnyCPU32Bit.App.csproj
@@ -0,0 +1,154 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}
+ WinExe
+ Properties
+ Facebook.Yoga.App
+ Facebook.Yoga.App
+ v4.5.1
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ true
+ true
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ true
+ true
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+ {3aace384-fdec-4d91-a3b2-eeb21b46c9ad}
+ Facebook.Yoga
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/MainWindow.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/MainWindow.xaml
new file mode 100644
index 00000000..d07d1923
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/MainWindow.xaml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/MainWindow.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/MainWindow.xaml.cs
new file mode 100644
index 00000000..1d055165
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/MainWindow.xaml.cs
@@ -0,0 +1,47 @@
+using Facebook.Yoga;
+using System;
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ this.Loaded += MainWindow_Loaded;
+ }
+
+ private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ string result = "Success";
+
+ try
+ {
+ var node = new YogaNode();
+
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => MeasureOutput.Make(100f, 150f));
+ node.CalculateLayout();
+
+ if (Math.Abs(100f - node.LayoutWidth) > 0.01)
+ {
+ throw new Exception("Unexpected Width");
+ }
+ if (Math.Abs(150f - node.LayoutHeight) > 0.01)
+ {
+ throw new Exception("Unexpected Height");
+ }
+ }
+ catch (Exception ex)
+ {
+ result = ex.Message + Environment.NewLine + ex.StackTrace;
+ }
+
+ if (textBlock != null)
+ {
+ textBlock.Text = result;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/AssemblyInfo.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..fe11a3f2
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 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.AnyCPU32Bit.App")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Facebook")]
+[assembly: AssemblyProduct("Facebook.Yoga.AnyCPU32Bit.App")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// 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")]
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Resources.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..b997e904
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Facebook.Yoga.App.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Resources.resx b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Settings.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..620b824b
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Settings.settings b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Settings.settings
new file mode 100644
index 00000000..033d7a5e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.AnyCPU32Bit.App/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.config b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.config
new file mode 100644
index 00000000..9c05822f
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.xaml
new file mode 100644
index 00000000..7530644e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.xaml.cs
new file mode 100644
index 00000000..92dadf31
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/App.xaml.cs
@@ -0,0 +1,8 @@
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class App : Application
+ {
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Facebook.Yoga.NET451.App.csproj b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Facebook.Yoga.NET451.App.csproj
new file mode 100644
index 00000000..a2579af6
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Facebook.Yoga.NET451.App.csproj
@@ -0,0 +1,154 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}
+ WinExe
+ Properties
+ Facebook.Yoga.App
+ Facebook.Yoga.App
+ v4.5.1
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+ true
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+ true
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+ {3aace384-fdec-4d91-a3b2-eeb21b46c9ad}
+ Facebook.Yoga
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/MainWindow.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/MainWindow.xaml
new file mode 100644
index 00000000..ec56c3e8
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/MainWindow.xaml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/MainWindow.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/MainWindow.xaml.cs
new file mode 100644
index 00000000..1d055165
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/MainWindow.xaml.cs
@@ -0,0 +1,47 @@
+using Facebook.Yoga;
+using System;
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ this.Loaded += MainWindow_Loaded;
+ }
+
+ private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ string result = "Success";
+
+ try
+ {
+ var node = new YogaNode();
+
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => MeasureOutput.Make(100f, 150f));
+ node.CalculateLayout();
+
+ if (Math.Abs(100f - node.LayoutWidth) > 0.01)
+ {
+ throw new Exception("Unexpected Width");
+ }
+ if (Math.Abs(150f - node.LayoutHeight) > 0.01)
+ {
+ throw new Exception("Unexpected Height");
+ }
+ }
+ catch (Exception ex)
+ {
+ result = ex.Message + Environment.NewLine + ex.StackTrace;
+ }
+
+ if (textBlock != null)
+ {
+ textBlock.Text = result;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/AssemblyInfo.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..9e140bdd
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 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.NET451.App")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Facebook")]
+[assembly: AssemblyProduct("Facebook.Yoga.NET451.App")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// 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")]
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Resources.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..b997e904
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Facebook.Yoga.App.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Resources.resx b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Settings.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..620b824b
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Settings.settings b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Settings.settings
new file mode 100644
index 00000000..033d7a5e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET451.App/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.config b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.config
new file mode 100644
index 00000000..bae5d6d8
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.xaml
new file mode 100644
index 00000000..7530644e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.xaml.cs
new file mode 100644
index 00000000..92dadf31
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/App.xaml.cs
@@ -0,0 +1,8 @@
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class App : Application
+ {
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Facebook.Yoga.NET461.App.csproj b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Facebook.Yoga.NET461.App.csproj
new file mode 100644
index 00000000..5eb3d444
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Facebook.Yoga.NET461.App.csproj
@@ -0,0 +1,155 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}
+ WinExe
+ Properties
+ Facebook.Yoga.App
+ Facebook.Yoga.App
+ v4.6.1
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+ true
+
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ false
+ true
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+ false
+ true
+
+
+ true
+ bin\x64\Debug\
+ DEBUG;TRACE
+ full
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x64\Release\
+ TRACE
+ true
+ pdbonly
+ x64
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ true
+ bin\x86\Debug\
+ DEBUG;TRACE
+ full
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+ bin\x86\Release\
+ TRACE
+ true
+ pdbonly
+ x86
+ prompt
+ MinimumRecommendedRules.ruleset
+ true
+
+
+
+
+
+
+
+
+
+
+
+ 4.0
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ App.xaml
+ Code
+
+
+ MainWindow.xaml
+ Code
+
+
+
+
+ Code
+
+
+ True
+ True
+ Resources.resx
+
+
+ True
+ Settings.settings
+ True
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+
+
+
+
+
+
+ {3aace384-fdec-4d91-a3b2-eeb21b46c9ad}
+ Facebook.Yoga
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/MainWindow.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/MainWindow.xaml
new file mode 100644
index 00000000..9ddb6a44
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/MainWindow.xaml
@@ -0,0 +1,11 @@
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/MainWindow.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/MainWindow.xaml.cs
new file mode 100644
index 00000000..1d055165
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/MainWindow.xaml.cs
@@ -0,0 +1,47 @@
+using Facebook.Yoga;
+using System;
+using System.Windows;
+
+namespace Facebook.Yoga.App
+{
+ public partial class MainWindow : Window
+ {
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ this.Loaded += MainWindow_Loaded;
+ }
+
+ private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ string result = "Success";
+
+ try
+ {
+ var node = new YogaNode();
+
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => MeasureOutput.Make(100f, 150f));
+ node.CalculateLayout();
+
+ if (Math.Abs(100f - node.LayoutWidth) > 0.01)
+ {
+ throw new Exception("Unexpected Width");
+ }
+ if (Math.Abs(150f - node.LayoutHeight) > 0.01)
+ {
+ throw new Exception("Unexpected Height");
+ }
+ }
+ catch (Exception ex)
+ {
+ result = ex.Message + Environment.NewLine + ex.StackTrace;
+ }
+
+ if (textBlock != null)
+ {
+ textBlock.Text = result;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/AssemblyInfo.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..71066b7c
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/AssemblyInfo.cs
@@ -0,0 +1,55 @@
+using System.Reflection;
+using System.Resources;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+
+// 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.NET461.App")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Facebook")]
+[assembly: AssemblyProduct("Facebook.Yoga.NET461.App")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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)]
+
+//In order to begin building localizable applications, set
+//CultureYouAreCodingWith in your .csproj file
+//inside a . For example, if you are using US english
+//in your source files, set the to en-US. Then uncomment
+//the NeutralResourceLanguage attribute below. Update the "en-US" in
+//the line below to match the UICulture setting in the project file.
+
+//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
+
+
+[assembly: ThemeInfo(
+ ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
+ //(used if a resource is not found in the page,
+ // or application resource dictionaries)
+ ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
+ //(used if a resource is not found in the page,
+ // app, or any theme specific resource dictionaries)
+)]
+
+
+// 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")]
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Resources.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Resources.Designer.cs
new file mode 100644
index 00000000..b997e904
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Facebook.Yoga.App.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Resources.resx b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Resources.resx
new file mode 100644
index 00000000..af7dbebb
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Settings.Designer.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Settings.Designer.cs
new file mode 100644
index 00000000..620b824b
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.42000
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace Facebook.Yoga.App.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Settings.settings b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Settings.settings
new file mode 100644
index 00000000..033d7a5e
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.NET461.App/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/App.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/App.xaml
new file mode 100644
index 00000000..01448d7a
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/App.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/App.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/App.xaml.cs
new file mode 100644
index 00000000..7072fe19
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/App.xaml.cs
@@ -0,0 +1,96 @@
+using System;
+using Windows.ApplicationModel;
+using Windows.ApplicationModel.Activation;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Navigation;
+
+namespace Facebook.Yoga.App
+{
+ ///
+ /// 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;
+ }
+
+ if (e.PrelaunchActivated == false)
+ {
+ if (rootFrame.Content == null)
+ {
+ // When the navigation stack isn't restored navigate to the first page,
+ // configuring the new page by passing required information as a navigation
+ // parameter
+ rootFrame.Navigate(typeof(MainPage), e.Arguments);
+ }
+ // Ensure the current window is active
+ Window.Current.Activate();
+ }
+ }
+
+ ///
+ /// 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/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/LockScreenLogo.scale-200.png b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 00000000..735f57ad
Binary files /dev/null and b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/LockScreenLogo.scale-200.png differ
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/SplashScreen.scale-200.png b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/SplashScreen.scale-200.png
new file mode 100644
index 00000000..023e7f1f
Binary files /dev/null and b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/SplashScreen.scale-200.png differ
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square150x150Logo.scale-200.png b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 00000000..af49fec1
Binary files /dev/null and b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square150x150Logo.scale-200.png differ
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square44x44Logo.scale-200.png b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 00000000..ce342a2e
Binary files /dev/null and b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square44x44Logo.scale-200.png differ
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 00000000..f6c02ce9
Binary files /dev/null and b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/StoreLogo.png b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/StoreLogo.png
new file mode 100644
index 00000000..7385b56c
Binary files /dev/null and b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/StoreLogo.png differ
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Wide310x150Logo.scale-200.png b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 00000000..288995b3
Binary files /dev/null and b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Assets/Wide310x150Logo.scale-200.png differ
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Facebook.Yoga.Universal.App.csproj b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Facebook.Yoga.Universal.App.csproj
new file mode 100644
index 00000000..07b63584
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Facebook.Yoga.Universal.App.csproj
@@ -0,0 +1,146 @@
+
+
+
+
+ Debug
+ x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}
+ AppContainerExe
+ Properties
+ Facebook.Yoga.App
+ Facebook.Yoga.Universal.App
+ 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.App_TemporaryKey.pfx
+
+
+ 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
+
+
+
+
+
+
+
+ App.xaml
+
+
+ MainPage.xaml
+
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+ {3aace384-fdec-4d91-a3b2-eeb21b46c9ad}
+ Facebook.Yoga
+
+
+
+ 14.0
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/MainPage.xaml b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/MainPage.xaml
new file mode 100644
index 00000000..c56c64f1
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/MainPage.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/MainPage.xaml.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/MainPage.xaml.cs
new file mode 100644
index 00000000..e77e6758
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/MainPage.xaml.cs
@@ -0,0 +1,46 @@
+using System;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+
+namespace Facebook.Yoga.App
+{
+ public sealed partial class MainPage : Page
+ {
+ public MainPage()
+ {
+ this.InitializeComponent();
+ this.Loaded += MainWindow_Loaded;
+ }
+
+ private void MainWindow_Loaded(object sender, RoutedEventArgs e)
+ {
+ string result = "Success";
+
+ try
+ {
+ var node = new YogaNode();
+
+ node.SetMeasureFunction((_, width, widthMode, height, heightMode) => MeasureOutput.Make(100f, 150f));
+ node.CalculateLayout();
+
+ if (Math.Abs(100f - node.LayoutWidth) > 0.01)
+ {
+ throw new Exception("Unexpected Width");
+ }
+ if (Math.Abs(150f - node.LayoutHeight) > 0.01)
+ {
+ throw new Exception("Unexpected Height");
+ }
+ }
+ catch (Exception ex)
+ {
+ result = ex.Message + Environment.NewLine + ex.StackTrace;
+ }
+
+ if (textBlock != null)
+ {
+ textBlock.Text = result;
+ }
+ }
+ }
+}
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Package.appxmanifest b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Package.appxmanifest
new file mode 100644
index 00000000..9e38e58c
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Package.appxmanifest
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+ Facebook.Yoga.Universal.App
+ anforste
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Properties/AssemblyInfo.cs b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..03ed72ad
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Properties/AssemblyInfo.cs
@@ -0,0 +1,29 @@
+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.App")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Facebook")]
+[assembly: AssemblyProduct("Facebook.Yogal.App")]
+[assembly: AssemblyCopyright("Copyright © 2016")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// 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/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Properties/Default.rd.xml b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Properties/Default.rd.xml
new file mode 100644
index 00000000..80a960ce
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/Properties/Default.rd.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/project.json b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/project.json
new file mode 100644
index 00000000..92d14561
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/Facebook.Yoga.Universal.App/project.json
@@ -0,0 +1,16 @@
+{
+ "dependencies": {
+ "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0"
+ },
+ "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/Facebook.Yoga.App/runallapps.bat b/csharp/Facebook.Yoga.App/runallapps.bat
new file mode 100644
index 00000000..6fbfccf0
--- /dev/null
+++ b/csharp/Facebook.Yoga.App/runallapps.bat
@@ -0,0 +1,37 @@
+.\Facebook.Yoga.AnyCPU.App\bin\Debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.AnyCPU.App\bin\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.AnyCPU.App\bin\x86\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.AnyCPU.App\bin\x86\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.AnyCPU.App\bin\x64\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.AnyCPU.App\bin\x64\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.AnyCPU32Bit.App\bin\Debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.AnyCPU32Bit.App\bin\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.AnyCPU32Bit.App\bin\x86\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.AnyCPU32Bit.App\bin\x86\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.AnyCPU32Bit.App\bin\x64\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.AnyCPU32Bit.App\bin\x64\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.NET451.App\bin\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.NET451.App\bin\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.NET451.App\bin\x86\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.NET451.App\bin\x86\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.NET451.App\bin\x64\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.NET451.App\bin\x64\release\Facebook.Yoga.App.exe
+
+.\Facebook.Yoga.NET461.App\bin\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.NET461.App\bin\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.NET461.App\bin\x86\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.NET461.App\bin\x86\release\Facebook.Yoga.App.exe
+ \
+.\Facebook.Yoga.NET461.App\bin\x64\debug\Facebook.Yoga.App.exe
+.\Facebook.Yoga.NET461.App\bin\x64\release\Facebook.Yoga.App.exe
+
+pause
\ No newline at end of file
diff --git a/csharp/Facebook.Yoga.sln b/csharp/Facebook.Yoga.sln
index 3e8b4078..35070693 100644
--- a/csharp/Facebook.Yoga.sln
+++ b/csharp/Facebook.Yoga.sln
@@ -5,42 +5,212 @@ 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}"
+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("{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("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Desktop.Tests", "tests\Facebook.Yoga.Desktop.Tests\Facebook.Yoga.Desktop.Tests.csproj", "{AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}"
+EndProject
+Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Facebook.Yoga.Shared.Tests", "tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.shproj", "{320EB7B7-CE99-4382-B145-BDD49F33C7B2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "NETStandard", "NETStandard", "{DCF7899B-A487-49C0-BCDE-DC088B6750C2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Universal.Tests", "tests\Facebook.Yoga.Universal.Tests\Facebook.Yoga.Universal.Tests.csproj", "{4130594A-0BFE-4846-8A98-2D6040C7B2E5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Apps", "Apps", "{559E5706-CBAC-4587-BE42-36A537DA9230}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.AnyCPU.App", "Facebook.Yoga.App\Facebook.Yoga.AnyCPU.App\Facebook.Yoga.AnyCPU.App.csproj", "{9B0CD481-C763-4D64-B268-1F9B6A632C46}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.AnyCPU32Bit.App", "Facebook.Yoga.App\Facebook.Yoga.AnyCPU32Bit.App\Facebook.Yoga.AnyCPU32Bit.App.csproj", "{7AC3AC65-0E95-4AC1-ABDF-354DF192882E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.NET451.App", "Facebook.Yoga.App\Facebook.Yoga.NET451.App\Facebook.Yoga.NET451.App.csproj", "{B3616D28-F6B3-4F97-BEBE-27E396D942F8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.NET461.App", "Facebook.Yoga.App\Facebook.Yoga.NET461.App\Facebook.Yoga.NET461.App.csproj", "{BA7B1132-2B72-477B-A092-AB76F7003BD5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Facebook.Yoga.Universal.App", "Facebook.Yoga.App\Facebook.Yoga.Universal.App\Facebook.Yoga.Universal.App.csproj", "{4A5F9DD6-1939-44BA-A36E-EA86D91660FA}"
EndProject
Global
+ GlobalSection(SharedMSBuildProjectFiles) = preSolution
+ tests\Facebook.Yoga\Facebook.Yoga.Shared.Tests.projitems*{320eb7b7-ce99-4382-b145-bdd49f33c7b2}*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|Any CPU.Build.0 = 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
- {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
+ {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|ARM.ActiveCfg = Debug|x86
+ {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|x86
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3}.Release|ARM.ActiveCfg = Release|x86
+ {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
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|ARM.ActiveCfg = Debug|ARM
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|ARM.Build.0 = Debug|ARM
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|ARM.Deploy.0 = Debug|ARM
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|x64.ActiveCfg = Debug|x64
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|x64.Build.0 = Debug|x64
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|x64.Deploy.0 = Debug|x64
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|x86.ActiveCfg = Debug|x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|x86.Build.0 = Debug|x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Debug|x86.Deploy.0 = Debug|x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|Any CPU.ActiveCfg = Release|x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|ARM.ActiveCfg = Release|ARM
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|ARM.Build.0 = Release|ARM
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|ARM.Deploy.0 = Release|ARM
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|x64.ActiveCfg = Release|x64
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|x64.Build.0 = Release|x64
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|x64.Deploy.0 = Release|x64
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|x86.ActiveCfg = Release|x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|x86.Build.0 = Release|x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}.Release|x86.Deploy.0 = Release|x86
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|ARM.Build.0 = Debug|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|x64.ActiveCfg = Debug|x64
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|x64.Build.0 = Debug|x64
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|x86.ActiveCfg = Debug|x86
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Debug|x86.Build.0 = Debug|x86
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|ARM.ActiveCfg = Release|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|ARM.Build.0 = Release|Any CPU
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|x64.ActiveCfg = Release|x64
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|x64.Build.0 = Release|x64
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|x86.ActiveCfg = Release|x86
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46}.Release|x86.Build.0 = Release|x86
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|x64.ActiveCfg = Debug|x64
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|x64.Build.0 = Debug|x64
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|x86.ActiveCfg = Debug|x86
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Debug|x86.Build.0 = Debug|x86
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|ARM.Build.0 = Release|Any CPU
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|x64.ActiveCfg = Release|x64
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|x64.Build.0 = Release|x64
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|x86.ActiveCfg = Release|x86
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E}.Release|x86.Build.0 = Release|x86
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|ARM.Build.0 = Debug|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|x64.ActiveCfg = Debug|x64
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|x64.Build.0 = Debug|x64
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|x86.ActiveCfg = Debug|x86
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Debug|x86.Build.0 = Debug|x86
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|ARM.ActiveCfg = Release|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|ARM.Build.0 = Release|Any CPU
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|x64.ActiveCfg = Release|x64
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|x64.Build.0 = Release|x64
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|x86.ActiveCfg = Release|x86
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8}.Release|x86.Build.0 = Release|x86
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|ARM.Build.0 = Debug|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|x64.ActiveCfg = Debug|x64
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|x64.Build.0 = Debug|x64
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|x86.ActiveCfg = Debug|x86
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Debug|x86.Build.0 = Debug|x86
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|Any CPU.Build.0 = Release|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|ARM.ActiveCfg = Release|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|ARM.Build.0 = Release|Any CPU
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|x64.ActiveCfg = Release|x64
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|x64.Build.0 = Release|x64
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|x86.ActiveCfg = Release|x86
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5}.Release|x86.Build.0 = Release|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|ARM.ActiveCfg = Debug|ARM
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|ARM.Build.0 = Debug|ARM
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|ARM.Deploy.0 = Debug|ARM
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|x64.ActiveCfg = Debug|x64
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|x64.Build.0 = Debug|x64
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|x64.Deploy.0 = Debug|x64
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|x86.ActiveCfg = Debug|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|x86.Build.0 = Debug|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Debug|x86.Deploy.0 = Debug|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|Any CPU.ActiveCfg = Release|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|ARM.ActiveCfg = Release|ARM
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|ARM.Build.0 = Release|ARM
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|ARM.Deploy.0 = Release|ARM
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|x64.ActiveCfg = Release|x64
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|x64.Build.0 = Release|x64
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|x64.Deploy.0 = Release|x64
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|x86.ActiveCfg = Release|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.Release|x86.Build.0 = Release|x86
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA}.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}
+ {3AACE384-FDEC-4D91-A3B2-EEB21B46C9AD} = {DCF7899B-A487-49C0-BCDE-DC088B6750C2}
+ {AC23F444-5545-4196-8B9F-5C1F6B3E7FB3} = {5289E508-8386-45A1-A12B-258A5899CD45}
+ {320EB7B7-CE99-4382-B145-BDD49F33C7B2} = {5289E508-8386-45A1-A12B-258A5899CD45}
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5} = {5289E508-8386-45A1-A12B-258A5899CD45}
+ {9B0CD481-C763-4D64-B268-1F9B6A632C46} = {559E5706-CBAC-4587-BE42-36A537DA9230}
+ {7AC3AC65-0E95-4AC1-ABDF-354DF192882E} = {559E5706-CBAC-4587-BE42-36A537DA9230}
+ {B3616D28-F6B3-4F97-BEBE-27E396D942F8} = {559E5706-CBAC-4587-BE42-36A537DA9230}
+ {BA7B1132-2B72-477B-A092-AB76F7003BD5} = {559E5706-CBAC-4587-BE42-36A537DA9230}
+ {4A5F9DD6-1939-44BA-A36E-EA86D91660FA} = {559E5706-CBAC-4587-BE42-36A537DA9230}
+ EndGlobalSection
EndGlobal
diff --git a/csharp/Facebook.Yoga/Facebook.Yoga.csproj b/csharp/Facebook.Yoga/Facebook.Yoga.csproj
new file mode 100644
index 00000000..d4b0cc76
--- /dev/null
+++ b/csharp/Facebook.Yoga/Facebook.Yoga.csproj
@@ -0,0 +1,134 @@
+
+
+
+
+ 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/Facebook.Yoga.xproj b/csharp/Facebook.Yoga/Facebook.Yoga.xproj
deleted file mode 100644
index 0341d153..00000000
--- 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 7786b8cf..5e825de2 100644
--- a/csharp/Facebook.Yoga/Native.cs
+++ b/csharp/Facebook.Yoga/Native.cs
@@ -20,90 +20,90 @@ namespace Facebook.Yoga
private const string DllName = "yoga";
#endif
- [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 IntPtr YGNodeNew();
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeInit(IntPtr node);
- [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(IntPtr 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(IntPtr node, IntPtr child, uint index);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeRemoveChild(IntPtr node, IntPtr child);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr YGNodeGetChild(IntPtr node, uint index);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern uint YGNodeChildCount(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeCalculateLayout(IntPtr node,
float availableWidth,
float availableHeight,
YogaDirection parentDirection);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeMarkDirty(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool YGNodeIsDirty(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodePrint(IntPtr 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(IntPtr dstNode, IntPtr srcNode);
#region YG_NODE_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeSetContext(IntPtr node, IntPtr context);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr YGNodeGetContext(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeSetMeasureFunc(
IntPtr node,
[MarshalAs(UnmanagedType.FunctionPtr)] YogaMeasureFunc measureFunc);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.FunctionPtr)]
public static extern YogaMeasureFunc YGNodeGetMeasureFunc(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeSetHasNewLayout(IntPtr node, [MarshalAs(UnmanagedType.I1)] bool hasNewLayout);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool YGNodeGetHasNewLayout(IntPtr node);
@@ -111,174 +111,174 @@ namespace Facebook.Yoga
#region YG_NODE_STYLE_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetDirection(IntPtr node, YogaDirection direction);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaDirection YGNodeStyleGetDirection(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexDirection(IntPtr node, YogaFlexDirection flexDirection);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaFlexDirection YGNodeStyleGetFlexDirection(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetJustifyContent(IntPtr node, YogaJustify justifyContent);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaJustify YGNodeStyleGetJustifyContent(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAlignContent(IntPtr node, YogaAlign alignContent);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaAlign YGNodeStyleGetAlignContent(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAlignItems(IntPtr node, YogaAlign alignItems);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaAlign YGNodeStyleGetAlignItems(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAlignSelf(IntPtr node, YogaAlign alignSelf);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaAlign YGNodeStyleGetAlignSelf(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPositionType(IntPtr node, YogaPositionType positionType);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaPositionType YGNodeStyleGetPositionType(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexWrap(IntPtr node, YogaWrap flexWrap);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaWrap YGNodeStyleGetFlexWrap(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetOverflow(IntPtr node, YogaOverflow flexWrap);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaOverflow YGNodeStyleGetOverflow(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlex(IntPtr node, float flex);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexGrow(IntPtr node, float flexGrow);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetFlexGrow(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexShrink(IntPtr node, float flexShrink);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetFlexShrink(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetFlexBasis(IntPtr node, float flexBasis);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetFlexBasis(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetWidth(IntPtr node, float width);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetWidth(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetHeight(IntPtr node, float height);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetHeight(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMinWidth(IntPtr node, float minWidth);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetMinWidth(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMinHeight(IntPtr node, float minHeight);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetMinHeight(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMaxWidth(IntPtr node, float maxWidth);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetMaxWidth(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMaxHeight(IntPtr node, float maxHeight);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetMaxHeight(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetAspectRatio(IntPtr node, float aspectRatio);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetAspectRatio(IntPtr node);
#endregion
#region YG_NODE_STYLE_EDGE_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPosition(IntPtr node, YogaEdge edge, float position);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetPosition(IntPtr node, YogaEdge edge);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetMargin(IntPtr node, YogaEdge edge, float margin);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetMargin(IntPtr node, YogaEdge edge);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetPadding(IntPtr node, YogaEdge edge, float padding);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetPadding(IntPtr node, YogaEdge edge);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern void YGNodeStyleSetBorder(IntPtr node, YogaEdge edge, float border);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeStyleGetBorder(IntPtr node, YogaEdge edge);
#endregion
#region YG_NODE_LAYOUT_PROPERTY
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetLeft(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetTop(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetRight(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetBottom(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetWidth(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern float YGNodeLayoutGetHeight(IntPtr node);
- [DllImport(DllName)]
+ [DllImport(DllName, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl)]
public static extern YogaDirection YGNodeLayoutGetDirection(IntPtr node);
#endregion
diff --git a/csharp/Facebook.Yoga/project.json b/csharp/Facebook.Yoga/project.json
index a0454a86..58c1ea2a 100644
--- a/csharp/Facebook.Yoga/project.json
+++ b/csharp/Facebook.Yoga/project.json
@@ -1,14 +1,12 @@
-{
- "language": "en",
- "version": "3.0.0-*",
-
+{
"dependencies": {
+ "Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.0"
},
-
"frameworks": {
- "netstandard1.6": {
- "imports": "dnxcore50"
- }
- }
-}
+ "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 00000000..2ca29747
Binary files /dev/null and b/csharp/Yoga/Yoga.rc differ
diff --git a/csharp/Yoga/Yoga.vcxproj b/csharp/Yoga/Yoga.vcxproj
index b3704474..9895d740 100755
--- a/csharp/Yoga/Yoga.vcxproj
+++ b/csharp/Yoga/Yoga.vcxproj
@@ -1,10 +1,18 @@
+
+ Debug
+ ARM
+
Debug
Win32
+
+ Release
+ ARM
+
Release
Win32
@@ -22,7 +30,7 @@
{0446C86B-F47B-4C46-B673-C7AE0CFF35D5}
Win32Proj
Yoga
- 10.0.14393.0
+ 8.1
@@ -31,6 +39,12 @@
v140
Unicode
+
+ DynamicLibrary
+ true
+ v140
+ Unicode
+
DynamicLibrary
false
@@ -38,6 +52,13 @@
true
Unicode
+
+ DynamicLibrary
+ false
+ v140
+ true
+ Unicode
+
DynamicLibrary
true
@@ -59,9 +80,15 @@
+
+
+
+
+
+
@@ -71,15 +98,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)\
@@ -96,12 +141,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)
@@ -114,8 +173,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
@@ -133,8 +209,7 @@
Level3
-
-
+ NotUsing
MaxSpeed
true
true
@@ -153,6 +228,7 @@
+
@@ -163,21 +239,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 c3afcf63..46d05f8a 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 00000000..e96fe63d
--- /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/build/Facebook.Yoga.AfterBuild.targets b/csharp/build/Facebook.Yoga.AfterBuild.targets
new file mode 100644
index 00000000..4828b4a4
--- /dev/null
+++ b/csharp/build/Facebook.Yoga.AfterBuild.targets
@@ -0,0 +1,46 @@
+
+
+
+ $(SolutionDir)Yoga\bin\
+ Yoga
+ x86
+ AMD64
+ ARM
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/tests/Facebook.Yoga.Desktop.Tests/Facebook.Yoga.Desktop.Tests.csproj b/csharp/tests/Facebook.Yoga.Desktop.Tests/Facebook.Yoga.Desktop.Tests.csproj
new file mode 100644
index 00000000..b636e3dc
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Desktop.Tests/Facebook.Yoga.Desktop.Tests.csproj
@@ -0,0 +1,101 @@
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/tests/Facebook.Yoga.Desktop.Tests/Properties/AssemblyInfo.cs b/csharp/tests/Facebook.Yoga.Desktop.Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..fa16ead2
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Desktop.Tests/Properties/AssemblyInfo.cs
@@ -0,0 +1,34 @@
+/**
+ * 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;
+
+// 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: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Facebook, Inc.")]
+[assembly: AssemblyProduct("Facebook.Yoga")]
+[assembly: AssemblyTrademark("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("ac23f444-5545-4196-8b9f-5c1f6b3e7fb3")]
+
+[assembly: NeutralResourcesLanguage("en")]
+
+[assembly: AssemblyVersion("3.0.0.0")]
+[assembly: AssemblyTitle("Facebook.Yoga")]
+
diff --git a/csharp/tests/Facebook.Yoga.Desktop.Tests/packages.config b/csharp/tests/Facebook.Yoga.Desktop.Tests/packages.config
new file mode 100644
index 00000000..b25e5bda
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Desktop.Tests/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/LockScreenLogo.scale-200.png b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/LockScreenLogo.scale-200.png
new file mode 100644
index 00000000..735f57ad
Binary files /dev/null and b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/LockScreenLogo.scale-200.png differ
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/SplashScreen.scale-200.png b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/SplashScreen.scale-200.png
new file mode 100644
index 00000000..023e7f1f
Binary files /dev/null and b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/SplashScreen.scale-200.png differ
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square150x150Logo.scale-200.png b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square150x150Logo.scale-200.png
new file mode 100644
index 00000000..af49fec1
Binary files /dev/null and b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square150x150Logo.scale-200.png differ
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.scale-200.png b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.scale-200.png
new file mode 100644
index 00000000..ce342a2e
Binary files /dev/null and b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.scale-200.png differ
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png
new file mode 100644
index 00000000..f6c02ce9
Binary files /dev/null and b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Square44x44Logo.targetsize-24_altform-unplated.png differ
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/StoreLogo.png b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/StoreLogo.png
new file mode 100644
index 00000000..7385b56c
Binary files /dev/null and b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/StoreLogo.png differ
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Wide310x150Logo.scale-200.png b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Wide310x150Logo.scale-200.png
new file mode 100644
index 00000000..288995b3
Binary files /dev/null and b/csharp/tests/Facebook.Yoga.Universal.Tests/Assets/Wide310x150Logo.scale-200.png differ
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Facebook.Yoga.Universal.Tests.csproj b/csharp/tests/Facebook.Yoga.Universal.Tests/Facebook.Yoga.Universal.Tests.csproj
new file mode 100644
index 00000000..849bfeee
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Universal.Tests/Facebook.Yoga.Universal.Tests.csproj
@@ -0,0 +1,144 @@
+
+
+
+
+ Debug
+ x86
+ {4130594A-0BFE-4846-8A98-2D6040C7B2E5}
+ AppContainerExe
+ Properties
+ Facebook.CSSLayout.Universal.Tests
+ Facebook.CSSLayout.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.CSSLayout.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
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Package.appxmanifest b/csharp/tests/Facebook.Yoga.Universal.Tests/Package.appxmanifest
new file mode 100644
index 00000000..db158f81
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Universal.Tests/Package.appxmanifest
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+ Facebook.CSSLayout.Universal.Tests
+ anforste
+ Assets\StoreLogo.png
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/Properties/AssemblyInfo.cs b/csharp/tests/Facebook.Yoga.Universal.Tests/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..9d904ba4
--- /dev/null
+++ b/csharp/tests/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.CSSLayout.Universal.Tests")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("BlueJeans")]
+[assembly: AssemblyProduct("Facebook.CSSLayout.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/tests/Facebook.Yoga.Universal.Tests/Properties/UnitTestApp.rd.xml b/csharp/tests/Facebook.Yoga.Universal.Tests/Properties/UnitTestApp.rd.xml
new file mode 100644
index 00000000..efee59d2
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Universal.Tests/Properties/UnitTestApp.rd.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml b/csharp/tests/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml
new file mode 100644
index 00000000..3a7a0486
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml
@@ -0,0 +1,8 @@
+
+
+
diff --git a/csharp/tests/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml.cs b/csharp/tests/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml.cs
new file mode 100644
index 00000000..f9a61bda
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Universal.Tests/UnitTestApp.xaml.cs
@@ -0,0 +1,92 @@
+using System;
+using Windows.ApplicationModel;
+using Windows.ApplicationModel.Activation;
+using Windows.UI.Xaml;
+using Windows.UI.Xaml.Controls;
+using Windows.UI.Xaml.Navigation;
+
+namespace Facebook.CSSLayout.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
+
+ var 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/tests/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs b/csharp/tests/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs
new file mode 100644
index 00000000..16a6bb16
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Universal.Tests/YogaNodeTest.cs
@@ -0,0 +1,417 @@
+using Facebook.Yoga;
+using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
+using System;
+
+namespace Facebook.CSSLayout.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/tests/Facebook.Yoga.Universal.Tests/project.json b/csharp/tests/Facebook.Yoga.Universal.Tests/project.json
new file mode 100644
index 00000000..92d14561
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga.Universal.Tests/project.json
@@ -0,0 +1,16 @@
+{
+ "dependencies": {
+ "Microsoft.NETCore.UniversalWindowsPlatform": "5.1.0"
+ },
+ "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/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.projitems b/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.projitems
new file mode 100644
index 00000000..1b6d68df
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.projitems
@@ -0,0 +1,28 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ 320eb7b7-ce99-4382-b145-bdd49f33c7b2
+
+
+ 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 00000000..2ec37894
--- /dev/null
+++ b/csharp/tests/Facebook.Yoga/Facebook.Yoga.Shared.Tests.shproj
@@ -0,0 +1,13 @@
+
+
+
+ 320eb7b7-ce99-4382-b145-bdd49f33c7b2
+ 14.0
+
+
+
+
+
+
+
+