diff --git a/.gitattributes b/.gitattributes
index be0f7e0e50..549c347bd9 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1,2 +1,7 @@
-/Resources/MacAppTemplate.app/Contents/MacOS/* eol=lf
-*.sh eol=lf
+
+* text=auto
+*.sh eol=lf
+*.sln eol=crlf
+*.cmd eol=crlf
+*.csproj text
+*.xaml text
diff --git a/.gitignore b/.gitignore
index b0ee2ad689..21fdaa6575 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,7 @@ obj/
UpgradeLog*.htm
Source/packages
Source/Components
+AppPackages
+Resources/packages
+Samples/packages
+Source/Addins/Eto.Addin.XamarinStudio/packages
diff --git a/Help/Help.shfbproj b/Help/Help.shfbproj
index 6544698e54..21f67067dc 100644
--- a/Help/Help.shfbproj
+++ b/Help/Help.shfbproj
@@ -1,69 +1,68 @@
-
-
-
+
+
+
- Debug
- AnyCPU
- 2.0
- {130627a0-3530-4939-8d7a-c447563618d1}
- 1.9.3.0
+ sources -->
+ Debug
+ AnyCPU
+ 2.0
+ {130627a0-3530-4939-8d7a-c447563618d1}
+ 1.9.9.0
- Documentation
- Documentation
- Documentation
-
- ..\BuildOutput\Help\html-shfb\
- EtoForms
- en-US
- Website
-
-
-
-
- Eto.Forms documentation
- vs2010
- InheritedMembers, InheritedFrameworkMembers, Protected, ProtectedInternalAsProtected, SealedProtected
- Eto.Forms Cross Platform UI Framework
-
- Eto
- Eto.Forms User Interface
- Eto.IO Input/Output abstractions
- Misc
-
-
+ Studio adds them anyway -->
+ Documentation
+ Documentation
+ Documentation
+
+ ..\BuildOutput\Help\html-shfb\
+ EtoForms
+ en-US
+ Website
+
+
+
+ Eto.Forms documentation
+ vs2010
+ InheritedMembers, InheritedFrameworkMembers, Protected, ProtectedInternalAsProtected, SealedProtected
+ Eto.Forms Cross Platform UI Framework
+
+ Eto
+ Eto.Forms User Interface
+ Eto.IO Input/Output abstractions
+ Misc
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- BuildOutput\Debug\Eto.dll
-
-
-
-
-
-
-
-
-
-
+ common platform types that may appear. -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BuildOutput\Debug\Eto.dll
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Help/Site Map.sitemap b/Help/Site Map.sitemap
index 5dbcacac1e..32441796f1 100644
--- a/Help/Site Map.sitemap
+++ b/Help/Site Map.sitemap
@@ -1,4 +1,4 @@
-
-
-
+
+
+
\ No newline at end of file
diff --git a/Help/Top.html b/Help/Top.html
index 9d414b4220..68037abdd1 100644
--- a/Help/Top.html
+++ b/Help/Top.html
@@ -1,11 +1,11 @@
-
-
-
- Eto.Forms Documentation
-
-
-
-
-
-
-
+
+
+
+ Eto.Forms Documentation
+
+
+
+
+
+
+
diff --git a/LICENSE b/LICENSE
index 7e1f571848..dbc60f0153 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
AUTHORS
-Copyright © 2011-2013 Curtis Wensley. All Rights Reserved.
+Copyright © 2011-2014 Curtis Wensley. All Rights Reserved.
Copyright © 2012-2013 Vivek Jhaveri. All Rights Reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted
diff --git a/Libraries/GtkSharp3/atk-sharp.dll b/Libraries/GtkSharp3/atk-sharp.dll
old mode 100755
new mode 100644
index e4a33fc05a..c37e889b0c
Binary files a/Libraries/GtkSharp3/atk-sharp.dll and b/Libraries/GtkSharp3/atk-sharp.dll differ
diff --git a/Libraries/GtkSharp3/atk-sharp.dll.config b/Libraries/GtkSharp3/atk-sharp.dll.config
index 348f1e4a2c..b77122d51f 100644
--- a/Libraries/GtkSharp3/atk-sharp.dll.config
+++ b/Libraries/GtkSharp3/atk-sharp.dll.config
@@ -1,4 +1,5 @@
+
diff --git a/Libraries/GtkSharp3/cairo-sharp.dll b/Libraries/GtkSharp3/cairo-sharp.dll
old mode 100755
new mode 100644
index 581836f9f9..4fe7a030d2
Binary files a/Libraries/GtkSharp3/cairo-sharp.dll and b/Libraries/GtkSharp3/cairo-sharp.dll differ
diff --git a/Libraries/GtkSharp3/gdk-sharp.dll b/Libraries/GtkSharp3/gdk-sharp.dll
old mode 100755
new mode 100644
index 2e84c1b634..04982f9a0c
Binary files a/Libraries/GtkSharp3/gdk-sharp.dll and b/Libraries/GtkSharp3/gdk-sharp.dll differ
diff --git a/Libraries/GtkSharp3/gio-sharp.dll b/Libraries/GtkSharp3/gio-sharp.dll
old mode 100755
new mode 100644
index 4df1526edf..f106b0e429
Binary files a/Libraries/GtkSharp3/gio-sharp.dll and b/Libraries/GtkSharp3/gio-sharp.dll differ
diff --git a/Libraries/GtkSharp3/gio-sharp.dll.config b/Libraries/GtkSharp3/gio-sharp.dll.config
index 8b61325e4e..d2b8f89bda 100644
--- a/Libraries/GtkSharp3/gio-sharp.dll.config
+++ b/Libraries/GtkSharp3/gio-sharp.dll.config
@@ -3,4 +3,5 @@
+
diff --git a/Libraries/GtkSharp3/glib-sharp.dll b/Libraries/GtkSharp3/glib-sharp.dll
old mode 100755
new mode 100644
index c54f257900..0e9209f1a8
Binary files a/Libraries/GtkSharp3/glib-sharp.dll and b/Libraries/GtkSharp3/glib-sharp.dll differ
diff --git a/Libraries/GtkSharp3/gtk-dotnet.dll b/Libraries/GtkSharp3/gtk-dotnet.dll
deleted file mode 100755
index a04c529de0..0000000000
Binary files a/Libraries/GtkSharp3/gtk-dotnet.dll and /dev/null differ
diff --git a/Libraries/GtkSharp3/gtk-dotnet.dll.config b/Libraries/GtkSharp3/gtk-dotnet.dll.config
deleted file mode 100644
index 9e12841d07..0000000000
--- a/Libraries/GtkSharp3/gtk-dotnet.dll.config
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/Libraries/GtkSharp3/gtk-dotnet.dll.mdb b/Libraries/GtkSharp3/gtk-dotnet.dll.mdb
deleted file mode 100644
index 53daf895de..0000000000
Binary files a/Libraries/GtkSharp3/gtk-dotnet.dll.mdb and /dev/null differ
diff --git a/Libraries/GtkSharp3/gtk-sharp.dll b/Libraries/GtkSharp3/gtk-sharp.dll
old mode 100755
new mode 100644
index 67c06ce19e..9495e459a7
Binary files a/Libraries/GtkSharp3/gtk-sharp.dll and b/Libraries/GtkSharp3/gtk-sharp.dll differ
diff --git a/Libraries/GtkSharp3/gtk-sharp.dll.config b/Libraries/GtkSharp3/gtk-sharp.dll.config
index 72599c1703..f58f0e67ac 100644
--- a/Libraries/GtkSharp3/gtk-sharp.dll.config
+++ b/Libraries/GtkSharp3/gtk-sharp.dll.config
@@ -3,4 +3,5 @@
+
diff --git a/Libraries/GtkSharp3/libatksharpglue-3.so b/Libraries/GtkSharp3/libatksharpglue-3.so
new file mode 100644
index 0000000000..d17e19fce0
Binary files /dev/null and b/Libraries/GtkSharp3/libatksharpglue-3.so differ
diff --git a/Libraries/GtkSharp3/libgiosharpglue-3.so b/Libraries/GtkSharp3/libgiosharpglue-3.so
new file mode 100644
index 0000000000..a5cae508b5
Binary files /dev/null and b/Libraries/GtkSharp3/libgiosharpglue-3.so differ
diff --git a/Libraries/GtkSharp3/libgtksharpglue-3.so b/Libraries/GtkSharp3/libgtksharpglue-3.so
new file mode 100644
index 0000000000..cc1fb4aa9d
Binary files /dev/null and b/Libraries/GtkSharp3/libgtksharpglue-3.so differ
diff --git a/Libraries/GtkSharp3/libpangosharpglue-3.so b/Libraries/GtkSharp3/libpangosharpglue-3.so
new file mode 100644
index 0000000000..880322d8e2
Binary files /dev/null and b/Libraries/GtkSharp3/libpangosharpglue-3.so differ
diff --git a/Libraries/GtkSharp3/pango-sharp.dll b/Libraries/GtkSharp3/pango-sharp.dll
old mode 100755
new mode 100644
index 26359ac18b..77dde0bf88
Binary files a/Libraries/GtkSharp3/pango-sharp.dll and b/Libraries/GtkSharp3/pango-sharp.dll differ
diff --git a/Libraries/GtkSharp3/pango-sharp.dll.config b/Libraries/GtkSharp3/pango-sharp.dll.config
index 400bb06ea2..0c89f5c547 100644
--- a/Libraries/GtkSharp3/pango-sharp.dll.config
+++ b/Libraries/GtkSharp3/pango-sharp.dll.config
@@ -3,4 +3,5 @@
+
diff --git a/Libraries/MonoMac64/MonoMac-License.txt b/Libraries/MonoMac64/MonoMac-License.txt
new file mode 100644
index 0000000000..c69cf76be8
--- /dev/null
+++ b/Libraries/MonoMac64/MonoMac-License.txt
@@ -0,0 +1,217 @@
+Dual licensed under either the Apache 2 license or the MIT X11 license
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+
+Apache License
+Version 2.0, January 2004
+http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by the
+copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and all other
+entities that control, are controlled by, or are under common control
+with that entity. For the purposes of this definition, "control" means
+(i) the power, direct or indirect, to cause the direction or
+management of such entity, whether by contract or otherwise, or (ii)
+ownership of fifty percent (50%) or more of the outstanding shares, or
+(iii) beneficial ownership of such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity exercising
+permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation
+source, and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but not
+limited to compiled object code, generated documentation, and
+conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object
+form, made available under the License, as indicated by a copyright
+notice that is included in or attached to the work (an example is
+provided in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object
+form, that is based on (or derived from) the Work and for which the
+editorial revisions, annotations, elaborations, or other modifications
+represent, as a whole, an original work of authorship. For the
+purposes of this License, Derivative Works shall not include works
+that remain separable from, or merely link (or bind by name) to the
+interfaces of, the Work and Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the
+original version of the Work and any modifications or additions to
+that Work or Derivative Works thereof, that is intentionally submitted
+to Licensor for inclusion in the Work by the copyright owner or by an
+individual or Legal Entity authorized to submit on behalf of the
+copyright owner. For the purposes of this definition, "submitted"
+means any form of electronic, verbal, or written communication sent to
+the Licensor or its representatives, including but not limited to
+communication on electronic mailing lists, source code control
+systems, and issue tracking systems that are managed by, or on behalf
+of, the Licensor for the purpose of discussing and improving the Work,
+but excluding communication that is conspicuously marked or otherwise
+designated in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+2. Grant of Copyright License.
+
+Subject to the terms and conditions of this License, each Contributor
+hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
+royalty-free, irrevocable copyright license to reproduce, prepare
+Derivative Works of, publicly display, publicly perform, sublicense,
+and distribute the Work and such Derivative Works in Source or Object
+form.
+
+3. Grant of Patent License.
+
+Subject to the terms and conditions of this License, each Contributor
+hereby grants to You a perpetual, worldwide, non-exclusive, no-charge,
+royalty-free, irrevocable (except as stated in this section) patent
+license to make, have made, use, offer to sell, sell, import, and
+otherwise transfer the Work, where such license applies only to those
+patent claims licensable by such Contributor that are necessarily
+infringed by their Contribution(s) alone or by combination of their
+Contribution(s) with the Work to which such Contribution(s) was
+submitted. If You institute patent litigation against any entity
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+the Work or a Contribution incorporated within the Work constitutes
+direct or contributory patent infringement, then any patent licenses
+granted to You under this License for that Work shall terminate as of
+the date such litigation is filed.
+
+4. Redistribution.
+
+You may reproduce and distribute copies of the Work or Derivative
+Works thereof in any medium, with or without modifications, and in
+Source or Object form, provided that You meet the following
+conditions:
+
+You must give any other recipients of the Work or Derivative Works a
+copy of this License; and You must cause any modified files to carry
+prominent notices stating that You changed the files; and You must
+retain, in the Source form of any Derivative Works that You
+distribute, all copyright, patent, trademark, and attribution notices
+from the Source form of the Work, excluding those notices that do not
+pertain to any part of the Derivative Works; and If the Work includes
+a "NOTICE" text file as part of its distribution, then any Derivative
+Works that You distribute must include a readable copy of the
+attribution notices contained within such NOTICE file, excluding those
+notices that do not pertain to any part of the Derivative Works, in at
+least one of the following places: within a NOTICE text file
+distributed as part of the Derivative Works; within the Source form or
+documentation, if provided along with the Derivative Works; or, within
+a display generated by the Derivative Works, if and wherever such
+third-party notices normally appear. The contents of the NOTICE file
+are for informational purposes only and do not modify the License. You
+may add Your own attribution notices within Derivative Works that You
+distribute, alongside or as an addendum to the NOTICE text from the
+Work, provided that such additional attribution notices cannot be
+construed as modifying the License. You may add Your own copyright
+statement to Your modifications and may provide additional or
+different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works
+as a whole, provided Your use, reproduction, and distribution of the
+Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions.
+
+Unless You explicitly state otherwise, any Contribution intentionally
+submitted for inclusion in the Work by You to the Licensor shall be
+under the terms and conditions of this License, without any additional
+terms or conditions. Notwithstanding the above, nothing herein shall
+supersede or modify the terms of any separate license agreement you
+may have executed with Licensor regarding such Contributions.
+
+6. Trademarks.
+
+This License does not grant permission to use the trade names,
+trademarks, service marks, or product names of the Licensor, except as
+required for reasonable and customary use in describing the origin of
+the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty.
+
+Unless required by applicable law or agreed to in writing, Licensor
+provides the Work (and each Contributor provides its Contributions) on
+an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
+express or implied, including, without limitation, any warranties or
+conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR
+A PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability.
+
+In no event and under no legal theory, whether in tort (including
+negligence), contract, or otherwise, unless required by applicable law
+(such as deliberate and grossly negligent acts) or agreed to in
+writing, shall any Contributor be liable to You for damages, including
+any direct, indirect, special, incidental, or consequential damages of
+any character arising as a result of this License or out of the use or
+inability to use the Work (including but not limited to damages for
+loss of goodwill, work stoppage, computer failure or malfunction, or
+any and all other commercial damages or losses), even if such
+Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability.
+
+While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work
+
+To apply the Apache License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]" replaced
+with your own identifying information. (Don't include the brackets!)
+The text should be enclosed in the appropriate comment syntax for the
+file format. We also recommend that a file or class name and
+description of purpose be included on the same "printed page" as the
+copyright notice for easier identification within third-party
+archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
\ No newline at end of file
diff --git a/Libraries/MonoMac64/MonoMac.CFNetwork.dll b/Libraries/MonoMac64/MonoMac.CFNetwork.dll
new file mode 100755
index 0000000000..c8e2ad48fd
Binary files /dev/null and b/Libraries/MonoMac64/MonoMac.CFNetwork.dll differ
diff --git a/Libraries/MonoMac64/MonoMac.CFNetwork.dll.mdb b/Libraries/MonoMac64/MonoMac.CFNetwork.dll.mdb
new file mode 100644
index 0000000000..1eb68bcbcb
Binary files /dev/null and b/Libraries/MonoMac64/MonoMac.CFNetwork.dll.mdb differ
diff --git a/Libraries/MonoMac64/MonoMac.dll b/Libraries/MonoMac64/MonoMac.dll
new file mode 100755
index 0000000000..10def97599
Binary files /dev/null and b/Libraries/MonoMac64/MonoMac.dll differ
diff --git a/Libraries/MonoMac64/MonoMac.dll.mdb b/Libraries/MonoMac64/MonoMac.dll.mdb
new file mode 100644
index 0000000000..00853cf2ce
Binary files /dev/null and b/Libraries/MonoMac64/MonoMac.dll.mdb differ
diff --git a/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.cs b/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.cs
index 87fd395411..031e386916 100644
--- a/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.cs
+++ b/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.cs
@@ -1,719 +1,719 @@
-//
-// ColorPicker.cs
-// An HSB (hue, saturation, brightness) based
-// color picker.
-//
-//
-using System;
-using System.Windows;
-using System.Windows.Navigation;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.Windows.Ink;
-using System.Windows.Controls;
-using System.Collections.Generic;
-using System.Windows.Input;
-using System.Windows.Data;
-using System.Windows.Markup;
-using System.Text;
-
-namespace Microsoft.Samples.CustomControls
-{
-
-
- #region ColorPicker
-
- public class ColorPicker : Control
- {
-
-
- static ColorPicker()
- {
- DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorPicker), new FrameworkPropertyMetadata(typeof(ColorPicker)));
- }
-
- public ColorPicker()
- {
- templateApplied = false;
- m_color = Colors.White;
- shouldFindPoint = true;
- SetValue(AProperty, m_color.A);
- SetValue(RProperty, m_color.R);
- SetValue(GProperty, m_color.G);
- SetValue(BProperty, m_color.B);
- SetValue(SelectedColorProperty, m_color);
- SetValue (AlphaVisibilityProperty, System.Windows.Visibility.Visible);
- }
-
-
- #region Public Methods
-
-
- public override void OnApplyTemplate()
- {
-
- base.OnApplyTemplate();
- m_ColorDetail = GetTemplateChild(ColorDetailName) as FrameworkElement;
- m_ColorMarker = GetTemplateChild(ColorMarkerName) as Path;
- m_ColorSlider = GetTemplateChild(ColorSliderName) as SpectrumSlider;
- m_ColorSlider.ValueChanged += new RoutedPropertyChangedEventHandler(BaseColorChanged);
-
-
- m_ColorMarker.RenderTransform = markerTransform;
- m_ColorMarker.RenderTransformOrigin = new Point(0.5, 0.5);
- m_ColorDetail.MouseLeftButtonDown += new MouseButtonEventHandler(OnMouseLeftButtonDown);
- m_ColorDetail.PreviewMouseMove += new MouseEventHandler(OnMouseMove);
- m_ColorDetail.SizeChanged += new SizeChangedEventHandler(ColorDetailSizeChanged);
-
- templateApplied = true;
- shouldFindPoint = true;
- isAlphaChange = false;
-
- SelectedColor = m_color;
-
-
-
-
- }
-
-
-
- #endregion
-
-
- #region Public Properties
-
- // Gets or sets the selected color.
- public System.Windows.Media.Color SelectedColor
- {
- get
- {
-
- return (System.Windows.Media.Color)GetValue(SelectedColorProperty);
- }
- set
- {
- SetValue(SelectedColorProperty, m_color);
- setColor((Color)value);
- }
- }
-
-
- #region RGB Properties
- // Gets or sets the ARGB alpha value of the selected color.
- public byte A
- {
- get
- {
- return (byte)GetValue(AProperty);
- }
- set
- {
- SetValue(AProperty, value);
- }
- }
-
- // Gets or sets the ARGB red value of the selected color.
- public byte R
- {
- get
- {
- return (byte)GetValue(RProperty);
- }
- set
- {
- SetValue(RProperty, value);
- }
- }
-
- // Gets or sets the ARGB green value of the selected color.
- public byte G
- {
- get
- {
- return (byte)GetValue(GProperty);
- }
- set
- {
- SetValue(GProperty, value);
- }
- }
-
- // Gets or sets the ARGB blue value of the selected color.
- public byte B
- {
- get
- {
- return (byte)GetValue(BProperty);
- }
- set
- {
- SetValue(BProperty, value);
- }
- }
- #endregion RGB Properties
-
- #region ScRGB Properties
-
- // Gets or sets the ScRGB alpha value of the selected color.
- public double ScA
- {
- get
- {
- return (double)GetValue(ScAProperty);
- }
- set
- {
- SetValue(ScAProperty, value);
- }
- }
-
- // Gets or sets the ScRGB red value of the selected color.
- public double ScR
- {
- get
- {
- return (double)GetValue(ScRProperty);
- }
- set
- {
- SetValue(RProperty, value);
- }
- }
-
- // Gets or sets the ScRGB green value of the selected color.
- public double ScG
- {
- get
- {
- return (double)GetValue(ScGProperty);
- }
- set
- {
- SetValue(GProperty, value);
- }
- }
-
- // Gets or sets the ScRGB blue value of the selected color.
- public double ScB
- {
- get
- {
- return (double)GetValue(BProperty);
- }
- set
- {
- SetValue(BProperty, value);
- }
- }
- #endregion ScRGB Properties
-
- // Gets or sets the the selected color in hexadecimal notation.
- public string HexadecimalString
- {
- get
- {
- return (string)GetValue(HexadecimalStringProperty);
- }
- set
- {
- SetValue(HexadecimalStringProperty, value);
- }
- }
-
- public bool ShowAlpha
- {
- get
- {
- return (Visibility)GetValue (AlphaVisibilityProperty) == System.Windows.Visibility.Visible;
- }
- set
- {
- SetValue (AlphaVisibilityProperty, value ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed);
- if (!ShowAlpha) this.A = 255;
- }
- }
-
- #endregion
-
-
- #region Public Events
-
- public event RoutedPropertyChangedEventHandler SelectedColorChanged
- {
- add
- {
- AddHandler(SelectedColorChangedEvent, value);
- }
-
- remove
- {
- RemoveHandler(SelectedColorChangedEvent, value);
- }
- }
-
- #endregion
-
-
- #region Dependency Property Fields
- public static readonly DependencyProperty SelectedColorProperty =
- DependencyProperty.Register
- ("SelectedColor", typeof(System.Windows.Media.Color), typeof(ColorPicker),
- new PropertyMetadata(System.Windows.Media.Colors.Transparent,
- new PropertyChangedCallback(selectedColor_changed)
-
- ));
-
- public static readonly DependencyProperty ScAProperty =
-
- DependencyProperty.Register
- ("ScA", typeof(float), typeof(ColorPicker),
- new PropertyMetadata((float)1,
- new PropertyChangedCallback(ScAChanged)
- ));
-
- public static readonly DependencyProperty ScRProperty =
- DependencyProperty.Register
- ("ScR", typeof(float), typeof(ColorPicker),
- new PropertyMetadata((float)1,
- new PropertyChangedCallback(ScRChanged)
- ));
-
- public static readonly DependencyProperty ScGProperty =
- DependencyProperty.Register
- ("ScG", typeof(float), typeof(ColorPicker),
- new PropertyMetadata((float)1,
- new PropertyChangedCallback(ScGChanged)
- ));
-
- public static readonly DependencyProperty ScBProperty =
- DependencyProperty.Register
- ("ScB", typeof(float), typeof(ColorPicker),
- new PropertyMetadata((float)1,
- new PropertyChangedCallback(ScBChanged)
- ));
-
- public static readonly DependencyProperty AProperty =
- DependencyProperty.Register
- ("A", typeof(byte), typeof(ColorPicker),
- new PropertyMetadata((byte)255,
- new PropertyChangedCallback(AChanged)
- ));
-
- public static readonly DependencyProperty RProperty =
- DependencyProperty.Register
- ("R", typeof(byte), typeof(ColorPicker),
- new PropertyMetadata((byte)255,
- new PropertyChangedCallback(RChanged)
- ));
-
- public static readonly DependencyProperty GProperty =
- DependencyProperty.Register
- ("G", typeof(byte), typeof(ColorPicker),
- new PropertyMetadata((byte)255,
- new PropertyChangedCallback(GChanged)
- ));
-
- public static readonly DependencyProperty BProperty =
- DependencyProperty.Register
- ("B", typeof(byte), typeof(ColorPicker),
- new PropertyMetadata((byte)255,
- new PropertyChangedCallback(BChanged)
- ));
-
- public static readonly DependencyProperty HexadecimalStringProperty =
- DependencyProperty.Register
- ("HexadecimalString", typeof(string), typeof(ColorPicker),
- new PropertyMetadata("#FFFFFFFF",
- new PropertyChangedCallback(HexadecimalStringChanged)
- ));
-
- public static readonly DependencyProperty AlphaVisibilityProperty =
- DependencyProperty.Register
- ("AlphaVisibility", typeof (Visibility), typeof (ColorPicker),
- new PropertyMetadata (Visibility.Visible));
-
- #endregion
-
-
- #region RoutedEvent Fields
-
- public static readonly RoutedEvent SelectedColorChangedEvent = EventManager.RegisterRoutedEvent(
- "SelectedColorChanged",
- RoutingStrategy.Bubble,
- typeof(RoutedPropertyChangedEventHandler),
- typeof(ColorPicker)
- );
- #endregion
-
-
- #region Property Changed Callbacks
-
- private static void AChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnAChanged((byte)e.NewValue);
- }
-
- protected virtual void OnAChanged(byte newValue)
- {
-
- m_color.A = newValue;
- SetValue(ScAProperty, m_color.ScA);
- SetValue(SelectedColorProperty, m_color);
-
- }
-
- private static void RChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnRChanged((byte)e.NewValue);
- }
-
- protected virtual void OnRChanged(byte newValue)
- {
- m_color.R = newValue;
- SetValue(ScRProperty, m_color.ScR);
- SetValue(SelectedColorProperty, m_color);
- }
-
-
- private static void GChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnGChanged((byte)e.NewValue);
- }
-
- protected virtual void OnGChanged(byte newValue)
- {
-
- m_color.G = newValue;
- SetValue(ScGProperty, m_color.ScG);
- SetValue(SelectedColorProperty, m_color);
- }
-
-
- private static void BChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnBChanged((byte)e.NewValue);
- }
-
- protected virtual void OnBChanged(byte newValue)
- {
- m_color.B = newValue;
- SetValue(ScBProperty, m_color.ScB);
- SetValue(SelectedColorProperty, m_color);
- }
-
-
- private static void ScAChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnScAChanged((float)e.NewValue);
- }
-
- protected virtual void OnScAChanged(float newValue)
- {
- isAlphaChange = true;
- if (shouldFindPoint)
- {
- m_color.ScA = newValue;
- SetValue(AProperty, m_color.A);
- SetValue(SelectedColorProperty, m_color);
- SetValue (HexadecimalStringProperty, GetHexadecimal ());
- }
- isAlphaChange = false;
- }
-
-
- private static void ScRChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnScRChanged((float)e.NewValue);
-
- }
-
- protected virtual void OnScRChanged(float newValue)
- {
- if (shouldFindPoint)
- {
- m_color.ScR = newValue;
- SetValue(RProperty, m_color.R);
- SetValue(SelectedColorProperty, m_color);
- SetValue (HexadecimalStringProperty, GetHexadecimal ());
- }
- }
-
-
- private static void ScGChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnScGChanged((float)e.NewValue);
- }
-
- protected virtual void OnScGChanged(float newValue)
- {
-
- if (shouldFindPoint)
- {
- m_color.ScG = newValue;
- SetValue(GProperty, m_color.G);
- SetValue(SelectedColorProperty, m_color);
- SetValue (HexadecimalStringProperty, GetHexadecimal ());
- }
- }
-
-
- private static void ScBChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnScBChanged((float)e.NewValue);
- }
-
- protected virtual void OnScBChanged(float newValue)
- {
- if (shouldFindPoint)
- {
- m_color.ScB = newValue;
- SetValue(BProperty, m_color.B);
- SetValue(SelectedColorProperty, m_color);
- SetValue (HexadecimalStringProperty, GetHexadecimal ());
- }
- }
-
- private static void HexadecimalStringChanged(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker c = (ColorPicker)d;
- c.OnHexadecimalStringChanged((string)e.OldValue, (string)e.NewValue);
- }
-
- protected virtual void OnHexadecimalStringChanged(string oldValue, string newValue)
- {
-
- try
- {
-
- if (shouldFindPoint)
- {
-
- m_color = (Color)ColorConverter.ConvertFromString(newValue);
-
- }
-
- SetValue(AProperty, m_color.A);
- SetValue(RProperty, m_color.R);
- SetValue(GProperty, m_color.G);
- SetValue(BProperty, m_color.B);
-
-
- if (shouldFindPoint && !isAlphaChange && templateApplied)
- {
- updateMarkerPosition(m_color);
- }
- }
- catch (FormatException fException)
- {
-
- SetValue(HexadecimalStringProperty, oldValue);
- }
-
- }
-
- private static void selectedColor_changed(DependencyObject d,
- DependencyPropertyChangedEventArgs e)
- {
- ColorPicker cPicker = (ColorPicker)d;
- cPicker.OnSelectedColorChanged((Color)e.OldValue, (Color)e.NewValue);
- }
-
- protected virtual void OnSelectedColorChanged(Color oldColor, Color newColor)
- {
-
- RoutedPropertyChangedEventArgs newEventArgs =
- new RoutedPropertyChangedEventArgs(oldColor, newColor);
- newEventArgs.RoutedEvent = ColorPicker.SelectedColorChangedEvent;
- RaiseEvent(newEventArgs);
- }
-
- #endregion
-
-
- #region Template Part Event Handlers
-
-
- protected override void OnTemplateChanged(ControlTemplate oldTemplate, ControlTemplate newTemplate)
- {
-
- templateApplied = false;
- if (oldTemplate != null)
- {
- m_ColorSlider.ValueChanged -= new RoutedPropertyChangedEventHandler(BaseColorChanged);
- m_ColorDetail.MouseLeftButtonDown -= new MouseButtonEventHandler(OnMouseLeftButtonDown);
- m_ColorDetail.PreviewMouseMove -= new MouseEventHandler(OnMouseMove);
- m_ColorDetail.SizeChanged -= new SizeChangedEventHandler(ColorDetailSizeChanged);
- m_ColorDetail = null;
- m_ColorMarker = null;
- m_ColorSlider = null;
- }
- base.OnTemplateChanged(oldTemplate, newTemplate);
- }
-
-
- private void BaseColorChanged(
- object sender,
- RoutedPropertyChangedEventArgs e)
- {
-
- if (m_ColorPosition != null)
- {
-
- determineColor((Point)m_ColorPosition);
- }
-
- }
-
- private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
-
- Point p = e.GetPosition(m_ColorDetail);
- updateMarkerPosition(p);
- }
-
- private void OnMouseMove(object sender, MouseEventArgs e)
- {
-
-
- if (e.LeftButton == MouseButtonState.Pressed)
- {
-
- Point p = e.GetPosition(m_ColorDetail);
- updateMarkerPosition(p);
- Mouse.Synchronize();
-
- }
- }
-
- private void ColorDetailSizeChanged(object sender, SizeChangedEventArgs args)
- {
-
- if (args.PreviousSize != Size.Empty &&
- args.PreviousSize.Width != 0 && args.PreviousSize.Height != 0)
- {
- double widthDifference = args.NewSize.Width / args.PreviousSize.Width;
- double heightDifference = args.NewSize.Height / args.PreviousSize.Height;
- markerTransform.X = markerTransform.X * widthDifference;
- markerTransform.Y = markerTransform.Y * heightDifference;
- }
- else if (m_ColorPosition != null)
- {
- markerTransform.X = ((Point)m_ColorPosition).X * args.NewSize.Width;
- markerTransform.Y = ((Point)m_ColorPosition).Y * args.NewSize.Height;
- }
- }
-
- #endregion
-
-
- #region Color Resolution Helpers
-
- string GetHexadecimal ()
- {
- if (ShowAlpha)
- return m_color.ToString ();
- else
- return string.Format ("#{0:X2}{1:X2}{2:X2}", m_color.R, m_color.G, m_color.B);
- }
-
-
- private void setColor(Color theColor)
- {
- m_color = theColor;
-
- if (templateApplied) {
- SetValue(AProperty, m_color.A);
- SetValue(RProperty, m_color.R);
- SetValue(GProperty, m_color.G);
- SetValue(BProperty, m_color.B);
- updateMarkerPosition(theColor);
- }
-
- }
-
- private void updateMarkerPosition(Point p)
- {
- markerTransform.X = p.X;
- markerTransform.Y = p.Y;
- p.X = p.X / m_ColorDetail.ActualWidth;
- p.Y = p.Y / m_ColorDetail.ActualHeight;
- m_ColorPosition = p;
- determineColor(p);
- }
-
- private void updateMarkerPosition(Color theColor)
- {
- m_ColorPosition = null;
-
-
- HsvColor hsv = ColorUtilities.ConvertRgbToHsv(theColor.R, theColor.G, theColor.B);
-
- m_ColorSlider.Value = hsv.H;
-
- Point p = new Point(hsv.S, 1 - hsv.V);
-
- m_ColorPosition = p;
- p.X = p.X * m_ColorDetail.ActualWidth;
- p.Y = p.Y * m_ColorDetail.ActualHeight;
- markerTransform.X = p.X;
- markerTransform.Y = p.Y;
-
- }
-
- private void determineColor(Point p)
- {
-
- HsvColor hsv = new HsvColor(360 - m_ColorSlider.Value, 1, 1);
- hsv.S = p.X;
- hsv.V = 1 - p.Y;
- m_color = ColorUtilities.ConvertHsvToRgb(hsv.H, hsv.S, hsv.V);
- shouldFindPoint = false;
- m_color.ScA = (float)GetValue(ScAProperty);
- SetValue (HexadecimalStringProperty, GetHexadecimal ());
- shouldFindPoint = true;
-
- }
-
- #endregion
-
-
- #region Private Fields
- private SpectrumSlider m_ColorSlider;
- private static readonly string ColorSliderName = "PART_ColorSlider";
- private FrameworkElement m_ColorDetail;
- private static readonly string ColorDetailName = "PART_ColorDetail";
- private TranslateTransform markerTransform = new TranslateTransform();
- private Path m_ColorMarker;
- private static readonly string ColorMarkerName = "PART_ColorMarker";
- private Point? m_ColorPosition;
- private Color m_color;
- private bool shouldFindPoint;
- private bool templateApplied;
- private bool isAlphaChange;
- #endregion
-
- }
-
- #endregion ColorPicker
-
-
+//
+// ColorPicker.cs
+// An HSB (hue, saturation, brightness) based
+// color picker.
+//
+//
+using System;
+using System.Windows;
+using System.Windows.Navigation;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Shapes;
+using System.Windows.Ink;
+using System.Windows.Controls;
+using System.Collections.Generic;
+using System.Windows.Input;
+using System.Windows.Data;
+using System.Windows.Markup;
+using System.Text;
+
+namespace Microsoft.Samples.CustomControls
+{
+
+
+ #region ColorPicker
+
+ public class ColorPicker : Control
+ {
+
+
+ static ColorPicker()
+ {
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorPicker), new FrameworkPropertyMetadata(typeof(ColorPicker)));
+ }
+
+ public ColorPicker()
+ {
+ templateApplied = false;
+ m_color = Colors.White;
+ shouldFindPoint = true;
+ SetValue(AProperty, m_color.A);
+ SetValue(RProperty, m_color.R);
+ SetValue(GProperty, m_color.G);
+ SetValue(BProperty, m_color.B);
+ SetValue(SelectedColorProperty, m_color);
+ SetValue (AlphaVisibilityProperty, System.Windows.Visibility.Visible);
+ }
+
+
+ #region Public Methods
+
+
+ public override void OnApplyTemplate()
+ {
+
+ base.OnApplyTemplate();
+ m_ColorDetail = GetTemplateChild(ColorDetailName) as FrameworkElement;
+ m_ColorMarker = GetTemplateChild(ColorMarkerName) as Path;
+ m_ColorSlider = GetTemplateChild(ColorSliderName) as SpectrumSlider;
+ m_ColorSlider.ValueChanged += new RoutedPropertyChangedEventHandler(BaseColorChanged);
+
+
+ m_ColorMarker.RenderTransform = markerTransform;
+ m_ColorMarker.RenderTransformOrigin = new Point(0.5, 0.5);
+ m_ColorDetail.MouseLeftButtonDown += new MouseButtonEventHandler(OnMouseLeftButtonDown);
+ m_ColorDetail.PreviewMouseMove += new MouseEventHandler(OnMouseMove);
+ m_ColorDetail.SizeChanged += new SizeChangedEventHandler(ColorDetailSizeChanged);
+
+ templateApplied = true;
+ shouldFindPoint = true;
+ isAlphaChange = false;
+
+ SelectedColor = m_color;
+
+
+
+
+ }
+
+
+
+ #endregion
+
+
+ #region Public Properties
+
+ // Gets or sets the selected color.
+ public System.Windows.Media.Color SelectedColor
+ {
+ get
+ {
+
+ return (System.Windows.Media.Color)GetValue(SelectedColorProperty);
+ }
+ set
+ {
+ SetValue(SelectedColorProperty, m_color);
+ setColor((Color)value);
+ }
+ }
+
+
+ #region RGB Properties
+ // Gets or sets the ARGB alpha value of the selected color.
+ public byte A
+ {
+ get
+ {
+ return (byte)GetValue(AProperty);
+ }
+ set
+ {
+ SetValue(AProperty, value);
+ }
+ }
+
+ // Gets or sets the ARGB red value of the selected color.
+ public byte R
+ {
+ get
+ {
+ return (byte)GetValue(RProperty);
+ }
+ set
+ {
+ SetValue(RProperty, value);
+ }
+ }
+
+ // Gets or sets the ARGB green value of the selected color.
+ public byte G
+ {
+ get
+ {
+ return (byte)GetValue(GProperty);
+ }
+ set
+ {
+ SetValue(GProperty, value);
+ }
+ }
+
+ // Gets or sets the ARGB blue value of the selected color.
+ public byte B
+ {
+ get
+ {
+ return (byte)GetValue(BProperty);
+ }
+ set
+ {
+ SetValue(BProperty, value);
+ }
+ }
+ #endregion RGB Properties
+
+ #region ScRGB Properties
+
+ // Gets or sets the ScRGB alpha value of the selected color.
+ public double ScA
+ {
+ get
+ {
+ return (double)GetValue(ScAProperty);
+ }
+ set
+ {
+ SetValue(ScAProperty, value);
+ }
+ }
+
+ // Gets or sets the ScRGB red value of the selected color.
+ public double ScR
+ {
+ get
+ {
+ return (double)GetValue(ScRProperty);
+ }
+ set
+ {
+ SetValue(RProperty, value);
+ }
+ }
+
+ // Gets or sets the ScRGB green value of the selected color.
+ public double ScG
+ {
+ get
+ {
+ return (double)GetValue(ScGProperty);
+ }
+ set
+ {
+ SetValue(GProperty, value);
+ }
+ }
+
+ // Gets or sets the ScRGB blue value of the selected color.
+ public double ScB
+ {
+ get
+ {
+ return (double)GetValue(BProperty);
+ }
+ set
+ {
+ SetValue(BProperty, value);
+ }
+ }
+ #endregion ScRGB Properties
+
+ // Gets or sets the the selected color in hexadecimal notation.
+ public string HexadecimalString
+ {
+ get
+ {
+ return (string)GetValue(HexadecimalStringProperty);
+ }
+ set
+ {
+ SetValue(HexadecimalStringProperty, value);
+ }
+ }
+
+ public bool ShowAlpha
+ {
+ get
+ {
+ return (Visibility)GetValue (AlphaVisibilityProperty) == System.Windows.Visibility.Visible;
+ }
+ set
+ {
+ SetValue (AlphaVisibilityProperty, value ? System.Windows.Visibility.Visible : System.Windows.Visibility.Collapsed);
+ if (!ShowAlpha) this.A = 255;
+ }
+ }
+
+ #endregion
+
+
+ #region Public Events
+
+ public event RoutedPropertyChangedEventHandler SelectedColorChanged
+ {
+ add
+ {
+ AddHandler(SelectedColorChangedEvent, value);
+ }
+
+ remove
+ {
+ RemoveHandler(SelectedColorChangedEvent, value);
+ }
+ }
+
+ #endregion
+
+
+ #region Dependency Property Fields
+ public static readonly DependencyProperty SelectedColorProperty =
+ DependencyProperty.Register
+ ("SelectedColor", typeof(System.Windows.Media.Color), typeof(ColorPicker),
+ new PropertyMetadata(System.Windows.Media.Colors.Transparent,
+ new PropertyChangedCallback(selectedColor_changed)
+
+ ));
+
+ public static readonly DependencyProperty ScAProperty =
+
+ DependencyProperty.Register
+ ("ScA", typeof(float), typeof(ColorPicker),
+ new PropertyMetadata((float)1,
+ new PropertyChangedCallback(ScAChanged)
+ ));
+
+ public static readonly DependencyProperty ScRProperty =
+ DependencyProperty.Register
+ ("ScR", typeof(float), typeof(ColorPicker),
+ new PropertyMetadata((float)1,
+ new PropertyChangedCallback(ScRChanged)
+ ));
+
+ public static readonly DependencyProperty ScGProperty =
+ DependencyProperty.Register
+ ("ScG", typeof(float), typeof(ColorPicker),
+ new PropertyMetadata((float)1,
+ new PropertyChangedCallback(ScGChanged)
+ ));
+
+ public static readonly DependencyProperty ScBProperty =
+ DependencyProperty.Register
+ ("ScB", typeof(float), typeof(ColorPicker),
+ new PropertyMetadata((float)1,
+ new PropertyChangedCallback(ScBChanged)
+ ));
+
+ public static readonly DependencyProperty AProperty =
+ DependencyProperty.Register
+ ("A", typeof(byte), typeof(ColorPicker),
+ new PropertyMetadata((byte)255,
+ new PropertyChangedCallback(AChanged)
+ ));
+
+ public static readonly DependencyProperty RProperty =
+ DependencyProperty.Register
+ ("R", typeof(byte), typeof(ColorPicker),
+ new PropertyMetadata((byte)255,
+ new PropertyChangedCallback(RChanged)
+ ));
+
+ public static readonly DependencyProperty GProperty =
+ DependencyProperty.Register
+ ("G", typeof(byte), typeof(ColorPicker),
+ new PropertyMetadata((byte)255,
+ new PropertyChangedCallback(GChanged)
+ ));
+
+ public static readonly DependencyProperty BProperty =
+ DependencyProperty.Register
+ ("B", typeof(byte), typeof(ColorPicker),
+ new PropertyMetadata((byte)255,
+ new PropertyChangedCallback(BChanged)
+ ));
+
+ public static readonly DependencyProperty HexadecimalStringProperty =
+ DependencyProperty.Register
+ ("HexadecimalString", typeof(string), typeof(ColorPicker),
+ new PropertyMetadata("#FFFFFFFF",
+ new PropertyChangedCallback(HexadecimalStringChanged)
+ ));
+
+ public static readonly DependencyProperty AlphaVisibilityProperty =
+ DependencyProperty.Register
+ ("AlphaVisibility", typeof (Visibility), typeof (ColorPicker),
+ new PropertyMetadata (Visibility.Visible));
+
+ #endregion
+
+
+ #region RoutedEvent Fields
+
+ public static readonly RoutedEvent SelectedColorChangedEvent = EventManager.RegisterRoutedEvent(
+ "SelectedColorChanged",
+ RoutingStrategy.Bubble,
+ typeof(RoutedPropertyChangedEventHandler),
+ typeof(ColorPicker)
+ );
+ #endregion
+
+
+ #region Property Changed Callbacks
+
+ private static void AChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnAChanged((byte)e.NewValue);
+ }
+
+ protected virtual void OnAChanged(byte newValue)
+ {
+
+ m_color.A = newValue;
+ SetValue(ScAProperty, m_color.ScA);
+ SetValue(SelectedColorProperty, m_color);
+
+ }
+
+ private static void RChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnRChanged((byte)e.NewValue);
+ }
+
+ protected virtual void OnRChanged(byte newValue)
+ {
+ m_color.R = newValue;
+ SetValue(ScRProperty, m_color.ScR);
+ SetValue(SelectedColorProperty, m_color);
+ }
+
+
+ private static void GChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnGChanged((byte)e.NewValue);
+ }
+
+ protected virtual void OnGChanged(byte newValue)
+ {
+
+ m_color.G = newValue;
+ SetValue(ScGProperty, m_color.ScG);
+ SetValue(SelectedColorProperty, m_color);
+ }
+
+
+ private static void BChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnBChanged((byte)e.NewValue);
+ }
+
+ protected virtual void OnBChanged(byte newValue)
+ {
+ m_color.B = newValue;
+ SetValue(ScBProperty, m_color.ScB);
+ SetValue(SelectedColorProperty, m_color);
+ }
+
+
+ private static void ScAChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnScAChanged((float)e.NewValue);
+ }
+
+ protected virtual void OnScAChanged(float newValue)
+ {
+ isAlphaChange = true;
+ if (shouldFindPoint)
+ {
+ m_color.ScA = newValue;
+ SetValue(AProperty, m_color.A);
+ SetValue(SelectedColorProperty, m_color);
+ SetValue (HexadecimalStringProperty, GetHexadecimal ());
+ }
+ isAlphaChange = false;
+ }
+
+
+ private static void ScRChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnScRChanged((float)e.NewValue);
+
+ }
+
+ protected virtual void OnScRChanged(float newValue)
+ {
+ if (shouldFindPoint)
+ {
+ m_color.ScR = newValue;
+ SetValue(RProperty, m_color.R);
+ SetValue(SelectedColorProperty, m_color);
+ SetValue (HexadecimalStringProperty, GetHexadecimal ());
+ }
+ }
+
+
+ private static void ScGChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnScGChanged((float)e.NewValue);
+ }
+
+ protected virtual void OnScGChanged(float newValue)
+ {
+
+ if (shouldFindPoint)
+ {
+ m_color.ScG = newValue;
+ SetValue(GProperty, m_color.G);
+ SetValue(SelectedColorProperty, m_color);
+ SetValue (HexadecimalStringProperty, GetHexadecimal ());
+ }
+ }
+
+
+ private static void ScBChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnScBChanged((float)e.NewValue);
+ }
+
+ protected virtual void OnScBChanged(float newValue)
+ {
+ if (shouldFindPoint)
+ {
+ m_color.ScB = newValue;
+ SetValue(BProperty, m_color.B);
+ SetValue(SelectedColorProperty, m_color);
+ SetValue (HexadecimalStringProperty, GetHexadecimal ());
+ }
+ }
+
+ private static void HexadecimalStringChanged(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker c = (ColorPicker)d;
+ c.OnHexadecimalStringChanged((string)e.OldValue, (string)e.NewValue);
+ }
+
+ protected virtual void OnHexadecimalStringChanged(string oldValue, string newValue)
+ {
+
+ try
+ {
+
+ if (shouldFindPoint)
+ {
+
+ m_color = (Color)ColorConverter.ConvertFromString(newValue);
+
+ }
+
+ SetValue(AProperty, m_color.A);
+ SetValue(RProperty, m_color.R);
+ SetValue(GProperty, m_color.G);
+ SetValue(BProperty, m_color.B);
+
+
+ if (shouldFindPoint && !isAlphaChange && templateApplied)
+ {
+ updateMarkerPosition(m_color);
+ }
+ }
+ catch (FormatException fException)
+ {
+
+ SetValue(HexadecimalStringProperty, oldValue);
+ }
+
+ }
+
+ private static void selectedColor_changed(DependencyObject d,
+ DependencyPropertyChangedEventArgs e)
+ {
+ ColorPicker cPicker = (ColorPicker)d;
+ cPicker.OnSelectedColorChanged((Color)e.OldValue, (Color)e.NewValue);
+ }
+
+ protected virtual void OnSelectedColorChanged(Color oldColor, Color newColor)
+ {
+
+ RoutedPropertyChangedEventArgs newEventArgs =
+ new RoutedPropertyChangedEventArgs(oldColor, newColor);
+ newEventArgs.RoutedEvent = ColorPicker.SelectedColorChangedEvent;
+ RaiseEvent(newEventArgs);
+ }
+
+ #endregion
+
+
+ #region Template Part Event Handlers
+
+
+ protected override void OnTemplateChanged(ControlTemplate oldTemplate, ControlTemplate newTemplate)
+ {
+
+ templateApplied = false;
+ if (oldTemplate != null)
+ {
+ m_ColorSlider.ValueChanged -= new RoutedPropertyChangedEventHandler(BaseColorChanged);
+ m_ColorDetail.MouseLeftButtonDown -= new MouseButtonEventHandler(OnMouseLeftButtonDown);
+ m_ColorDetail.PreviewMouseMove -= new MouseEventHandler(OnMouseMove);
+ m_ColorDetail.SizeChanged -= new SizeChangedEventHandler(ColorDetailSizeChanged);
+ m_ColorDetail = null;
+ m_ColorMarker = null;
+ m_ColorSlider = null;
+ }
+ base.OnTemplateChanged(oldTemplate, newTemplate);
+ }
+
+
+ private void BaseColorChanged(
+ object sender,
+ RoutedPropertyChangedEventArgs e)
+ {
+
+ if (m_ColorPosition != null)
+ {
+
+ determineColor((Point)m_ColorPosition);
+ }
+
+ }
+
+ private void OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+
+ Point p = e.GetPosition(m_ColorDetail);
+ updateMarkerPosition(p);
+ }
+
+ private void OnMouseMove(object sender, MouseEventArgs e)
+ {
+
+
+ if (e.LeftButton == MouseButtonState.Pressed)
+ {
+
+ Point p = e.GetPosition(m_ColorDetail);
+ updateMarkerPosition(p);
+ Mouse.Synchronize();
+
+ }
+ }
+
+ private void ColorDetailSizeChanged(object sender, SizeChangedEventArgs args)
+ {
+
+ if (args.PreviousSize != Size.Empty &&
+ args.PreviousSize.Width != 0 && args.PreviousSize.Height != 0)
+ {
+ double widthDifference = args.NewSize.Width / args.PreviousSize.Width;
+ double heightDifference = args.NewSize.Height / args.PreviousSize.Height;
+ markerTransform.X = markerTransform.X * widthDifference;
+ markerTransform.Y = markerTransform.Y * heightDifference;
+ }
+ else if (m_ColorPosition != null)
+ {
+ markerTransform.X = ((Point)m_ColorPosition).X * args.NewSize.Width;
+ markerTransform.Y = ((Point)m_ColorPosition).Y * args.NewSize.Height;
+ }
+ }
+
+ #endregion
+
+
+ #region Color Resolution Helpers
+
+ string GetHexadecimal ()
+ {
+ if (ShowAlpha)
+ return m_color.ToString ();
+ else
+ return string.Format ("#{0:X2}{1:X2}{2:X2}", m_color.R, m_color.G, m_color.B);
+ }
+
+
+ private void setColor(Color theColor)
+ {
+ m_color = theColor;
+
+ if (templateApplied) {
+ SetValue(AProperty, m_color.A);
+ SetValue(RProperty, m_color.R);
+ SetValue(GProperty, m_color.G);
+ SetValue(BProperty, m_color.B);
+ updateMarkerPosition(theColor);
+ }
+
+ }
+
+ private void updateMarkerPosition(Point p)
+ {
+ markerTransform.X = p.X;
+ markerTransform.Y = p.Y;
+ p.X = p.X / m_ColorDetail.ActualWidth;
+ p.Y = p.Y / m_ColorDetail.ActualHeight;
+ m_ColorPosition = p;
+ determineColor(p);
+ }
+
+ private void updateMarkerPosition(Color theColor)
+ {
+ m_ColorPosition = null;
+
+
+ HsvColor hsv = ColorUtilities.ConvertRgbToHsv(theColor.R, theColor.G, theColor.B);
+
+ m_ColorSlider.Value = hsv.H;
+
+ Point p = new Point(hsv.S, 1 - hsv.V);
+
+ m_ColorPosition = p;
+ p.X = p.X * m_ColorDetail.ActualWidth;
+ p.Y = p.Y * m_ColorDetail.ActualHeight;
+ markerTransform.X = p.X;
+ markerTransform.Y = p.Y;
+
+ }
+
+ private void determineColor(Point p)
+ {
+
+ HsvColor hsv = new HsvColor(360 - m_ColorSlider.Value, 1, 1);
+ hsv.S = p.X;
+ hsv.V = 1 - p.Y;
+ m_color = ColorUtilities.ConvertHsvToRgb(hsv.H, hsv.S, hsv.V);
+ shouldFindPoint = false;
+ m_color.ScA = (float)GetValue(ScAProperty);
+ SetValue (HexadecimalStringProperty, GetHexadecimal ());
+ shouldFindPoint = true;
+
+ }
+
+ #endregion
+
+
+ #region Private Fields
+ private SpectrumSlider m_ColorSlider;
+ private static readonly string ColorSliderName = "PART_ColorSlider";
+ private FrameworkElement m_ColorDetail;
+ private static readonly string ColorDetailName = "PART_ColorDetail";
+ private TranslateTransform markerTransform = new TranslateTransform();
+ private Path m_ColorMarker;
+ private static readonly string ColorMarkerName = "PART_ColorMarker";
+ private Point? m_ColorPosition;
+ private Color m_color;
+ private bool shouldFindPoint;
+ private bool templateApplied;
+ private bool isAlphaChange;
+ #endregion
+
+ }
+
+ #endregion ColorPicker
+
+
}
\ No newline at end of file
diff --git a/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.csproj b/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.csproj
index 3ac23413bb..ed8b5702e3 100644
--- a/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.csproj
+++ b/Libraries/WPFColorPicker/ColorPickerLib/ColorPicker.csproj
@@ -1,70 +1,70 @@
-
-
-
-
- Microsoft.Samples.ColorPickerExample
- ColorPicker
- library
- Release
- MSBuild
- False
- 8.0.50727
- 2.0
- {99E90579-62FC-4898-B168-24F7DBD3A34D}
- bin\$(Configuration)\
- Microsoft.Samples.CustomControls
-
-
- Library
- v4.0
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
-
-
- 2.0
-
-
-
-
-
-
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
-
-
- Code
-
-
- Code
-
-
- ColorPickerDialog.xaml
- Code
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+ Microsoft.Samples.ColorPickerExample
+ ColorPicker
+ library
+ Release
+ MSBuild
+ False
+ 8.0.50727
+ 2.0
+ {99E90579-62FC-4898-B168-24F7DBD3A34D}
+ bin\$(Configuration)\
+ Microsoft.Samples.CustomControls
+
+
+ Library
+ v4.0
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+
+
+ 2.0
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+
+
+ Code
+
+
+ Code
+
+
+ ColorPickerDialog.xaml
+ Code
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml b/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml
index c756801f8e..f4941f2ed8 100644
--- a/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml
+++ b/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml
@@ -1,27 +1,27 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml.cs b/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml.cs
index f5728faa91..e2367e8d25 100644
--- a/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml.cs
+++ b/Libraries/WPFColorPicker/ColorPickerLib/ColorPickerDialog.xaml.cs
@@ -1,103 +1,103 @@
-
-using System;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Documents;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-using System.Windows.Data;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-
-namespace Microsoft.Samples.CustomControls
-{
- ///
- /// Interaction logic for ColorPickerDialog.xaml
- ///
-
- public partial class ColorPickerDialog : Window
- {
-
-
- public ColorPickerDialog()
- {
- InitializeComponent();
- }
-
- private void okButtonClicked(object sender, RoutedEventArgs e)
- {
-
- OKButton.IsEnabled = false;
- m_color = cPicker.SelectedColor;
- DialogResult = true;
- Hide();
-
- }
-
-
- private void cancelButtonClicked(object sender, RoutedEventArgs e)
- {
-
- OKButton.IsEnabled = false;
- DialogResult = false;
-
- }
-
- private void onSelectedColorChanged(object sender, RoutedPropertyChangedEventArgs e)
- {
-
- if (e.NewValue != m_color)
- {
-
- OKButton.IsEnabled = true;
- }
- }
-
- protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
- {
-
- OKButton.IsEnabled = false;
- base.OnClosing(e);
- }
-
-
- private Color m_color = new Color();
- private Color startingColor = new Color();
-
- public Color SelectedColor
- {
- get
- {
- return m_color;
- }
-
- }
-
- public Color StartingColor
- {
- get
- {
- return startingColor;
- }
- set
- {
- cPicker.SelectedColor = value;
- OKButton.IsEnabled = false;
-
- }
-
- }
-
- public bool ShowAlpha
- {
- get
- {
- return cPicker.ShowAlpha;
- }
- set
- {
- cPicker.ShowAlpha = value;
- }
- }
- }
+
+using System;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Documents;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using System.Windows.Data;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+
+namespace Microsoft.Samples.CustomControls
+{
+ ///
+ /// Interaction logic for ColorPickerDialog.xaml
+ ///
+
+ public partial class ColorPickerDialog : Window
+ {
+
+
+ public ColorPickerDialog()
+ {
+ InitializeComponent();
+ }
+
+ private void okButtonClicked(object sender, RoutedEventArgs e)
+ {
+
+ OKButton.IsEnabled = false;
+ m_color = cPicker.SelectedColor;
+ DialogResult = true;
+ Hide();
+
+ }
+
+
+ private void cancelButtonClicked(object sender, RoutedEventArgs e)
+ {
+
+ OKButton.IsEnabled = false;
+ DialogResult = false;
+
+ }
+
+ private void onSelectedColorChanged(object sender, RoutedPropertyChangedEventArgs e)
+ {
+
+ if (e.NewValue != m_color)
+ {
+
+ OKButton.IsEnabled = true;
+ }
+ }
+
+ protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
+ {
+
+ OKButton.IsEnabled = false;
+ base.OnClosing(e);
+ }
+
+
+ private Color m_color = new Color();
+ private Color startingColor = new Color();
+
+ public Color SelectedColor
+ {
+ get
+ {
+ return m_color;
+ }
+
+ }
+
+ public Color StartingColor
+ {
+ get
+ {
+ return startingColor;
+ }
+ set
+ {
+ cPicker.SelectedColor = value;
+ OKButton.IsEnabled = false;
+
+ }
+
+ }
+
+ public bool ShowAlpha
+ {
+ get
+ {
+ return cPicker.ShowAlpha;
+ }
+ set
+ {
+ cPicker.ShowAlpha = value;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/Libraries/WPFColorPicker/ColorPickerLib/Properties/AssemblyInfo.cs b/Libraries/WPFColorPicker/ColorPickerLib/Properties/AssemblyInfo.cs
index 780a602c93..90f3b6ae58 100644
--- a/Libraries/WPFColorPicker/ColorPickerLib/Properties/AssemblyInfo.cs
+++ b/Libraries/WPFColorPicker/ColorPickerLib/Properties/AssemblyInfo.cs
@@ -1,39 +1,39 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-using System.Windows;
-//
-//used to let loading assemblies know that theme resources are stored in this assembly
-[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
-//
-// 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("ColorPickerDialog")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Microsoft")]
-[assembly: AssemblyProduct("ColorPickerDialog")]
-[assembly: AssemblyCopyright("Copyright MSFT 2006")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM componenets. 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("99E90579-62FC-4898-B168-24F7DBD3A34D")]
-
-// 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 Revision and Build Numbers
-// by using the '*' as shown below:
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using System.Windows;
+//
+//used to let loading assemblies know that theme resources are stored in this assembly
+[assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
+//
+// 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("ColorPickerDialog")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Microsoft")]
+[assembly: AssemblyProduct("ColorPickerDialog")]
+[assembly: AssemblyCopyright("Copyright MSFT 2006")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM componenets. 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("99E90579-62FC-4898-B168-24F7DBD3A34D")]
+
+// 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 Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Libraries/WPFColorPicker/ColorPickerLib/SupportingClasses.cs b/Libraries/WPFColorPicker/ColorPickerLib/SupportingClasses.cs
index 897803fe84..645b6e3a29 100644
--- a/Libraries/WPFColorPicker/ColorPickerLib/SupportingClasses.cs
+++ b/Libraries/WPFColorPicker/ColorPickerLib/SupportingClasses.cs
@@ -1,384 +1,384 @@
-//
-// SupportingClasses.cs
-//
-//
-using System;
-using System.Windows;
-using System.Windows.Navigation;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Shapes;
-using System.Windows.Ink;
-using System.Windows.Controls;
-using System.Collections.Generic;
-using System.Windows.Input;
-using System.Windows.Data;
-using System.Windows.Markup;
-
-namespace Microsoft.Samples.CustomControls
-{
-
-
-
- #region SpectrumSlider
-
- public class SpectrumSlider : Slider
- {
-
-
- static SpectrumSlider()
- {
-
- DefaultStyleKeyProperty.OverrideMetadata(typeof(SpectrumSlider),
- new FrameworkPropertyMetadata(typeof(SpectrumSlider)));
- }
-
-
- #region Public Properties
- public Color SelectedColor
- {
- get
- {
-
- return (Color)GetValue(SelectedColorProperty);
- }
- set
- {
- SetValue(SelectedColorProperty, value);
- }
-
- }
- #endregion
-
-
- #region Dependency Property Fields
- public static readonly DependencyProperty SelectedColorProperty =
- DependencyProperty.Register
- ("SelectedColor", typeof(Color), typeof(SpectrumSlider),
- new PropertyMetadata(System.Windows.Media.Colors.Transparent));
-
- #endregion
-
-
- #region Public Methods
-
- public override void OnApplyTemplate()
- {
-
- base.OnApplyTemplate();
- m_spectrumDisplay = GetTemplateChild(SpectrumDisplayName) as Rectangle;
- updateColorSpectrum();
- OnValueChanged(Double.NaN, Value);
-
- }
-
- #endregion
-
-
- #region Protected Methods
- protected override void OnValueChanged(double oldValue, double newValue)
- {
-
- base.OnValueChanged(oldValue, newValue);
- Color theColor = ColorUtilities.ConvertHsvToRgb(360 - newValue, 1, 1);
- SetValue(SelectedColorProperty, theColor);
- }
- #endregion
-
-
- #region Private Methods
-
- private void updateColorSpectrum()
- {
- if (m_spectrumDisplay != null)
- {
- createSpectrum();
- }
- }
-
-
-
- private void createSpectrum()
- {
-
- pickerBrush = new LinearGradientBrush();
- pickerBrush.StartPoint = new Point(0.5, 0);
- pickerBrush.EndPoint = new Point(0.5, 1);
- pickerBrush.ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
-
-
- List colorsList = ColorUtilities.GenerateHsvSpectrum();
- double stopIncrement = (double)1 / colorsList.Count;
-
- int i;
- for (i = 0; i < colorsList.Count; i++)
- {
- pickerBrush.GradientStops.Add(new GradientStop(colorsList[i], i * stopIncrement));
- }
-
- pickerBrush.GradientStops[i - 1].Offset = 1.0;
- m_spectrumDisplay.Fill = pickerBrush;
-
- }
- #endregion
-
-
- #region Private Fields
- private static string SpectrumDisplayName = "PART_SpectrumDisplay";
- private Rectangle m_spectrumDisplay;
- private LinearGradientBrush pickerBrush;
- #endregion
-
- }
-
- #endregion SpectrumSlider
-
-
- #region ColorUtilities
-
- static class ColorUtilities
- {
-
- // Converts an RGB color to an HSV color.
- public static HsvColor ConvertRgbToHsv(int r, int b, int g)
- {
-
- double delta, min;
- double h = 0, s, v;
-
- min = Math.Min(Math.Min(r, g), b);
- v = Math.Max(Math.Max(r, g), b);
- delta = v - min;
-
- if (v == 0.0) {
- s = 0;
-
- }
- else
- s = delta / v;
-
- if (s == 0)
- h = 0.0;
-
- else
- {
- if (r == v)
- h = (g - b) / delta;
- else if (g == v)
- h = 2 + (b - r) / delta;
- else if (b == v)
- h = 4 + (r - g) / delta;
-
- h *= 60;
- if (h < 0.0)
- h = h + 360;
-
- }
-
- HsvColor hsvColor = new HsvColor();
- hsvColor.H = h;
- hsvColor.S = s;
- hsvColor.V = v / 255;
-
- return hsvColor;
-
- }
-
- // Converts an HSV color to an RGB color.
- public static Color ConvertHsvToRgb(double h, double s, double v)
- {
-
- double r = 0, g = 0, b = 0;
-
- if (s == 0)
- {
- r = v;
- g = v;
- b = v;
- }
- else
- {
- int i;
- double f, p, q, t;
-
-
- if (h == 360)
- h = 0;
- else
- h = h / 60;
-
- i = (int)Math.Truncate(h);
- f = h - i;
-
- p = v * (1.0 - s);
- q = v * (1.0 - (s * f));
- t = v * (1.0 - (s * (1.0 - f)));
-
- switch (i)
- {
- case 0:
- r = v;
- g = t;
- b = p;
- break;
-
- case 1:
- r = q;
- g = v;
- b = p;
- break;
-
- case 2:
- r = p;
- g = v;
- b = t;
- break;
-
- case 3:
- r = p;
- g = q;
- b = v;
- break;
-
- case 4:
- r = t;
- g = p;
- b = v;
- break;
-
- default:
- r = v;
- g = p;
- b = q;
- break;
- }
-
- }
-
-
-
- return Color.FromArgb(255, (byte)(r * 255), (byte)(g * 255), (byte)(b * 255));
-
- }
-
- // Generates a list of colors with hues ranging from 0 360
- // and a saturation and value of 1.
- public static List GenerateHsvSpectrum()
- {
-
- List colorsList = new List(8);
-
-
- for (int i = 0; i < 29; i++)
- {
-
- colorsList.Add(
- ColorUtilities.ConvertHsvToRgb(i * 12, 1, 1)
-
- );
-
- }
- colorsList.Add(ColorUtilities.ConvertHsvToRgb(0, 1, 1));
-
-
- return colorsList;
-
- }
-
- }
-
- #endregion ColorUtilities
-
-
- // Describes a color in terms of
- // Hue, Saturation, and Value (brightness)
- #region HsvColor
- struct HsvColor
- {
-
- public double H;
- public double S;
- public double V;
-
- public HsvColor(double h, double s, double v)
- {
- this.H = h;
- this.S = s;
- this.V = v;
-
- }
- }
- #endregion HsvColor
-
- #region ColorThumb
- public class ColorThumb : System.Windows.Controls.Primitives.Thumb
- {
-
- static ColorThumb()
- {
-
- DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorThumb),
- new FrameworkPropertyMetadata(typeof(ColorThumb)));
- }
-
-
- public static readonly DependencyProperty ThumbColorProperty =
- DependencyProperty.Register
- ("ThumbColor", typeof(Color), typeof(ColorThumb),
- new FrameworkPropertyMetadata(Colors.Transparent));
-
- public static readonly DependencyProperty PointerOutlineThicknessProperty =
- DependencyProperty.Register
- ("PointerOutlineThickness", typeof(double), typeof(ColorThumb),
- new FrameworkPropertyMetadata(1.0));
-
- public static readonly DependencyProperty PointerOutlineBrushProperty =
- DependencyProperty.Register
- ("PointerOutlineBrush", typeof(Brush), typeof(ColorThumb),
- new FrameworkPropertyMetadata(null));
-
-
-
- public Color ThumbColor
- {
- get
- {
- return (Color)GetValue(ThumbColorProperty);
- }
- set
- {
-
- SetValue(ThumbColorProperty, value);
- }
- }
-
- public double PointerOutlineThickness
- {
- get
- {
- return (double)GetValue(PointerOutlineThicknessProperty);
- }
- set
- {
- SetValue(PointerOutlineThicknessProperty, value);
- }
- }
-
- public Brush PointerOutlineBrush
- {
- get
- {
- return (Brush)GetValue(PointerOutlineBrushProperty);
- }
- set
- {
- SetValue(PointerOutlineBrushProperty, value);
- }
- }
-
-
- }
- #endregion ColorThumb
-
-
+//
+// SupportingClasses.cs
+//
+//
+using System;
+using System.Windows;
+using System.Windows.Navigation;
+using System.Windows.Media;
+using System.Windows.Media.Animation;
+using System.Windows.Shapes;
+using System.Windows.Ink;
+using System.Windows.Controls;
+using System.Collections.Generic;
+using System.Windows.Input;
+using System.Windows.Data;
+using System.Windows.Markup;
+
+namespace Microsoft.Samples.CustomControls
+{
+
+
+
+ #region SpectrumSlider
+
+ public class SpectrumSlider : Slider
+ {
+
+
+ static SpectrumSlider()
+ {
+
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(SpectrumSlider),
+ new FrameworkPropertyMetadata(typeof(SpectrumSlider)));
+ }
+
+
+ #region Public Properties
+ public Color SelectedColor
+ {
+ get
+ {
+
+ return (Color)GetValue(SelectedColorProperty);
+ }
+ set
+ {
+ SetValue(SelectedColorProperty, value);
+ }
+
+ }
+ #endregion
+
+
+ #region Dependency Property Fields
+ public static readonly DependencyProperty SelectedColorProperty =
+ DependencyProperty.Register
+ ("SelectedColor", typeof(Color), typeof(SpectrumSlider),
+ new PropertyMetadata(System.Windows.Media.Colors.Transparent));
+
+ #endregion
+
+
+ #region Public Methods
+
+ public override void OnApplyTemplate()
+ {
+
+ base.OnApplyTemplate();
+ m_spectrumDisplay = GetTemplateChild(SpectrumDisplayName) as Rectangle;
+ updateColorSpectrum();
+ OnValueChanged(Double.NaN, Value);
+
+ }
+
+ #endregion
+
+
+ #region Protected Methods
+ protected override void OnValueChanged(double oldValue, double newValue)
+ {
+
+ base.OnValueChanged(oldValue, newValue);
+ Color theColor = ColorUtilities.ConvertHsvToRgb(360 - newValue, 1, 1);
+ SetValue(SelectedColorProperty, theColor);
+ }
+ #endregion
+
+
+ #region Private Methods
+
+ private void updateColorSpectrum()
+ {
+ if (m_spectrumDisplay != null)
+ {
+ createSpectrum();
+ }
+ }
+
+
+
+ private void createSpectrum()
+ {
+
+ pickerBrush = new LinearGradientBrush();
+ pickerBrush.StartPoint = new Point(0.5, 0);
+ pickerBrush.EndPoint = new Point(0.5, 1);
+ pickerBrush.ColorInterpolationMode = ColorInterpolationMode.SRgbLinearInterpolation;
+
+
+ List colorsList = ColorUtilities.GenerateHsvSpectrum();
+ double stopIncrement = (double)1 / colorsList.Count;
+
+ int i;
+ for (i = 0; i < colorsList.Count; i++)
+ {
+ pickerBrush.GradientStops.Add(new GradientStop(colorsList[i], i * stopIncrement));
+ }
+
+ pickerBrush.GradientStops[i - 1].Offset = 1.0;
+ m_spectrumDisplay.Fill = pickerBrush;
+
+ }
+ #endregion
+
+
+ #region Private Fields
+ private static string SpectrumDisplayName = "PART_SpectrumDisplay";
+ private Rectangle m_spectrumDisplay;
+ private LinearGradientBrush pickerBrush;
+ #endregion
+
+ }
+
+ #endregion SpectrumSlider
+
+
+ #region ColorUtilities
+
+ static class ColorUtilities
+ {
+
+ // Converts an RGB color to an HSV color.
+ public static HsvColor ConvertRgbToHsv(int r, int b, int g)
+ {
+
+ double delta, min;
+ double h = 0, s, v;
+
+ min = Math.Min(Math.Min(r, g), b);
+ v = Math.Max(Math.Max(r, g), b);
+ delta = v - min;
+
+ if (v == 0.0) {
+ s = 0;
+
+ }
+ else
+ s = delta / v;
+
+ if (s == 0)
+ h = 0.0;
+
+ else
+ {
+ if (r == v)
+ h = (g - b) / delta;
+ else if (g == v)
+ h = 2 + (b - r) / delta;
+ else if (b == v)
+ h = 4 + (r - g) / delta;
+
+ h *= 60;
+ if (h < 0.0)
+ h = h + 360;
+
+ }
+
+ HsvColor hsvColor = new HsvColor();
+ hsvColor.H = h;
+ hsvColor.S = s;
+ hsvColor.V = v / 255;
+
+ return hsvColor;
+
+ }
+
+ // Converts an HSV color to an RGB color.
+ public static Color ConvertHsvToRgb(double h, double s, double v)
+ {
+
+ double r = 0, g = 0, b = 0;
+
+ if (s == 0)
+ {
+ r = v;
+ g = v;
+ b = v;
+ }
+ else
+ {
+ int i;
+ double f, p, q, t;
+
+
+ if (h == 360)
+ h = 0;
+ else
+ h = h / 60;
+
+ i = (int)Math.Truncate(h);
+ f = h - i;
+
+ p = v * (1.0 - s);
+ q = v * (1.0 - (s * f));
+ t = v * (1.0 - (s * (1.0 - f)));
+
+ switch (i)
+ {
+ case 0:
+ r = v;
+ g = t;
+ b = p;
+ break;
+
+ case 1:
+ r = q;
+ g = v;
+ b = p;
+ break;
+
+ case 2:
+ r = p;
+ g = v;
+ b = t;
+ break;
+
+ case 3:
+ r = p;
+ g = q;
+ b = v;
+ break;
+
+ case 4:
+ r = t;
+ g = p;
+ b = v;
+ break;
+
+ default:
+ r = v;
+ g = p;
+ b = q;
+ break;
+ }
+
+ }
+
+
+
+ return Color.FromArgb(255, (byte)(r * 255), (byte)(g * 255), (byte)(b * 255));
+
+ }
+
+ // Generates a list of colors with hues ranging from 0 360
+ // and a saturation and value of 1.
+ public static List GenerateHsvSpectrum()
+ {
+
+ List colorsList = new List(8);
+
+
+ for (int i = 0; i < 29; i++)
+ {
+
+ colorsList.Add(
+ ColorUtilities.ConvertHsvToRgb(i * 12, 1, 1)
+
+ );
+
+ }
+ colorsList.Add(ColorUtilities.ConvertHsvToRgb(0, 1, 1));
+
+
+ return colorsList;
+
+ }
+
+ }
+
+ #endregion ColorUtilities
+
+
+ // Describes a color in terms of
+ // Hue, Saturation, and Value (brightness)
+ #region HsvColor
+ struct HsvColor
+ {
+
+ public double H;
+ public double S;
+ public double V;
+
+ public HsvColor(double h, double s, double v)
+ {
+ this.H = h;
+ this.S = s;
+ this.V = v;
+
+ }
+ }
+ #endregion HsvColor
+
+ #region ColorThumb
+ public class ColorThumb : System.Windows.Controls.Primitives.Thumb
+ {
+
+ static ColorThumb()
+ {
+
+ DefaultStyleKeyProperty.OverrideMetadata(typeof(ColorThumb),
+ new FrameworkPropertyMetadata(typeof(ColorThumb)));
+ }
+
+
+ public static readonly DependencyProperty ThumbColorProperty =
+ DependencyProperty.Register
+ ("ThumbColor", typeof(Color), typeof(ColorThumb),
+ new FrameworkPropertyMetadata(Colors.Transparent));
+
+ public static readonly DependencyProperty PointerOutlineThicknessProperty =
+ DependencyProperty.Register
+ ("PointerOutlineThickness", typeof(double), typeof(ColorThumb),
+ new FrameworkPropertyMetadata(1.0));
+
+ public static readonly DependencyProperty PointerOutlineBrushProperty =
+ DependencyProperty.Register
+ ("PointerOutlineBrush", typeof(Brush), typeof(ColorThumb),
+ new FrameworkPropertyMetadata(null));
+
+
+
+ public Color ThumbColor
+ {
+ get
+ {
+ return (Color)GetValue(ThumbColorProperty);
+ }
+ set
+ {
+
+ SetValue(ThumbColorProperty, value);
+ }
+ }
+
+ public double PointerOutlineThickness
+ {
+ get
+ {
+ return (double)GetValue(PointerOutlineThicknessProperty);
+ }
+ set
+ {
+ SetValue(PointerOutlineThicknessProperty, value);
+ }
+ }
+
+ public Brush PointerOutlineBrush
+ {
+ get
+ {
+ return (Brush)GetValue(PointerOutlineBrushProperty);
+ }
+ set
+ {
+ SetValue(PointerOutlineBrushProperty, value);
+ }
+ }
+
+
+ }
+ #endregion ColorThumb
+
+
}
\ No newline at end of file
diff --git a/Libraries/WPFColorPicker/ColorPickerLib/Themes/generic.xaml b/Libraries/WPFColorPicker/ColorPickerLib/Themes/generic.xaml
index 6fb49b28bd..358ba5d00c 100644
--- a/Libraries/WPFColorPicker/ColorPickerLib/Themes/generic.xaml
+++ b/Libraries/WPFColorPicker/ColorPickerLib/Themes/generic.xaml
@@ -1,773 +1,773 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.csproj b/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.csproj
index 41d778b2ff..86163fc1f3 100644
--- a/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.csproj
+++ b/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.csproj
@@ -1,64 +1,64 @@
-
-
-
- Debug
- AnyCPU
- {1091F084-417B-42A8-A590-4F5F011ED1A0}
- {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
- ColorPickerSampleApplication
- ColorPickerSampleApplication
- 4
- winexe
- 1.0.0.*
-
- false
- v4.0
-
-
- 2.0
-
-
-
- true
- full
- false
- .\bin\Debug\
- DEBUG;TRACE
-
-
- false
- true
- .\bin\Release\
- TRACE
-
-
-
-
-
-
-
-
-
-
-
-
- MSBuild:Compile
- Designer
-
-
- MSBuild:Compile
- Designer
-
-
- SampleViewer.xaml
- Code
-
-
-
-
- {99E90579-62FC-4898-B168-24F7DBD3A34D}
- ColorPicker
-
-
-
+
+
+
+ Debug
+ AnyCPU
+ {1091F084-417B-42A8-A590-4F5F011ED1A0}
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ ColorPickerSampleApplication
+ ColorPickerSampleApplication
+ 4
+ winexe
+ 1.0.0.*
+
+ false
+ v4.0
+
+
+ 2.0
+
+
+
+ true
+ full
+ false
+ .\bin\Debug\
+ DEBUG;TRACE
+
+
+ false
+ true
+ .\bin\Release\
+ TRACE
+
+
+
+
+
+
+
+
+
+
+
+
+ MSBuild:Compile
+ Designer
+
+
+ MSBuild:Compile
+ Designer
+
+
+ SampleViewer.xaml
+ Code
+
+
+
+
+ {99E90579-62FC-4898-B168-24F7DBD3A34D}
+ ColorPicker
+
+
+
\ No newline at end of file
diff --git a/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.sln b/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.sln
index 804846cb2e..7df5790a4c 100644
--- a/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.sln
+++ b/Libraries/WPFColorPicker/ColorPickerSampleApplication/ColorPickerSampleApplication.sln
@@ -1,26 +1,26 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual C# Express 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorPickerSampleApplication", "ColorPickerSampleApplication.csproj", "{1091F084-417B-42A8-A590-4F5F011ED1A0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorPicker", "..\ColorPickerLib\ColorPicker.csproj", "{99E90579-62FC-4898-B168-24F7DBD3A34D}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {1091F084-417B-42A8-A590-4F5F011ED1A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1091F084-417B-42A8-A590-4F5F011ED1A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {1091F084-417B-42A8-A590-4F5F011ED1A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {1091F084-417B-42A8-A590-4F5F011ED1A0}.Release|Any CPU.Build.0 = Release|Any CPU
- {99E90579-62FC-4898-B168-24F7DBD3A34D}.Debug|Any CPU.ActiveCfg = Release|Any CPU
- {99E90579-62FC-4898-B168-24F7DBD3A34D}.Debug|Any CPU.Build.0 = Release|Any CPU
- {99E90579-62FC-4898-B168-24F7DBD3A34D}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {99E90579-62FC-4898-B168-24F7DBD3A34D}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C# Express 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorPickerSampleApplication", "ColorPickerSampleApplication.csproj", "{1091F084-417B-42A8-A590-4F5F011ED1A0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ColorPicker", "..\ColorPickerLib\ColorPicker.csproj", "{99E90579-62FC-4898-B168-24F7DBD3A34D}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {1091F084-417B-42A8-A590-4F5F011ED1A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {1091F084-417B-42A8-A590-4F5F011ED1A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {1091F084-417B-42A8-A590-4F5F011ED1A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {1091F084-417B-42A8-A590-4F5F011ED1A0}.Release|Any CPU.Build.0 = Release|Any CPU
+ {99E90579-62FC-4898-B168-24F7DBD3A34D}.Debug|Any CPU.ActiveCfg = Release|Any CPU
+ {99E90579-62FC-4898-B168-24F7DBD3A34D}.Debug|Any CPU.Build.0 = Release|Any CPU
+ {99E90579-62FC-4898-B168-24F7DBD3A34D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {99E90579-62FC-4898-B168-24F7DBD3A34D}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml b/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml
index e65a802221..6036deb0d2 100644
--- a/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml
+++ b/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml
@@ -1,249 +1,249 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Fill
-
-
-
-
-
-
- Stroke
-
-
- Stroke Thickness
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Fill
+
+
+
+
+
+
+ Stroke
+
+
+ Stroke Thickness
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml.cs b/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml.cs
index dfe87c13c8..084eb6132d 100644
--- a/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml.cs
+++ b/Libraries/WPFColorPicker/ColorPickerSampleApplication/SampleViewer.xaml.cs
@@ -1,351 +1,351 @@
-using System;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Shapes;
-using System.Windows.Input;
-
-
-namespace ColorPickerSampleApplication
-{
-
- public partial class SampleViewer : Window
- {
-
- public SampleViewer()
- {
- InitializeComponent();
-
- }
-
-
-
- #region Dependency Property Fields
-
- public static readonly DependencyProperty SelectedShapeProperty =
- DependencyProperty.Register
- ("SelectedShape", typeof(Shape), typeof(SampleViewer),
- new PropertyMetadata(null, selectedShape_Changed));
-
- public static readonly DependencyProperty DrawingModeProperty =
- DependencyProperty.Register
- ("DrawingMode", typeof(DrawingMode), typeof(SampleViewer),
- new PropertyMetadata(DrawingMode.Select));
-
- public static readonly DependencyProperty FillColorProperty =
- DependencyProperty.Register
- ("FillColor", typeof(Color), typeof(SampleViewer),
- new PropertyMetadata(Colors.LightGray));
-
- public static readonly DependencyProperty StrokeColorProperty =
- DependencyProperty.Register
- ("StrokeColor", typeof(Color), typeof(SampleViewer),
- new PropertyMetadata(Colors.Black));
-
- public static readonly DependencyProperty StrokeThicknessProperty =
- DependencyProperty.Register
- ("StrokeThickness", typeof(double), typeof(SampleViewer),
- new PropertyMetadata(1.0, strokeThickness_Changed));
-
- #endregion
-
-
- #region Public Properties
-
- public DrawingMode DrawingMode
- {
- get
- {
- return (DrawingMode)GetValue(DrawingModeProperty);
- }
- set
- {
- SetValue(DrawingModeProperty, value);
- }
- }
-
-
- public Color FillColor
- {
- get
- {
- return (Color)GetValue(FillColorProperty);
- }
- set
- {
- SetValue(FillColorProperty, value);
- }
- }
-
- public Color StrokeColor
- {
- get
- {
- return (Color)GetValue(StrokeColorProperty);
- }
- set
- {
- SetValue(StrokeColorProperty, value);
- }
- }
-
- public double StrokeThickness
- {
- get
- {
- return (double)GetValue(StrokeThicknessProperty);
- }
- set
- {
- SetValue(StrokeThicknessProperty, value);
- }
- }
-
- #endregion
-
-
-
-
- private static void selectedShape_Changed(object sender,
- DependencyPropertyChangedEventArgs e)
- {
-
- SampleViewer sViewer = (SampleViewer)sender;
- sViewer.OnSelectedShapeChanged((Shape)e.OldValue, (Shape)e.NewValue);
-
- }
-
- protected void OnSelectedShapeChanged(Shape oldShape, Shape newShape)
- {
- if (newShape != null)
- {
- FillColor = ((SolidColorBrush)newShape.Fill).Color;
- StrokeColor = ((SolidColorBrush)newShape.Stroke).Color;
- StrokeThickness = newShape.StrokeThickness;
- }
- }
-
- private static void strokeThickness_Changed(object sender,
- DependencyPropertyChangedEventArgs e)
- {
-
- SampleViewer sViewer = (SampleViewer)sender;
- sViewer.OnStrokeThicknessChanged((double)e.OldValue, (double)e.NewValue);
-
- }
-
- protected void OnStrokeThicknessChanged(double oldThickness, double newThickness)
- {
- Shape currentShape = (Shape)GetValue(SelectedShapeProperty);
- if (currentShape != null)
- {
- currentShape.StrokeThickness = newThickness;
- }
- }
-
-
- private void OnDrawingCanvasMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
- {
- Point clickPoint = e.GetPosition(DrawingCanvas);
- if (DrawingMode == DrawingMode.Select)
- {
- if (e.OriginalSource is Shape)
- {
- Shape s = (Shape)e.OriginalSource;
- SetValue(SelectedShapeProperty, s);
- shapeClickPoint = e.GetPosition(s);
- }
- else
- SetValue(SelectedShapeProperty, null);
- }
- else if (DrawingMode == DrawingMode.DrawRectangle && e.LeftButton == MouseButtonState.Pressed)
- {
- newRectangle = new Rectangle();
- newRectangle.Stroke = new SolidColorBrush(StrokeColor);
- newRectangle.StrokeThickness = StrokeThickness;
- newRectangle.Fill = new SolidColorBrush(FillColor);
- Canvas.SetLeft(newRectangle, clickPoint.X);
- Canvas.SetTop(newRectangle, clickPoint.Y);
- DrawingCanvas.Children.Add(newRectangle);
- SetValue(SelectedShapeProperty, newRectangle);
- }
- else if (DrawingMode == DrawingMode.DrawEllipse && e.LeftButton == MouseButtonState.Pressed)
- {
- newEllipse = new Ellipse();
- newEllipse.Stroke = new SolidColorBrush(StrokeColor);
- newEllipse.StrokeThickness = StrokeThickness;
- newEllipse.Fill = new SolidColorBrush(FillColor);
- Canvas.SetLeft(newEllipse, clickPoint.X);
- Canvas.SetTop(newEllipse, clickPoint.Y);
- DrawingCanvas.Children.Add(newEllipse);
- SetValue(SelectedShapeProperty, newEllipse);
- }
- else if (DrawingMode == DrawingMode.DrawLine && e.LeftButton == MouseButtonState.Pressed)
- {
- newLine = new Line();
- newLine.Stroke = new SolidColorBrush(StrokeColor);
- newLine.Fill = new SolidColorBrush(FillColor);;
- newLine.X1 = clickPoint.X;
- newLine.Y1 = clickPoint.Y;
- newLine.StrokeThickness = StrokeThickness;
- DrawingCanvas.Children.Add(newLine);
- SetValue(SelectedShapeProperty, newLine);
- }
- }
-
- private void OnDrawingCanvasMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
- {
-
- if (DrawingMode == DrawingMode.DrawRectangle)
- {
- newRectangle = null;
-
- }
- else if (DrawingMode == DrawingMode.DrawEllipse)
- {
- newEllipse = null;
-
- }
- else if (DrawingMode == DrawingMode.DrawLine)
- {
- newLine = null;
-
- }
- }
-
- private void OnDrawingCanvasMouseMove(object sender, MouseEventArgs e)
- {
- Point dropPoint = e.GetPosition(DrawingCanvas);
- if (DrawingMode == DrawingMode.Select)
- {
- Shape s = (Shape)GetValue(SelectedShapeProperty);
- if (s != null && e.LeftButton == MouseButtonState.Pressed)
- {
-
- Canvas.SetLeft(s, dropPoint.X - shapeClickPoint.X);
- Canvas.SetTop(s, dropPoint.Y - shapeClickPoint.Y);
- s.BitmapEffect = null;
- }
- }
- else if (DrawingMode == DrawingMode.DrawRectangle)
- {
- if (newRectangle != null)
- {
- if (dropPoint.X > Canvas.GetLeft(newRectangle))
- newRectangle.Width = dropPoint.X - Canvas.GetLeft(newRectangle);
- if (dropPoint.Y > Canvas.GetTop(newRectangle))
- newRectangle.Height = dropPoint.Y - Canvas.GetTop(newRectangle);
- }
- }
- else if (DrawingMode == DrawingMode.DrawEllipse)
- {
- if (newEllipse != null)
- {
- if (dropPoint.X > Canvas.GetLeft(newEllipse))
- newEllipse.Width = dropPoint.X - Canvas.GetLeft(newEllipse);
- if (dropPoint.Y > Canvas.GetTop(newEllipse))
- newEllipse.Height = dropPoint.Y - Canvas.GetTop(newEllipse);
- }
- }
- else if (DrawingMode == DrawingMode.DrawLine)
- {
- if (newLine != null)
- {
- newLine.X2 = dropPoint.X;
- newLine.Y2 = dropPoint.Y;
- }
- }
- }
-
- private void OnDrawingCanvasKeyDown(object sender, KeyEventArgs e)
- {
-
- Shape s = (Shape)GetValue(SelectedShapeProperty);
- if (e.Key == Key.Delete && s!= null)
- {
- DrawingCanvas.Children.Remove(s);
- SetValue(SelectedShapeProperty, null);
- }
- }
-
-
- private void SetStroke(object sender, RoutedEventArgs e)
- {
- Shape selectedShape = (Shape)GetValue(SelectedShapeProperty);
-
-
- Microsoft.Samples.CustomControls.ColorPickerDialog cPicker
- = new Microsoft.Samples.CustomControls.ColorPickerDialog();
- cPicker.StartingColor = StrokeColor;
- cPicker.Owner = this;
- cPicker.ShowAlpha = false;
-
- bool? dialogResult = cPicker.ShowDialog();
- if (dialogResult != null && (bool)dialogResult == true)
- {
-
- if (selectedShape != null)
- selectedShape.Stroke = new SolidColorBrush(cPicker.SelectedColor);
- StrokeColor = cPicker.SelectedColor;
-
- }
-
- }
-
-
- private void SetFill(object sender, RoutedEventArgs e)
- {
- Shape selectedShape = (Shape)GetValue(SelectedShapeProperty);
-
- Microsoft.Samples.CustomControls.ColorPickerDialog cPicker
- = new Microsoft.Samples.CustomControls.ColorPickerDialog();
- cPicker.StartingColor = FillColor;
- cPicker.Owner = this;
-
- bool? dialogResult = cPicker.ShowDialog();
- if (dialogResult != null && (bool)dialogResult == true)
- {
-
- if (selectedShape != null)
- selectedShape.Fill = new SolidColorBrush(cPicker.SelectedColor);
- FillColor = cPicker.SelectedColor;
-
- }
-
- }
-
- private void drawingModeChanged(object sender, EventArgs e)
- {
-
- RadioButton r = (RadioButton)sender;
- SetValue(DrawingModeProperty, Enum.Parse(typeof(DrawingMode), r.Name));
-
- }
-
-
- private void exitMenuItemClicked(object sender, RoutedEventArgs e)
- {
- Application.Current.Shutdown();
- }
-
-
-
- #region Private Fields
- private Point shapeClickPoint;
- private Rectangle newRectangle;
- private Line newLine;
- private Ellipse newEllipse;
-
- #endregion
-
- }
-
- public enum DrawingMode
- {
- Select=0, DrawLine=1, DrawRectangle=2, DrawEllipse=3
-
- }
+using System;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Shapes;
+using System.Windows.Input;
+
+
+namespace ColorPickerSampleApplication
+{
+
+ public partial class SampleViewer : Window
+ {
+
+ public SampleViewer()
+ {
+ InitializeComponent();
+
+ }
+
+
+
+ #region Dependency Property Fields
+
+ public static readonly DependencyProperty SelectedShapeProperty =
+ DependencyProperty.Register
+ ("SelectedShape", typeof(Shape), typeof(SampleViewer),
+ new PropertyMetadata(null, selectedShape_Changed));
+
+ public static readonly DependencyProperty DrawingModeProperty =
+ DependencyProperty.Register
+ ("DrawingMode", typeof(DrawingMode), typeof(SampleViewer),
+ new PropertyMetadata(DrawingMode.Select));
+
+ public static readonly DependencyProperty FillColorProperty =
+ DependencyProperty.Register
+ ("FillColor", typeof(Color), typeof(SampleViewer),
+ new PropertyMetadata(Colors.LightGray));
+
+ public static readonly DependencyProperty StrokeColorProperty =
+ DependencyProperty.Register
+ ("StrokeColor", typeof(Color), typeof(SampleViewer),
+ new PropertyMetadata(Colors.Black));
+
+ public static readonly DependencyProperty StrokeThicknessProperty =
+ DependencyProperty.Register
+ ("StrokeThickness", typeof(double), typeof(SampleViewer),
+ new PropertyMetadata(1.0, strokeThickness_Changed));
+
+ #endregion
+
+
+ #region Public Properties
+
+ public DrawingMode DrawingMode
+ {
+ get
+ {
+ return (DrawingMode)GetValue(DrawingModeProperty);
+ }
+ set
+ {
+ SetValue(DrawingModeProperty, value);
+ }
+ }
+
+
+ public Color FillColor
+ {
+ get
+ {
+ return (Color)GetValue(FillColorProperty);
+ }
+ set
+ {
+ SetValue(FillColorProperty, value);
+ }
+ }
+
+ public Color StrokeColor
+ {
+ get
+ {
+ return (Color)GetValue(StrokeColorProperty);
+ }
+ set
+ {
+ SetValue(StrokeColorProperty, value);
+ }
+ }
+
+ public double StrokeThickness
+ {
+ get
+ {
+ return (double)GetValue(StrokeThicknessProperty);
+ }
+ set
+ {
+ SetValue(StrokeThicknessProperty, value);
+ }
+ }
+
+ #endregion
+
+
+
+
+ private static void selectedShape_Changed(object sender,
+ DependencyPropertyChangedEventArgs e)
+ {
+
+ SampleViewer sViewer = (SampleViewer)sender;
+ sViewer.OnSelectedShapeChanged((Shape)e.OldValue, (Shape)e.NewValue);
+
+ }
+
+ protected void OnSelectedShapeChanged(Shape oldShape, Shape newShape)
+ {
+ if (newShape != null)
+ {
+ FillColor = ((SolidColorBrush)newShape.Fill).Color;
+ StrokeColor = ((SolidColorBrush)newShape.Stroke).Color;
+ StrokeThickness = newShape.StrokeThickness;
+ }
+ }
+
+ private static void strokeThickness_Changed(object sender,
+ DependencyPropertyChangedEventArgs e)
+ {
+
+ SampleViewer sViewer = (SampleViewer)sender;
+ sViewer.OnStrokeThicknessChanged((double)e.OldValue, (double)e.NewValue);
+
+ }
+
+ protected void OnStrokeThicknessChanged(double oldThickness, double newThickness)
+ {
+ Shape currentShape = (Shape)GetValue(SelectedShapeProperty);
+ if (currentShape != null)
+ {
+ currentShape.StrokeThickness = newThickness;
+ }
+ }
+
+
+ private void OnDrawingCanvasMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
+ {
+ Point clickPoint = e.GetPosition(DrawingCanvas);
+ if (DrawingMode == DrawingMode.Select)
+ {
+ if (e.OriginalSource is Shape)
+ {
+ Shape s = (Shape)e.OriginalSource;
+ SetValue(SelectedShapeProperty, s);
+ shapeClickPoint = e.GetPosition(s);
+ }
+ else
+ SetValue(SelectedShapeProperty, null);
+ }
+ else if (DrawingMode == DrawingMode.DrawRectangle && e.LeftButton == MouseButtonState.Pressed)
+ {
+ newRectangle = new Rectangle();
+ newRectangle.Stroke = new SolidColorBrush(StrokeColor);
+ newRectangle.StrokeThickness = StrokeThickness;
+ newRectangle.Fill = new SolidColorBrush(FillColor);
+ Canvas.SetLeft(newRectangle, clickPoint.X);
+ Canvas.SetTop(newRectangle, clickPoint.Y);
+ DrawingCanvas.Children.Add(newRectangle);
+ SetValue(SelectedShapeProperty, newRectangle);
+ }
+ else if (DrawingMode == DrawingMode.DrawEllipse && e.LeftButton == MouseButtonState.Pressed)
+ {
+ newEllipse = new Ellipse();
+ newEllipse.Stroke = new SolidColorBrush(StrokeColor);
+ newEllipse.StrokeThickness = StrokeThickness;
+ newEllipse.Fill = new SolidColorBrush(FillColor);
+ Canvas.SetLeft(newEllipse, clickPoint.X);
+ Canvas.SetTop(newEllipse, clickPoint.Y);
+ DrawingCanvas.Children.Add(newEllipse);
+ SetValue(SelectedShapeProperty, newEllipse);
+ }
+ else if (DrawingMode == DrawingMode.DrawLine && e.LeftButton == MouseButtonState.Pressed)
+ {
+ newLine = new Line();
+ newLine.Stroke = new SolidColorBrush(StrokeColor);
+ newLine.Fill = new SolidColorBrush(FillColor);;
+ newLine.X1 = clickPoint.X;
+ newLine.Y1 = clickPoint.Y;
+ newLine.StrokeThickness = StrokeThickness;
+ DrawingCanvas.Children.Add(newLine);
+ SetValue(SelectedShapeProperty, newLine);
+ }
+ }
+
+ private void OnDrawingCanvasMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
+ {
+
+ if (DrawingMode == DrawingMode.DrawRectangle)
+ {
+ newRectangle = null;
+
+ }
+ else if (DrawingMode == DrawingMode.DrawEllipse)
+ {
+ newEllipse = null;
+
+ }
+ else if (DrawingMode == DrawingMode.DrawLine)
+ {
+ newLine = null;
+
+ }
+ }
+
+ private void OnDrawingCanvasMouseMove(object sender, MouseEventArgs e)
+ {
+ Point dropPoint = e.GetPosition(DrawingCanvas);
+ if (DrawingMode == DrawingMode.Select)
+ {
+ Shape s = (Shape)GetValue(SelectedShapeProperty);
+ if (s != null && e.LeftButton == MouseButtonState.Pressed)
+ {
+
+ Canvas.SetLeft(s, dropPoint.X - shapeClickPoint.X);
+ Canvas.SetTop(s, dropPoint.Y - shapeClickPoint.Y);
+ s.BitmapEffect = null;
+ }
+ }
+ else if (DrawingMode == DrawingMode.DrawRectangle)
+ {
+ if (newRectangle != null)
+ {
+ if (dropPoint.X > Canvas.GetLeft(newRectangle))
+ newRectangle.Width = dropPoint.X - Canvas.GetLeft(newRectangle);
+ if (dropPoint.Y > Canvas.GetTop(newRectangle))
+ newRectangle.Height = dropPoint.Y - Canvas.GetTop(newRectangle);
+ }
+ }
+ else if (DrawingMode == DrawingMode.DrawEllipse)
+ {
+ if (newEllipse != null)
+ {
+ if (dropPoint.X > Canvas.GetLeft(newEllipse))
+ newEllipse.Width = dropPoint.X - Canvas.GetLeft(newEllipse);
+ if (dropPoint.Y > Canvas.GetTop(newEllipse))
+ newEllipse.Height = dropPoint.Y - Canvas.GetTop(newEllipse);
+ }
+ }
+ else if (DrawingMode == DrawingMode.DrawLine)
+ {
+ if (newLine != null)
+ {
+ newLine.X2 = dropPoint.X;
+ newLine.Y2 = dropPoint.Y;
+ }
+ }
+ }
+
+ private void OnDrawingCanvasKeyDown(object sender, KeyEventArgs e)
+ {
+
+ Shape s = (Shape)GetValue(SelectedShapeProperty);
+ if (e.Key == Key.Delete && s!= null)
+ {
+ DrawingCanvas.Children.Remove(s);
+ SetValue(SelectedShapeProperty, null);
+ }
+ }
+
+
+ private void SetStroke(object sender, RoutedEventArgs e)
+ {
+ Shape selectedShape = (Shape)GetValue(SelectedShapeProperty);
+
+
+ Microsoft.Samples.CustomControls.ColorPickerDialog cPicker
+ = new Microsoft.Samples.CustomControls.ColorPickerDialog();
+ cPicker.StartingColor = StrokeColor;
+ cPicker.Owner = this;
+ cPicker.ShowAlpha = false;
+
+ bool? dialogResult = cPicker.ShowDialog();
+ if (dialogResult != null && (bool)dialogResult == true)
+ {
+
+ if (selectedShape != null)
+ selectedShape.Stroke = new SolidColorBrush(cPicker.SelectedColor);
+ StrokeColor = cPicker.SelectedColor;
+
+ }
+
+ }
+
+
+ private void SetFill(object sender, RoutedEventArgs e)
+ {
+ Shape selectedShape = (Shape)GetValue(SelectedShapeProperty);
+
+ Microsoft.Samples.CustomControls.ColorPickerDialog cPicker
+ = new Microsoft.Samples.CustomControls.ColorPickerDialog();
+ cPicker.StartingColor = FillColor;
+ cPicker.Owner = this;
+
+ bool? dialogResult = cPicker.ShowDialog();
+ if (dialogResult != null && (bool)dialogResult == true)
+ {
+
+ if (selectedShape != null)
+ selectedShape.Fill = new SolidColorBrush(cPicker.SelectedColor);
+ FillColor = cPicker.SelectedColor;
+
+ }
+
+ }
+
+ private void drawingModeChanged(object sender, EventArgs e)
+ {
+
+ RadioButton r = (RadioButton)sender;
+ SetValue(DrawingModeProperty, Enum.Parse(typeof(DrawingMode), r.Name));
+
+ }
+
+
+ private void exitMenuItemClicked(object sender, RoutedEventArgs e)
+ {
+ Application.Current.Shutdown();
+ }
+
+
+
+ #region Private Fields
+ private Point shapeClickPoint;
+ private Rectangle newRectangle;
+ private Line newLine;
+ private Ellipse newEllipse;
+
+ #endregion
+
+ }
+
+ public enum DrawingMode
+ {
+ Select=0, DrawLine=1, DrawRectangle=2, DrawEllipse=3
+
+ }
}
\ No newline at end of file
diff --git a/Libraries/WPFColorPicker/ColorPickerSampleApplication/app.xaml b/Libraries/WPFColorPicker/ColorPickerSampleApplication/app.xaml
index 467027e7d8..664a2bb892 100644
--- a/Libraries/WPFColorPicker/ColorPickerSampleApplication/app.xaml
+++ b/Libraries/WPFColorPicker/ColorPickerSampleApplication/app.xaml
@@ -1,157 +1,157 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/README.md b/README.md
index adda37b809..85a45c8532 100644
--- a/README.md
+++ b/README.md
@@ -2,12 +2,15 @@ Eto.Forms
=========
### A cross platform desktop and mobile user interface framework
+[![Build status](http://img.shields.io/appveyor/ci/cwensley/eto.svg?style=flat)](https://ci.appveyor.com/project/cwensley/eto/branch/develop)
+
Links
-----
* Join the [forums](http://groups.google.com/group/eto-forms)
* Chat in [#eto.forms](http://chat.mibbit.com/?server=irc.gimp.org&channel=%23eto.forms) on irc.gimp.org
-* Download using [nuget](https://www.nuget.org/packages/Eto.Forms.Sample/) with Visual Studio or [Xamarin Studio nuget addin](https://github.com/mrward/monodevelop-nuget-addin)
+* Download binaries using NuGet [![NuGet](http://img.shields.io/nuget/v/Eto.Forms.svg?style=flat)](https://www.nuget.org/packages/Eto.Forms.Sample/) with Visual Studio or Xamarin Studio.
+* For bleeding edge nuget packages, add the MyGet development feed [![MyGet](http://img.shields.io/myget/eto/vpre/Eto.Forms.svg?style=flat)](https://www.myget.org/F/eto/) to your sources list.
Description
@@ -22,23 +25,22 @@ There is a Mobile/iOS port in the works, but is considered incomplete.
This framework was built so that using it in .NET is natural. For example, a simple hello-world application might look like:
+ using Eto.Forms;
+ using Eto.Drawing;
+
public class MyForm : Form
{
public MyForm ()
{
- Text = "My Cross-Platform App";
- Size = new Size (200, 200);
+ Title = "My Cross-Platform App";
+ ClientSize = new Size(200, 200);
Content = new Label { Text = "Hello World!" };
}
[STAThread]
- static void Main () {
- var app = new Application();
- app.Initialized += delegate {
- app.MainForm = new MyForm ();
- app.MainForm.Show ();
- };
- app.Run ();
+ static void Main()
+ {
+ new Application().Run(new MyForm());
}
}
@@ -50,13 +52,22 @@ Applications
* [Notedown](https://github.com/modmonkeys/Notedown) - Note taking application
* [Eto.Test](https://github.com/picoe/Eto/tree/master/Source/Eto.Test) - Application to test the functionality of each widget
-Namespaces
+Assemblies
----------
-* [Eto.Forms](https://github.com/picoe/Eto/tree/master/Source/Eto/Forms) - User interface
-* [Eto.Drawing](https://github.com/picoe/Eto/tree/master/Source/Eto/Drawing) - Drawing/graphical routines
-* [Eto.IO](https://github.com/picoe/Eto/tree/master/Source/Eto/IO) - Disk/Virtual directory abstraction
-* Eto.Platform.[Platform] - platform implementations
+Your project only needs to reference Eto.dll, and include the corresponding platform assembly that you wish to target. To run on a Mac platform, you need to [bundle your app](https://github.com/picoe/Eto/wiki/Running-your-application).
+
+* Eto.dll - Eto.Forms (UI), Eto.Drawing (Graphics), and platform loading
+* Eto.Mac.dll - MonoMac platform for OS X using 32-bit mono
+* Eto.Mac64.dll - MonoMac platform for OS X using 64-bit mono
+* Eto.XamMac.dll - Xamarin.Mac platform for OS X to embed mono
+* Eto.WinForms.dll - Windows Forms platform using GDI+ for graphics
+* Eto.Direct2D.dll - Windows Forms platform using Direct2D for graphics
+* Eto.Wpf.dll - Windows Presentation Foundation platform
+* Eto.Gtk2.dll - Gtk2 platform
+* Eto.Gtk3.dll - Gtk3 platform
+* Eto.iOS.dll - Xamarin.iOS platform
+* Eto.Android.dll - Xamarin.Android platform
Currently supported targets
---------------------------
@@ -69,4 +80,7 @@ Currently supported targets
Under development
-----------------
-* Android using Xamarin.Android
+These platforms are currently in development. Any eager bodies willing to help feel free to do so!
+
+* Android using Xamarin.Android (Eto.Android)
+* Windows 8.x and Windows Phone (Eto.WinRT)
diff --git a/Resources/MacAppTemplate.app/Contents/Info.plist b/Resources/MacAppTemplate.app/Contents/Info.plist
index fc9a6a39e5..4eafedf790 100644
--- a/Resources/MacAppTemplate.app/Contents/Info.plist
+++ b/Resources/MacAppTemplate.app/Contents/Info.plist
@@ -17,7 +17,7 @@
CFBundleIconFile
Icon.icns
CFBundleExecutable
- Launcher
+ Launcher.exec
BuildMachineOSBuild
12A269
CFBundleDevelopmentRegion
diff --git a/Resources/MacAppTemplate.app/Contents/MacOS/Launcher b/Resources/MacAppTemplate.app/Contents/MacOS/Launcher.exec
similarity index 100%
rename from Resources/MacAppTemplate.app/Contents/MacOS/Launcher
rename to Resources/MacAppTemplate.app/Contents/MacOS/Launcher.exec
diff --git a/Resources/MacAppTemplate.app/Contents/MonoBundle/README.txt b/Resources/MacAppTemplate.app/Contents/MonoBundle/README.txt
index f2d7d13603..e3dbab22f0 100644
--- a/Resources/MacAppTemplate.app/Contents/MonoBundle/README.txt
+++ b/Resources/MacAppTemplate.app/Contents/MonoBundle/README.txt
@@ -3,7 +3,7 @@ Next Steps:
1. Copy your .exe, .dll's, and any external resources here
- - Make sure to include Eto.dll, Eto.Platform.Mac.dll, and MonoMac.dll
+ - Make sure to include Eto.dll, Eto.Mac.dll, and MonoMac.dll
2. Modify Contents/Info.plist and update these properties:
diff --git a/Resources/Publish.targets b/Resources/Publish.targets
index bd6ea141a4..80ab62e281 100644
--- a/Resources/Publish.targets
+++ b/Resources/Publish.targets
@@ -2,58 +2,165 @@
Release
- ..\Source
- ..\BuildOutput\$(Configuration)
- ..\BuildOutput\Pcl\$(Configuration)
- ..\BuildOutput\Nuget\$(Configuration)
- Clean;Build
+ ..
+ $(BaseDir)\Source
+ $(SourceDir)
+ $(BaseDir)\BuildOutput\$(Configuration)
+ $(BaseDir)\BuildOutput\Pcl\$(Configuration)
+ $(BaseDir)\BuildOutput\Nuget\$(Configuration)
+ Build
$(TargetDir.Trim('\\'))
+ Windows
+ 1.4.0.78
+ $(MSBuildThisFileDirectory)\packages\MSBuildTasks.$(MSBuildCommunityVersion)\tools
+ $([MSBUILD]::Unescape($(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll))
+
+ $(SourceDir)\Addins\Eto.Addin.XamarinStudio\Eto.Addin.XamarinStudio.csproj
+ $(SourceDir)\Addins\Eto.Addin.VisualStudio\Eto.Addin.VisualStudio.sln
+ "/Applications/Xamarin Studio.app/Contents/MacOS/mdtool"
+ "c:\Program Files (x86)\Xamarin Studio\bin\mdtool.exe"
-
-
-
- "/Applications/Xamarin Studio.app/Contents/MacOS/mdtool"
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
-
+
+
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+ Eto.dll
+
+
+ Eto.Gtk2.dll
+
+
+ Eto.Gtk3.dll
+
+
+ Eto.Mac.dll
+
+
+ Eto.Mac64.dll
+
+
+ Eto.XamMac.dll
+
+
+ Eto.XamMac2.dll
+
+
+ Eto.WinForms.dll
+
+
+ Eto.Direct2D.dll
+
+
+ Eto.Wpf.dll
+
+
+ Eto.WinRT.dll
+
+
+ Eto.iOS.dll
+
+
+ Eto.Serialization.Json.dll
+
+
+ Eto.Serialization.Xaml.dll
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
+
-
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/Utilities.targets b/Resources/Utilities.targets
new file mode 100644
index 0000000000..42b8a9478d
--- /dev/null
+++ b/Resources/Utilities.targets
@@ -0,0 +1,91 @@
+
+
+
+ true
+ packages
+ $(UtilitiesBasePath)\Eto.UtilitiesTasks
+
+
+
+
+
+
+
+ ();
+ if (informationalVersion != null)
+ AssemblyInformationalVersion = informationalVersion.InformationalVersion;
+ var title = assembly.GetCustomAttribute();
+ if (title != null)
+ AssemblyTitle = title.Title;
+ var description = assembly.GetCustomAttribute();
+ if (description != null)
+ AssemblyDescription = description.Description;
+ var copyright = assembly.GetCustomAttribute();
+ if (copyright != null)
+ AssemblyCopyright = copyright.Copyright;
+ var company = assembly.GetCustomAttribute();
+ if (company != null)
+ AssemblyCompany = company.Company;
+ AssemblyName = assembly.GetName().Name;
+ return true;
+ }
+ catch (Exception ex)
+ {
+ Log.LogErrorFromException(ex);
+ return false;
+ }
+ }
+}]]>
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuget.exe b/Resources/nuget.exe
index 3ffdd33c61..c41a0d0deb 100644
Binary files a/Resources/nuget.exe and b/Resources/nuget.exe differ
diff --git a/Resources/nuspec/Eto.Forms.Sample/Eto.Forms.Sample.nuspec b/Resources/nuspec/Eto.Forms.Sample/Eto.Forms.Sample.nuspec
index 346bd351f3..2c3be5f0f8 100644
--- a/Resources/nuspec/Eto.Forms.Sample/Eto.Forms.Sample.nuspec
+++ b/Resources/nuspec/Eto.Forms.Sample/Eto.Forms.Sample.nuspec
@@ -11,28 +11,30 @@
false
Eto.Forms - Sample Cross Platform Application
- This sample application provides a starting point for your Eto.Forms application.
+This sample application provides a starting point for your Eto.Forms application.
- Add this package to a blank console application, then delete the Program.cs of the existing application to use MyEtoApplication.Main() as your program startup.
+Add this package to a blank console application, which will replace your Program.cs with the Eto.Forms startup code and include a MainForm.cs as a sample form to get you started.
- You should also change the console application's output type to 'Windows Application' to suppress the console window from showing.
+You will need to change the console application's output type to 'Windows Application' to suppress the console window from showing.
+
+In Xamarin Studio, set the compile target to 'Executable with GUI' and uncheck 'Run on external console' in Run > Build.
Copyright 2014 by Curtis Wensley
cross platform gui framework desktop winforms wpf mac osx gtk eto.forms sample
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Forms.Sample/MainForm.cs.pp b/Resources/nuspec/Eto.Forms.Sample/MainForm.cs.pp
new file mode 100644
index 0000000000..704c60bf46
--- /dev/null
+++ b/Resources/nuspec/Eto.Forms.Sample/MainForm.cs.pp
@@ -0,0 +1,60 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $rootnamespace$
+{
+ ///
+ /// Your application's main form
+ ///
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Title = "My Eto Form";
+ ClientSize = new Size(400, 350);
+
+ // scrollable region as the main content
+ Content = new Scrollable
+ {
+ // table with three rows
+ Content = new TableLayout(
+ null,
+ // row with three columns
+ new TableRow(null, new Label { Text = "Hello World!" }, null),
+ null
+ )
+ };
+
+ // create a few commands that can be used for the menu and toolbar
+ var clickMe = new Command { MenuText = "Click Me!", ToolBarText = "Click Me!" };
+ clickMe.Executed += (sender, e) => MessageBox.Show(this, "I was clicked!");
+
+ var quitCommand = new Command { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q };
+ quitCommand.Executed += (sender, e) => Application.Instance.Quit();
+
+ var aboutCommand = new Command { MenuText = "About..." };
+ aboutCommand.Executed += (sender, e) => MessageBox.Show(this, "About my app...");
+
+ // create menu
+ Menu = new MenuBar
+ {
+ Items = {
+ // File submenu
+ new ButtonMenuItem { Text = "&File", Items = { clickMe } },
+ // new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } },
+ // new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } },
+ },
+ ApplicationItems = {
+ // application (OS X) or file menu (others)
+ new ButtonMenuItem { Text = "&Preferences..." },
+ },
+ QuitItem = quitCommand,
+ AboutItem = aboutCommand
+ };
+
+ // create toolbar
+ ToolBar = new ToolBar { Items = { clickMe } };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Forms.Sample/MyEtoApplication.cs.pp b/Resources/nuspec/Eto.Forms.Sample/MyEtoApplication.cs.pp
deleted file mode 100644
index 090cbe6615..0000000000
--- a/Resources/nuspec/Eto.Forms.Sample/MyEtoApplication.cs.pp
+++ /dev/null
@@ -1,30 +0,0 @@
-using System;
-using Eto.Forms;
-using Eto.Drawing;
-
-namespace $rootnamespace$
-{
- ///
- /// Set this class as your startup object
- ///
- public class MyEtoApplication : Application
- {
- [STAThread]
- public static void Main(string[] args)
- {
- var app = new MyEtoApplication();
- app.Run(args);
- }
-
- ///
- /// Handles when the application is initialized and running
- ///
- public override void OnInitialized(EventArgs e)
- {
- base.OnInitialized(e);
-
- MainForm = new MyEtoForm();
- MainForm.Show();
- }
- }
-}
diff --git a/Resources/nuspec/Eto.Forms.Sample/MyEtoForm.cs.pp b/Resources/nuspec/Eto.Forms.Sample/MyEtoForm.cs.pp
deleted file mode 100644
index a45dd56182..0000000000
--- a/Resources/nuspec/Eto.Forms.Sample/MyEtoForm.cs.pp
+++ /dev/null
@@ -1,65 +0,0 @@
-using System;
-using Eto.Forms;
-using Eto.Drawing;
-
-namespace $rootnamespace$
-{
- ///
- /// Your form
- ///
- public class MyEtoForm : Form
- {
- public MyEtoForm()
- {
- Title = "My Eto Form";
- ClientSize = new Size(400, 350);
-
- // DynamicLayout is the typical layout to use
- // but you can also use TableLayout or PixelLayout
- var layout = new DynamicLayout();
-
- layout.BeginHorizontal();
-
- layout.Add(null);
- layout.Add(new Label { Text = "Hello World!" });
- layout.Add(null);
-
- layout.EndHorizontal();
-
- // scrollable gives you a scrolling region
- Content = new Scrollable { Content = layout };
-
- GenerateMenuAndToolBar();
- }
-
- void GenerateMenuAndToolBar()
- {
- // your commands!
- var clickMe = new Command { MenuText = "Click Me!", ShowLabel = true, ToolBarText = "Click Me!" };
- clickMe.Executed += (sender, e) => MessageBox.Show(this, "I was clicked!");
-
- var quitAction = new Command { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q };
- quitAction.Executed += (sender, e) => Application.Instance.Quit();
-
-
- // create menu & get standard menu items (e.g. needed for OS X)
- var menu = new MenuBar();
- Application.Instance.CreateStandardMenu(menu.Items);
-
- // add commands to the menu
- var myMenu = menu.Items.GetSubmenu("&File");
- myMenu.Items.Add(clickMe, 500);
- myMenu.Items.AddSeparator(500);
- myMenu.Items.Add(quitAction, 1000);
-
- menu.Items.Trim();
- this.Menu = menu;
-
-
- // create toolbar
- var toolbar = new ToolBar();
- toolbar.Items.Add(clickMe);
- this.ToolBar = toolbar;
- }
- }
-}
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Forms.Sample/Program.cs.pp b/Resources/nuspec/Eto.Forms.Sample/Program.cs.pp
new file mode 100644
index 0000000000..3361177c6c
--- /dev/null
+++ b/Resources/nuspec/Eto.Forms.Sample/Program.cs.pp
@@ -0,0 +1,16 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $rootnamespace$
+{
+ public static class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ // run application with our main form
+ new Application().Run(new MainForm());
+ }
+ }
+}
diff --git a/Resources/nuspec/Eto.Forms.Sample/README.txt b/Resources/nuspec/Eto.Forms.Sample/README.txt
index 6eab2e547b..bd4418e6bd 100644
--- a/Resources/nuspec/Eto.Forms.Sample/README.txt
+++ b/Resources/nuspec/Eto.Forms.Sample/README.txt
@@ -1,14 +1,13 @@
Welcome to your first Eto.Forms cross-platform application!
-To get started, ensure you use MyEtoApplication.Main() as your program startup, so delete
-the existing Program.cs and/or Main() method.
+To get started, ensure you use Program.Main() as your program startup.
Here's a breakdown of what's included:
-MyEtoForm.cs - Contains your main form
-MyEtoApplication.cs - Your startup code and Main() method
-MyApp.app - A template for packaging your app for Mac users
+MainForm.cs - Contains your main form
+Program.cs - Your startup code
+MyApp.app - A template for packaging your app for Mac users
This framework can be used to build applications that run across multiple platforms using
their native toolkit using a single UI codebase. This will make your applications look and
diff --git a/Resources/nuspec/Eto.Json.nuspec b/Resources/nuspec/Eto.Json.nuspec
deleted file mode 100644
index f6f9defca7..0000000000
--- a/Resources/nuspec/Eto.Json.nuspec
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
- Eto.Forms.Json
- $version$
- Eto.Forms Json serializer
- Picoe Software Solutions Inc.
- Picoe Software Solutions Inc.
- https://github.com/picoe/Eto/raw/master/LICENSE
- https://github.com/picoe/Eto
- false
- Eto.Forms Json serializer
-
- Eto.Json allows you to load json UI definitions for the Eto.Forms framework
-
- To get more information about how to get started, read the wiki:
-
- https://github.com/picoe/Eto/wiki
-
- Copyright 2014 by Curtis Wensley
- cross platform gui ui framework desktop json eto.forms
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Direct2D.nuspec b/Resources/nuspec/Eto.Platform.Direct2D.nuspec
index 68d9ef63e7..cf4182bde8 100644
--- a/Resources/nuspec/Eto.Platform.Direct2D.nuspec
+++ b/Resources/nuspec/Eto.Platform.Direct2D.nuspec
@@ -1,30 +1,30 @@
- $id$
+ Eto.Platform.Direct2D
$version$
$title$
- Picoe Software Solutions Inc.
- Picoe Software Solutions Inc.
+ $author$
+ $author$
https://github.com/picoe/Eto/raw/master/LICENSE
https://github.com/picoe/Eto
false
$description$
- This is the Direct2D platform for Eto.Forms UI Framework.
+This is the Direct2D platform for Eto.Forms UI Framework.
- Include this along with your Eto.Forms application to provide a WinForms interface with Direct2D drawing for your windows users.
+Include this along with your Eto.Forms application to provide a WinForms interface with Direct2D drawing for your windows users.
- The Direct2D platform allows for increased performance when custom drawing by using the GPU. This does not affect the behaviour or performance of regular controls, which will use the Windows Forms platform.
+The Direct2D platform allows for increased performance when custom drawing by using the GPU. This does not affect the behaviour or performance of regular controls, which will use the Windows Forms platform.
- You do not need to use any of the classes of this assembly (unless customizing the functionality of the platform), and should just use the UI controls from the Eto assembly.
+You do not need to use any of the classes of this assembly (unless customizing the functionality of the platform), and should just use the UI controls from the Eto assembly.
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop wpf eto.forms
-
-
+
+
@@ -32,7 +32,8 @@
-
-
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Gtk.nuspec b/Resources/nuspec/Eto.Platform.Gtk.nuspec
index 9cce8ff0df..3280ac3a2f 100644
--- a/Resources/nuspec/Eto.Platform.Gtk.nuspec
+++ b/Resources/nuspec/Eto.Platform.Gtk.nuspec
@@ -1,7 +1,7 @@
- $id$
+ Eto.Platform.Gtk
$version$
$title$
$author$
@@ -11,24 +11,25 @@
false
$description$
- This is the GTK2 platform for Eto.Forms UI Framework.
+This is the GTK2 platform for Eto.Forms UI Framework.
- Include this along with your Eto.Forms application to provide a GTK interface, typically for Linux users.
+Include this along with your Eto.Forms application to provide a GTK2 interface, typically for Linux users.
- You do not need to use any of the classes of this assembly (unless customizing the GTK functionality of the platform), and should just use the UI controls from the Eto assembly.
+You do not need to use any of the classes of this assembly (unless customizing the GTK functionality of the platform), and should just use the UI controls from the Eto assembly.
- On Linux, mono framework 2.10 or higher and gtk-sharp2 are required.
+On Linux, mono framework 2.10 or higher and gtk-sharp2 are required.
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop gtk eto.forms
-
+
-
-
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Gtk3.nuspec b/Resources/nuspec/Eto.Platform.Gtk3.nuspec
index c5c206fefb..d8245ad060 100644
--- a/Resources/nuspec/Eto.Platform.Gtk3.nuspec
+++ b/Resources/nuspec/Eto.Platform.Gtk3.nuspec
@@ -1,7 +1,7 @@
- $id$
+ Eto.Platform.Gtk3
$version$
$title$
$author$
@@ -11,24 +11,25 @@
false
$description$
- This is the GTK3 platform for Eto.Forms UI Framework.
+This is the GTK3 platform for Eto.Forms UI Framework.
- Include this along with your Eto.Forms application to provide a GTK interface, typically for Linux users.
+Include this along with your Eto.Forms application to provide a GTK3 interface, typically for Linux users.
- You do not need to use any of the classes of this assembly (unless customizing the GTK functionality of the platform), and should just use the UI controls from the Eto assembly.
+You do not need to use any of the classes of this assembly (unless customizing the GTK functionality of the platform), and should just use the UI controls from the Eto assembly.
- On Linux, mono framework 2.10 or higher and gtk-sharp2 are required.
+On Linux, mono framework 2.10 or higher and gtk-sharp2 are required.
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop gtk eto.forms
-
+
-
-
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Mac.Template.nuspec b/Resources/nuspec/Eto.Platform.Mac.Template.nuspec
deleted file mode 100644
index f360940516..0000000000
--- a/Resources/nuspec/Eto.Platform.Mac.Template.nuspec
+++ /dev/null
@@ -1,27 +0,0 @@
-
-
-
- Eto.Platform.Mac.Template
- $version$
- Eto.Forms - Mac App Template
- Curtis Wensley
- Curtis Wensley
- https://github.com/picoe/Eto/raw/master/LICENSE
- https://github.com/picoe/Eto
- false
- Eto.Forms - Mac Application Template
-
- This package provides an .app template for your Eto.Forms application when packaging for Mac.
-
- Copyright 2014 by Curtis Wensley
- cross platform gui ui framework desktop monomac osx mac eto.forms
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Mac.nuspec b/Resources/nuspec/Eto.Platform.Mac.nuspec
index ae3fa6dcf8..6629a74146 100644
--- a/Resources/nuspec/Eto.Platform.Mac.nuspec
+++ b/Resources/nuspec/Eto.Platform.Mac.nuspec
@@ -1,7 +1,7 @@
- $id$
+ Eto.Platform.Mac
$version$
$title$
$author$
@@ -11,30 +11,32 @@
false
$description$
- This is the MonoMac platform for Eto.Forms UI Framework.
+This is the MonoMac platform for Eto.Forms UI Framework.
- Include this along with your Eto.Forms application to provide an OS X interface for Mac users.
+Include this along with your Eto.Forms application to provide an OS X interface for Mac users.
- Eto.Platform.Mac uses the open source MonoMac, which allows you to create OS X Applications with no cost. However, it does require mono to be installed.
+Eto.Platform.Mac uses the open source MonoMac, which allows you to create OS X Applications with no cost. However, it does require mono to be installed.
- Using Eto.Platform.XamMac instead allows you to bundle mono inside your .app, however it requires purchasing Xamarin.Mac and using Xamarin Studio on OS X.
+Using Eto.Platform.XamMac instead allows you to bundle mono inside your .app, however it requires purchasing Xamarin.Mac and using Xamarin Studio on OS X.
- You can create your own .app bundle to run your app on OS X, without an OS X machine. This is included as the MyApp.app folder. Read MyApp.app\Contents\MonoBundle\README.txt for instructions on next steps.
+You can create your own .app bundle to run your app on OS X, without using a Mac. Use the Eto.Platform.Mac.Template nuget package to build one for your app automatically.
- You do not need to use any of the classes of this assembly (unless customizing the MonoMac functionality of the platform), and should just use the UI controls from the Eto assembly.
+You do not need to use any of the classes of this assembly (unless customizing the MonoMac functionality of the platform), and should just use the UI controls from the Eto assembly.
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop monomac osx mac eto.forms
-
+
-
-
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Mac64.nuspec b/Resources/nuspec/Eto.Platform.Mac64.nuspec
new file mode 100644
index 0000000000..9b3dcb9ebf
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.Mac64.nuspec
@@ -0,0 +1,44 @@
+
+
+
+ Eto.Platform.Mac64
+ $version$
+ $title$
+ $author$
+ $author$
+ https://github.com/picoe/Eto/raw/master/LICENSE
+ https://github.com/picoe/Eto
+ false
+ $description$
+
+This is the MonoMac 64-bit platform for Eto.Forms UI Framework.
+
+This is used only when running a 64-bit version of mono, which is typically useful for embedding scenarios as the default mono on OS X is only 32-bit currently.
+
+Eto.Platform.Mac64 uses a modified version of the open source MonoMac for 64-bit, which allows you to create OS X Applications at no cost. However, it does require 64-bit mono to be installed.
+
+If you want to run using the standard mono install for OS X, use Eto.Platform.Mac.
+
+Using Eto.Platform.XamMac instead allows you to bundle mono inside your .app, however it requires purchasing Xamarin.Mac and using Xamarin Studio on OS X.
+
+You can create your own .app bundle to run your app on OS X, without an OS X machine. This is included as the MyApp.app folder. Read MyApp.app\Contents\MonoBundle\README.txt for instructions on next steps.
+
+You do not need to use any of the classes of this assembly (unless customizing the MonoMac functionality of the platform), and should just use the UI controls from the Eto assembly.
+
+ $copyright$
+ cross platform gui ui framework desktop monomac osx mac eto.forms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.MacAppTemplate/Eto.Platform.Mac.Template.nuspec b/Resources/nuspec/Eto.Platform.MacAppTemplate/Eto.Platform.Mac.Template.nuspec
new file mode 100644
index 0000000000..deb74e0094
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.MacAppTemplate/Eto.Platform.Mac.Template.nuspec
@@ -0,0 +1,38 @@
+
+
+
+ Eto.Platform.Mac.Template
+ $version$
+ Eto.Forms - Mac App Template
+ Curtis Wensley
+ Curtis Wensley
+ https://github.com/picoe/Eto/raw/master/LICENSE
+ https://github.com/picoe/Eto
+ false
+ Eto.Forms - Mac Application Template
+
+This package provides an .app template for your Eto.Forms application when packaging for Mac.
+When building, an .app bundle will be created for your app when you use this package.
+
+You can create apps that run on OS X natively from windows using this package.
+Note that Mono will need to be installed for your app to run.
+
+Alternatively, you can package for a mac so it does not require Mono and can be distributed through the App Store using Xamarin Studio on OS X and Eto.Platform.XamMac.
+
+ Copyright 2014 by Curtis Wensley
+ cross platform gui ui framework desktop monomac osx mac eto.forms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.MacAppTemplate/Eto.Platform.Mac.Template.targets b/Resources/nuspec/Eto.Platform.MacAppTemplate/Eto.Platform.Mac.Template.targets
new file mode 100644
index 0000000000..3f3be951f4
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.MacAppTemplate/Eto.Platform.Mac.Template.targets
@@ -0,0 +1,66 @@
+
+
+
+
+ $(BuildDependsOn);
+ _CreateAppBundle
+
+
+
+
+ $(MSBuildProjectName)
+ $(MSBuildProjectDirectory)\Mac\MyApp.app
+
+
+
+
+
+
+ $(OutputAppPath)\Contents\MonoBundle
+ $(OutputAppPath)\Contents\MacOS\Launcher.exec
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(PListContents.Replace('>MyApp.exe</', '>$(TargetFileName)</'))
+ $(PListContents.Replace('>MacAppTemplate</', '>$(AppBundleName)</'))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/Info.plist b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/Info.plist
new file mode 100644
index 0000000000..4eafedf790
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/Info.plist
@@ -0,0 +1,38 @@
+
+
+
+
+ MonoBundleExecutable
+ MyApp.exe
+ CFBundleName
+ MacAppTemplate
+ CFBundleIdentifier
+ com.yourcompany.myapp
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ NSHumanReadableCopyright
+ Copyright © Yourself
+ CFBundleIconFile
+ Icon.icns
+ CFBundleExecutable
+ Launcher.exec
+ BuildMachineOSBuild
+ 12A269
+ CFBundleDevelopmentRegion
+ en
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundlePackageType
+ APPL
+ CFBundleResourceSpecification
+ ResourceRules.plist
+ CFBundleSignature
+ ????
+ LSMinimumSystemVersion
+ 10.5
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/MacOS/Launcher.exec b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/MacOS/Launcher.exec
new file mode 100755
index 0000000000..f1e0fd19fe
Binary files /dev/null and b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/MacOS/Launcher.exec differ
diff --git a/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/MonoBundle/README.txt b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/MonoBundle/README.txt
new file mode 100644
index 0000000000..e3dbab22f0
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/MonoBundle/README.txt
@@ -0,0 +1,24 @@
+
+Next Steps:
+
+1. Copy your .exe, .dll's, and any external resources here
+
+ - Make sure to include Eto.dll, Eto.Mac.dll, and MonoMac.dll
+
+2. Modify Contents/Info.plist and update these properties:
+
+ - MonoBundleExecutable: Name of your exe to launch
+ - CFBundleName: Short name of your application to display on the menu bar
+ - CFBundleIdentifier: An identifier string that specifies the app type of the
+ bundle. The string should be in reverse DNS format using
+ only the Roman alphabet in upper and lower case
+ (A–Z, a–z), the dot (“.”), and the hyphen (“-”).
+ - CFBundleShortVersionString: The release-version-number string for the bundle.
+ - CFBundleVersion: The build-version-number string for the bundle
+ - NSHumanReadableCopyright: Copyright of your app
+ - CFBundleIconFile: Name of your application's icns file
+
+Notes:
+
+ - The MacOS/Launcher must have the executable bit set. Simply zipping the .app folder
+ and unzipping on OS X will set things up properly.
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/Resources/Icon.icns b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/Resources/Icon.icns
new file mode 100644
index 0000000000..10a8cbfd5b
Binary files /dev/null and b/Resources/nuspec/Eto.Platform.MacAppTemplate/MacAppTemplate.app/Contents/Resources/Icon.icns differ
diff --git a/Resources/nuspec/Eto.Platform.MacAppTemplate/README.txt b/Resources/nuspec/Eto.Platform.MacAppTemplate/README.txt
new file mode 100644
index 0000000000..f228931aa4
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.MacAppTemplate/README.txt
@@ -0,0 +1,28 @@
+
+This contains a template for creating an application that runs on OS X using Eto.Forms.
+
+If you are using Xamarin Studio on OS X, it is recommended to create a MonoMac or XamMac
+project directly, as it will allow you to debug and deploy the app directly.
+
+The nuget package automatically adds a targets include, which will
+package up your application into $(TargetName).app in the output directory.
+
+Next Steps:
+
+Modify MyApp.app/Contents/Info.plist and update these properties:
+
+ - MonoBundleExecutable: Name of your exe to launch (set automatically to your .exe)
+ - CFBundleName: Short name of your application to display on the menu bar (set automatically to the project name)
+ - CFBundleIdentifier: An identifier string that specifies the app type of the
+ bundle. The string should be in reverse DNS format using
+ only the Roman alphabet in upper and lower case
+ (A–Z, a–z), the dot (“.”), and the hyphen (“-”).
+ - CFBundleShortVersionString: The release-version-number string for the bundle.
+ - CFBundleVersion: The build-version-number string for the bundle
+ - NSHumanReadableCopyright: Copyright of your app
+ - CFBundleIconFile: Name of your application's icns file
+
+Notes:
+
+ - The MacOS/Launcher must have the executable bit set. Simply zipping the .app folder
+ and unzipping on OS X will set things up properly.
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.WinRT.nuspec b/Resources/nuspec/Eto.Platform.WinRT.nuspec
new file mode 100644
index 0000000000..995037c7f3
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.WinRT.nuspec
@@ -0,0 +1,37 @@
+
+
+
+ Eto.Platform.WinRT
+ $version$
+ $title$
+ $author$
+ $author$
+ https://github.com/picoe/Eto/raw/master/LICENSE
+ https://github.com/picoe/Eto
+ false
+ $description$
+
+This is the Windows 8 platform for Eto.Forms UI Framework.
+
+Include this along with your Eto.Forms application to provide a Windows 8 interface for your windows users.
+
+You do not need to use any of the classes of this assembly (unless customizing the functionality of the platform), and should just use the UI controls from the Eto assembly.
+
+ $copyright$
+ cross platform gui ui framework desktop wpf eto.forms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Windows.nuspec b/Resources/nuspec/Eto.Platform.Windows.nuspec
index 281654f2ad..2bcc844b43 100644
--- a/Resources/nuspec/Eto.Platform.Windows.nuspec
+++ b/Resources/nuspec/Eto.Platform.Windows.nuspec
@@ -1,7 +1,7 @@
- $id$
+ Eto.Platform.Windows
$version$
$title$
$author$
@@ -11,22 +11,23 @@
false
$description$
- This is the Windows Forms platform for Eto.Forms UI Framework.
+This is the Windows Forms platform for Eto.Forms UI Framework.
- Include this along with your Eto.Forms application to provide a Windows Forms interface for your windows users.
+Include this along with your Eto.Forms application to provide a Windows Forms interface for your windows users.
- You do not need to use any of the classes of this assembly (unless customizing the Windows Forms functionality of the platform), and should just use the UI controls from the Eto assembly.
+You do not need to use any of the classes of this assembly (unless customizing the Windows Forms functionality of the platform), and should just use the UI controls from the Eto assembly.
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop wpf eto.forms
-
+
-
-
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.Wpf.nuspec b/Resources/nuspec/Eto.Platform.Wpf.nuspec
index 08d2a3ae2c..3ab3d928f9 100644
--- a/Resources/nuspec/Eto.Platform.Wpf.nuspec
+++ b/Resources/nuspec/Eto.Platform.Wpf.nuspec
@@ -1,7 +1,7 @@
- $id$
+ Eto.Platform.Wpf
$version$
$title$
$author$
@@ -11,22 +11,23 @@
false
$description$
- This is the WPF platform for Eto.Forms UI Framework.
+This is the WPF platform for Eto.Forms UI Framework.
- Include this along with your Eto.Forms application to provide a WPF interface for your windows users. WPF is by default preferred over the Eto.Platform.Windows platform, so if both are included, WPF will be selected.
+Include this along with your Eto.Forms application to provide a WPF interface for your windows users. WPF is by default preferred over the Eto.Platform.Windows platform, so if both are included, WPF will be selected.
- You do not need to use any of the classes of this assembly (unless customizing the WPF functionality of the platform), and should just use the UI controls from the Eto assembly.
+You do not need to use any of the classes of this assembly (unless customizing the WPF functionality of the platform), and should just use the UI controls from the Eto assembly.
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop wpf eto.forms
-
+
-
-
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.XamMac.nuspec b/Resources/nuspec/Eto.Platform.XamMac.nuspec
index a8670b0187..3dc51217a6 100644
--- a/Resources/nuspec/Eto.Platform.XamMac.nuspec
+++ b/Resources/nuspec/Eto.Platform.XamMac.nuspec
@@ -1,7 +1,7 @@
- $id$
+ Eto.Platform.XamMac
$version$
$title$
$author$
@@ -11,26 +11,27 @@
false
$description$
- This is the Xamarin.Mac platform for Eto.Forms UI Framework.
+This is the Xamarin.Mac platform for Eto.Forms UI Framework.
- Include this along with your Eto.Forms application to provide an OS X interface for Mac users.
+Include this along with your Eto.Forms application to provide an OS X interface for Mac users.
- * Note: You should only use this package from an Xamarin.Mac project created with Xamarin Studio on OS X. Xamarin.Mac allows you to bundle mono inside your .app, however it requires purchasing Xamarin.Mac.
+* Note: You should only use this package from an Xamarin.Mac project created with Xamarin Studio on OS X. Xamarin.Mac allows you to bundle mono inside your .app, however it requires purchasing Xamarin.Mac.
- Using Eto.Platform.Mac instead uses the open source MonoMac, which allows you to create OS X Applications with no cost. However, it does require mono to be installed for the app to run.
+Using Eto.Platform.Mac instead uses the open source MonoMac, which allows you to create OS X Applications with no cost. However, it does require mono to be installed for the app to run.
- You do not need to use any of the classes of this assembly (unless customizing the Xamarin.Mac functionality of the platform), and should just use the UI controls from the Eto assembly.
+You do not need to use any of the classes of this assembly (unless customizing the Xamarin.Mac functionality of the platform), and should just use the UI controls from the Eto assembly.
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop osx xamarin.mac mac eto.forms
-
+
-
-
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.XamMac2.nuspec b/Resources/nuspec/Eto.Platform.XamMac2.nuspec
new file mode 100644
index 0000000000..ccd62eac43
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.XamMac2.nuspec
@@ -0,0 +1,36 @@
+
+
+
+ Eto.Platform.XamMac2
+ $version$
+ $title$
+ $author$
+ $author$
+ https://github.com/picoe/Eto/raw/master/LICENSE
+ https://github.com/picoe/Eto
+ false
+ $description$
+
+This is the Xamarin.Mac2 (unified) platform for Eto.Forms UI Framework.
+
+Include this along with your Eto.Forms application to provide an OS X interface for Mac users using the 64-bit compatible Xamarin.Mac.
+
+* Note: You should only use this package from an Xamarin.Mac project created with Xamarin Studio on OS X. Xamarin.Mac allows you to bundle mono inside your .app, however it requires purchasing Xamarin.Mac.
+
+Using Eto.Platform.Mac instead uses the open source MonoMac, which allows you to create OS X Applications with no cost. However, it does require mono to be installed for the app to run.
+
+ You do not need to use any of the classes of this assembly (unless customizing the Xamarin.Mac functionality of the platform), and should just use the UI controls from the Eto assembly.
+
+ $copyright$
+ cross platform gui ui framework desktop osx xamarin.mac mac eto.forms
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Platform.iOS.nuspec b/Resources/nuspec/Eto.Platform.iOS.nuspec
new file mode 100644
index 0000000000..6379227570
--- /dev/null
+++ b/Resources/nuspec/Eto.Platform.iOS.nuspec
@@ -0,0 +1,32 @@
+
+
+
+ Eto.Platform.iOS
+ $version$
+ $title$
+ $author$
+ $author$
+ https://github.com/picoe/Eto/raw/master/LICENSE
+ https://github.com/picoe/Eto
+ false
+ $description$
+
+This is the iOS mobile platform for Eto.Forms UI Framework.
+
+Include this along with your Eto.Forms application to provide an iOS interface for iPhone/iPad/iPod touch users using Xamarin.iOS.
+
+You do not need to use any of the classes of this assembly (unless customizing the iOS functionality of the platform), and should just use the UI controls from the Eto assembly.
+
+ $copyright$
+ cross platform gui ui framework desktop ios eto.forms
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Serialization.Json.nuspec b/Resources/nuspec/Eto.Serialization.Json.nuspec
new file mode 100644
index 0000000000..0c0259b49e
--- /dev/null
+++ b/Resources/nuspec/Eto.Serialization.Json.nuspec
@@ -0,0 +1,35 @@
+
+
+
+ Eto.Serialization.Json
+ $version$
+ $title$
+ $author$
+ $author$
+ https://github.com/picoe/Eto/raw/master/LICENSE
+ https://github.com/picoe/Eto
+ false
+ $description$
+
+Eto.Json allows you to load json UI definitions for the Eto.Forms framework
+
+To get more information about how to get started, read the wiki:
+
+https://github.com/picoe/Eto/wiki
+
+ $copyright$
+ cross platform gui ui framework desktop json eto.forms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Serialization.Xaml.nuspec b/Resources/nuspec/Eto.Serialization.Xaml.nuspec
new file mode 100644
index 0000000000..476ffecda7
--- /dev/null
+++ b/Resources/nuspec/Eto.Serialization.Xaml.nuspec
@@ -0,0 +1,36 @@
+
+
+
+ Eto.Serialization.Xaml
+ $version$
+ $title$
+ $author$
+ $author$
+ https://github.com/picoe/Eto/raw/master/LICENSE
+ https://github.com/picoe/Eto
+ false
+ $description$
+
+Eto.Xaml allows you to load xaml UI definitions for the Eto.Forms framework
+
+To get more information about how to get started, read the wiki:
+
+https://github.com/picoe/Eto/wiki
+
+ $copyright$
+ cross platform gui ui framework desktop xaml eto.forms
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.Xaml.nuspec b/Resources/nuspec/Eto.Xaml.nuspec
deleted file mode 100644
index f1493e44fd..0000000000
--- a/Resources/nuspec/Eto.Xaml.nuspec
+++ /dev/null
@@ -1,30 +0,0 @@
-
-
-
- Eto.Forms.Xaml
- $version$
- $title$
- $author$
- $author$
- https://github.com/picoe/Eto/raw/master/LICENSE
- https://github.com/picoe/Eto
- false
- $description$
-
- Eto.Xaml allows you to load xaml UI definitions for the Eto.Forms framework
-
- To get more information about how to get started, read the wiki:
-
- https://github.com/picoe/Eto/wiki
-
- Copyright 2014 by Curtis Wensley
- cross platform gui ui framework desktop xaml eto.forms
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/Resources/nuspec/Eto.nuspec b/Resources/nuspec/Eto.nuspec
index 3a76d583a9..2806403cfd 100644
--- a/Resources/nuspec/Eto.nuspec
+++ b/Resources/nuspec/Eto.nuspec
@@ -11,34 +11,41 @@
false
Eto.Forms UI Framework
- Eto.Forms is a cross platform desktop user interface framework.
+Eto.Forms is a cross platform desktop user interface framework.
- This framework is built so that you can target multiple platforms with one UI codebase.
+This framework is built so that you can target multiple platforms with one UI codebase.
- The overall goal of this framework is to expose a common API that can be used to build functional applications that run across platforms using their native toolkit. This will make your applications look and work as if it were a native application on all platforms.
+The goal of this framework is to expose a common API that can be used to build functional applications that run across platforms using their native toolkit. This will make your applications look and work as if it were a native application on all platforms.
- For advanced scenarios, you can take advantage of each platform's capabilities by wrapping your common UI in a larger application, or even create your own high-level controls with a custom implementations per platform.
+For advanced scenarios, you can take advantage of each platform's capabilities by wrapping your common UI in a larger application, or even create your own high-level controls with a custom implementations per platform.
- This framework currently supports creating Desktop applications that work across Windows Forms, WPF, MonoMac/Xamarin.Mac, and GTK#.
+This framework currently supports creating Desktop applications that work across Windows Forms, WPF, MonoMac/Xamarin.Mac, and GTK#.
- In order to run your Eto.Forms based application, you must also install one (or more) of the following packages:
+In order to run your Eto.Forms based application, you must also install one (or more) of the following packages:
- - Eto.Platform.Wpf
- - Eto.Platform.Windows
- - Eto.Platform.Gtk
- - Eto.Platform.Mac
- - Eto.Platform.XamMac * requires Xamarin Studio on OS X.
+- Eto.Platform.Wpf
+- Eto.Platform.Windows
+- Eto.Platform.Direct2D
+- Eto.Platform.Gtk
+- Eto.Platform.Gtk3
+- Eto.Platform.Mac
+- Eto.Platform.XamMac * requires Xamarin Studio on OS X.
+- Eto.Platform.XamMac2 * requires Xamarin Studio on OS X.
- To get more information about how to get started, read the wiki:
+To get more information about how to get started, read the wiki:
- https://github.com/picoe/Eto/wiki
+https://github.com/picoe/Eto/wiki
- Copyright 2014 by Curtis Wensley
+ $copyright$
cross platform gui ui framework desktop winforms wpf mac osx gtk eto.forms
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Resources/package.cmd b/Resources/package.cmd
index acf3f9e699..19636aeae1 100644
--- a/Resources/package.cmd
+++ b/Resources/package.cmd
@@ -1,7 +1,8 @@
echo off
-set MSBUILD=c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
+rem set MSBUILD=c:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
+set MSBUILD="%ProgramFiles(x86)%\MSBuild\12.0\bin\MSBuild.exe"
-%MSBUILD% -t:Package Publish.targets
+%MSBUILD% -t:Package -p:BuildVersion=%1 Publish.targets
pause
\ No newline at end of file
diff --git a/Resources/package.sh b/Resources/package.sh
new file mode 100755
index 0000000000..b68eb9b886
--- /dev/null
+++ b/Resources/package.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+xbuild /t:Package /p:BuildVersion=$1 /p:Platform=Mac Publish.targets
diff --git a/Resources/prepare.sh b/Resources/prepare.sh
deleted file mode 100755
index 1b5516ef26..0000000000
--- a/Resources/prepare.sh
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-xbuild /t:PrepareMac Publish.targets
diff --git a/Samples/Gtk/EmbedEtoInGtk/EmbedEtoInGtk.csproj b/Samples/Gtk/EmbedEtoInGtk/EmbedEtoInGtk.csproj
new file mode 100644
index 0000000000..3aaeb00f9b
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/EmbedEtoInGtk.csproj
@@ -0,0 +1,76 @@
+
+
+
+ Debug
+ AnyCPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}
+ WinExe
+ EmbedEtoInGtk
+ EmbedEtoInGtk
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ false
+
+
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+ False
+
+
+
+
+
+ gui.stetic
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}
+ Eto.Gtk2 - Pcl
+
+
+
\ No newline at end of file
diff --git a/Samples/Gtk/EmbedEtoInGtk/MainWindow.cs b/Samples/Gtk/EmbedEtoInGtk/MainWindow.cs
new file mode 100644
index 0000000000..180ce01b50
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/MainWindow.cs
@@ -0,0 +1,25 @@
+using System;
+using Gtk;
+using Eto.Forms;
+
+namespace EmbedEtoInGtk
+{
+ public partial class MainWindow: Gtk.Window
+ {
+ public MainWindow() : base(Gtk.WindowType.Toplevel)
+ {
+ Build();
+
+ var nativeWidget = new MyEtoPanel().ToNative(true);
+
+ this.Child = nativeWidget;
+ }
+
+ protected void OnDeleteEvent(object sender, DeleteEventArgs a)
+ {
+ Gtk.Application.Quit();
+ a.RetVal = true;
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/Samples/Gtk/EmbedEtoInGtk/MyEtoPanel.cs b/Samples/Gtk/EmbedEtoInGtk/MyEtoPanel.cs
new file mode 100644
index 0000000000..dbb6527247
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/MyEtoPanel.cs
@@ -0,0 +1,27 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedEtoInGtk
+{
+ ///
+ /// Eto.Forms panel to embed in an existing WinForms app
+ ///
+ public class MyEtoPanel : Panel
+ {
+ public MyEtoPanel()
+ {
+ Content = new TableLayout
+ {
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ new TableRow(new Label { Text = "An Eto.Forms control" }),
+ new TableRow(new TextBox()),
+ new TableRow(new ComboBox { Items = { "Item 1", "Item 2", "Item 3" } }),
+ null
+ }
+ };
+ }
+ }
+}
diff --git a/Samples/Gtk/EmbedEtoInGtk/Program.cs b/Samples/Gtk/EmbedEtoInGtk/Program.cs
new file mode 100644
index 0000000000..214c6205b7
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/Program.cs
@@ -0,0 +1,20 @@
+using System;
+using Gtk;
+
+namespace EmbedEtoInGtk
+{
+ static class Program
+ {
+ public static MainWindow MainWindow { get; set; }
+
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ Application.Init();
+ new Eto.Forms.Application(new Eto.GtkSharp.Platform()).Attach();
+ MainWindow = new MainWindow();
+ MainWindow.Show();
+ Application.Run();
+ }
+ }
+}
diff --git a/Samples/Gtk/EmbedEtoInGtk/Properties/AssemblyInfo.cs b/Samples/Gtk/EmbedEtoInGtk/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..5a8cddd4f0
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/Properties/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("EmbedEtoInGtk")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Picoe Software Solutions Inc.")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Curtis Wensley")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Samples/Gtk/EmbedEtoInGtk/gtk-gui/EmbedEtoInGtk.MainWindow.cs b/Samples/Gtk/EmbedEtoInGtk/gtk-gui/EmbedEtoInGtk.MainWindow.cs
new file mode 100644
index 0000000000..67ca5ceacc
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/gtk-gui/EmbedEtoInGtk.MainWindow.cs
@@ -0,0 +1,23 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace EmbedEtoInGtk
+{
+ public partial class MainWindow
+ {
+ protected virtual void Build ()
+ {
+ global::Stetic.Gui.Initialize (this);
+ // Widget EmbedEtoInGtk.MainWindow
+ this.Name = "EmbedEtoInGtk.MainWindow";
+ this.Title = global::Mono.Unix.Catalog.GetString ("MainWindow");
+ this.WindowPosition = ((global::Gtk.WindowPosition)(4));
+ if ((this.Child != null)) {
+ this.Child.ShowAll ();
+ }
+ this.DefaultWidth = 423;
+ this.DefaultHeight = 312;
+ this.Show ();
+ this.DeleteEvent += new global::Gtk.DeleteEventHandler (this.OnDeleteEvent);
+ }
+ }
+}
diff --git a/Samples/Gtk/EmbedEtoInGtk/gtk-gui/generated.cs b/Samples/Gtk/EmbedEtoInGtk/gtk-gui/generated.cs
new file mode 100644
index 0000000000..9ef3363981
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/gtk-gui/generated.cs
@@ -0,0 +1,29 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+ internal class Gui
+ {
+ private static bool initialized;
+
+ internal static void Initialize (Gtk.Widget iconRenderer)
+ {
+ if ((Stetic.Gui.initialized == false)) {
+ Stetic.Gui.initialized = true;
+ }
+ }
+ }
+
+ internal class ActionGroups
+ {
+ public static Gtk.ActionGroup GetActionGroup (System.Type type)
+ {
+ return Stetic.ActionGroups.GetActionGroup (type.FullName);
+ }
+
+ public static Gtk.ActionGroup GetActionGroup (string name)
+ {
+ return null;
+ }
+ }
+}
diff --git a/Samples/Gtk/EmbedEtoInGtk/gtk-gui/gui.stetic b/Samples/Gtk/EmbedEtoInGtk/gtk-gui/gui.stetic
new file mode 100644
index 0000000000..3cb5fcaf78
--- /dev/null
+++ b/Samples/Gtk/EmbedEtoInGtk/gtk-gui/gui.stetic
@@ -0,0 +1,20 @@
+
+
+
+ ..
+
+
+
+
+
+
+
+
+ MainWindow
+ CenterOnParent
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/Gtk/EmbedGtkInEto/EmbedGtkInEto.csproj b/Samples/Gtk/EmbedGtkInEto/EmbedGtkInEto.csproj
new file mode 100644
index 0000000000..aa17964d0d
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/EmbedGtkInEto.csproj
@@ -0,0 +1,63 @@
+
+
+
+ Debug
+ AnyCPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}
+ WinExe
+ EmbedGtkInEto
+ EmbedGtkInEto
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}
+ Eto.Gtk2 - Pcl
+
+
+
+
+ gui.stetic
+
+
+
\ No newline at end of file
diff --git a/Samples/Gtk/EmbedGtkInEto/MainForm.cs b/Samples/Gtk/EmbedGtkInEto/MainForm.cs
new file mode 100644
index 0000000000..5e0454d512
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/MainForm.cs
@@ -0,0 +1,30 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedGtkInEto
+{
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Menu = new MenuBar();
+
+ // create a new native MonoMac view and wrap it in an eto control
+ var nativeControl = new MyNativeWidget().ToEto();
+
+ Content = new TableLayout
+ {
+ Padding = new Padding(10),
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ nativeControl,
+ null,
+ new TableLayout(new TableRow(null, new Button { Text = "An Eto.Forms button" })),
+ }
+ };
+ }
+ }
+}
+
diff --git a/Samples/Gtk/EmbedGtkInEto/MyNativeWidget.cs b/Samples/Gtk/EmbedGtkInEto/MyNativeWidget.cs
new file mode 100644
index 0000000000..d9fad0d96e
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/MyNativeWidget.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace EmbedGtkInEto
+{
+ [System.ComponentModel.ToolboxItem(true)]
+ public partial class MyNativeWidget : Gtk.Bin
+ {
+ public MyNativeWidget()
+ {
+ this.Build();
+ }
+ }
+}
+
diff --git a/Samples/Gtk/EmbedGtkInEto/Program.cs b/Samples/Gtk/EmbedGtkInEto/Program.cs
new file mode 100644
index 0000000000..f2e5609164
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace EmbedGtkInEto
+{
+ static class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(new Eto.GtkSharp.Platform()).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Samples/Gtk/EmbedGtkInEto/Properties/AssemblyInfo.cs b/Samples/Gtk/EmbedGtkInEto/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..f3990e7983
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/Properties/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("EmbedGtkInEto")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Picoe Software Solutions Inc.")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Curtis Wensley")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Samples/Gtk/EmbedGtkInEto/gtk-gui/EmbedGtkInEto.MyNativeWidget.cs b/Samples/Gtk/EmbedGtkInEto/gtk-gui/EmbedGtkInEto.MyNativeWidget.cs
new file mode 100644
index 0000000000..fb9b351d33
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/gtk-gui/EmbedGtkInEto.MyNativeWidget.cs
@@ -0,0 +1,60 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace EmbedGtkInEto
+{
+ public partial class MyNativeWidget
+ {
+ private global::Gtk.VBox vbox1;
+
+ private global::Gtk.Label label1;
+
+ private global::Gtk.Entry entry2;
+
+ private global::Gtk.ComboBox combobox1;
+
+ protected virtual void Build ()
+ {
+ global::Stetic.Gui.Initialize (this);
+ // Widget EmbedGtkInEto.MyNativeWidget
+ global::Stetic.BinContainer.Attach (this);
+ this.Name = "EmbedGtkInEto.MyNativeWidget";
+ // Container child EmbedGtkInEto.MyNativeWidget.Gtk.Container+ContainerChild
+ this.vbox1 = new global::Gtk.VBox ();
+ this.vbox1.Name = "vbox1";
+ this.vbox1.Spacing = 6;
+ // Container child vbox1.Gtk.Box+BoxChild
+ this.label1 = new global::Gtk.Label ();
+ this.label1.Name = "label1";
+ this.label1.LabelProp = global::Mono.Unix.Catalog.GetString ("A GtkSharp Control");
+ this.vbox1.Add (this.label1);
+ global::Gtk.Box.BoxChild w1 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.label1]));
+ w1.Position = 0;
+ w1.Expand = false;
+ w1.Fill = false;
+ // Container child vbox1.Gtk.Box+BoxChild
+ this.entry2 = new global::Gtk.Entry ();
+ this.entry2.CanFocus = true;
+ this.entry2.Name = "entry2";
+ this.entry2.IsEditable = true;
+ this.entry2.InvisibleChar = '●';
+ this.vbox1.Add (this.entry2);
+ global::Gtk.Box.BoxChild w2 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.entry2]));
+ w2.Position = 1;
+ w2.Expand = false;
+ w2.Fill = false;
+ // Container child vbox1.Gtk.Box+BoxChild
+ this.combobox1 = global::Gtk.ComboBox.NewText ();
+ this.combobox1.Name = "combobox1";
+ this.vbox1.Add (this.combobox1);
+ global::Gtk.Box.BoxChild w3 = ((global::Gtk.Box.BoxChild)(this.vbox1 [this.combobox1]));
+ w3.Position = 2;
+ w3.Expand = false;
+ w3.Fill = false;
+ this.Add (this.vbox1);
+ if ((this.Child != null)) {
+ this.Child.ShowAll ();
+ }
+ this.Hide ();
+ }
+ }
+}
diff --git a/Samples/Gtk/EmbedGtkInEto/gtk-gui/generated.cs b/Samples/Gtk/EmbedGtkInEto/gtk-gui/generated.cs
new file mode 100644
index 0000000000..3285e87c05
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/gtk-gui/generated.cs
@@ -0,0 +1,82 @@
+
+// This file has been generated by the GUI designer. Do not modify.
+namespace Stetic
+{
+ internal class Gui
+ {
+ private static bool initialized;
+
+ internal static void Initialize (Gtk.Widget iconRenderer)
+ {
+ if ((Stetic.Gui.initialized == false)) {
+ Stetic.Gui.initialized = true;
+ }
+ }
+ }
+
+ internal class BinContainer
+ {
+ private Gtk.Widget child;
+
+ private Gtk.UIManager uimanager;
+
+ public static BinContainer Attach (Gtk.Bin bin)
+ {
+ BinContainer bc = new BinContainer ();
+ bin.SizeRequested += new Gtk.SizeRequestedHandler (bc.OnSizeRequested);
+ bin.SizeAllocated += new Gtk.SizeAllocatedHandler (bc.OnSizeAllocated);
+ bin.Added += new Gtk.AddedHandler (bc.OnAdded);
+ return bc;
+ }
+
+ private void OnSizeRequested (object sender, Gtk.SizeRequestedArgs args)
+ {
+ if ((this.child != null)) {
+ args.Requisition = this.child.SizeRequest ();
+ }
+ }
+
+ private void OnSizeAllocated (object sender, Gtk.SizeAllocatedArgs args)
+ {
+ if ((this.child != null)) {
+ this.child.Allocation = args.Allocation;
+ }
+ }
+
+ private void OnAdded (object sender, Gtk.AddedArgs args)
+ {
+ this.child = args.Widget;
+ }
+
+ public void SetUiManager (Gtk.UIManager uim)
+ {
+ this.uimanager = uim;
+ this.child.Realized += new System.EventHandler (this.OnRealized);
+ }
+
+ private void OnRealized (object sender, System.EventArgs args)
+ {
+ if ((this.uimanager != null)) {
+ Gtk.Widget w;
+ w = this.child.Toplevel;
+ if (((w != null) && typeof(Gtk.Window).IsInstanceOfType (w))) {
+ ((Gtk.Window)(w)).AddAccelGroup (this.uimanager.AccelGroup);
+ this.uimanager = null;
+ }
+ }
+ }
+ }
+
+ internal class ActionGroups
+ {
+ public static Gtk.ActionGroup GetActionGroup (System.Type type)
+ {
+ return Stetic.ActionGroups.GetActionGroup (type.FullName);
+ }
+
+ public static Gtk.ActionGroup GetActionGroup (string name)
+ {
+ return null;
+ }
+ }
+}
diff --git a/Samples/Gtk/EmbedGtkInEto/gtk-gui/gui.stetic b/Samples/Gtk/EmbedGtkInEto/gtk-gui/gui.stetic
new file mode 100644
index 0000000000..c8f8e48f94
--- /dev/null
+++ b/Samples/Gtk/EmbedGtkInEto/gtk-gui/gui.stetic
@@ -0,0 +1,63 @@
+
+
+
+ ..
+ 2.12
+
+
+
+
+
+
+
+ False
+
+
+
+ 6
+
+
+
+ A GtkSharp Control
+
+
+ 0
+ True
+ False
+ False
+
+
+
+
+
+ True
+ True
+ ●
+
+
+ 1
+ True
+ False
+ False
+
+
+
+
+
+ True
+
+
+
+ 2
+ True
+ False
+ False
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/AppDelegate.cs b/Samples/MonoMac/EmbedEtoInMonoMac/AppDelegate.cs
new file mode 100644
index 0000000000..bdf0404a03
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/AppDelegate.cs
@@ -0,0 +1,24 @@
+using System;
+using System.Drawing;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+
+namespace EmbedEtoInMonoMac
+{
+ public partial class AppDelegate : NSApplicationDelegate
+ {
+ MainWindowController mainWindowController;
+
+ public AppDelegate()
+ {
+ }
+
+ public override void FinishedLaunching(NSObject notification)
+ {
+ mainWindowController = new MainWindowController();
+ mainWindowController.Window.MakeKeyAndOrderFront(this);
+ }
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/AppDelegate.designer.cs b/Samples/MonoMac/EmbedEtoInMonoMac/AppDelegate.designer.cs
new file mode 100644
index 0000000000..60152bbd1d
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/AppDelegate.designer.cs
@@ -0,0 +1,10 @@
+
+namespace EmbedEtoInMonoMac
+{
+ // Should subclass MonoMac.AppKit.NSResponder
+ [MonoMac.Foundation.Register("AppDelegate")]
+ public partial class AppDelegate
+ {
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/EmbedEtoInMonoMac.csproj b/Samples/MonoMac/EmbedEtoInMonoMac/EmbedEtoInMonoMac.csproj
new file mode 100644
index 0000000000..b120fcf80f
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/EmbedEtoInMonoMac.csproj
@@ -0,0 +1,104 @@
+
+
+
+ Debug
+ AnyCPU
+ {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}
+ Exe
+ EmbedEtoInMonoMac
+ Resources
+ EmbedEtoInMonoMac
+ True
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ false
+ SdkOnly
+ false
+ true
+ false
+ Developer ID Application
+ true
+ true
+
+
+ full
+ true
+ bin\AppStore
+ prompt
+ 4
+ false
+ SdkOnly
+ false
+ true
+ 3rd Party Mac Developer Installer
+ true
+ 3rd Party Mac Developer Application
+ true
+ true
+
+
+
+
+
+
+
+
+ ..\..\..\Libraries\MonoMac\MonoMac.dll
+
+
+
+
+
+
+
+
+
+ MainWindow.cs
+
+
+
+ AppDelegate.cs
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}
+ Eto.Mac - Pcl
+
+
+
\ No newline at end of file
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/Info.plist b/Samples/MonoMac/EmbedEtoInMonoMac/Info.plist
new file mode 100644
index 0000000000..ae59791408
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDisplayName
+ EmbedEtoInMonoMac
+ CFBundleIdentifier
+ com.your-company.EmbedEtoInMonoMac
+ CFBundleName
+ EmbedEtoInMonoMac
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ 10.6
+ NSMainNibFile
+ MainMenu
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/MainMenu.xib b/Samples/MonoMac/EmbedEtoInMonoMac/MainMenu.xib
new file mode 100644
index 0000000000..bdd297a761
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/MainMenu.xib
@@ -0,0 +1,4074 @@
+
+
+
+ 1060
+ 10D573
+ 762
+ 1038.29
+ 460.00
+
+
+
+
+
+ YES
+
+ NSApplication
+
+
+ FirstResponder
+
+
+ NSApplication
+
+
+
+ NSFontManager
+
+
+ AppDelegate
+
+
+
+
+ YES
+
+
+ performMiniaturize:
+
+
+
+ 37
+
+
+
+ arrangeInFront:
+
+
+
+ 39
+
+
+
+ print:
+
+
+
+ 86
+
+
+
+ runPageLayout:
+
+
+
+ 87
+
+
+
+ clearRecentDocuments:
+
+
+
+ 127
+
+
+
+ orderFrontStandardAboutPanel:
+
+
+
+ 142
+
+
+
+ performClose:
+
+
+
+ 193
+
+
+
+ toggleContinuousSpellChecking:
+
+
+
+ 222
+
+
+
+ undo:
+
+
+
+ 223
+
+
+
+ copy:
+
+
+
+ 224
+
+
+
+ checkSpelling:
+
+
+
+ 225
+
+
+
+ paste:
+
+
+
+ 226
+
+
+
+ stopSpeaking:
+
+
+
+ 227
+
+
+
+ cut:
+
+
+
+ 228
+
+
+
+ showGuessPanel:
+
+
+
+ 230
+
+
+
+ redo:
+
+
+
+ 231
+
+
+
+ selectAll:
+
+
+
+ 232
+
+
+
+ startSpeaking:
+
+
+
+ 233
+
+
+
+ delete:
+
+
+
+ 235
+
+
+
+ performZoom:
+
+
+
+ 240
+
+
+
+ performFindPanelAction:
+
+
+
+ 241
+
+
+
+ centerSelectionInVisibleArea:
+
+
+
+ 245
+
+
+
+ toggleGrammarChecking:
+
+
+
+ 347
+
+
+
+ toggleSmartInsertDelete:
+
+
+
+ 355
+
+
+
+ toggleAutomaticQuoteSubstitution:
+
+
+
+ 356
+
+
+
+ toggleAutomaticLinkDetection:
+
+
+
+ 357
+
+
+
+ saveDocument:
+
+
+
+ 362
+
+
+
+ saveDocumentAs:
+
+
+
+ 363
+
+
+
+ revertDocumentToSaved:
+
+
+
+ 364
+
+
+
+ runToolbarCustomizationPalette:
+
+
+
+ 365
+
+
+
+ toggleToolbarShown:
+
+
+
+ 366
+
+
+
+ hide:
+
+
+
+ 367
+
+
+
+ hideOtherApplications:
+
+
+
+ 368
+
+
+
+ unhideAllApplications:
+
+
+
+ 370
+
+
+
+ newDocument:
+
+
+
+ 373
+
+
+
+ openDocument:
+
+
+
+ 374
+
+
+
+ addFontTrait:
+
+
+
+ 421
+
+
+
+ addFontTrait:
+
+
+
+ 422
+
+
+
+ modifyFont:
+
+
+
+ 423
+
+
+
+ orderFrontFontPanel:
+
+
+
+ 424
+
+
+
+ modifyFont:
+
+
+
+ 425
+
+
+
+ raiseBaseline:
+
+
+
+ 426
+
+
+
+ lowerBaseline:
+
+
+
+ 427
+
+
+
+ copyFont:
+
+
+
+ 428
+
+
+
+ subscript:
+
+
+
+ 429
+
+
+
+ superscript:
+
+
+
+ 430
+
+
+
+ tightenKerning:
+
+
+
+ 431
+
+
+
+ underline:
+
+
+
+ 432
+
+
+
+ orderFrontColorPanel:
+
+
+
+ 433
+
+
+
+ useAllLigatures:
+
+
+
+ 434
+
+
+
+ loosenKerning:
+
+
+
+ 435
+
+
+
+ pasteFont:
+
+
+
+ 436
+
+
+
+ unscript:
+
+
+
+ 437
+
+
+
+ useStandardKerning:
+
+
+
+ 438
+
+
+
+ useStandardLigatures:
+
+
+
+ 439
+
+
+
+ turnOffLigatures:
+
+
+
+ 440
+
+
+
+ turnOffKerning:
+
+
+
+ 441
+
+
+
+ terminate:
+
+
+
+ 449
+
+
+
+ toggleAutomaticSpellingCorrection:
+
+
+
+ 456
+
+
+
+ orderFrontSubstitutionsPanel:
+
+
+
+ 458
+
+
+
+ toggleAutomaticDashSubstitution:
+
+
+
+ 461
+
+
+
+ toggleAutomaticTextReplacement:
+
+
+
+ 463
+
+
+
+ uppercaseWord:
+
+
+
+ 464
+
+
+
+ capitalizeWord:
+
+
+
+ 467
+
+
+
+ lowercaseWord:
+
+
+
+ 468
+
+
+
+ pasteAsPlainText:
+
+
+
+ 486
+
+
+
+ performFindPanelAction:
+
+
+
+ 487
+
+
+
+ performFindPanelAction:
+
+
+
+ 488
+
+
+
+ performFindPanelAction:
+
+
+
+ 489
+
+
+
+ showHelp:
+
+
+
+ 493
+
+
+
+ alignCenter:
+
+
+
+ 518
+
+
+
+ pasteRuler:
+
+
+
+ 519
+
+
+
+ toggleRuler:
+
+
+
+ 520
+
+
+
+ alignRight:
+
+
+
+ 521
+
+
+
+ copyRuler:
+
+
+
+ 522
+
+
+
+ alignJustified:
+
+
+
+ 523
+
+
+
+ alignLeft:
+
+
+
+ 524
+
+
+
+ makeBaseWritingDirectionNatural:
+
+
+
+ 525
+
+
+
+ makeBaseWritingDirectionLeftToRight:
+
+
+
+ 526
+
+
+
+ makeBaseWritingDirectionRightToLeft:
+
+
+
+ 527
+
+
+
+ makeTextWritingDirectionNatural:
+
+
+
+ 528
+
+
+
+ makeTextWritingDirectionLeftToRight:
+
+
+
+ 529
+
+
+
+ makeTextWritingDirectionRightToLeft:
+
+
+
+ 530
+
+
+
+ delegate
+
+
+
+ 534
+
+
+
+
+ YES
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 29
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+ 19
+
+
+ YES
+
+
+
+
+
+ 56
+
+
+ YES
+
+
+
+
+
+ 217
+
+
+ YES
+
+
+
+
+
+ 83
+
+
+ YES
+
+
+
+
+
+ 81
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 75
+
+
+
+
+ 80
+
+
+
+
+ 78
+
+
+
+
+ 72
+
+
+
+
+ 82
+
+
+
+
+ 124
+
+
+ YES
+
+
+
+
+
+ 77
+
+
+
+
+ 73
+
+
+
+
+ 79
+
+
+
+
+ 112
+
+
+
+
+ 74
+
+
+
+
+ 125
+
+
+ YES
+
+
+
+
+
+ 126
+
+
+
+
+ 205
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 202
+
+
+
+
+ 198
+
+
+
+
+ 207
+
+
+
+
+ 214
+
+
+
+
+ 199
+
+
+
+
+ 203
+
+
+
+
+ 197
+
+
+
+
+ 206
+
+
+
+
+ 215
+
+
+
+
+ 218
+
+
+ YES
+
+
+
+
+
+ 216
+
+
+ YES
+
+
+
+
+
+ 200
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+ 219
+
+
+
+
+ 201
+
+
+
+
+ 204
+
+
+
+
+ 220
+
+
+ YES
+
+
+
+
+
+
+
+
+
+ 213
+
+
+
+
+ 210
+
+
+
+
+ 221
+
+
+
+
+ 208
+
+
+
+
+ 209
+
+
+
+
+ 57
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 58
+
+
+
+
+ 134
+
+
+
+
+ 150
+
+
+
+
+ 136
+
+
+
+
+ 144
+
+
+
+
+ 129
+
+
+
+
+ 143
+
+
+
+
+ 236
+
+
+
+
+ 131
+
+
+ YES
+
+
+
+
+
+ 149
+
+
+
+
+ 145
+
+
+
+
+ 130
+
+
+
+
+ 24
+
+
+ YES
+
+
+
+
+
+
+
+
+ 92
+
+
+
+
+ 5
+
+
+
+
+ 239
+
+
+
+
+ 23
+
+
+
+
+ 295
+
+
+ YES
+
+
+
+
+
+ 296
+
+
+ YES
+
+
+
+
+
+
+ 297
+
+
+
+
+ 298
+
+
+
+
+ 211
+
+
+ YES
+
+
+
+
+
+ 212
+
+
+ YES
+
+
+
+
+
+
+ 195
+
+
+
+
+ 196
+
+
+
+
+ 346
+
+
+
+
+ 348
+
+
+ YES
+
+
+
+
+
+ 349
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+ 350
+
+
+
+
+ 351
+
+
+
+
+ 354
+
+
+
+
+ 375
+
+
+ YES
+
+
+
+
+
+ 376
+
+
+ YES
+
+
+
+
+
+
+ 377
+
+
+ YES
+
+
+
+
+
+ 388
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 389
+
+
+
+
+ 390
+
+
+
+
+ 391
+
+
+
+
+ 392
+
+
+
+
+ 393
+
+
+
+
+ 394
+
+
+
+
+ 395
+
+
+
+
+ 396
+
+
+
+
+ 397
+
+
+ YES
+
+
+
+
+
+ 398
+
+
+ YES
+
+
+
+
+
+ 399
+
+
+ YES
+
+
+
+
+
+ 400
+
+
+
+
+ 401
+
+
+
+
+ 402
+
+
+
+
+ 403
+
+
+
+
+ 404
+
+
+
+
+ 405
+
+
+ YES
+
+
+
+
+
+
+
+
+
+ 406
+
+
+
+
+ 407
+
+
+
+
+ 408
+
+
+
+
+ 409
+
+
+
+
+ 410
+
+
+
+
+ 411
+
+
+ YES
+
+
+
+
+
+
+
+ 412
+
+
+
+
+ 413
+
+
+
+
+ 414
+
+
+
+
+ 415
+
+
+ YES
+
+
+
+
+
+
+
+
+ 416
+
+
+
+
+ 417
+
+
+
+
+ 418
+
+
+
+
+ 419
+
+
+
+
+ 420
+
+
+
+
+ 450
+
+
+ YES
+
+
+
+
+
+ 451
+
+
+ YES
+
+
+
+
+
+
+
+ 452
+
+
+
+
+ 453
+
+
+
+
+ 454
+
+
+
+
+ 457
+
+
+
+
+ 459
+
+
+
+
+ 460
+
+
+
+
+ 462
+
+
+
+
+ 465
+
+
+
+
+ 466
+
+
+
+
+ 485
+
+
+
+
+ 490
+
+
+ YES
+
+
+
+
+
+ 491
+
+
+ YES
+
+
+
+
+
+ 492
+
+
+
+
+ 496
+
+
+ YES
+
+
+
+
+
+ 497
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 498
+
+
+
+
+ 499
+
+
+
+
+ 500
+
+
+
+
+ 501
+
+
+
+
+ 502
+
+
+
+
+ 503
+
+
+ YES
+
+
+
+
+
+ 504
+
+
+
+
+ 505
+
+
+
+
+ 506
+
+
+
+
+ 507
+
+
+
+
+ 508
+
+
+ YES
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 509
+
+
+
+
+ 510
+
+
+
+
+ 511
+
+
+
+
+ 512
+
+
+
+
+ 513
+
+
+
+
+ 514
+
+
+
+
+ 515
+
+
+
+
+ 516
+
+
+
+
+ 517
+
+
+
+
+ 533
+
+
+
+
+
+
+ YES
+
+ YES
+ -3.IBPluginDependency
+ 112.IBPluginDependency
+ 112.ImportedFromIB2
+ 124.IBPluginDependency
+ 124.ImportedFromIB2
+ 125.IBPluginDependency
+ 125.ImportedFromIB2
+ 125.editorWindowContentRectSynchronizationRect
+ 126.IBPluginDependency
+ 126.ImportedFromIB2
+ 129.IBPluginDependency
+ 129.ImportedFromIB2
+ 130.IBPluginDependency
+ 130.ImportedFromIB2
+ 130.editorWindowContentRectSynchronizationRect
+ 131.IBPluginDependency
+ 131.ImportedFromIB2
+ 134.IBPluginDependency
+ 134.ImportedFromIB2
+ 136.IBPluginDependency
+ 136.ImportedFromIB2
+ 143.IBPluginDependency
+ 143.ImportedFromIB2
+ 144.IBPluginDependency
+ 144.ImportedFromIB2
+ 145.IBPluginDependency
+ 145.ImportedFromIB2
+ 149.IBPluginDependency
+ 149.ImportedFromIB2
+ 150.IBPluginDependency
+ 150.ImportedFromIB2
+ 19.IBPluginDependency
+ 19.ImportedFromIB2
+ 195.IBPluginDependency
+ 195.ImportedFromIB2
+ 196.IBPluginDependency
+ 196.ImportedFromIB2
+ 197.IBPluginDependency
+ 197.ImportedFromIB2
+ 198.IBPluginDependency
+ 198.ImportedFromIB2
+ 199.IBPluginDependency
+ 199.ImportedFromIB2
+ 200.IBEditorWindowLastContentRect
+ 200.IBPluginDependency
+ 200.ImportedFromIB2
+ 200.editorWindowContentRectSynchronizationRect
+ 201.IBPluginDependency
+ 201.ImportedFromIB2
+ 202.IBPluginDependency
+ 202.ImportedFromIB2
+ 203.IBPluginDependency
+ 203.ImportedFromIB2
+ 204.IBPluginDependency
+ 204.ImportedFromIB2
+ 205.IBEditorWindowLastContentRect
+ 205.IBPluginDependency
+ 205.ImportedFromIB2
+ 205.editorWindowContentRectSynchronizationRect
+ 206.IBPluginDependency
+ 206.ImportedFromIB2
+ 207.IBPluginDependency
+ 207.ImportedFromIB2
+ 208.IBPluginDependency
+ 208.ImportedFromIB2
+ 209.IBPluginDependency
+ 209.ImportedFromIB2
+ 210.IBPluginDependency
+ 210.ImportedFromIB2
+ 211.IBPluginDependency
+ 211.ImportedFromIB2
+ 212.IBPluginDependency
+ 212.ImportedFromIB2
+ 212.editorWindowContentRectSynchronizationRect
+ 213.IBPluginDependency
+ 213.ImportedFromIB2
+ 214.IBPluginDependency
+ 214.ImportedFromIB2
+ 215.IBPluginDependency
+ 215.ImportedFromIB2
+ 216.IBPluginDependency
+ 216.ImportedFromIB2
+ 217.IBPluginDependency
+ 217.ImportedFromIB2
+ 218.IBPluginDependency
+ 218.ImportedFromIB2
+ 219.IBPluginDependency
+ 219.ImportedFromIB2
+ 220.IBEditorWindowLastContentRect
+ 220.IBPluginDependency
+ 220.ImportedFromIB2
+ 220.editorWindowContentRectSynchronizationRect
+ 221.IBPluginDependency
+ 221.ImportedFromIB2
+ 23.IBPluginDependency
+ 23.ImportedFromIB2
+ 236.IBPluginDependency
+ 236.ImportedFromIB2
+ 239.IBPluginDependency
+ 239.ImportedFromIB2
+ 24.IBEditorWindowLastContentRect
+ 24.IBPluginDependency
+ 24.ImportedFromIB2
+ 24.editorWindowContentRectSynchronizationRect
+ 29.IBEditorWindowLastContentRect
+ 29.IBPluginDependency
+ 29.ImportedFromIB2
+ 29.WindowOrigin
+ 29.editorWindowContentRectSynchronizationRect
+ 295.IBPluginDependency
+ 296.IBEditorWindowLastContentRect
+ 296.IBPluginDependency
+ 296.editorWindowContentRectSynchronizationRect
+ 297.IBPluginDependency
+ 298.IBPluginDependency
+ 346.IBPluginDependency
+ 346.ImportedFromIB2
+ 348.IBPluginDependency
+ 348.ImportedFromIB2
+ 349.IBEditorWindowLastContentRect
+ 349.IBPluginDependency
+ 349.ImportedFromIB2
+ 349.editorWindowContentRectSynchronizationRect
+ 350.IBPluginDependency
+ 350.ImportedFromIB2
+ 351.IBPluginDependency
+ 351.ImportedFromIB2
+ 354.IBPluginDependency
+ 354.ImportedFromIB2
+ 375.IBPluginDependency
+ 376.IBEditorWindowLastContentRect
+ 376.IBPluginDependency
+ 377.IBPluginDependency
+ 388.IBEditorWindowLastContentRect
+ 388.IBPluginDependency
+ 389.IBPluginDependency
+ 390.IBPluginDependency
+ 391.IBPluginDependency
+ 392.IBPluginDependency
+ 393.IBPluginDependency
+ 394.IBPluginDependency
+ 395.IBPluginDependency
+ 396.IBPluginDependency
+ 397.IBPluginDependency
+ 398.IBPluginDependency
+ 399.IBPluginDependency
+ 400.IBPluginDependency
+ 401.IBPluginDependency
+ 402.IBPluginDependency
+ 403.IBPluginDependency
+ 404.IBPluginDependency
+ 405.IBPluginDependency
+ 406.IBPluginDependency
+ 407.IBPluginDependency
+ 408.IBPluginDependency
+ 409.IBPluginDependency
+ 410.IBPluginDependency
+ 411.IBPluginDependency
+ 412.IBPluginDependency
+ 413.IBPluginDependency
+ 414.IBPluginDependency
+ 415.IBPluginDependency
+ 416.IBPluginDependency
+ 417.IBPluginDependency
+ 418.IBPluginDependency
+ 419.IBPluginDependency
+ 450.IBPluginDependency
+ 451.IBEditorWindowLastContentRect
+ 451.IBPluginDependency
+ 452.IBPluginDependency
+ 453.IBPluginDependency
+ 454.IBPluginDependency
+ 457.IBPluginDependency
+ 459.IBPluginDependency
+ 460.IBPluginDependency
+ 462.IBPluginDependency
+ 465.IBPluginDependency
+ 466.IBPluginDependency
+ 485.IBPluginDependency
+ 490.IBPluginDependency
+ 491.IBEditorWindowLastContentRect
+ 491.IBPluginDependency
+ 492.IBPluginDependency
+ 496.IBPluginDependency
+ 497.IBEditorWindowLastContentRect
+ 497.IBPluginDependency
+ 498.IBPluginDependency
+ 499.IBPluginDependency
+ 5.IBPluginDependency
+ 5.ImportedFromIB2
+ 500.IBPluginDependency
+ 501.IBPluginDependency
+ 502.IBPluginDependency
+ 503.IBPluginDependency
+ 504.IBPluginDependency
+ 505.IBPluginDependency
+ 506.IBPluginDependency
+ 507.IBPluginDependency
+ 508.IBEditorWindowLastContentRect
+ 508.IBPluginDependency
+ 509.IBPluginDependency
+ 510.IBPluginDependency
+ 511.IBPluginDependency
+ 512.IBPluginDependency
+ 513.IBPluginDependency
+ 514.IBPluginDependency
+ 515.IBPluginDependency
+ 516.IBPluginDependency
+ 517.IBPluginDependency
+ 56.IBPluginDependency
+ 56.ImportedFromIB2
+ 57.IBEditorWindowLastContentRect
+ 57.IBPluginDependency
+ 57.ImportedFromIB2
+ 57.editorWindowContentRectSynchronizationRect
+ 58.IBPluginDependency
+ 58.ImportedFromIB2
+ 72.IBPluginDependency
+ 72.ImportedFromIB2
+ 73.IBPluginDependency
+ 73.ImportedFromIB2
+ 74.IBPluginDependency
+ 74.ImportedFromIB2
+ 75.IBPluginDependency
+ 75.ImportedFromIB2
+ 77.IBPluginDependency
+ 77.ImportedFromIB2
+ 78.IBPluginDependency
+ 78.ImportedFromIB2
+ 79.IBPluginDependency
+ 79.ImportedFromIB2
+ 80.IBPluginDependency
+ 80.ImportedFromIB2
+ 81.IBEditorWindowLastContentRect
+ 81.IBPluginDependency
+ 81.ImportedFromIB2
+ 81.editorWindowContentRectSynchronizationRect
+ 82.IBPluginDependency
+ 82.ImportedFromIB2
+ 83.IBPluginDependency
+ 83.ImportedFromIB2
+ 92.IBPluginDependency
+ 92.ImportedFromIB2
+
+
+ YES
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{522, 812}, {146, 23}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{436, 809}, {64, 6}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{753, 187}, {275, 113}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {275, 83}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{453, 408}, {254, 283}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{187, 434}, {243, 243}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {167, 43}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{753, 217}, {238, 103}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {241, 103}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{613, 618}, {194, 73}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{525, 802}, {197, 73}}
+ {{346, 722}, {402, 20}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {74, 862}
+ {{6, 978}, {478, 20}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{563, 648}, {231, 43}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{475, 832}, {234, 43}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{746, 287}, {220, 133}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{608, 612}, {215, 63}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{497, 648}, {83, 43}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{580, 408}, {175, 283}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{753, 197}, {170, 63}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{684, 668}, {142, 23}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{674, 260}, {204, 183}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{878, 180}, {164, 173}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{355, 508}, {183, 183}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{23, 794}, {245, 183}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{411, 488}, {196, 203}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ {{145, 474}, {199, 203}}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+ YES
+
+
+ YES
+
+
+
+
+ YES
+
+
+ YES
+
+
+
+ 534
+
+
+
+ YES
+
+ AppDelegate
+ NSResponder
+
+ IBUserSource
+
+
+
+
+
+ YES
+
+ NSApplication
+ NSResponder
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSApplication.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSApplicationScripting.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSColorPanel.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSHelpManager.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSPageLayout.h
+
+
+
+ NSApplication
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSUserInterfaceItemSearching.h
+
+
+
+ NSBrowser
+ NSControl
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSBrowser.h
+
+
+
+ NSControl
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSControl.h
+
+
+
+ NSDocument
+ NSObject
+
+ YES
+
+ YES
+ printDocument:
+ revertDocumentToSaved:
+ runPageLayout:
+ saveDocument:
+ saveDocumentAs:
+ saveDocumentTo:
+
+
+ YES
+ id
+ id
+ id
+ id
+ id
+ id
+
+
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDocument.h
+
+
+
+ NSDocument
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDocumentScripting.h
+
+
+
+ NSDocumentController
+ NSObject
+
+ YES
+
+ YES
+ clearRecentDocuments:
+ newDocument:
+ openDocument:
+ saveAllDocuments:
+
+
+ YES
+ id
+ id
+ id
+ id
+
+
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDocumentController.h
+
+
+
+ NSFontManager
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSFontManager.h
+
+
+
+ NSFormatter
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSFormatter.h
+
+
+
+ NSMatrix
+ NSControl
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSMatrix.h
+
+
+
+ NSMenu
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSMenu.h
+
+
+
+ NSMenuItem
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSMenuItem.h
+
+
+
+ NSMovieView
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSMovieView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSAccessibility.h
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDictionaryController.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDragging.h
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSFontPanel.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSKeyValueBinding.h
+
+
+
+ NSObject
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSNibLoading.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSOutlineView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSPasteboard.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSSavePanel.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSTableView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSToolbarItem.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSView.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSArchiver.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSClassDescription.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSError.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSFileManager.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSKeyValueCoding.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSKeyValueObserving.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSKeyedArchiver.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSObject.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSObjectScripting.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSPortCoder.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSRunLoop.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptClassDescription.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptKeyValueCoding.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptObjectSpecifiers.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSScriptWhoseTests.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSThread.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSURL.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSURLConnection.h
+
+
+
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSURLDownload.h
+
+
+
+ NSResponder
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSInterfaceStyle.h
+
+
+
+ NSResponder
+ NSObject
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSResponder.h
+
+
+
+ NSTableView
+ NSControl
+
+
+
+ NSText
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSText.h
+
+
+
+ NSTextView
+ NSText
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSTextView.h
+
+
+
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSClipView.h
+
+
+
+ NSView
+
+
+
+ NSView
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSRulerView.h
+
+
+
+ NSView
+ NSResponder
+
+
+
+ NSWindow
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSDrawer.h
+
+
+
+ NSWindow
+ NSResponder
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSWindow.h
+
+
+
+ NSWindow
+
+ IBFrameworkSource
+ AppKit.framework/Headers/NSWindowScripting.h
+
+
+
+
+ 0
+ IBCocoaFramework
+
+ com.apple.InterfaceBuilder.CocoaPlugin.macosx
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
+
+
+ YES
+ ../MacCocoaApp.xcodeproj
+ 3
+
+ YES
+
+ YES
+ NSMenuCheckmark
+ NSMenuMixedState
+
+
+ YES
+ {9, 8}
+ {7, 2}
+
+
+
+
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.cs b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.cs
new file mode 100644
index 0000000000..9ef47a13c4
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.cs
@@ -0,0 +1,35 @@
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+
+namespace EmbedEtoInMonoMac
+{
+ public partial class MainWindow : MonoMac.AppKit.NSWindow
+ {
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public MainWindow(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public MainWindow(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.designer.cs b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.designer.cs
new file mode 100644
index 0000000000..eb9b60cb6c
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.designer.cs
@@ -0,0 +1,29 @@
+// WARNING
+//
+// This file has been generated automatically by Xamarin Studio to store outlets and
+// actions made in the UI designer. If it is removed, they will be lost.
+// Manual changes to this file may not be handled correctly.
+//
+using MonoMac.Foundation;
+using System.CodeDom.Compiler;
+
+namespace EmbedEtoInMonoMac
+{
+ [Register ("MainWindowController")]
+ partial class MainWindowController
+ {
+
+ void ReleaseDesignerOutlets ()
+ {
+ }
+ }
+
+ [Register ("MainWindow")]
+ partial class MainWindow
+ {
+
+ void ReleaseDesignerOutlets ()
+ {
+ }
+ }
+}
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.xib b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.xib
new file mode 100644
index 0000000000..a21b4db2ee
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindow.xib
@@ -0,0 +1,154 @@
+
+
+
+ 1090
+ 13F34
+ 6245
+ 1265.21
+ 698.00
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ 6245
+
+
+ NSCustomObject
+ NSView
+ NSWindowTemplate
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+ MainWindowController
+
+
+ FirstResponder
+
+
+ NSApplication
+
+
+ 15
+ 2
+ {{131, 74}, {606, 354}}
+ 611844096
+ Window
+ MainWindow
+
+
+
+
+ 256
+
+ {606, 354}
+
+
+
+
+ {{0, 0}, {1440, 878}}
+ {10000000000000, 10000000000000}
+ YES
+
+
+
+
+
+
+ window
+
+
+
+ 6
+
+
+
+
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 2
+
+
+
+
+
+
+
+ 3
+
+
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {{319, 371}, {606, 354}}
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+ 9
+
+
+
+
+ MainWindow
+ NSWindow
+
+ IBProjectSource
+ ../MainWindow.h
+
+
+
+ MainWindowController
+ NSWindowController
+
+ IBProjectSource
+ ../MainWindowController.h
+
+
+
+
+ 0
+ IBCocoaFramework
+ NO
+
+ com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
+
+
+ YES
+ 3
+
+
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/MainWindowController.cs b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindowController.cs
new file mode 100644
index 0000000000..1533732e26
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/MainWindowController.cs
@@ -0,0 +1,66 @@
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using Eto.Forms;
+using System.Drawing;
+
+namespace EmbedEtoInMonoMac
+{
+ public partial class MainWindowController : MonoMac.AppKit.NSWindowController
+ {
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public MainWindowController(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public MainWindowController(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Call to load from the XIB/NIB file
+ public MainWindowController() : base("MainWindow")
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+
+ //strongly typed window accessor
+ public new MainWindow Window
+ {
+ get { return (MainWindow)base.Window; }
+ }
+
+
+ public override void AwakeFromNib()
+ {
+ base.AwakeFromNib();
+
+ // Get native view for the panel
+ // passing true so that we can embed, otherwise we just get a reference to the control
+ var nativeView = new MyEtoPanel().ToNative(true);
+
+ nativeView.AutoresizingMask = NSViewResizingMask.MinYMargin; // anchor to top left
+
+ // position control, keeping auto size of control
+ var contentFrame = Window.ContentView.Frame;
+ nativeView.SetFrameOrigin(new PointF(100, contentFrame.Height - nativeView.Frame.Height - 100));
+
+ Window.ContentView.AddSubview(nativeView);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/MyEtoPanel.cs b/Samples/MonoMac/EmbedEtoInMonoMac/MyEtoPanel.cs
new file mode 100644
index 0000000000..dd5c37882a
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/MyEtoPanel.cs
@@ -0,0 +1,31 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedEtoInMonoMac
+{
+ ///
+ /// Eto.Forms panel to embed in an existing MonoMac app
+ ///
+ ///
+ /// This is used in to add to the existing native app.
+ ///
+ public class MyEtoPanel : Panel
+ {
+ public MyEtoPanel()
+ {
+ Content = new TableLayout
+ {
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ new TableRow(new Label { Text = "An Eto.Forms control" }),
+ new TableRow(new TextBox()),
+ new TableRow(new ComboBox { Items = { "Item 1", "Item 2", "Item 3" } }),
+ null
+ }
+ };
+ }
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedEtoInMonoMac/Program.cs b/Samples/MonoMac/EmbedEtoInMonoMac/Program.cs
new file mode 100644
index 0000000000..7ad5854650
--- /dev/null
+++ b/Samples/MonoMac/EmbedEtoInMonoMac/Program.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Drawing;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+using MonoMac.ObjCRuntime;
+
+namespace EmbedEtoInMonoMac
+{
+ static class Program
+ {
+ static void Main(string[] args)
+ {
+ NSApplication.Init();
+
+ // initialize eto forms after native app is initialized
+ new Eto.Forms.Application(new Eto.Mac.Platform()).Attach();
+
+ NSApplication.Main(args);
+ }
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/EmbedMonoMacInEto.csproj b/Samples/MonoMac/EmbedMonoMacInEto/EmbedMonoMacInEto.csproj
new file mode 100644
index 0000000000..2c9cbd7831
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/EmbedMonoMacInEto.csproj
@@ -0,0 +1,99 @@
+
+
+
+ Debug
+ AnyCPU
+ {948B3504-5B70-4649-8FE4-BDE1FB46EC69};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}
+ Exe
+ EmbedMonoMacInEto
+ Resources
+ EmbedMonoMacInEto
+ True
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ false
+ SdkOnly
+ false
+ true
+ false
+ Developer ID Application
+ true
+ true
+
+
+ full
+ true
+ bin\AppStore
+ prompt
+ 4
+ false
+ SdkOnly
+ false
+ true
+ 3rd Party Mac Developer Installer
+ true
+ 3rd Party Mac Developer Application
+ true
+ true
+
+
+
+
+
+
+
+
+ ..\..\..\Libraries\MonoMac\MonoMac.dll
+
+
+
+
+
+
+
+
+
+
+
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}
+ Eto.Mac - Pcl
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+
+
+
+
+
+
+ MyNativeView.cs
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/Info.plist b/Samples/MonoMac/EmbedMonoMacInEto/Info.plist
new file mode 100644
index 0000000000..3399fd2d77
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/Info.plist
@@ -0,0 +1,18 @@
+
+
+
+
+ CFBundleDisplayName
+ EmbedMonoMacInEto
+ CFBundleIdentifier
+ com.your-company.EmbedMonoMacInEto
+ CFBundleName
+ EmbedMonoMacInEto
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ 10.6
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/MainForm.cs b/Samples/MonoMac/EmbedMonoMacInEto/MainForm.cs
new file mode 100644
index 0000000000..030ff6f3ae
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/MainForm.cs
@@ -0,0 +1,30 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedMonoMacInEto
+{
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Menu = new MenuBar();
+
+ // create a new native MonoMac view and wrap it in an eto control
+ var nativeControl = new MyNativeViewController().ToEto();
+
+ Content = new TableLayout
+ {
+ Padding = new Padding(10),
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ nativeControl,
+ null,
+ new TableLayout(new TableRow(null, new Button { Text = "An Eto.Forms button" })),
+ }
+ };
+ }
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.cs b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.cs
new file mode 100644
index 0000000000..ba9ed03c8c
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.cs
@@ -0,0 +1,35 @@
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+
+namespace EmbedMonoMacInEto
+{
+ public partial class MyNativeView : MonoMac.AppKit.NSView
+ {
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public MyNativeView(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public MyNativeView(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.designer.cs b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.designer.cs
new file mode 100644
index 0000000000..203e002934
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.designer.cs
@@ -0,0 +1,17 @@
+
+namespace EmbedMonoMacInEto
+{
+
+ // Should subclass MonoMac.AppKit.NSView
+ [MonoMac.Foundation.Register("MyNativeView")]
+ public partial class MyNativeView
+ {
+ }
+
+ // Should subclass MonoMac.AppKit.NSViewController
+ [MonoMac.Foundation.Register("MyNativeViewController")]
+ public partial class MyNativeViewController
+ {
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.xib b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.xib
new file mode 100644
index 0000000000..fe398afcd9
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeView.xib
@@ -0,0 +1,385 @@
+
+
+
+ 1090
+ 13F34
+ 6245
+ 1265.21
+ 698.00
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ 6245
+
+
+ NSComboBox
+ NSComboBoxCell
+ NSCustomObject
+ NSCustomView
+ NSTextField
+ NSTextFieldCell
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+ MyNativeViewController
+
+
+ FirstResponder
+
+
+ NSApplication
+
+
+
+ 268
+
+
+
+ 266
+ {{45, 45}, {353, 26}}
+
+
+ _NS:9
+ YES
+
+ 342884417
+ 272630784
+
+
+ YES
+ 13
+ 1044
+
+ _NS:9
+
+ YES
+
+ 6
+ System
+ textBackgroundColor
+
+ 3
+ MQA
+
+
+
+ 6
+ System
+ controlTextColor
+
+ 3
+ MAA
+
+
+ 5
+ YES
+
+ Item 1
+ Item 2
+ Item 3
+
+
+
+
+ 274
+ {13, 63}
+
+
+ _NS:29
+ YES
+ NO
+ YES
+
+
+ 0
+ 10
+ 10
+ 3.4028234663852886e+38
+
+
+ 337641536
+ 268437504
+ Item 3
+
+
+
+ 6
+ System
+ controlBackgroundColor
+
+ 3
+ MC42NjY2NjY2NjY3AA
+
+
+
+
+ 3
+ YES
+
+
+
+ 3
+ 2
+
+
+ 6
+ System
+ gridColor
+
+ 3
+ MC41AA
+
+
+ 19
+ tableViewAction:
+ -765427712
+
+
+
+ 1
+ -1
+ 0
+ YES
+ 0
+ 1
+
+
+ NO
+ 1
+
+
+
+ 268
+ {{43, 156}, {237, 17}}
+
+
+
+ _NS:526
+ {251, 750}
+ YES
+
+ 68157504
+ 272630784
+ A Cocoa Label
+
+ _NS:526
+
+
+ 6
+ System
+ controlColor
+
+
+
+
+ NO
+ 1
+
+
+
+ 266
+ {{45, 103}, {350, 22}}
+
+
+
+ _NS:9
+ YES
+
+ -1804599231
+ 272630784
+
+
+ _NS:9
+
+ YES
+
+
+ 6
+ System
+ textColor
+
+
+
+ NO
+ 1
+
+
+ {420, 202}
+
+
+
+ MyNativeView
+
+
+
+
+
+
+ view
+
+
+
+ 17
+
+
+
+
+
+ 0
+
+
+
+
+
+ -2
+
+
+ File's Owner
+
+
+ -1
+
+
+ First Responder
+
+
+ -3
+
+
+ Application
+
+
+ 4
+
+
+
+
+
+
+
+
+
+ 18
+
+
+
+
+
+
+
+ 19
+
+
+
+
+ 20
+
+
+
+
+
+
+
+ 21
+
+
+
+
+ 22
+
+
+
+
+
+
+
+ 23
+
+
+
+
+
+
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ com.apple.InterfaceBuilder.CocoaPlugin
+ {302, 329}
+ com.apple.InterfaceBuilder.CocoaPlugin
+
+
+
+
+
+ 23
+
+
+
+
+ MyNativeView
+ NSView
+
+ IBProjectSource
+ ../MyNativeView.h
+
+
+
+ MyNativeViewController
+ NSViewController
+
+ IBProjectSource
+ ../MyNativeViewController.h
+
+
+
+
+
+ NSFormatter
+ NSObject
+
+ IBFrameworkSource
+ Foundation.framework/Headers/NSFormatter.h
+
+
+
+
+ 0
+ IBCocoaFramework
+ NO
+
+ com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3
+
+
+ YES
+ 3
+
+
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/MyNativeViewController.cs b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeViewController.cs
new file mode 100644
index 0000000000..b3d59a1993
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/MyNativeViewController.cs
@@ -0,0 +1,50 @@
+
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using MonoMac.Foundation;
+using MonoMac.AppKit;
+
+namespace EmbedMonoMacInEto
+{
+ public partial class MyNativeViewController : MonoMac.AppKit.NSViewController
+ {
+ #region Constructors
+
+ // Called when created from unmanaged code
+ public MyNativeViewController(IntPtr handle) : base(handle)
+ {
+ Initialize();
+ }
+
+ // Called when created directly from a XIB file
+ [Export("initWithCoder:")]
+ public MyNativeViewController(NSCoder coder) : base(coder)
+ {
+ Initialize();
+ }
+
+ // Call to load from the XIB/NIB file
+ public MyNativeViewController() : base("MyNativeView", NSBundle.MainBundle)
+ {
+ Initialize();
+ }
+
+ // Shared initialization code
+ void Initialize()
+ {
+ }
+
+ #endregion
+
+ //strongly typed view accessor
+ public new MyNativeView View
+ {
+ get
+ {
+ return (MyNativeView)base.View;
+ }
+ }
+ }
+}
+
diff --git a/Samples/MonoMac/EmbedMonoMacInEto/Program.cs b/Samples/MonoMac/EmbedMonoMacInEto/Program.cs
new file mode 100644
index 0000000000..8f24d4b772
--- /dev/null
+++ b/Samples/MonoMac/EmbedMonoMacInEto/Program.cs
@@ -0,0 +1,14 @@
+using System;
+using Eto.Forms;
+
+namespace EmbedMonoMacInEto
+{
+ static class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(new Eto.Mac.Platform()).Run(new MainForm());
+ }
+ }
+}
diff --git a/Samples/Samples.sln b/Samples/Samples.sln
new file mode 100644
index 0000000000..fd23819032
--- /dev/null
+++ b/Samples/Samples.sln
@@ -0,0 +1,319 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+VisualStudioVersion = 12.0.30723.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "MonoMac", "MonoMac", "{F65C2B2B-BE0E-4AF5-B65B-3F770F8D54CF}"
+ ProjectSection(MonoDevelopProperties) = preProject
+ BaseDirectory = MonoMac
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedEtoInMonoMac", "MonoMac\EmbedEtoInMonoMac\EmbedEtoInMonoMac.csproj", "{95B6E385-A0ED-4A49-99B5-19569156FCE6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedMonoMacInEto", "MonoMac\EmbedMonoMacInEto\EmbedMonoMacInEto.csproj", "{86A6EB85-7A64-4E9A-9C72-121A904D8EAF}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Eto", "Eto", "{19A4EA01-CA9E-4390-B448-974152AB5706}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto - Pcl", "..\Source\Eto\Eto - Pcl.csproj", "{35EF0A4E-2A1A-492C-8BED-106774EA09F2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Mac - Pcl", "..\Source\Eto.Mac\Eto.Mac - Pcl.csproj", "{3E7995E0-C9EB-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.WinForms - Pcl", "..\Source\Eto.WinForms\Eto.WinForms - Pcl.csproj", "{9F51798A-354C-47A1-9207-4BB7D7FC7FC4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Wpf - Pcl", "..\Source\Eto.Wpf\Eto.Wpf - Pcl.csproj", "{63137FA0-CA55-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Gtk2 - Pcl", "..\Source\Eto.Gtk\Eto.Gtk2 - Pcl.csproj", "{80915A80-CA54-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "WinForms", "WinForms", "{1A922E1B-12D1-4CAA-929C-A400BC875EAB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedWinFormsInEto", "WinForms\EmbedWinFormsInEto\EmbedWinFormsInEto.csproj", "{733C7D13-F676-4E41-BDB2-27696BD5AD15}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedEtoInWinForms", "WinForms\EmbedEtoInWinForms\EmbedEtoInWinForms.csproj", "{05323072-56A7-4CFE-9C64-2E7762D592EB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Wpf", "Wpf", "{F72787D2-13C7-4CBA-A383-5BFC74ACEFFB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedEtoInWpf", "Wpf\EmbedEtoInWpf\EmbedEtoInWpf.csproj", "{D528D241-8063-4732-B19D-6939838E516F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedWpfInEto", "Wpf\EmbedWpfInEto\EmbedWpfInEto.csproj", "{B19797BA-419B-4FD8-B306-A3C241C665EB}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Gtk", "Gtk", "{B47C0BBE-0807-47D2-A3A1-A61CD28AC09D}"
+ ProjectSection(MonoDevelopProperties) = preProject
+ BaseDirectory = Gtk
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedGtkInEto", "Gtk\EmbedGtkInEto\EmbedGtkInEto.csproj", "{8096E21D-28E4-4A1B-973A-B60EC23C3772}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EmbedEtoInGtk", "Gtk\EmbedEtoInGtk\EmbedEtoInGtk.csproj", "{27E7436C-0B29-430C-9A21-A5812FC72311}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tutorials", "Tutorials", "{16769B60-62AD-4D78-90A3-3138D29E072C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial1 - Hello World", "Tutorials\Tutorial1\Tutorial1 - Hello World.csproj", "{7BE9E187-3FC4-49D2-A322-F4651C3AE256}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial2 - Menus and Toolbars", "Tutorials\Tutorial2\Tutorial2 - Menus and Toolbars.csproj", "{0844A0AD-778A-4DB3-8332-03AC50A17D05}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial3 - Table Layout", "Tutorials\Tutorial3\Tutorial3 - Table Layout.csproj", "{D51732E0-1E93-11E3-8224-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tutorial4 - Binding", "Tutorials\Tutorial4\Tutorial4 - Binding.csproj", "{DDC8A290-2F20-11E4-8C21-0800200C9A66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Mac = Debug|Mac
+ Debug|Linux = Debug|Linux
+ Debug|Windows = Debug|Windows
+ Release|Mac = Release|Mac
+ Release|Linux = Release|Linux
+ Release|Windows = Release|Windows
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Debug|Linux.Build.0 = Debug|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Debug|Mac.Build.0 = Debug|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Debug|Windows.Build.0 = Debug|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Release|Linux.ActiveCfg = Release|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Release|Linux.Build.0 = Release|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Release|Mac.ActiveCfg = Release|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Release|Mac.Build.0 = Release|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Release|Windows.ActiveCfg = Release|Any CPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}.Release|Windows.Build.0 = Release|Any CPU
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Debug|Linux.ActiveCfg = Debug|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Debug|Linux.Build.0 = Debug|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Debug|Mac.ActiveCfg = Debug|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Debug|Mac.Build.0 = Debug|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Debug|Windows.ActiveCfg = Debug|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Debug|Windows.Build.0 = Debug|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Release|Linux.ActiveCfg = Release|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Release|Linux.Build.0 = Release|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Release|Mac.ActiveCfg = Release|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Release|Mac.Build.0 = Release|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Release|Windows.ActiveCfg = Release|x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}.Release|Windows.Build.0 = Release|x86
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Debug|Linux.Build.0 = Debug|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Debug|Mac.Build.0 = Debug|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Debug|Windows.Build.0 = Debug|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Release|Linux.ActiveCfg = Release|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Release|Linux.Build.0 = Release|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Release|Mac.ActiveCfg = Release|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Release|Mac.Build.0 = Release|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Release|Windows.ActiveCfg = Release|Any CPU
+ {27E7436C-0B29-430C-9A21-A5812FC72311}.Release|Windows.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Linux.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Mac.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Windows.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Linux.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Linux.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Mac.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Mac.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Windows.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Windows.Build.0 = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Debug|Linux.Build.0 = Debug|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Debug|Mac.Build.0 = Debug|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Debug|Windows.Build.0 = Debug|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Release|Linux.ActiveCfg = Release|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Release|Linux.Build.0 = Release|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Release|Mac.ActiveCfg = Release|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Release|Mac.Build.0 = Release|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Release|Windows.ActiveCfg = Release|Any CPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}.Release|Windows.Build.0 = Release|Any CPU
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Debug|Linux.ActiveCfg = Debug|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Debug|Linux.Build.0 = Debug|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Debug|Mac.ActiveCfg = Debug|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Debug|Mac.Build.0 = Debug|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Debug|Windows.ActiveCfg = Debug|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Debug|Windows.Build.0 = Debug|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Release|Linux.ActiveCfg = Release|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Release|Linux.Build.0 = Release|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Release|Mac.ActiveCfg = Release|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Release|Mac.Build.0 = Release|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Release|Windows.ActiveCfg = Release|x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}.Release|Windows.Build.0 = Release|x86
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Debug|Linux.Build.0 = Debug|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Debug|Mac.Build.0 = Debug|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Debug|Windows.Build.0 = Debug|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Release|Linux.ActiveCfg = Release|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Release|Linux.Build.0 = Release|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Release|Mac.ActiveCfg = Release|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Release|Mac.Build.0 = Release|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Release|Windows.ActiveCfg = Release|Any CPU
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772}.Release|Windows.Build.0 = Release|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Debug|Linux.Build.0 = Debug|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Debug|Mac.Build.0 = Debug|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Debug|Windows.Build.0 = Debug|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Release|Linux.ActiveCfg = Release|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Release|Linux.Build.0 = Release|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Release|Mac.ActiveCfg = Release|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Release|Mac.Build.0 = Release|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Release|Windows.ActiveCfg = Release|Any CPU
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF}.Release|Windows.Build.0 = Release|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Debug|Linux.Build.0 = Debug|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Debug|Mac.Build.0 = Debug|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Debug|Windows.Build.0 = Debug|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Release|Linux.ActiveCfg = Release|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Release|Linux.Build.0 = Release|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Release|Mac.ActiveCfg = Release|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Release|Mac.Build.0 = Release|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Release|Windows.ActiveCfg = Release|Any CPU
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6}.Release|Windows.Build.0 = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Linux.Build.0 = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Mac.Build.0 = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Windows.Build.0 = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Linux.ActiveCfg = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Linux.Build.0 = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Mac.ActiveCfg = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Mac.Build.0 = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Windows.ActiveCfg = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Windows.Build.0 = Release|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Debug|Windows.Build.0 = Debug|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Release|Linux.ActiveCfg = Release|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Release|Mac.ActiveCfg = Release|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Release|Windows.ActiveCfg = Release|Any CPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}.Release|Windows.Build.0 = Release|Any CPU
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Debug|Linux.Build.0 = Debug|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Debug|Mac.Build.0 = Debug|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Debug|Windows.Build.0 = Debug|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Release|Linux.ActiveCfg = Release|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Release|Linux.Build.0 = Release|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Release|Mac.ActiveCfg = Release|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Release|Mac.Build.0 = Release|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Release|Windows.ActiveCfg = Release|x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}.Release|Windows.Build.0 = Release|x86
+ {D528D241-8063-4732-B19D-6939838E516F}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Debug|Linux.Build.0 = Debug|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Debug|Mac.Build.0 = Debug|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Debug|Windows.Build.0 = Debug|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Release|Linux.ActiveCfg = Release|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Release|Linux.Build.0 = Release|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Release|Mac.ActiveCfg = Release|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Release|Mac.Build.0 = Release|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Release|Windows.ActiveCfg = Release|Any CPU
+ {D528D241-8063-4732-B19D-6939838E516F}.Release|Windows.Build.0 = Release|Any CPU
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Debug|Linux.Build.0 = Debug|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Debug|Mac.Build.0 = Debug|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Debug|Windows.Build.0 = Debug|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Release|Linux.ActiveCfg = Release|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Release|Linux.Build.0 = Release|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Release|Mac.ActiveCfg = Release|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Release|Mac.Build.0 = Release|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Release|Windows.ActiveCfg = Release|x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}.Release|Windows.Build.0 = Release|x86
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {95B6E385-A0ED-4A49-99B5-19569156FCE6} = {F65C2B2B-BE0E-4AF5-B65B-3F770F8D54CF}
+ {86A6EB85-7A64-4E9A-9C72-121A904D8EAF} = {F65C2B2B-BE0E-4AF5-B65B-3F770F8D54CF}
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2} = {19A4EA01-CA9E-4390-B448-974152AB5706}
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66} = {19A4EA01-CA9E-4390-B448-974152AB5706}
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4} = {19A4EA01-CA9E-4390-B448-974152AB5706}
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66} = {19A4EA01-CA9E-4390-B448-974152AB5706}
+ {80915A80-CA54-11E3-9C1A-0800200C9A66} = {19A4EA01-CA9E-4390-B448-974152AB5706}
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15} = {1A922E1B-12D1-4CAA-929C-A400BC875EAB}
+ {05323072-56A7-4CFE-9C64-2E7762D592EB} = {1A922E1B-12D1-4CAA-929C-A400BC875EAB}
+ {D528D241-8063-4732-B19D-6939838E516F} = {F72787D2-13C7-4CBA-A383-5BFC74ACEFFB}
+ {B19797BA-419B-4FD8-B306-A3C241C665EB} = {F72787D2-13C7-4CBA-A383-5BFC74ACEFFB}
+ {8096E21D-28E4-4A1B-973A-B60EC23C3772} = {B47C0BBE-0807-47D2-A3A1-A61CD28AC09D}
+ {27E7436C-0B29-430C-9A21-A5812FC72311} = {B47C0BBE-0807-47D2-A3A1-A61CD28AC09D}
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256} = {16769B60-62AD-4D78-90A3-3138D29E072C}
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05} = {16769B60-62AD-4D78-90A3-3138D29E072C}
+ {D51732E0-1E93-11E3-8224-0800200C9A66} = {16769B60-62AD-4D78-90A3-3138D29E072C}
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66} = {16769B60-62AD-4D78-90A3-3138D29E072C}
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Tutorials\Tutorial1\Tutorial1 - Hello World.csproj
+ Policies = $0
+ $0.TextStylePolicy = $1
+ $1.inheritsSet = null
+ $1.scope = text/x-csharp
+ $0.CSharpFormattingPolicy = $2
+ $2.IndentSwitchBody = True
+ $2.AnonymousMethodBraceStyle = NextLine
+ $2.PropertyBraceStyle = NextLine
+ $2.PropertyGetBraceStyle = NextLine
+ $2.PropertySetBraceStyle = NextLine
+ $2.EventBraceStyle = NextLine
+ $2.EventAddBraceStyle = NextLine
+ $2.EventRemoveBraceStyle = NextLine
+ $2.StatementBraceStyle = NextLine
+ $2.ElseNewLinePlacement = NewLine
+ $2.CatchNewLinePlacement = NewLine
+ $2.FinallyNewLinePlacement = NewLine
+ $2.WhileNewLinePlacement = DoNotCare
+ $2.ArrayInitializerWrapping = DoNotChange
+ $2.ArrayInitializerBraceStyle = NextLine
+ $2.BeforeMethodDeclarationParentheses = False
+ $2.BeforeMethodCallParentheses = False
+ $2.BeforeConstructorDeclarationParentheses = False
+ $2.BeforeDelegateDeclarationParentheses = False
+ $2.NewParentheses = False
+ $2.SpacesBeforeBrackets = False
+ $2.inheritsSet = Mono
+ $2.inheritsScope = text/x-csharp
+ $2.scope = text/x-csharp
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Samples/Tutorials/README.md b/Samples/Tutorials/README.md
new file mode 100644
index 0000000000..5cb598ebd2
--- /dev/null
+++ b/Samples/Tutorials/README.md
@@ -0,0 +1,20 @@
+Eto.Forms Tutorials
+===================
+
+How to Build
+------------
+
+These tutorials use a script to copy the required platform dependencies:
+
+- buildapp.sh is used for OS X or Linux
+- buildapp.cmd is used for Windows
+
+
+How to Run
+----------
+
+You can run from the IDE, though on OS X an .app bundle is created in the output directory that you must run separately,
+otherwise it will run the GTK platform on OS X.
+
+To run the MonoMac platform directly in MonoDevelop for OS X, you must create a MonoMac project separate from your GUI
+executable project. See the Eto.Test.Mac application as an example of how this looks.
\ No newline at end of file
diff --git a/Samples/Tutorials/Tutorial.targets b/Samples/Tutorials/Tutorial.targets
new file mode 100644
index 0000000000..4ab0c1e9f5
--- /dev/null
+++ b/Samples/Tutorials/Tutorial.targets
@@ -0,0 +1,66 @@
+
+
+
+
+ $(BuildDependsOn);
+ _CreateAppBundle
+
+
+
+
+ $(MSBuildProjectName)
+ $(MSBuildThisFileDirectory)\..\..\Resources\MacAppTemplate.app
+
+
+
+
+
+
+ $(OutputAppPath)\Contents\MonoBundle
+ $(OutputAppPath)\Contents\MacOS\Launcher.exec
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(PListContents.Replace('>MyApp.exe</', '>$(TargetFileName)</'))
+ $(PListContents.Replace('>MacAppTemplate</', '>$(AppBundleName)</'))
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/Tutorials/Tutorial1/Main.cs b/Samples/Tutorials/Tutorial1/Main.cs
new file mode 100644
index 0000000000..58c13ad6c5
--- /dev/null
+++ b/Samples/Tutorials/Tutorial1/Main.cs
@@ -0,0 +1,30 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace Tutorial1
+{
+ public class MyForm : Form
+ {
+ public MyForm()
+ {
+ // Set ClientSize instead of Size, as each platform has different window border sizes
+ ClientSize = new Size(600, 400);
+
+ // Title to show in the title bar
+ Title = "Hello, Eto.Forms";
+
+ // Content of the form
+ Content = new Label { Text = "Some content", VerticalAlign = VerticalAlign.Middle, HorizontalAlign = HorizontalAlign.Center };
+ }
+ }
+
+ class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application().Run(new MyForm());
+ }
+ }
+}
diff --git a/Samples/Tutorials/Tutorial1/Tutorial1 - Hello World.csproj b/Samples/Tutorials/Tutorial1/Tutorial1 - Hello World.csproj
new file mode 100644
index 0000000000..493af582d2
--- /dev/null
+++ b/Samples/Tutorials/Tutorial1/Tutorial1 - Hello World.csproj
@@ -0,0 +1,58 @@
+
+
+
+ Debug
+ x86
+ {7BE9E187-3FC4-49D2-A322-F4651C3AE256}
+ WinExe
+ Tutorial1
+ Tutorial1
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+ false
+
+
+ none
+ false
+ bin\Release
+ prompt
+ 4
+ x86
+ false
+
+
+
+
+
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}
+ Eto.Gtk2 - Pcl
+
+
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}
+ Eto.Mac - Pcl
+
+
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}
+ Eto.WinForms - Pcl
+
+
+
\ No newline at end of file
diff --git a/Samples/Tutorials/Tutorial2/Main.cs b/Samples/Tutorials/Tutorial2/Main.cs
new file mode 100644
index 0000000000..0b7507956e
--- /dev/null
+++ b/Samples/Tutorials/Tutorial2/Main.cs
@@ -0,0 +1,93 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using Eto;
+
+namespace Tutorial2
+{
+ ///
+ /// Custom command
+ ///
+ ///
+ /// You can create your own command subclasses, or create instances of Command directly.
+ /// Commands can be used for either the menu or toolbar.
+ /// Otherwise, you can use MenuItem or ToolItem classes directly.
+ ///
+ public class MyCommand : Command
+ {
+ public MyCommand()
+ {
+ MenuText = "C&lick Me, Command";
+ ToolBarText = "Click Me";
+ ToolTip = "This shows a dialog for no reason";
+ //Image = Icon.FromResource ("MyResourceName.ico");
+ //Image = Bitmap.FromResource ("MyResourceName.png");
+ Shortcut = Application.Instance.CommonModifier | Keys.M; // control+M or cmd+M
+ }
+
+ protected override void OnExecuted(EventArgs e)
+ {
+ base.OnExecuted(e);
+
+ MessageBox.Show(Application.Instance.MainForm, "You clicked me!", "Tutorial 2", MessageBoxButtons.OK);
+ }
+ }
+
+ public class MyForm : Form
+ {
+ public MyForm()
+ {
+ ClientSize = new Size(600, 400);
+ Title = "Menus and Toolbars";
+
+ // create menu
+ Menu = new MenuBar
+ {
+ Items =
+ {
+ new ButtonMenuItem
+ {
+ Text = "&File",
+ Items =
+ {
+ // you can add commands or menu items
+ new MyCommand(),
+ new ButtonMenuItem { Text = "Click Me, MenuItem" }
+ }
+ }
+ },
+ // quit item (goes in Application menu on OS X, File menu for others)
+ QuitItem = new Command((sender, e) => Application.Instance.Quit())
+ {
+ MenuText = "Quit",
+ Shortcut = Application.Instance.CommonModifier | Keys.Q
+ },
+ // about command (goes in Application menu on OS X, Help menu for others)
+ AboutItem = new Command((sender, e) => new Dialog { Content = new Label { Text = "About my app..." }, ClientSize = new Size(200, 200) }.ShowModal(this))
+ {
+ MenuText = "About my app"
+ }
+ };
+
+ // create toolbar
+ ToolBar = new ToolBar
+ {
+ Items =
+ {
+ new MyCommand(),
+ new SeparatorToolItem(),
+ new ButtonToolItem { Text = "Click Me, ToolItem" }
+ }
+ };
+ }
+ }
+
+ class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application().Run(new MyForm());
+ }
+ }
+}
diff --git a/Samples/Tutorials/Tutorial2/Tutorial2 - Menus and Toolbars.csproj b/Samples/Tutorials/Tutorial2/Tutorial2 - Menus and Toolbars.csproj
new file mode 100644
index 0000000000..3ae446661f
--- /dev/null
+++ b/Samples/Tutorials/Tutorial2/Tutorial2 - Menus and Toolbars.csproj
@@ -0,0 +1,58 @@
+
+
+
+ Debug
+ x86
+ {0844A0AD-778A-4DB3-8332-03AC50A17D05}
+ WinExe
+ Tutorial2
+ Tutorial2
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+ false
+
+
+ none
+ false
+ bin\Release
+ prompt
+ 4
+ x86
+ false
+
+
+
+
+
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}
+ Eto.Gtk2 - Pcl
+
+
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}
+ Eto.Mac - Pcl
+
+
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}
+ Eto.WinForms - Pcl
+
+
+
\ No newline at end of file
diff --git a/Samples/Tutorials/Tutorial3/Main.cs b/Samples/Tutorials/Tutorial3/Main.cs
new file mode 100644
index 0000000000..4251581606
--- /dev/null
+++ b/Samples/Tutorials/Tutorial3/Main.cs
@@ -0,0 +1,75 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace Tutorial3
+{
+ public class MyForm : Form
+ {
+ public MyForm()
+ {
+ ClientSize = new Size(600, 400);
+ Title = "Table Layout";
+
+ // The main layout mechanism for Eto.Forms is a TableLayout.
+ // This is recommended to allow controls to keep their natural platform-specific size.
+ // You can layout your controls declaratively using rows and columns as below, or add to the TableLayout.Rows and TableRow.Cell directly.
+
+ Content = new TableLayout(
+ new TableRow(
+ new TableCell { Control = new Label { Text = "First Column" }, ScaleWidth = true }, // Scale width to share space among all columns
+ new TableCell { Control = new Label { Text = "Second Column" }, ScaleWidth = true },
+ new TableCell { Control = new Label { Text = "Third Column" }, ScaleWidth = true }
+ ),
+ new TableRow(
+ // A Control can be implicitly converted to a TableCell or TableRow, so we can omit creating a TableCell when we don't have to set scaling
+ new TextBox { Text = "Second Row, First Column" },
+ new ComboBox { DataStore = new ListItemCollection { new ListItem { Text = "Second Row, Second Column" } } },
+ new CheckBox { Text = "Second Row, Third Column" }
+ ),
+ // by default, the last row & column will get scaled. This adds a row at the end to take the extra space of the form.
+ // otherwise, the above row will get scaled and stretch the TextBox/ComboBox/CheckBox to fill the remaining height.
+ new TableRow { ScaleHeight = true }
+ )
+ {
+ Spacing = new Size(5, 5), // space between each cell
+ Padding = new Padding(10, 10, 10, 10) // space around the table's sides
+ };
+
+ // This creates the following layout:
+ // --------------------------------
+ // |First |Second |Third |
+ // --------------------------------
+ // | |||
+ // --------------------------------
+ // | | | |
+ // | | | |
+ // --------------------------------
+ //
+ // Some notes:
+ // 1. When scaling the width of a cell, it applies to all cells in the same column.
+ // 2. When scaling the height of a row, it applies to the entire row.
+ // 3. Scaling a row/column makes it share all remaining space with other scaled rows/columns.
+ // 4. If a row/column is not scaled, it will be the size of the largest control in that row/column.
+ // 5. A Control can be implicitly converted to a TableCell or TableRow to make the layout more concise.
+
+ Menu = new MenuBar
+ {
+ QuitItem = new Command((sender, e) => Application.Instance.Quit())
+ {
+ MenuText = "Quit",
+ Shortcut = Application.Instance.CommonModifier | Keys.Q
+ }
+ };
+ }
+ }
+
+ class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application().Run(new MyForm());
+ }
+ }
+}
diff --git a/Samples/Tutorials/Tutorial3/Tutorial3 - Table Layout.csproj b/Samples/Tutorials/Tutorial3/Tutorial3 - Table Layout.csproj
new file mode 100644
index 0000000000..d92b1ff7a4
--- /dev/null
+++ b/Samples/Tutorials/Tutorial3/Tutorial3 - Table Layout.csproj
@@ -0,0 +1,58 @@
+
+
+
+ Debug
+ x86
+ {D51732E0-1E93-11E3-8224-0800200C9A66}
+ WinExe
+ Tutorial3
+ Tutorial3
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+ false
+
+
+ none
+ false
+ bin\Release
+ prompt
+ 4
+ x86
+ false
+
+
+
+
+
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}
+ Eto.Gtk2 - Pcl
+
+
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}
+ Eto.Mac - Pcl
+
+
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}
+ Eto.WinForms - Pcl
+
+
+
\ No newline at end of file
diff --git a/Samples/Tutorials/Tutorial4/Main.cs b/Samples/Tutorials/Tutorial4/Main.cs
new file mode 100644
index 0000000000..2fd228f1d9
--- /dev/null
+++ b/Samples/Tutorials/Tutorial4/Main.cs
@@ -0,0 +1,90 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using Eto;
+using System.Diagnostics;
+
+namespace Tutorial4
+{
+ public class MyObject
+ {
+ string textProperty;
+ public string TextProperty
+ {
+ get { return textProperty; }
+ set
+ {
+ textProperty = value;
+ Debug.WriteLine(string.Format("Set TextProperty to {0}", value));
+ }
+ }
+ }
+
+ public class MyForm : Form
+ {
+ public MyForm()
+ {
+ ClientSize = new Size(600, 400);
+ Title = "Table Layout";
+
+
+ Content = new TableLayout(
+ new TableRow(new Label { Text = "DataContext Binding" }, DataContextBinding()),
+ new TableRow(new Label { Text = "Object Binding" }, ObjectBinding()),
+ new TableRow(new Label { Text = "Direct Binding" }, DirectBinding()),
+ null // same as creating a row with ScaleHeight = true
+ ) { Spacing = new Size(5, 5), Padding = new Padding(10) };
+
+ // Set data context so it propegates to all child controls
+ DataContext = new MyObject { TextProperty = "Initial value 1" };
+
+ Menu = new MenuBar
+ {
+ QuitItem = new Command((sender, e) => Application.Instance.Quit())
+ {
+ MenuText = "Quit",
+ Shortcut = Application.Instance.CommonModifier | Keys.Q
+ }
+ };
+ }
+
+ TextBox DataContextBinding()
+ {
+ var textBox = new TextBox();
+ // bind to the text property using delegates
+ textBox.TextBinding.BindDataContext(r => r.TextProperty, (r, val) => r.TextProperty = val);
+ // You can also bind using reflection, if the data context type is unknown:
+ // textBox.TextBinding.BindDataContext(new PropertyBinding("TextProperty"));
+ return textBox;
+ }
+
+ TextBox ObjectBinding()
+ {
+ // object instance we want to bind to
+ var obj = new MyObject { TextProperty = "Initial value 2" };
+
+ var textBox = new TextBox();
+ // bind to the text property using delegates
+ textBox.TextBinding.Bind(obj, r => r.TextProperty, (r, val) => r.TextProperty = val);
+ return textBox;
+ }
+
+ TextBox DirectBinding()
+ {
+ var textBox = new TextBox();
+
+ // bind to the text property using delegates
+ textBox.TextBinding.Bind(() => "some value", val => Debug.WriteLine(string.Format("Set value to {0} directly", val)));
+ return textBox;
+ }
+ }
+
+ class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application().Run(new MyForm());
+ }
+ }
+}
diff --git a/Samples/Tutorials/Tutorial4/Tutorial4 - Binding.csproj b/Samples/Tutorials/Tutorial4/Tutorial4 - Binding.csproj
new file mode 100644
index 0000000000..6618381413
--- /dev/null
+++ b/Samples/Tutorials/Tutorial4/Tutorial4 - Binding.csproj
@@ -0,0 +1,60 @@
+
+
+
+ Debug
+ x86
+ {DDC8A290-2F20-11E4-8C21-0800200C9A66}
+ WinExe
+ Tutorial4
+ Tutorial4
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+ false
+
+
+ none
+ false
+ bin\Release
+ prompt
+ 4
+ x86
+ false
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}
+ Eto.Gtk2 - Pcl
+
+
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}
+ Eto.Mac - Pcl
+
+
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}
+ Eto.WinForms - Pcl
+
+
+
\ No newline at end of file
diff --git a/Samples/WinForms/EmbedEtoInWinForms/App.config b/Samples/WinForms/EmbedEtoInWinForms/App.config
new file mode 100644
index 0000000000..8e15646352
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/WinForms/EmbedEtoInWinForms/EmbedEtoInWinForms.csproj b/Samples/WinForms/EmbedEtoInWinForms/EmbedEtoInWinForms.csproj
new file mode 100644
index 0000000000..a6a7503756
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/EmbedEtoInWinForms.csproj
@@ -0,0 +1,98 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {05323072-56A7-4CFE-9C64-2E7762D592EB}
+ WinExe
+ Properties
+ EmbedEtoInWinForms
+ EmbedEtoInWinForms
+ v4.5
+ 512
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Form
+
+
+ Form1.cs
+
+
+
+
+
+ Form1.cs
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
+
+
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}
+ Eto.WinForms - Pcl
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/WinForms/EmbedEtoInWinForms/Form1.Designer.cs b/Samples/WinForms/EmbedEtoInWinForms/Form1.Designer.cs
new file mode 100644
index 0000000000..59393e7aa8
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Form1.Designer.cs
@@ -0,0 +1,47 @@
+namespace EmbedEtoInWinForms
+{
+ partial class Form1
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.SuspendLayout();
+ //
+ // Form1
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.ClientSize = new System.Drawing.Size(440, 317);
+ this.Name = "Form1";
+ this.Text = "Form1";
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+ }
+}
+
diff --git a/Samples/WinForms/EmbedEtoInWinForms/Form1.cs b/Samples/WinForms/EmbedEtoInWinForms/Form1.cs
new file mode 100644
index 0000000000..202396e536
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Form1.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using Eto.Forms;
+
+namespace EmbedEtoInWinForms
+{
+ public partial class Form1 : System.Windows.Forms.Form
+ {
+ public Form1()
+ {
+ InitializeComponent();
+
+ // Get native control for the panel
+ // passing true so that we can embed, otherwise we just get a reference to the control
+ var nativeView = new MyEtoPanel().ToNative(true);
+ // set where we want it, size, dock attributes, etc.
+ nativeView.Location = new Point(100, 100);
+ //nativeView.Dock = DockStyle.Fill;
+
+ Controls.Add(nativeView);
+ }
+ }
+}
diff --git a/Samples/WinForms/EmbedEtoInWinForms/Form1.resx b/Samples/WinForms/EmbedEtoInWinForms/Form1.resx
new file mode 100644
index 0000000000..1af7de150c
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Form1.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Samples/WinForms/EmbedEtoInWinForms/MyEtoPanel.cs b/Samples/WinForms/EmbedEtoInWinForms/MyEtoPanel.cs
new file mode 100644
index 0000000000..08218813ae
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/MyEtoPanel.cs
@@ -0,0 +1,30 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedEtoInWinForms
+{
+ ///
+ /// Eto.Forms panel to embed in an existing WinForms app
+ ///
+ public class MyEtoPanel : Panel
+ {
+ public MyEtoPanel()
+ {
+ var button = new Button { Text = "Show Dialog" };
+
+ Content = new TableLayout
+ {
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ new TableRow(new Label { Text = "An Eto.Forms control" }),
+ new TableRow(new TextBox()),
+ new TableRow(new ComboBox { Items = { "Item 1", "Item 2", "Item 3" } }),
+ button,
+ null
+ }
+ };
+ }
+ }
+}
diff --git a/Samples/WinForms/EmbedEtoInWinForms/Program.cs b/Samples/WinForms/EmbedEtoInWinForms/Program.cs
new file mode 100644
index 0000000000..1ec75495a4
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Program.cs
@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace EmbedEtoInWinForms
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Application.EnableVisualStyles();
+ Application.SetCompatibleTextRenderingDefault(false);
+
+ // initialize eto forms after native app is initialized
+ new Eto.Forms.Application(new Eto.WinForms.Platform()).Attach();
+
+ Application.Run(new Form1());
+ }
+ }
+}
diff --git a/Samples/WinForms/EmbedEtoInWinForms/Properties/AssemblyInfo.cs b/Samples/WinForms/EmbedEtoInWinForms/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..fd5a86f31e
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("EmbedEtoInWinForms")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("EmbedEtoInWinForms")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("e7258e63-ea64-4659-95ee-6e0a93c4517f")]
+
+// 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/Samples/WinForms/EmbedEtoInWinForms/Properties/Resources.Designer.cs b/Samples/WinForms/EmbedEtoInWinForms/Properties/Resources.Designer.cs
new file mode 100644
index 0000000000..4c90a1951b
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.34014
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace EmbedEtoInWinForms.Properties
+{
+
+
+ ///
+ /// 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 ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EmbedEtoInWinForms.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/Samples/WinForms/EmbedEtoInWinForms/Properties/Resources.resx b/Samples/WinForms/EmbedEtoInWinForms/Properties/Resources.resx
new file mode 100644
index 0000000000..af7dbebbac
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/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/Samples/WinForms/EmbedEtoInWinForms/Properties/Settings.Designer.cs b/Samples/WinForms/EmbedEtoInWinForms/Properties/Settings.Designer.cs
new file mode 100644
index 0000000000..be0cabd286
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.34014
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace EmbedEtoInWinForms.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.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/Samples/WinForms/EmbedEtoInWinForms/Properties/Settings.settings b/Samples/WinForms/EmbedEtoInWinForms/Properties/Settings.settings
new file mode 100644
index 0000000000..39645652af
--- /dev/null
+++ b/Samples/WinForms/EmbedEtoInWinForms/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/Samples/WinForms/EmbedWinFormsInEto/EmbedWinFormsInEto.csproj b/Samples/WinForms/EmbedWinFormsInEto/EmbedWinFormsInEto.csproj
new file mode 100644
index 0000000000..5bfb0a7ec7
--- /dev/null
+++ b/Samples/WinForms/EmbedWinFormsInEto/EmbedWinFormsInEto.csproj
@@ -0,0 +1,64 @@
+
+
+
+ Debug
+ AnyCPU
+ {733C7D13-F676-4E41-BDB2-27696BD5AD15}
+ WinExe
+ EmbedWinFormsInEto
+ EmbedWinFormsInEto
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ true
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ true
+
+
+
+
+
+
+
+
+
+
+ UserControl
+
+
+ MyNativeControl.cs
+
+
+
+
+
+
+
+
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}
+ Eto.WinForms - Pcl
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+
+
+ MyNativeControl.cs
+
+
+
\ No newline at end of file
diff --git a/Samples/WinForms/EmbedWinFormsInEto/MainForm.cs b/Samples/WinForms/EmbedWinFormsInEto/MainForm.cs
new file mode 100644
index 0000000000..17e8265e4d
--- /dev/null
+++ b/Samples/WinForms/EmbedWinFormsInEto/MainForm.cs
@@ -0,0 +1,30 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedWinFormsInEto
+{
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Menu = new MenuBar();
+
+ // create a new native WinForms control and wrap it in an eto control
+ var nativeControl = new MyNativeControl().ToEto();
+
+ Content = new TableLayout
+ {
+ Padding = new Padding(10),
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ nativeControl,
+ null,
+ new TableLayout(new TableRow(null, new Button { Text = "An Eto.Forms button" })),
+ }
+ };
+ }
+ }
+}
+
diff --git a/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.Designer.cs b/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.Designer.cs
new file mode 100644
index 0000000000..d0b28166e3
--- /dev/null
+++ b/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.Designer.cs
@@ -0,0 +1,84 @@
+namespace EmbedWinFormsInEto
+{
+ partial class MyNativeControl
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Component Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ this.label1 = new System.Windows.Forms.Label();
+ this.textBox1 = new System.Windows.Forms.TextBox();
+ this.comboBox1 = new System.Windows.Forms.ComboBox();
+ this.SuspendLayout();
+ //
+ // label1
+ //
+ this.label1.AutoSize = true;
+ this.label1.Location = new System.Drawing.Point(28, 33);
+ this.label1.Name = "label1";
+ this.label1.Size = new System.Drawing.Size(93, 13);
+ this.label1.TabIndex = 0;
+ this.label1.Text = "A WinForms Label";
+ //
+ // textBox1
+ //
+ this.textBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.textBox1.Location = new System.Drawing.Point(31, 78);
+ this.textBox1.Name = "textBox1";
+ this.textBox1.Size = new System.Drawing.Size(171, 20);
+ this.textBox1.TabIndex = 1;
+ //
+ // comboBox1
+ //
+ this.comboBox1.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
+ | System.Windows.Forms.AnchorStyles.Right)));
+ this.comboBox1.FormattingEnabled = true;
+ this.comboBox1.Location = new System.Drawing.Point(31, 121);
+ this.comboBox1.Name = "comboBox1";
+ this.comboBox1.Size = new System.Drawing.Size(171, 21);
+ this.comboBox1.TabIndex = 2;
+ //
+ // MyNativeControl
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.comboBox1);
+ this.Controls.Add(this.textBox1);
+ this.Controls.Add(this.label1);
+ this.Name = "MyNativeControl";
+ this.Size = new System.Drawing.Size(250, 224);
+ this.ResumeLayout(false);
+ this.PerformLayout();
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.Label label1;
+ private System.Windows.Forms.TextBox textBox1;
+ private System.Windows.Forms.ComboBox comboBox1;
+ }
+}
diff --git a/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.cs b/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.cs
new file mode 100644
index 0000000000..f11c73aecb
--- /dev/null
+++ b/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Data;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace EmbedWinFormsInEto
+{
+ public partial class MyNativeControl : UserControl
+ {
+ public MyNativeControl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.resx b/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.resx
new file mode 100644
index 0000000000..1af7de150c
--- /dev/null
+++ b/Samples/WinForms/EmbedWinFormsInEto/MyNativeControl.resx
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Samples/WinForms/EmbedWinFormsInEto/Program.cs b/Samples/WinForms/EmbedWinFormsInEto/Program.cs
new file mode 100644
index 0000000000..2292417abe
--- /dev/null
+++ b/Samples/WinForms/EmbedWinFormsInEto/Program.cs
@@ -0,0 +1,14 @@
+using Eto.Forms;
+using System;
+
+namespace EmbedWinFormsInEto
+{
+ static class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(new Eto.WinForms.Platform()).Run(new MainForm());
+ }
+ }
+}
diff --git a/Samples/WinForms/EmbedWinFormsInEto/Properties/AssemblyInfo.cs b/Samples/WinForms/EmbedWinFormsInEto/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..a76f599fda
--- /dev/null
+++ b/Samples/WinForms/EmbedWinFormsInEto/Properties/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("EmbedWinFormsInEto")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Picoe Software Solutions Inc.")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Curtis Wensley")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Samples/Wpf/EmbedEtoInWpf/App.config b/Samples/Wpf/EmbedEtoInWpf/App.config
new file mode 100644
index 0000000000..8e15646352
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/Wpf/EmbedEtoInWpf/App.xaml b/Samples/Wpf/EmbedEtoInWpf/App.xaml
new file mode 100644
index 0000000000..3471c777d0
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/App.xaml
@@ -0,0 +1,8 @@
+
+
+
+
+
diff --git a/Samples/Wpf/EmbedEtoInWpf/App.xaml.cs b/Samples/Wpf/EmbedEtoInWpf/App.xaml.cs
new file mode 100644
index 0000000000..5e6e909f26
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/App.xaml.cs
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.Configuration;
+using System.Data;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows;
+
+namespace EmbedEtoInWpf
+{
+ ///
+ /// Interaction logic for App.xaml
+ ///
+ public partial class App : Application
+ {
+
+ protected override void OnStartup(StartupEventArgs e)
+ {
+ base.OnStartup(e);
+
+
+ new Eto.Forms.Application(new Eto.Wpf.Platform()).Attach();
+ }
+ }
+}
diff --git a/Samples/Wpf/EmbedEtoInWpf/EmbedEtoInWpf.csproj b/Samples/Wpf/EmbedEtoInWpf/EmbedEtoInWpf.csproj
new file mode 100644
index 0000000000..ca4ee17efb
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/EmbedEtoInWpf.csproj
@@ -0,0 +1,113 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {D528D241-8063-4732-B19D-6939838E516F}
+ WinExe
+ Properties
+ EmbedEtoInWpf
+ EmbedEtoInWpf
+ v4.5
+ 512
+ {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 4
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+
+
+
+
+
+
+
+
+
+
+ 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
+
+
+
+
+
+
+
+
+ {63137fa0-ca55-11e3-9c1a-0800200c9a66}
+ Eto.Wpf - Pcl
+
+
+ {35ef0a4e-2a1a-492c-8bed-106774ea09f2}
+ Eto - Pcl
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/Wpf/EmbedEtoInWpf/MainWindow.xaml b/Samples/Wpf/EmbedEtoInWpf/MainWindow.xaml
new file mode 100644
index 0000000000..04b7787784
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/MainWindow.xaml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/Samples/Wpf/EmbedEtoInWpf/MainWindow.xaml.cs b/Samples/Wpf/EmbedEtoInWpf/MainWindow.xaml.cs
new file mode 100644
index 0000000000..57eb56c812
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/MainWindow.xaml.cs
@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+using Eto.Forms;
+
+namespace EmbedEtoInWpf
+{
+ ///
+ /// Interaction logic for MainWindow.xaml
+ ///
+ public partial class MainWindow : System.Windows.Window
+ {
+ public FrameworkElement EtoControl { get; set; }
+
+ public MainWindow()
+ {
+ InitializeComponent();
+
+ // Get native control for the panel
+ // passing true so that we can embed, otherwise we just get a reference to the control
+ var nativeControl = new MyEtoPanel().ToNative(true);
+
+ stackPanel.Children.Add(nativeControl);
+
+
+ }
+ }
+}
diff --git a/Samples/Wpf/EmbedEtoInWpf/MyEtoPanel.cs b/Samples/Wpf/EmbedEtoInWpf/MyEtoPanel.cs
new file mode 100644
index 0000000000..988cb5d92c
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/MyEtoPanel.cs
@@ -0,0 +1,27 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedEtoInWpf
+{
+ ///
+ /// Eto.Forms panel to embed in an existing Wpf app
+ ///
+ public class MyEtoPanel : Panel
+ {
+ public MyEtoPanel()
+ {
+ Content = new TableLayout
+ {
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ new TableRow(new Label { Text = "An Eto.Forms control" }),
+ new TableRow(new TextBox()),
+ new TableRow(new ComboBox { Items = { "Item 1", "Item 2", "Item 3" } }),
+ null
+ }
+ };
+ }
+ }
+}
diff --git a/Samples/Wpf/EmbedEtoInWpf/Properties/AssemblyInfo.cs b/Samples/Wpf/EmbedEtoInWpf/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..d3fdc04d78
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/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("EmbedEtoInWpf")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("EmbedEtoInWpf")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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/Samples/Wpf/EmbedEtoInWpf/Properties/Resources.Designer.cs b/Samples/Wpf/EmbedEtoInWpf/Properties/Resources.Designer.cs
new file mode 100644
index 0000000000..503405f3fa
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/Properties/Resources.Designer.cs
@@ -0,0 +1,71 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.34014
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace EmbedEtoInWpf.Properties
+{
+
+
+ ///
+ /// 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 ((resourceMan == null))
+ {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EmbedEtoInWpf.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/Samples/Wpf/EmbedEtoInWpf/Properties/Resources.resx b/Samples/Wpf/EmbedEtoInWpf/Properties/Resources.resx
new file mode 100644
index 0000000000..af7dbebbac
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/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/Samples/Wpf/EmbedEtoInWpf/Properties/Settings.Designer.cs b/Samples/Wpf/EmbedEtoInWpf/Properties/Settings.Designer.cs
new file mode 100644
index 0000000000..cc02d5cd4d
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/Properties/Settings.Designer.cs
@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.34014
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace EmbedEtoInWpf.Properties
+{
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.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/Samples/Wpf/EmbedEtoInWpf/Properties/Settings.settings b/Samples/Wpf/EmbedEtoInWpf/Properties/Settings.settings
new file mode 100644
index 0000000000..033d7a5e9e
--- /dev/null
+++ b/Samples/Wpf/EmbedEtoInWpf/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/Wpf/EmbedWpfInEto/App.config b/Samples/Wpf/EmbedWpfInEto/App.config
new file mode 100644
index 0000000000..8e15646352
--- /dev/null
+++ b/Samples/Wpf/EmbedWpfInEto/App.config
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/Wpf/EmbedWpfInEto/EmbedWpfInEto.csproj b/Samples/Wpf/EmbedWpfInEto/EmbedWpfInEto.csproj
new file mode 100644
index 0000000000..eae031c758
--- /dev/null
+++ b/Samples/Wpf/EmbedWpfInEto/EmbedWpfInEto.csproj
@@ -0,0 +1,82 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {B19797BA-419B-4FD8-B306-A3C241C665EB}
+ WinExe
+ Properties
+ EmbedWpfInEto
+ EmbedWpfInEto
+ v4.5
+ 512
+
+
+ AnyCPU
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ AnyCPU
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ MyNativeControl.xaml
+
+
+
+
+
+
+
+
+
+ Designer
+ MSBuild:Compile
+
+
+
+
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}
+ Eto.Wpf - Pcl
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+
+
+
\ No newline at end of file
diff --git a/Samples/Wpf/EmbedWpfInEto/MainForm.cs b/Samples/Wpf/EmbedWpfInEto/MainForm.cs
new file mode 100644
index 0000000000..72224a6d65
--- /dev/null
+++ b/Samples/Wpf/EmbedWpfInEto/MainForm.cs
@@ -0,0 +1,30 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace EmbedWpfInEto
+{
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Menu = new MenuBar();
+
+ // create a new native Wpf control and wrap it in an eto control
+ var nativeControl = new MyNativeControl().ToEto();
+
+ Content = new TableLayout
+ {
+ Padding = new Padding(10),
+ Spacing = new Size(5, 5),
+ Rows =
+ {
+ nativeControl,
+ null,
+ new TableLayout(new TableRow(null, new Button { Text = "An Eto.Forms button" })),
+ }
+ };
+ }
+ }
+}
+
diff --git a/Samples/Wpf/EmbedWpfInEto/MyNativeControl.xaml b/Samples/Wpf/EmbedWpfInEto/MyNativeControl.xaml
new file mode 100644
index 0000000000..e873a0e4a2
--- /dev/null
+++ b/Samples/Wpf/EmbedWpfInEto/MyNativeControl.xaml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
diff --git a/Samples/Wpf/EmbedWpfInEto/MyNativeControl.xaml.cs b/Samples/Wpf/EmbedWpfInEto/MyNativeControl.xaml.cs
new file mode 100644
index 0000000000..cd28f62262
--- /dev/null
+++ b/Samples/Wpf/EmbedWpfInEto/MyNativeControl.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace EmbedWpfInEto
+{
+ ///
+ /// Interaction logic for MyNativeControl.xaml
+ ///
+ public partial class MyNativeControl : UserControl
+ {
+ public MyNativeControl()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Samples/Wpf/EmbedWpfInEto/Program.cs b/Samples/Wpf/EmbedWpfInEto/Program.cs
new file mode 100644
index 0000000000..2d271146fe
--- /dev/null
+++ b/Samples/Wpf/EmbedWpfInEto/Program.cs
@@ -0,0 +1,18 @@
+using Eto.Forms;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EmbedWpfInEto
+{
+ static class Program
+ {
+ [STAThread]
+ static void Main(string[] args)
+ {
+ new Application(new Eto.Wpf.Platform()).Run(new MainForm());
+ }
+ }
+}
diff --git a/Samples/Wpf/EmbedWpfInEto/Properties/AssemblyInfo.cs b/Samples/Wpf/EmbedWpfInEto/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..a159ef2860
--- /dev/null
+++ b/Samples/Wpf/EmbedWpfInEto/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("EmbedWpfInEto")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("EmbedWpfInEto")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("cc142bb6-30f8-48f4-80db-2dd6d5ce4c07")]
+
+// 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/Source/.editorconfig b/Source/.editorconfig
new file mode 100644
index 0000000000..6780a46f58
--- /dev/null
+++ b/Source/.editorconfig
@@ -0,0 +1,16 @@
+# EditorConfig is awesome: http://EditorConfig.org
+
+# top-most EditorConfig file
+root = true
+
+# use tabs by default for everything
+[*.cs]
+indent_style = tab
+indent_size = 4
+tab_size = 4
+charset=utf-8
+
+# packages.config uses spaces
+[**\packages.config]
+indent_style = space
+indent_size = 2
diff --git a/Source/.nuget/NuGet.Config b/Source/.nuget/NuGet.Config
index 0be0a9e918..87c3a33a6d 100644
--- a/Source/.nuget/NuGet.Config
+++ b/Source/.nuget/NuGet.Config
@@ -4,6 +4,6 @@
-
+
\ No newline at end of file
diff --git a/Source/.nuget/NuGet.exe b/Source/.nuget/NuGet.exe
index 2c9369842a..c41a0d0deb 100644
Binary files a/Source/.nuget/NuGet.exe and b/Source/.nuget/NuGet.exe differ
diff --git a/Source/.nuget/NuGet.targets b/Source/.nuget/NuGet.targets
index 7a7e148be8..9b25062f0f 100644
--- a/Source/.nuget/NuGet.targets
+++ b/Source/.nuget/NuGet.targets
@@ -14,10 +14,14 @@
false
- $(ProjectDir)..
+ $(ProjectDir)..
+ $(PackagesDir)
+ $(PackagesDir)\packages
+
+
@@ -29,26 +33,26 @@
- $([System.IO.Path]::Combine("$(BaseDir)", ".nuget"))
+ $([System.IO.Path]::Combine("$(NugetDir)", ".nuget"))
$([System.IO.Path]::Combine("$(ProjectDir)", "packages.config"))
- "$(BaseDir) "
+ "$(PackagesDir) "
- $(BaseDir)/.nuget
+ $(NugetDir)/.nuget
packages.config
- "$(BaseDir)"
+ "$(PackagesDir)"
-
+
-
+
Title=$(AssemblyTitle);Description=$(AssemblyDescription);Author=$(AssemblyCompany);Copyright=$(AssemblyCopyright);Id=$(AssemblyName)
-Version $(AssemblyInformationalVersion)
@@ -111,7 +115,7 @@
- $(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform);$(NugetBuildProperties)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" $(NugetBuildOptions)
+ $(NuGetCommand) pack "$(ProjectFile)" -BasePath "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform);$(NugetBuildProperties)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" $(NugetBuildOptions)
@@ -122,9 +126,9 @@
-
+
-
+
$(AssemblyName).$(AssemblyInformationalVersion).nupkg
@@ -139,61 +143,6 @@
Condition=" '$(OS)' == 'Windows_NT' " />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- ();
- if (informationalVersion != null)
- AssemblyInformationalVersion = informationalVersion.InformationalVersion;
- var title = assembly.GetCustomAttribute();
- if (title != null)
- AssemblyTitle = title.Title;
- var description = assembly.GetCustomAttribute();
- if (description != null)
- AssemblyDescription = description.Description;
- var copyright = assembly.GetCustomAttribute();
- if (copyright != null)
- AssemblyCopyright = copyright.Copyright;
- var company = assembly.GetCustomAttribute();
- if (company != null)
- AssemblyCompany = company.Company;
- AssemblyName = assembly.GetName().Name;
- Log.LogMessage(" ver: {0}", AssemblyInformationalVersion);
- return true;
- }
- catch (Exception ex) {
- Log.LogErrorFromException(ex);
- return false;
- }
- ]]>
-
-
-
diff --git a/Source/.nuget/packages.config b/Source/.nuget/packages.config
index 7025a729de..6b8deb9c96 100644
--- a/Source/.nuget/packages.config
+++ b/Source/.nuget/packages.config
@@ -1,4 +1,3 @@
-
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/.gitattributes b/Source/Addins/Eto.Addin.VisualStudio/.gitattributes
new file mode 100644
index 0000000000..96041c6ee3
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/.gitattributes
@@ -0,0 +1,3 @@
+*.cs eol=crlf
+*.csproj eol=crlf
+*.vstemplate eol=crlf
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.sln b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.sln
new file mode 100644
index 0000000000..da126375b3
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.sln
@@ -0,0 +1,76 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2013
+VisualStudioVersion = 12.0.30723.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Addin.VisualStudio", "Eto.Addin.VisualStudio\Eto.Addin.VisualStudio.csproj", "{4A50E311-097A-403F-BEE5-8A4EC3A8230B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.PCL.Combined", "Eto.PCL.Combined\Eto.PCL.Combined.csproj", "{6DFD6441-5A61-4376-9D95-B1C5A3E3B5F4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.PCL.Separate", "Eto.PCL.Separate\Eto.PCL.Separate.csproj", "{165F3320-D5D6-477E-8CEA-96C5D44B2CA7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.VisualStudioTemplates", "Eto.VisualStudioTemplates\Eto.VisualStudioTemplates.csproj", "{64060642-4897-4645-85D4-547EFA4C4FC2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.SAL.Combined", "Eto.SAL.Combined\Eto.SAL.Combined.csproj", "{DF219523-46E9-497C-A24C-3BAE40D6B41B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.SAL.Separate", "Eto.SAL.Separate\Eto.SAL.Separate.csproj", "{C670014C-BAE0-4608-A52F-CDBDC617EB80}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Library", "Eto.Library\Eto.Library.csproj", "{C2B7F6AC-A8C3-4338-874B-906BB61E3162}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.File.Form", "Eto.File.Form\Eto.File.Form.csproj", "{9F943483-CFEC-489A-AB1C-91659B63EFB8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.File.Dialog", "Eto.File.Dialog\Eto.File.Dialog.csproj", "{28F3D96A-A688-4172-B9E5-4CD3129A9BA1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.File.Panel", "Eto.File.Panel\Eto.File.Panel.csproj", "{77F0EC4C-6CD7-415E-8F3D-D55D17C219A4}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {4A50E311-097A-403F-BEE5-8A4EC3A8230B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4A50E311-097A-403F-BEE5-8A4EC3A8230B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4A50E311-097A-403F-BEE5-8A4EC3A8230B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4A50E311-097A-403F-BEE5-8A4EC3A8230B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6DFD6441-5A61-4376-9D95-B1C5A3E3B5F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6DFD6441-5A61-4376-9D95-B1C5A3E3B5F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6DFD6441-5A61-4376-9D95-B1C5A3E3B5F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6DFD6441-5A61-4376-9D95-B1C5A3E3B5F4}.Release|Any CPU.Build.0 = Release|Any CPU
+ {165F3320-D5D6-477E-8CEA-96C5D44B2CA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {165F3320-D5D6-477E-8CEA-96C5D44B2CA7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {165F3320-D5D6-477E-8CEA-96C5D44B2CA7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {165F3320-D5D6-477E-8CEA-96C5D44B2CA7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {64060642-4897-4645-85D4-547EFA4C4FC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {64060642-4897-4645-85D4-547EFA4C4FC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {64060642-4897-4645-85D4-547EFA4C4FC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {64060642-4897-4645-85D4-547EFA4C4FC2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {DF219523-46E9-497C-A24C-3BAE40D6B41B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {DF219523-46E9-497C-A24C-3BAE40D6B41B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {DF219523-46E9-497C-A24C-3BAE40D6B41B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {DF219523-46E9-497C-A24C-3BAE40D6B41B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C670014C-BAE0-4608-A52F-CDBDC617EB80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C670014C-BAE0-4608-A52F-CDBDC617EB80}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C670014C-BAE0-4608-A52F-CDBDC617EB80}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C670014C-BAE0-4608-A52F-CDBDC617EB80}.Release|Any CPU.Build.0 = Release|Any CPU
+ {C2B7F6AC-A8C3-4338-874B-906BB61E3162}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {C2B7F6AC-A8C3-4338-874B-906BB61E3162}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {C2B7F6AC-A8C3-4338-874B-906BB61E3162}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {C2B7F6AC-A8C3-4338-874B-906BB61E3162}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9F943483-CFEC-489A-AB1C-91659B63EFB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9F943483-CFEC-489A-AB1C-91659B63EFB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9F943483-CFEC-489A-AB1C-91659B63EFB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9F943483-CFEC-489A-AB1C-91659B63EFB8}.Release|Any CPU.Build.0 = Release|Any CPU
+ {28F3D96A-A688-4172-B9E5-4CD3129A9BA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {28F3D96A-A688-4172-B9E5-4CD3129A9BA1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {28F3D96A-A688-4172-B9E5-4CD3129A9BA1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {28F3D96A-A688-4172-B9E5-4CD3129A9BA1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {77F0EC4C-6CD7-415E-8F3D-D55D17C219A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {77F0EC4C-6CD7-415E-8F3D-D55D17C219A4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {77F0EC4C-6CD7-415E-8F3D-D55D17C219A4}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {77F0EC4C-6CD7-415E-8F3D-D55D17C219A4}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.csproj
new file mode 100644
index 0000000000..7c3a7f4066
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.csproj
@@ -0,0 +1,167 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ 2.0
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {4A50E311-097A-403F-BEE5-8A4EC3A8230B}
+ Library
+ Properties
+ Eto.Addin.VisualStudio
+ Eto.Addin.VisualStudio
+ v4.5
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ ..\..\..\..\BuildOutput\Addins\Debug\VisualStudio\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ ..\..\..\..\BuildOutput\Addins\Release\VisualStudio\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+ Packages\%(Filename)%(Extension)
+ true
+
+
+ Designer
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ {28F3D96A-A688-4172-B9E5-4CD3129A9BA1}
+ Eto.File.Dialog
+ ItemTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {9F943483-CFEC-489A-AB1C-91659B63EFB8}
+ Eto.File.Form
+ ItemTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {77F0EC4C-6CD7-415E-8F3D-D55D17C219A4}
+ Eto.File.Panel
+ ItemTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {C2B7F6AC-A8C3-4338-874B-906BB61E3162}
+ Eto.Library
+ ProjectTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {165F3320-D5D6-477E-8CEA-96C5D44B2CA7}
+ Eto.PCL.Separate
+ ProjectTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {6DFD6441-5A61-4376-9D95-B1C5A3E3B5F4}
+ Eto.PCL.Combined
+ ProjectTemplates
+ TemplateProjectOutputGroup%3b
+ false
+
+
+ {DF219523-46E9-497C-A24C-3BAE40D6B41B}
+ Eto.SAL.Combined
+ ProjectTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {C670014C-BAE0-4608-A52F-CDBDC617EB80}
+ Eto.SAL.Separate
+ ProjectTemplates
+ false
+ TemplateProjectOutputGroup%3b
+
+
+ {64060642-4897-4645-85D4-547EFA4C4FC2}
+ Eto.VisualStudioTemplates
+ ProjectTemplates
+ BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+ DebugSymbolsProjectOutputGroup%3b
+ False
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.csproj.user b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.csproj.user
new file mode 100644
index 0000000000..0d97e2f834
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio.csproj.user
@@ -0,0 +1,20 @@
+
+
+
+ ProjectFiles
+
+
+ Program
+ C:\Program Files %28x86%29\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe
+ /rootsuffix Exp
+
+
+
+
+ Program
+ C:\Program Files %28x86%29\Microsoft Visual Studio 12.0\Common7\IDE\devenv.exe
+ /rootsuffix Exp
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..a7fd0c5ade
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+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("Eto.VisualStudio")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.VisualStudio")]
+[assembly: AssemblyCopyright("")]
+[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)]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/source.extension.vsixmanifest b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/source.extension.vsixmanifest
new file mode 100644
index 0000000000..17135a7e76
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Addin.VisualStudio/source.extension.vsixmanifest
@@ -0,0 +1,27 @@
+
+
+
+
+ Eto.Forms Visual Studio Addin
+ Eto.Forms Support for Visual Studio. Eto.Forms is a cross platform GUI framework for desktop and mobile applications in .NET that can target Wpf, WinForms, Direct2D, MonoMac, Xamarin.Mac, Gtk2, Gtk3, and iOS with a single set of code.
+ https://github.com/picoe/Eto
+ eto wpf mac osx gtk xamarin mono
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto-Dialog.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto-Dialog.cs
new file mode 100644
index 0000000000..0a1300b3b7
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto-Dialog.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $rootnamespace$
+{
+ public class $safeitemname$ : Dialog
+ {
+ public $safeitemname$()
+ {
+ Title = "My $itemname$ dialog";
+
+ // buttons
+ DefaultButton = new Button { Text = "OK" };
+
+ AbortButton = new Button { Text = "C&ancel" };
+ AbortButton.Click += (sender, e) => Close();
+
+ var buttons = new TableLayout { Rows = { new TableRow(null, DefaultButton, AbortButton) }, Spacing = new Size(5, 5) };
+
+ Content = new TableLayout
+ {
+ Padding = new Padding(10),
+ Rows =
+ {
+ new Label { Text = "Some content" },
+ buttons
+ }
+ };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.csproj
new file mode 100644
index 0000000000..d96bcfda17
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.csproj
@@ -0,0 +1,114 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {28F3D96A-A688-4172-B9E5-4CD3129A9BA1}
+ Library
+ Properties
+ Eto.File.Dialog
+ Eto.File.Dialog
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.vstemplate
new file mode 100644
index 0000000000..61c1f4a794
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Eto.File.Dialog.vstemplate
@@ -0,0 +1,24 @@
+
+
+
+ Eto.Forms Modal Dialog
+
+
+
+ Eto.File.Dialog.ico
+ 2a8fde10-1d14-4271-a661-44105733faa8
+ CSharp
+ CSharp + MultiTarget
+ 4.0
+ 1
+ EtoDialog.cs
+
+
+
+
+ System
+
+
+ Eto-Dialog.cs
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..5a52499102
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Dialog/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.File.Dialog")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.File.Dialog")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("7f98d1bb-fbd2-4760-ad0e-e178993a62ba")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto-Form.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto-Form.cs
new file mode 100644
index 0000000000..c9d0e1c3a9
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto-Form.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $rootnamespace$
+{
+ public class $safeitemname$ : Form
+ {
+ public $safeitemname$()
+ {
+ Title = "My $itemname$ form";
+
+ Content = new Label { Text = "Some content" };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.csproj
new file mode 100644
index 0000000000..0ba11da5b3
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.csproj
@@ -0,0 +1,114 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {9F943483-CFEC-489A-AB1C-91659B63EFB8}
+ Library
+ Properties
+ Eto.File.Form
+ Eto.File.Form
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.vstemplate
new file mode 100644
index 0000000000..9463855613
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Eto.File.Form.vstemplate
@@ -0,0 +1,24 @@
+
+
+
+ Eto.Forms Modeless Form
+
+
+
+ Eto.File.Form.ico
+ 3ff2b395-1bdf-4197-8bd0-7d37feb93584
+ CSharp
+ CSharp + MultiTarget
+ 4.0
+ 1
+ EtoForm.cs
+
+
+
+
+ System
+
+
+ Eto-Form.cs
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..672440922d
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Form/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.File.Form")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.File.Form")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("a85aff48-6ebd-4c7e-98e4-c15371d0df6a")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto-Panel.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto-Panel.cs
new file mode 100644
index 0000000000..110902e9b7
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto-Panel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $rootnamespace$
+{
+ public class $safeitemname$ : Panel
+ {
+ public $safeitemname$()
+ {
+ Content = new Label { Text = "Some Content" };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.csproj
new file mode 100644
index 0000000000..5c7d7cf39a
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.csproj
@@ -0,0 +1,114 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {77F0EC4C-6CD7-415E-8F3D-D55D17C219A4}
+ Library
+ Properties
+ Eto.File.Panel
+ Eto.File.Panel
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.vstemplate
new file mode 100644
index 0000000000..8f994394fc
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Eto.File.Panel.vstemplate
@@ -0,0 +1,24 @@
+
+
+
+ Eto.Forms Custom Panel
+
+
+
+ Eto.File.Panel.ico
+ a6a67004-a348-4f86-95db-3ec5260a7c29
+ CSharp
+ CSharp + MultiTarget
+ 2.0
+ 1
+ EtoPanel.cs
+
+
+
+
+ System
+
+
+ Eto-Panel.cs
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..6a1bcfd1a9
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.File.Panel/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.File.Panel")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.File.Panel")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("cf7c674e-de19-41d5-83c2-9fcc0e16cdde")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Class.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Class.cs
new file mode 100644
index 0000000000..2ef7b003e8
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Class.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
+$endif$using System.Text;
+
+namespace $rootnamespace$
+{
+ class $safeitemrootname$
+ {
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.csproj
new file mode 100644
index 0000000000..3dff28fded
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.csproj
@@ -0,0 +1,80 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ 997874de-aeb3-487c-aa9b-86507f53a7f2
+ Library
+ Properties
+ Eto.Files
+ Eto.Files
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.vstemplate
new file mode 100644
index 0000000000..528679f427
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Eto.Files.vstemplate
@@ -0,0 +1,21 @@
+
+
+
+ Eto.Files
+ Eto.Files
+ Eto.Files.ico
+ 1a8a6408-926e-4c42-aae7-2b706aef6695
+ CSharp
+ 2.0
+ 1
+ Class.cs
+
+
+
+
+ System
+
+
+ Class.cs
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..b24c6bcda4
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Files/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.Files")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.Files")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("997874de-aeb3-487c-aa9b-86507f53a7f2")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/AssemblyInfo.cs
new file mode 100644
index 0000000000..1d2eb4428c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("$safeprojectname$")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("$registeredorganization$")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.csproj
new file mode 100644
index 0000000000..f6d5bb4db0
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.csproj
@@ -0,0 +1,118 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {C2B7F6AC-A8C3-4338-874B-906BB61E3162}
+ Library
+ Properties
+ Eto.Library
+ Eto.Library
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.vstemplate
new file mode 100644
index 0000000000..d5536e0e9b
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.Library.vstemplate
@@ -0,0 +1,32 @@
+
+
+
+ Eto.Forms Library (portable)
+ A portable library project to build Eto.Forms UI and logic.
+ Eto.Library.ico
+ CSharp
+ 4.0
+ 1000
+ 187e19a3-8db1-4f37-9aa7-6cf1a3f5c985
+ true
+ EtoLibrary
+ true
+
+
+
+ MyPanel.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.csproj
new file mode 100644
index 0000000000..7c2b87c505
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Eto.csproj
@@ -0,0 +1,35 @@
+
+
+
+ Debug
+ AnyCPU
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {$guid1$}
+ Library
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+ Profile259
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/MyPanel.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/MyPanel.cs
new file mode 100644
index 0000000000..1dbf4882f2
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/MyPanel.cs
@@ -0,0 +1,18 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $safeprojectname$
+{
+ ///
+ /// A custom panel
+ ///
+ public class MyPanel : Panel
+ {
+ public MyPanel()
+ {
+ // set your content and other properties here
+ Content = new Label { Text = "Some Content" };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..3de52484b2
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.Library/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.Library")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.Library")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("d5b42fd2-769f-4c9b-8bb8-1c5e8ef72bab")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/AssemblyInfo.cs
new file mode 100644
index 0000000000..1d2eb4428c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("$safeprojectname$")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("$registeredorganization$")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Eto.Desktop.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Eto.Desktop.csproj
new file mode 100644
index 0000000000..b460d34c4b
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Eto.Desktop.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Debug
+ x86
+ {$guid2$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+ {$root.guid1$}
+ $root.safeprojectname$
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Eto.Desktop.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Eto.Desktop.vstemplate
new file mode 100644
index 0000000000..77a635976f
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Eto.Desktop.vstemplate
@@ -0,0 +1,37 @@
+
+
+ Eto.Desktop
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Program.cs
new file mode 100644
index 0000000000..eb119d6a3d
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.Desktop/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platform.Detect).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.csproj
new file mode 100644
index 0000000000..00f6b5289e
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.csproj
@@ -0,0 +1,131 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {6DFD6441-5A61-4376-9D95-B1C5A3E3B5F4}
+ Library
+ Properties
+ Eto.PCL.Shared
+ Eto.PCL.Shared
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+ False
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.vstemplate
new file mode 100644
index 0000000000..b5c0efbd7e
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto.PCL.Combined.vstemplate
@@ -0,0 +1,43 @@
+
+
+
+ Eto.Forms App (portable, combined platforms)
+
+
+
+ Eto.PCL.Combined.ico
+ CSharp
+ 4.0
+ 1000
+ a1848891-012f-4b0c-9917-eaf183fcb6b1
+ true
+ EtoApp
+ true
+ 1
+
+
+ AssemblyInfo.cs
+ Eto\Eto.vstemplate
+ Eto\Eto.csproj
+ Eto\MainForm.cs
+ Eto.Desktop\Eto.Desktop.vstemplate
+ Eto.Desktop\Eto.Desktop.csproj
+ Eto.Desktop\Program.cs
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.RootWizard
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.MultiProjectWizard
+
+
+
+ Eto\Eto.vstemplate
+ Eto.Desktop\Eto.Desktop.vstemplate
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/Eto.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/Eto.csproj
new file mode 100644
index 0000000000..b216ac059c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/Eto.csproj
@@ -0,0 +1,35 @@
+
+
+
+ Debug
+ AnyCPU
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {$root.guid1$}
+ Library
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+ Profile259
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/Eto.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/Eto.vstemplate
new file mode 100644
index 0000000000..cf4b561844
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/Eto.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto
+
+ CSharp
+
+
+ 1000
+
+
+
+
+ MainForm.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/MainForm.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/MainForm.cs
new file mode 100644
index 0000000000..606ab59839
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Eto/MainForm.cs
@@ -0,0 +1,62 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $safeprojectname$
+{
+ ///
+ /// Your application's main form
+ ///
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Title = "My Eto Form";
+ ClientSize = new Size(400, 350);
+
+ // scrollable region as the main content
+ Content = new Scrollable
+ {
+ // table with three rows
+ Content = new TableLayout(
+ null,
+ // row with three columns
+ new TableRow(null, new Label { Text = "Hello World!" }, null),
+ null
+ )
+ };
+
+ // create a few commands that can be used for the menu and toolbar
+ var clickMe = new Command { MenuText = "Click Me!", ToolBarText = "Click Me!" };
+ clickMe.Executed += (sender, e) => MessageBox.Show(this, "I was clicked!");
+
+ var quitCommand = new Command { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q };
+ quitCommand.Executed += (sender, e) => Application.Instance.Quit();
+
+ var aboutCommand = new Command { MenuText = "About..." };
+ aboutCommand.Executed += (sender, e) => MessageBox.Show(this, "About my app...");
+
+ // create menu
+ Menu = new MenuBar
+ {
+ Items =
+ {
+ // File submenu
+ new ButtonMenuItem { Text = "&File", Items = { clickMe } },
+ // new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } },
+ // new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } },
+ },
+ ApplicationItems =
+ {
+ // application (OS X) or file menu (others)
+ new ButtonMenuItem { Text = "&Preferences..." },
+ },
+ QuitItem = quitCommand,
+ AboutItem = aboutCommand
+ };
+
+ // create toolbar
+ ToolBar = new ToolBar { Items = { clickMe } };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..a9f8e82ea2
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Combined/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.PCL.Combined")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.PCL.Combined")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("add24157-e2fb-4fea-8b79-c5a886e1d92a")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/AssemblyInfo.cs
new file mode 100644
index 0000000000..1d2eb4428c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("$safeprojectname$")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("$registeredorganization$")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Eto.Gtk2.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Eto.Gtk2.csproj
new file mode 100644
index 0000000000..b460d34c4b
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Eto.Gtk2.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Debug
+ x86
+ {$guid2$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+ {$root.guid1$}
+ $root.safeprojectname$
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Eto.Gtk2.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Eto.Gtk2.vstemplate
new file mode 100644
index 0000000000..2e9c4af165
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Eto.Gtk2.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.Gtk2
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Program.cs
new file mode 100644
index 0000000000..3665b70371
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk2/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Gtk2).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Eto.Gtk3.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Eto.Gtk3.csproj
new file mode 100644
index 0000000000..11b5b1d96e
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Eto.Gtk3.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Debug
+ x86
+ {$guid3$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+ {$root.guid1$}
+ $root.safeprojectname$
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Eto.Gtk3.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Eto.Gtk3.vstemplate
new file mode 100644
index 0000000000..5c4869a1f1
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Eto.Gtk3.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.Gtk3
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Program.cs
new file mode 100644
index 0000000000..eac2471c34
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Gtk3/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Gtk3).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Eto.Mac.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Eto.Mac.csproj
new file mode 100644
index 0000000000..957a8a8ee1
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Eto.Mac.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Debug
+ AnyCPU
+ $globalguid1$
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+ {$root.guid1$}
+ $root.safeprojectname$
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Eto.Mac.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Eto.Mac.vstemplate
new file mode 100644
index 0000000000..3161831c18
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Eto.Mac.vstemplate
@@ -0,0 +1,33 @@
+
+
+ Eto.Mac
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Program.cs
new file mode 100644
index 0000000000..28f41cab6a
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Mac/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Mac).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.csproj
new file mode 100644
index 0000000000..07f0b18697
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.csproj
@@ -0,0 +1,144 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {165F3320-D5D6-477E-8CEA-96C5D44B2CA7}
+ Library
+ Properties
+ Eto.PCL.Separate
+ Eto.PCL.Separate
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.vstemplate
new file mode 100644
index 0000000000..f0adfe0c23
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.PCL.Separate.vstemplate
@@ -0,0 +1,63 @@
+
+
+
+ Eto.Forms App (portable, separate platforms)
+
+
+
+ Eto.PCL.Separate.ico
+ CSharp
+ 4.0
+ 1000
+ 8af0b680-f3ff-4094-92cb-a91c45a4d7fe
+ EtoApp
+ true
+ true
+ 1
+
+
+ AssemblyInfo.cs
+ Eto\Eto.vstemplate
+ Eto\Eto.csproj
+ Eto\MainForm.cs
+ Eto.Gtk2\Eto.Gtk2.vstemplate
+ Eto.Gtk2\Eto.Gtk2.csproj
+ Eto.Gtk2\Program.cs
+ Eto.Gtk3\Eto.Gtk3.vstemplate
+ Eto.Gtk3\Eto.Gtk3.csproj
+ Eto.Gtk3\Program.cs
+ Eto.Wpf\Eto.Wpf.vstemplate
+ Eto.Wpf\Eto.Wpf.csproj
+ Eto.Wpf\Program.cs
+ Eto.WinForms\Eto.WinForms.vstemplate
+ Eto.WinForms\Eto.WinForms.csproj
+ Eto.WinForms\Program.cs
+ Eto.Mac\Eto.Mac.vstemplate
+ Eto.Mac\Eto.Mac.csproj
+ Eto.Mac\Program.cs
+ Eto.XamMac2\Eto.XamMac2.vstemplate
+ Eto.XamMac2\Eto.XamMac2.csproj
+ Eto.XamMac2\Program.cs
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.RootWizard
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.MultiProjectWizard
+
+
+
+ Eto\Eto.vstemplate
+ Eto.Gtk2\Eto.Gtk2.vstemplate
+ Eto.Gtk3\Eto.Gtk3.vstemplate
+ Eto.Wpf\Eto.Wpf.vstemplate
+ Eto.WinForms\Eto.WinForms.vstemplate
+ Eto.Mac\Eto.Mac.vstemplate
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Eto.WinForms.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Eto.WinForms.csproj
new file mode 100644
index 0000000000..833fdd38af
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Eto.WinForms.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Debug
+ x86
+ $guid5$
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+ {$root.guid1$}
+ $root.safeprojectname$
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Eto.WinForms.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Eto.WinForms.vstemplate
new file mode 100644
index 0000000000..a7e4089b62
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Eto.WinForms.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.WinForms
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Program.cs
new file mode 100644
index 0000000000..2e39b20e91
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.WinForms/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.WinForms).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Eto.Wpf.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Eto.Wpf.csproj
new file mode 100644
index 0000000000..46b0c347af
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Eto.Wpf.csproj
@@ -0,0 +1,45 @@
+
+
+
+ Debug
+ x86
+ $guid6$
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+ {$root.guid1$}
+ $root.safeprojectname$
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Eto.Wpf.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Eto.Wpf.vstemplate
new file mode 100644
index 0000000000..f6f606c774
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Eto.Wpf.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.Wpf
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Program.cs
new file mode 100644
index 0000000000..8fc871268c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.Wpf/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Wpf).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Eto.XamMac2.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Eto.XamMac2.csproj
new file mode 100644
index 0000000000..4c79eda360
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Eto.XamMac2.csproj
@@ -0,0 +1,80 @@
+
+
+
+ Debug
+ AnyCPU
+ {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ $guid7$
+ Exe
+ $safeprojectname$
+ $safeprojectname$
+ Resources
+ v2.0
+ Xamarin.Mac
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+ false
+ false
+ Mac Developer
+ false
+ false
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ SdkOnly
+ false
+ true
+ false
+ Developer ID Application
+ true
+ true
+
+
+ full
+ true
+ bin\AppStore
+ prompt
+ 4
+ SdkOnly
+ false
+ true
+ 3rd Party Mac Developer Installer
+ true
+ 3rd Party Mac Developer Application
+ true
+ true
+
+
+
+
+
+
+
+ {$root.guid1$}
+ $root.safeprojectname$
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Eto.XamMac2.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Eto.XamMac2.vstemplate
new file mode 100644
index 0000000000..95db75aa03
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Eto.XamMac2.vstemplate
@@ -0,0 +1,33 @@
+
+
+ Eto.XamMac2
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+ Info.plist
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Info.plist b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Info.plist
new file mode 100644
index 0000000000..4715e66d08
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Info.plist
@@ -0,0 +1,19 @@
+
+
+
+
+ CFBundleIconFile
+ TestIcon.icns
+ CFBundleIdentifier
+ com.yourcompany.$safeprojectname$
+ CFBundleName
+ $safeprojectname$
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ 10.6
+ NSPrincipalClass
+ NSApplication
+
+
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Program.cs
new file mode 100644
index 0000000000..b20c3d62dd
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto.XamMac2/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.XamMac2).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/Eto.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/Eto.csproj
new file mode 100644
index 0000000000..b216ac059c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/Eto.csproj
@@ -0,0 +1,35 @@
+
+
+
+ Debug
+ AnyCPU
+ {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {$root.guid1$}
+ Library
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+ Profile259
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/Eto.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/Eto.vstemplate
new file mode 100644
index 0000000000..cf4b561844
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/Eto.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto
+
+ CSharp
+
+
+ 1000
+
+
+
+
+ MainForm.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/MainForm.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/MainForm.cs
new file mode 100644
index 0000000000..bbc1bcd4e0
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Eto/MainForm.cs
@@ -0,0 +1,62 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $safeprojectname$
+{
+ ///
+ /// Your application's main form
+ ///
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Title = "My Eto Form";
+ ClientSize = new Size(400, 350);
+
+ // scrollable region as the main content
+ Content = new Scrollable
+ {
+ // table with three rows
+ Content = new TableLayout(
+ null,
+ // row with three columns
+ new TableRow(null, new Label { Text = "Hello World!" }, null),
+ null
+ )
+ };
+
+ // create a few commands that can be used for the menu and toolbar
+ var clickMe = new Command { MenuText = "Click Me!", ToolBarText = "Click Me!" };
+ clickMe.Executed += (sender, e) => MessageBox.Show(this, "I was clicked!");
+
+ var quitCommand = new Command { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q };
+ quitCommand.Executed += (sender, e) => Application.Instance.Quit();
+
+ var aboutCommand = new Command { MenuText = "About..." };
+ aboutCommand.Executed += (sender, e) => MessageBox.Show(this, "About my app...");
+
+ // create menu
+ Menu = new MenuBar
+ {
+ Items =
+ {
+ // File submenu
+ new ButtonMenuItem { Text = "&File", Items = { clickMe } },
+ // new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } },
+ // new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } },
+ },
+ ApplicationItems =
+ {
+ // application (OS X) or file menu (others)
+ new ButtonMenuItem { Text = "&Preferences..." },
+ },
+ QuitItem = quitCommand,
+ AboutItem = aboutCommand
+ };
+
+ // create toolbar
+ ToolBar = new ToolBar { Items = { clickMe } };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..c81b972663
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.PCL.Separate/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.PCL.Separate")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.PCL.Separate")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("add24157-e2fb-4fea-8b79-c5a886e1d92a")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/AssemblyInfo.cs
new file mode 100644
index 0000000000..1d2eb4428c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("$safeprojectname$")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("$registeredorganization$")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Eto.Desktop.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Eto.Desktop.csproj
new file mode 100644
index 0000000000..2503b349cd
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Eto.Desktop.csproj
@@ -0,0 +1,40 @@
+
+
+
+ Debug
+ x86
+ $guid2$
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Eto.Desktop.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Eto.Desktop.vstemplate
new file mode 100644
index 0000000000..77a635976f
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Eto.Desktop.vstemplate
@@ -0,0 +1,37 @@
+
+
+ Eto.Desktop
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Program.cs
new file mode 100644
index 0000000000..eb119d6a3d
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.Desktop/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platform.Detect).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.csproj
new file mode 100644
index 0000000000..3c02272dce
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.csproj
@@ -0,0 +1,129 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {DF219523-46E9-497C-A24C-3BAE40D6B41B}
+ Library
+ Properties
+ Eto.SAL.Combined
+ Eto.SAL.Combined
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.vstemplate
new file mode 100644
index 0000000000..8ab13252c4
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto.SAL.Combined.vstemplate
@@ -0,0 +1,44 @@
+
+
+
+ Eto.Forms App (shared, combined platforms)
+
+
+
+ Eto.SAL.Combined.ico
+ CSharp
+ 4.0
+ 1000
+ ab894672-fec4-431e-b55a-f578a8d41ced
+ true
+ EtoApp
+ true
+ 1
+
+
+ AssemblyInfo.cs
+ Eto\Eto.vstemplate
+ Eto\Eto.shproj
+ Eto\Eto.projitems
+ Eto\MainForm.cs
+ Eto.Desktop\Eto.Desktop.vstemplate
+ Eto.Desktop\Eto.Desktop.csproj
+ Eto.Desktop\Program.cs
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.RootWizard
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.MultiProjectWizard
+
+
+
+ Eto\Eto.vstemplate
+ Eto.Desktop\Eto.Desktop.vstemplate
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.projitems b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.projitems
new file mode 100644
index 0000000000..aaf3b3adee
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.projitems
@@ -0,0 +1,14 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ {$root.guid1$}
+
+
+ $safeprojectname$
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.shproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.shproj
new file mode 100644
index 0000000000..22611b3980
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.shproj
@@ -0,0 +1,12 @@
+
+
+
+ {$root.guid1$}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.vstemplate
new file mode 100644
index 0000000000..a3f28714d3
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/Eto.vstemplate
@@ -0,0 +1,22 @@
+
+
+ Eto
+
+ CSharp
+
+
+ 1000
+
+ true
+
+
+
+ Eto.projitems
+ MainForm.cs
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/MainForm.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/MainForm.cs
new file mode 100644
index 0000000000..bbc1bcd4e0
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Eto/MainForm.cs
@@ -0,0 +1,62 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $safeprojectname$
+{
+ ///
+ /// Your application's main form
+ ///
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Title = "My Eto Form";
+ ClientSize = new Size(400, 350);
+
+ // scrollable region as the main content
+ Content = new Scrollable
+ {
+ // table with three rows
+ Content = new TableLayout(
+ null,
+ // row with three columns
+ new TableRow(null, new Label { Text = "Hello World!" }, null),
+ null
+ )
+ };
+
+ // create a few commands that can be used for the menu and toolbar
+ var clickMe = new Command { MenuText = "Click Me!", ToolBarText = "Click Me!" };
+ clickMe.Executed += (sender, e) => MessageBox.Show(this, "I was clicked!");
+
+ var quitCommand = new Command { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q };
+ quitCommand.Executed += (sender, e) => Application.Instance.Quit();
+
+ var aboutCommand = new Command { MenuText = "About..." };
+ aboutCommand.Executed += (sender, e) => MessageBox.Show(this, "About my app...");
+
+ // create menu
+ Menu = new MenuBar
+ {
+ Items =
+ {
+ // File submenu
+ new ButtonMenuItem { Text = "&File", Items = { clickMe } },
+ // new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } },
+ // new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } },
+ },
+ ApplicationItems =
+ {
+ // application (OS X) or file menu (others)
+ new ButtonMenuItem { Text = "&Preferences..." },
+ },
+ QuitItem = quitCommand,
+ AboutItem = aboutCommand
+ };
+
+ // create toolbar
+ ToolBar = new ToolBar { Items = { clickMe } };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..b46761a915
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Combined/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.SAL.Combined")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.SAL.Combined")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("5183bea5-b186-4e0f-b8ce-5664d068295e")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/AssemblyInfo.cs
new file mode 100644
index 0000000000..1d2eb4428c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("$safeprojectname$")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("$registeredorganization$")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Copyright © $registeredorganization$ $year$")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Eto.Gtk2.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Eto.Gtk2.csproj
new file mode 100644
index 0000000000..6d9128c152
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Eto.Gtk2.csproj
@@ -0,0 +1,40 @@
+
+
+
+ Debug
+ x86
+ {$guid2$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Eto.Gtk2.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Eto.Gtk2.vstemplate
new file mode 100644
index 0000000000..2e9c4af165
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Eto.Gtk2.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.Gtk2
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Program.cs
new file mode 100644
index 0000000000..3665b70371
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk2/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Gtk2).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Eto.Gtk3.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Eto.Gtk3.csproj
new file mode 100644
index 0000000000..de1d21f9b3
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Eto.Gtk3.csproj
@@ -0,0 +1,40 @@
+
+
+
+ Debug
+ x86
+ {$guid3$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Eto.Gtk3.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Eto.Gtk3.vstemplate
new file mode 100644
index 0000000000..5c4869a1f1
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Eto.Gtk3.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.Gtk3
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Program.cs
new file mode 100644
index 0000000000..eac2471c34
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Gtk3/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Gtk3).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Eto.Mac.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Eto.Mac.csproj
new file mode 100644
index 0000000000..abcbdcb962
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Eto.Mac.csproj
@@ -0,0 +1,40 @@
+
+
+
+ Debug
+ AnyCPU
+ {$guid4$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Eto.Mac.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Eto.Mac.vstemplate
new file mode 100644
index 0000000000..3161831c18
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Eto.Mac.vstemplate
@@ -0,0 +1,33 @@
+
+
+ Eto.Mac
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Program.cs
new file mode 100644
index 0000000000..28f41cab6a
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Mac/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Mac).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.csproj
new file mode 100644
index 0000000000..f687cb0d0c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.csproj
@@ -0,0 +1,145 @@
+
+
+
+ 12.0
+ 11.0
+ $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
+
+
+ 12.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+
+ Debug
+ AnyCPU
+ {82b43b9b-a64c-4715-b499-d71e9ca2bd60};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {C670014C-BAE0-4608-A52F-CDBDC617EB80}
+ Library
+ Properties
+ Eto.SAL.Separate
+ Eto.SAL.Separate
+ v4.5
+ 512
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+ false
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Eto.Forms
+
+
+
+
+ False
+ Microsoft .NET Framework 4.5 %28x86 and x64%29
+ true
+
+
+ False
+ .NET Framework 3.5 SP1 Client Profile
+ false
+
+
+ False
+ .NET Framework 3.5 SP1
+ false
+
+
+
+
+ Designer
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.ico b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.ico
new file mode 100644
index 0000000000..7d638b1d60
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.ico differ
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.vstemplate
new file mode 100644
index 0000000000..6865825222
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.SAL.Separate.vstemplate
@@ -0,0 +1,64 @@
+
+
+
+ Eto.Forms App (shared, separate platforms)
+
+
+
+ Eto.SAL.Separate.ico
+ CSharp
+ 4.0
+ 1000
+ 653fba3d-cf63-4fab-9d86-b6b765b32aab
+ true
+ EtoApp
+ true
+ 1
+
+
+ AssemblyInfo.cs
+ Eto\Eto.vstemplate
+ Eto\Eto.shproj
+ Eto\Eto.projitems
+ Eto\MainForm.cs
+ Eto.Gtk2\Eto.Gtk2.vstemplate
+ Eto.Gtk2\Eto.Gtk2.csproj
+ Eto.Gtk2\Program.cs
+ Eto.Gtk3\Eto.Gtk3.vstemplate
+ Eto.Gtk3\Eto.Gtk3.csproj
+ Eto.Gtk3\Program.cs
+ Eto.Wpf\Eto.Wpf.vstemplate
+ Eto.Wpf\Eto.Wpf.csproj
+ Eto.Wpf\Program.cs
+ Eto.WinForms\Eto.WinForms.vstemplate
+ Eto.WinForms\Eto.WinForms.csproj
+ Eto.WinForms\Program.cs
+ Eto.Mac\Eto.Mac.vstemplate
+ Eto.Mac\Eto.Mac.csproj
+ Eto.Mac\Program.cs
+ Eto.XamMac2\Eto.XamMac2.vstemplate
+ Eto.XamMac2\Eto.XamMac2.csproj
+ Eto.XamMac2\Program.cs
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.RootWizard
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.MultiProjectWizard
+
+
+
+ Eto\Eto.vstemplate
+ Eto.Gtk2\Eto.Gtk2.vstemplate
+ Eto.Gtk3\Eto.Gtk3.vstemplate
+ Eto.Wpf\Eto.Wpf.vstemplate
+ Eto.WinForms\Eto.WinForms.vstemplate
+ Eto.Mac\Eto.Mac.vstemplate
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Eto.WinForms.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Eto.WinForms.csproj
new file mode 100644
index 0000000000..bbd6ebf7d7
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Eto.WinForms.csproj
@@ -0,0 +1,40 @@
+
+
+
+ Debug
+ x86
+ {$guid5$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Eto.WinForms.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Eto.WinForms.vstemplate
new file mode 100644
index 0000000000..a7e4089b62
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Eto.WinForms.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.WinForms
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Program.cs
new file mode 100644
index 0000000000..2e39b20e91
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.WinForms/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.WinForms).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Eto.Wpf.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Eto.Wpf.csproj
new file mode 100644
index 0000000000..ec65b8f265
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Eto.Wpf.csproj
@@ -0,0 +1,40 @@
+
+
+
+ Debug
+ x86
+ {$guid6$}
+ WinExe
+ $safeprojectname$
+ $safeprojectname$
+ v4.5
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ x86
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ x86
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Eto.Wpf.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Eto.Wpf.vstemplate
new file mode 100644
index 0000000000..f6f606c774
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Eto.Wpf.vstemplate
@@ -0,0 +1,32 @@
+
+
+ Eto.Wpf
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Program.cs
new file mode 100644
index 0000000000..8fc871268c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.Wpf/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.Wpf).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Eto.XamMac2.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Eto.XamMac2.csproj
new file mode 100644
index 0000000000..f1cec8d184
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Eto.XamMac2.csproj
@@ -0,0 +1,75 @@
+
+
+
+ Debug
+ AnyCPU
+ {A3F8F2AB-B479-4A4A-A458-A89E7DC349F1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {$guid7$}
+ Exe
+ $safeprojectname$
+ $safeprojectname$
+ Resources
+ v2.0
+ Xamarin.Mac
+
+
+ true
+ full
+ false
+ bin\Debug
+ DEBUG;
+ prompt
+ 4
+ false
+ false
+ false
+ Mac Developer
+ false
+ false
+
+
+ full
+ true
+ bin\Release
+ prompt
+ 4
+ SdkOnly
+ false
+ true
+ false
+ Developer ID Application
+ true
+ true
+
+
+ full
+ true
+ bin\AppStore
+ prompt
+ 4
+ SdkOnly
+ false
+ true
+ 3rd Party Mac Developer Installer
+ true
+ 3rd Party Mac Developer Application
+ true
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Eto.XamMac2.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Eto.XamMac2.vstemplate
new file mode 100644
index 0000000000..95db75aa03
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Eto.XamMac2.vstemplate
@@ -0,0 +1,33 @@
+
+
+ Eto.XamMac2
+
+ CSharp
+
+
+
+
+
+
+ Program.cs
+
+ AssemblyInfo.cs
+
+ Info.plist
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
+ NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+ NuGet.VisualStudio.TemplateWizard
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Info.plist b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Info.plist
new file mode 100644
index 0000000000..4715e66d08
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Info.plist
@@ -0,0 +1,19 @@
+
+
+
+
+ CFBundleIconFile
+ TestIcon.icns
+ CFBundleIdentifier
+ com.yourcompany.$safeprojectname$
+ CFBundleName
+ $safeprojectname$
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ 10.6
+ NSPrincipalClass
+ NSApplication
+
+
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Program.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Program.cs
new file mode 100644
index 0000000000..b20c3d62dd
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto.XamMac2/Program.cs
@@ -0,0 +1,15 @@
+using System;
+using Eto.Forms;
+
+namespace $safeprojectname$
+{
+ public class Program
+ {
+ [STAThread]
+ public static void Main(string[] args)
+ {
+ new Application(Eto.Platforms.XamMac2).Run(new MainForm());
+ }
+ }
+}
+
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.projitems b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.projitems
new file mode 100644
index 0000000000..aaf3b3adee
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.projitems
@@ -0,0 +1,14 @@
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+ true
+ {$root.guid1$}
+
+
+ $safeprojectname$
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.shproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.shproj
new file mode 100644
index 0000000000..22611b3980
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.shproj
@@ -0,0 +1,12 @@
+
+
+
+ {$root.guid1$}
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.vstemplate b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.vstemplate
new file mode 100644
index 0000000000..a3f28714d3
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/Eto.vstemplate
@@ -0,0 +1,22 @@
+
+
+ Eto
+
+ CSharp
+
+
+ 1000
+
+ true
+
+
+
+ Eto.projitems
+ MainForm.cs
+
+
+
+ Eto.VisualStudioTemplates, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6a46172bb98be483
+ Eto.VisualStudioTemplates.ChildWizard
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/MainForm.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/MainForm.cs
new file mode 100644
index 0000000000..bbc1bcd4e0
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Eto/MainForm.cs
@@ -0,0 +1,62 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace $safeprojectname$
+{
+ ///
+ /// Your application's main form
+ ///
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Title = "My Eto Form";
+ ClientSize = new Size(400, 350);
+
+ // scrollable region as the main content
+ Content = new Scrollable
+ {
+ // table with three rows
+ Content = new TableLayout(
+ null,
+ // row with three columns
+ new TableRow(null, new Label { Text = "Hello World!" }, null),
+ null
+ )
+ };
+
+ // create a few commands that can be used for the menu and toolbar
+ var clickMe = new Command { MenuText = "Click Me!", ToolBarText = "Click Me!" };
+ clickMe.Executed += (sender, e) => MessageBox.Show(this, "I was clicked!");
+
+ var quitCommand = new Command { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q };
+ quitCommand.Executed += (sender, e) => Application.Instance.Quit();
+
+ var aboutCommand = new Command { MenuText = "About..." };
+ aboutCommand.Executed += (sender, e) => MessageBox.Show(this, "About my app...");
+
+ // create menu
+ Menu = new MenuBar
+ {
+ Items =
+ {
+ // File submenu
+ new ButtonMenuItem { Text = "&File", Items = { clickMe } },
+ // new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } },
+ // new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } },
+ },
+ ApplicationItems =
+ {
+ // application (OS X) or file menu (others)
+ new ButtonMenuItem { Text = "&Preferences..." },
+ },
+ QuitItem = quitCommand,
+ AboutItem = aboutCommand
+ };
+
+ // create toolbar
+ ToolBar = new ToolBar { Items = { clickMe } };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..3421815c0c
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.SAL.Separate/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.SAL.Separate")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.SAL.Separate")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("001e0483-1479-4285-80f8-a787e7964bdd")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/ChildWizard.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/ChildWizard.cs
new file mode 100644
index 0000000000..855aedd07a
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/ChildWizard.cs
@@ -0,0 +1,39 @@
+using Microsoft.VisualStudio.TemplateWizard;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Eto.VisualStudioTemplates
+{
+ public class ChildWizard : IWizard
+ {
+ public void RunStarted(object automationObject, Dictionary replacementsDictionary, WizardRunKind runKind, object[] customParams)
+ {
+ foreach (var replacement in RootWizard.Globals)
+ replacementsDictionary["$root." + replacement.Key.TrimStart('$')] = replacement.Value;
+ }
+
+ public void BeforeOpeningFile(EnvDTE.ProjectItem projectItem)
+ {
+ }
+
+ public void ProjectFinishedGenerating(EnvDTE.Project project)
+ {
+ }
+
+ public void ProjectItemFinishedGenerating(EnvDTE.ProjectItem projectItem)
+ {
+ }
+
+ public void RunFinished()
+ {
+ }
+
+ public bool ShouldAddProjectItem(string filePath)
+ {
+ return true;
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/Eto.VisualStudioTemplates.csproj b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/Eto.VisualStudioTemplates.csproj
new file mode 100644
index 0000000000..cf40edb7bb
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/Eto.VisualStudioTemplates.csproj
@@ -0,0 +1,68 @@
+
+
+
+
+ Debug
+ AnyCPU
+ {64060642-4897-4645-85D4-547EFA4C4FC2}
+ Library
+ Properties
+ Eto.VisualStudioTemplates
+ Eto.VisualStudioTemplates
+ v4.5
+ 512
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+ true
+
+
+ VisualStudioTemplates.snk
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/MultiProjectWizard.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/MultiProjectWizard.cs
new file mode 100644
index 0000000000..a3fd5397fe
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/MultiProjectWizard.cs
@@ -0,0 +1,95 @@
+using Microsoft.VisualStudio.TemplateWizard;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading.Tasks;
+using System.Xml;
+
+namespace Eto.VisualStudioTemplates
+{
+ ///
+ /// Wizard to create projects at the root folder instead of in a subfolder
+ ///
+ ///
+ /// Also, supports setting the startup project
+ ///
+ public class MultiProjectWizard : IWizard
+ {
+ string defaultDestinationFolder;
+ string basePath;
+ string safeProjectName;
+ EnvDTE.DTE dte;
+ List definitions = new List();
+
+ static readonly Regex propertyRegex = new Regex(@"\$\w+\$", RegexOptions.Compiled);
+
+ public class ProjectDefinition
+ {
+ public string Name { get; set; }
+ public string Path { get; set; }
+ public bool Startup { get; set; }
+ }
+
+ public void RunFinished()
+ {
+ Directory.Delete(defaultDestinationFolder, true);
+ foreach (var definition in definitions)
+ {
+ AddProject(definition.Path, definition.Name);
+ }
+ var startupProject = definitions.FirstOrDefault(r => r.Startup);
+ if (startupProject != null)
+ dte.Solution.Properties.Item("StartupProject").Value = startupProject.Name;
+ }
+
+ public void RunStarted(object automationObject, Dictionary replacementsDictionary, WizardRunKind runKind, object[] customParams)
+ {
+ dte = automationObject as EnvDTE.DTE;
+ defaultDestinationFolder = replacementsDictionary["$destinationdirectory$"];
+ basePath = Path.GetDirectoryName((string)customParams[0]);
+
+ safeProjectName = replacementsDictionary["$safeprojectname$"];
+
+ var wizardData = "" + replacementsDictionary["$wizarddata$"] + "";
+ var doc = new XmlDocument();
+ doc.LoadXml(wizardData);
+ var nsmgr = new XmlNamespaceManager(doc.NameTable);
+ nsmgr.AddNamespace("vs", "http://schemas.microsoft.com/developer/vstemplate/2005");
+ foreach (var element in doc.SelectNodes("//vs:Projects/vs:Project", nsmgr).OfType())
+ {
+ var name = propertyRegex.Replace(element.GetAttribute("Name"), match => replacementsDictionary[match.Value]);
+ var startup = string.Equals(element.GetAttribute("Startup"), "true", StringComparison.InvariantCultureIgnoreCase);
+ definitions.Add(new ProjectDefinition { Name = name, Path = element.InnerText, Startup = startup });
+ }
+ }
+
+ public bool ShouldAddProjectItem(string filePath)
+ {
+ return true;
+ }
+
+ public void AddProject(string templatePath, string name)
+ {
+ var solution = dte.Solution;
+
+ string destinationPath = Path.Combine(Path.GetDirectoryName(defaultDestinationFolder), name);
+
+ solution.AddFromTemplate(Path.Combine(basePath, templatePath), destinationPath, name, false);
+ }
+
+ public void BeforeOpeningFile(EnvDTE.ProjectItem projectItem)
+ {
+ }
+
+ public void ProjectFinishedGenerating(EnvDTE.Project project)
+ {
+ }
+
+ public void ProjectItemFinishedGenerating(EnvDTE.ProjectItem projectItem)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..720ab34c04
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+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("Eto.VisualStudioTemplates")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("Eto.VisualStudioTemplates")]
+[assembly: AssemblyCopyright("Copyright © 2014")]
+[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)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("712ffee0-1d08-4e97-aa57-40efbc3e4735")]
+
+// 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/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/RootWizard.cs b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/RootWizard.cs
new file mode 100644
index 0000000000..70d3c5aa14
--- /dev/null
+++ b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/RootWizard.cs
@@ -0,0 +1,41 @@
+using Microsoft.VisualStudio.TemplateWizard;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Eto.VisualStudioTemplates
+{
+ public class RootWizard : IWizard
+ {
+ public static Dictionary Globals = new Dictionary();
+
+ public void RunStarted(object automationObject, Dictionary replacementsDictionary, WizardRunKind runKind, object[] customParams)
+ {
+ foreach (var replacement in replacementsDictionary)
+ Globals[replacement.Key] = replacement.Value;
+ }
+
+ public void BeforeOpeningFile(EnvDTE.ProjectItem projectItem)
+ {
+ }
+
+ public void ProjectFinishedGenerating(EnvDTE.Project project)
+ {
+ }
+
+ public void ProjectItemFinishedGenerating(EnvDTE.ProjectItem projectItem)
+ {
+ }
+
+ public void RunFinished()
+ {
+ }
+
+ public bool ShouldAddProjectItem(string filePath)
+ {
+ return true;
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/VisualStudioTemplates.snk b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/VisualStudioTemplates.snk
new file mode 100644
index 0000000000..84c11dcf94
Binary files /dev/null and b/Source/Addins/Eto.Addin.VisualStudio/Eto.VisualStudioTemplates/VisualStudioTemplates.snk differ
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Eto.Addin.XamarinStudio.csproj b/Source/Addins/Eto.Addin.XamarinStudio/Eto.Addin.XamarinStudio.csproj
new file mode 100644
index 0000000000..b43aa4b44e
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Eto.Addin.XamarinStudio.csproj
@@ -0,0 +1,189 @@
+
+
+
+ Debug
+ AnyCPU
+ {7DBEB09D-BB9F-4D92-A141-A009135475EF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ {54A88D77-39C6-49E5-971E-05451209F2A9}
+ Library
+ Eto.Addin.XamarinStudio
+ Eto.Addin.XamarinStudio
+ True
+ ..\..
+ .
+
+
+ true
+ full
+ false
+ ..\..\..\BuildOutput\Addins\Debug\XamarinStudio
+ DEBUG;
+ prompt
+ 4
+ false
+
+
+ full
+ true
+ ..\..\..\BuildOutput\Addins\Release\XamarinStudio
+ prompt
+ 4
+ false
+
+
+
+
+
+
+ /Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/bin/Mono.Addins.dll
+ False
+
+
+ /Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/bin/MonoDevelop.Core.dll
+ False
+
+
+ /Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/bin/MonoDevelop.Ide.dll
+ False
+
+
+ /Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/bin/Mono.TextEditor.dll
+ False
+
+
+ /Applications/Xamarin Studio.app/Contents/Resources/lib/monodevelop/bin/ICSharpCode.NRefactory.dll
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ Packages\Eto.Forms.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Forms.Sample.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Direct2D.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Gtk.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Gtk3.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.iOS.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Mac.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Mac.Template.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Mac64.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Windows.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.WinRT.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.Wpf.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.XamMac.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Platform.XamMac2.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Serialization.Json.2.0.1.nupkg
+ PreserveNewest
+
+
+ Packages\Eto.Serialization.Xaml.2.0.1.nupkg
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+ PreserveNewest
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Eto.Addin.XamarinStudio.sln b/Source/Addins/Eto.Addin.XamarinStudio/Eto.Addin.XamarinStudio.sln
new file mode 100644
index 0000000000..6f069798ec
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Eto.Addin.XamarinStudio.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Addin.XamarinStudio", "Eto.Addin.XamarinStudio.csproj", "{54A88D77-39C6-49E5-971E-05451209F2A9}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {54A88D77-39C6-49E5-971E-05451209F2A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {54A88D77-39C6-49E5-971E-05451209F2A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {54A88D77-39C6-49E5-971E-05451209F2A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {54A88D77-39C6-49E5-971E-05451209F2A9}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Eto.Forms.XamarinStudio.csproj
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Properties/AddinInfo.cs b/Source/Addins/Eto.Addin.XamarinStudio/Properties/AddinInfo.cs
new file mode 100644
index 0000000000..d6ac0be089
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Properties/AddinInfo.cs
@@ -0,0 +1,17 @@
+using System;
+using Mono.Addins;
+using Mono.Addins.Description;
+
+[assembly:Addin(
+ "Eto.Addin.XamarinStudio",
+ Namespace = "Eto.Addin.XamarinStudio",
+ Version = "1.0"
+)]
+
+[assembly:AddinName("Eto.Forms")]
+[assembly:AddinCategory("Eto.Forms")]
+[assembly:AddinDescription("Addin to easily start developing with Eto.Forms using project and file templates.")]
+[assembly:AddinAuthor("Curtis Wensley")]
+
+[assembly:AddinDependency("::MonoDevelop.Core", MonoDevelop.BuildInfo.Version)]
+[assembly:AddinDependency("::MonoDevelop.Ide", MonoDevelop.BuildInfo.Version)]
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Properties/AssemblyInfo.cs b/Source/Addins/Eto.Addin.XamarinStudio/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000000..367eb38713
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Properties/AssemblyInfo.cs
@@ -0,0 +1,27 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+// Information about this assembly is defined by the following attributes.
+// Change them to the values specific to your project.
+
+[assembly: AssemblyTitle("Eto.Addin.XamarinStudio")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Picoe Software Solutions Inc.")]
+[assembly: AssemblyProduct("")]
+[assembly: AssemblyCopyright("Curtis Wensley")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
+// The form "{Major}.{Minor}.*" will automatically update the build and revision,
+// and "{Major}.{Minor}.{Build}.*" will update just the revision.
+
+[assembly: AssemblyVersion("1.0.*")]
+
+// The following attributes are used to specify the signing key for the assembly,
+// if desired. See the Mono documentation for more information about signing.
+
+//[assembly: AssemblyDelaySign(false)]
+//[assembly: AssemblyKeyFile("")]
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Properties/Manifest.addin.xml b/Source/Addins/Eto.Addin.XamarinStudio/Properties/Manifest.addin.xml
new file mode 100644
index 0000000000..0e503ec8d4
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Properties/Manifest.addin.xml
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Dialog.cs b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Dialog.cs
new file mode 100644
index 0000000000..d2386ece03
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Dialog.cs
@@ -0,0 +1,33 @@
+using System;
+using System.Collections.Generic;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace ${Namespace}
+{
+ public class ${EscapedIdentifier} : Dialog
+ {
+ public ${EscapedIdentifier}()
+ {
+ Title = "My ${EscapedIdentifier} dialog";
+
+ // buttons
+ DefaultButton = new Button { Text = "OK" };
+
+ AbortButton = new Button { Text = "C&ancel" };
+ AbortButton.Click += (sender, e) => Close();
+
+ var buttons = new TableLayout { Rows = { new TableRow(null, DefaultButton, AbortButton) }, Spacing = new Size(5, 5) };
+
+ Content = new TableLayout
+ {
+ Padding = new Padding(10),
+ Rows =
+ {
+ new Label { Text = "Some content" },
+ buttons
+ }
+ };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Dialog.xft.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Dialog.xft.xml
new file mode 100644
index 0000000000..76443d6809
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Dialog.xft.xml
@@ -0,0 +1,16 @@
+
+
+
+ <_Name>Eto.Forms Modal Dialog
+ md-xml-file-icon
+ <_Category>Eto.Forms
+ C#
+ <_Description>
+
+
+ EtoDialog
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Form.cs b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Form.cs
new file mode 100644
index 0000000000..b850949bb8
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Form.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace ${Namespace}
+{
+ public class ${EscapedIdentifier} : Form
+ {
+ public ${EscapedIdentifier}()
+ {
+ Title = "My ${EscapedIdentifier} form";
+
+ Content = new Label { Text = "Some content" };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Form.xft.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Form.xft.xml
new file mode 100644
index 0000000000..a80c95a7ad
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Form.xft.xml
@@ -0,0 +1,16 @@
+
+
+
+ <_Name>Eto.Forms Modeless Form
+ md-xml-file-icon
+ <_Category>Eto.Forms
+ C#
+ <_Description>
+
+
+ EtoForm
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Panel.cs b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Panel.cs
new file mode 100644
index 0000000000..2f6a765e01
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Panel.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace ${Namespace}
+{
+ public class ${EscapedIdentifier} : Panel
+ {
+ public ${EscapedIdentifier}()
+ {
+ Content = new Label { Text = "Some Content" };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Panel.xft.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Panel.xft.xml
new file mode 100644
index 0000000000..97a128787d
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Files/Eto-Panel.xft.xml
@@ -0,0 +1,16 @@
+
+
+
+ <_Name>Eto.Forms Custom Panel
+ md-xml-file-icon
+ <_Category>Eto.Forms
+ C#
+ <_Description>
+
+
+ EtoPanel
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-Library.xpt.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-Library.xpt.xml
new file mode 100644
index 0000000000..1d8b460565
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-Library.xpt.xml
@@ -0,0 +1,24 @@
+
+
+
+ <_Name>Eto.Forms Library (portable)
+ <_Category>C#/Eto.Forms
+ C#
+ <_Description>A portable library project to build Eto.Forms UI and logic.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-PCL-Combined.xpt.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-PCL-Combined.xpt.xml
new file mode 100644
index 0000000000..d6ceb6e4e8
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-PCL-Combined.xpt.xml
@@ -0,0 +1,133 @@
+
+
+
+ <_Name>Eto.Forms App (portable, combined platforms)
+ <_Category>C#/Eto.Forms
+ C#
+ <_Description>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-PCL-Separate.xpt.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-PCL-Separate.xpt.xml
new file mode 100644
index 0000000000..fc2820790a
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-PCL-Separate.xpt.xml
@@ -0,0 +1,227 @@
+
+
+
+ <_Name>Eto.Forms App (portable, separate platforms)
+ <_Category>C#/Eto.Forms
+ C#
+ <_Description>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-SAL-Combined.xpt.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-SAL-Combined.xpt.xml
new file mode 100644
index 0000000000..e178a83a92
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-SAL-Combined.xpt.xml
@@ -0,0 +1,128 @@
+
+
+
+ <_Name>Eto.Forms App (shared, combined platforms)
+ <_Category>C#/Eto.Forms
+ C#
+ <_Description>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-SAL-Separate.xpt.xml b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-SAL-Separate.xpt.xml
new file mode 100644
index 0000000000..e15034b962
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Eto-SAL-Separate.xpt.xml
@@ -0,0 +1,222 @@
+
+
+
+ <_Name>Eto.Forms App (shared, separate platforms)
+ <_Category>C#/Eto.Forms
+ C#
+ <_Description>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Mac/Info.plist b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Mac/Info.plist
new file mode 100644
index 0000000000..0549c2254e
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Mac/Info.plist
@@ -0,0 +1,18 @@
+
+
+
+
+ CFBundleIconFile
+ TestIcon.icns
+ CFBundleIdentifier
+ com.yourcompany.${ProjectName}
+ CFBundleName
+ ${ProjectName}
+ CFBundleVersion
+ 1
+ LSMinimumSystemVersion
+ 10.6
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Shared/MainForm.cs b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Shared/MainForm.cs
new file mode 100644
index 0000000000..3b1b62d389
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Shared/MainForm.cs
@@ -0,0 +1,60 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace ${Namespace}
+{
+ ///
+ /// Your application's main form
+ ///
+ public class MainForm : Form
+ {
+ public MainForm()
+ {
+ Title = "My Eto Form";
+ ClientSize = new Size(400, 350);
+
+ // scrollable region as the main content
+ Content = new Scrollable
+ {
+ // table with three rows
+ Content = new TableLayout(
+ null,
+ // row with three columns
+ new TableRow(null, new Label { Text = "Hello World!" }, null),
+ null
+ )
+ };
+
+ // create a few commands that can be used for the menu and toolbar
+ var clickMe = new Command { MenuText = "Click Me!", ToolBarText = "Click Me!" };
+ clickMe.Executed += (sender, e) => MessageBox.Show(this, "I was clicked!");
+
+ var quitCommand = new Command { MenuText = "Quit", Shortcut = Application.Instance.CommonModifier | Keys.Q };
+ quitCommand.Executed += (sender, e) => Application.Instance.Quit();
+
+ var aboutCommand = new Command { MenuText = "About..." };
+ aboutCommand.Executed += (sender, e) => MessageBox.Show(this, "About my app...");
+
+ // create menu
+ Menu = new MenuBar
+ {
+ Items = {
+ // File submenu
+ new ButtonMenuItem { Text = "&File", Items = { clickMe } },
+ // new ButtonMenuItem { Text = "&Edit", Items = { /* commands/items */ } },
+ // new ButtonMenuItem { Text = "&View", Items = { /* commands/items */ } },
+ },
+ ApplicationItems = {
+ // application (OS X) or file menu (others)
+ new ButtonMenuItem { Text = "&Preferences..." },
+ },
+ QuitItem = quitCommand,
+ AboutItem = aboutCommand
+ };
+
+ // create toolbar
+ ToolBar = new ToolBar { Items = { clickMe } };
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Shared/MyPanel.cs b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Shared/MyPanel.cs
new file mode 100644
index 0000000000..376b2f6c37
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/Templates/Projects/Shared/MyPanel.cs
@@ -0,0 +1,18 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+
+namespace ${Namespace}
+{
+ ///
+ /// A custom panel
+ ///
+ public class MyPanel : Panel
+ {
+ public MyPanel()
+ {
+ // set your content and other properties here
+ Content = new Label { Text = "Some Content" };
+ }
+ }
+}
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/addin-project.xml b/Source/Addins/Eto.Addin.XamarinStudio/addin-project.xml
new file mode 100644
index 0000000000..4e115c839f
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/addin-project.xml
@@ -0,0 +1,7 @@
+
+
+ ../../../BuildOutput/Addins/Release/XamarinStudio/Eto.Addin.XamarinStudio.dll
+ ../../../Resources/Publish.targets
+ Release
+
+
\ No newline at end of file
diff --git a/Source/Addins/Eto.Addin.XamarinStudio/packages.config b/Source/Addins/Eto.Addin.XamarinStudio/packages.config
new file mode 100644
index 0000000000..e90e91c23f
--- /dev/null
+++ b/Source/Addins/Eto.Addin.XamarinStudio/packages.config
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/Source/Eto - Android.sln b/Source/Eto - Android.sln
index 2ca9455e4e..15c640804c 100644
--- a/Source/Eto - Android.sln
+++ b/Source/Eto - Android.sln
@@ -3,15 +3,18 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Android", "Eto.Test\Eto.Test.Android\Eto.Test.Android.csproj", "{22BE7E21-76D0-4C29-9D0A-6D6D432CC952}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.Android", "Eto.Platform.Android\Eto.Platform.Android.csproj", "{7A02E771-D30B-41A1-8A35-C78D3940FC33}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Android", "Eto.Android\Eto.Android.csproj", "{7A02E771-D30B-41A1-8A35-C78D3940FC33}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto - Android", "Eto\Eto - Android.csproj", "{73A5AD74-68BC-448C-A38C-CFBAF014A311}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto - Pcl", "Eto\Eto - Pcl.csproj", "{35EF0A4E-2A1A-492C-8BED-106774EA09F2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test - Android", "Eto.Test\Eto.Test\Eto.Test - Android.csproj", "{BA9DB2EC-C210-4EB9-8A44-4351A1958E85}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Json - Pcl", "Eto.Serialization.Json\Eto.Serialization.Json - Pcl.csproj", "{3F8178EF-0710-43F7-92E2-130B9BE2212D}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Json - Android", "Eto.Json\Eto.Json - Android.csproj", "{757FCF9A-E2D0-4031-9A11-82A2A49FA892}"
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{0DFC22F9-1B35-4B43-A57C-89A173576D01}"
+ ProjectSection(SolutionItems) = preProject
+ .nuget\packages.config = .nuget\packages.config
+ EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.UnitTest - Android", "Eto.UnitTest\Eto.UnitTest - Android.csproj", "{D7161F60-B4AD-11E3-A5E2-0800200C9A66}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test - Pcl", "Eto.Test\Eto.Test\Eto.Test - Pcl.csproj", "{EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -23,28 +26,29 @@ Global
{22BE7E21-76D0-4C29-9D0A-6D6D432CC952}.Debug|Any CPU.Build.0 = Debug|Any CPU
{22BE7E21-76D0-4C29-9D0A-6D6D432CC952}.Release|Any CPU.ActiveCfg = Release|Any CPU
{22BE7E21-76D0-4C29-9D0A-6D6D432CC952}.Release|Any CPU.Build.0 = Release|Any CPU
- {73A5AD74-68BC-448C-A38C-CFBAF014A311}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {73A5AD74-68BC-448C-A38C-CFBAF014A311}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {73A5AD74-68BC-448C-A38C-CFBAF014A311}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {73A5AD74-68BC-448C-A38C-CFBAF014A311}.Release|Any CPU.Build.0 = Release|Any CPU
- {757FCF9A-E2D0-4031-9A11-82A2A49FA892}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {757FCF9A-E2D0-4031-9A11-82A2A49FA892}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {757FCF9A-E2D0-4031-9A11-82A2A49FA892}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {757FCF9A-E2D0-4031-9A11-82A2A49FA892}.Release|Any CPU.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Any CPU.Build.0 = Release|Any CPU
{7A02E771-D30B-41A1-8A35-C78D3940FC33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7A02E771-D30B-41A1-8A35-C78D3940FC33}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7A02E771-D30B-41A1-8A35-C78D3940FC33}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7A02E771-D30B-41A1-8A35-C78D3940FC33}.Release|Any CPU.Build.0 = Release|Any CPU
- {BA9DB2EC-C210-4EB9-8A44-4351A1958E85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {BA9DB2EC-C210-4EB9-8A44-4351A1958E85}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {BA9DB2EC-C210-4EB9-8A44-4351A1958E85}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {BA9DB2EC-C210-4EB9-8A44-4351A1958E85}.Release|Any CPU.Build.0 = Release|Any CPU
- {D7161F60-B4AD-11E3-A5E2-0800200C9A66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {D7161F60-B4AD-11E3-A5E2-0800200C9A66}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {D7161F60-B4AD-11E3-A5E2-0800200C9A66}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {D7161F60-B4AD-11E3-A5E2-0800200C9A66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
EndGlobalSection
GlobalSection(MonoDevelopProperties) = preSolution
StartupItem = Eto.Test\Eto.Test.Android\Eto.Test.Android.csproj
EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
EndGlobal
diff --git a/Source/Eto - Free.sln b/Source/Eto - Free.sln
index 3ea4c2be17..720e135498 100644
--- a/Source/Eto - Free.sln
+++ b/Source/Eto - Free.sln
@@ -5,11 +5,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Mac", "Eto.Test\Et
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto", "Eto\Eto.csproj", "{16289D2F-044C-49EF-83E9-9391AFF8FD2B}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.Gtk", "Eto.Platform.Gtk\Eto.Platform.Gtk.csproj", "{1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Gtk2", "Eto.Gtk\Eto.Gtk2.csproj", "{1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.Mac", "Eto.Platform.Mac\Eto.Platform.Mac.csproj", "{9DD10DFF-5AB3-4E66-B798-CA17911A61E4}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Mac", "Eto.Mac\Eto.Mac.csproj", "{9DD10DFF-5AB3-4E66-B798-CA17911A61E4}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.Windows", "Eto.Platform.Windows\Eto.Platform.Windows.csproj", "{69D38C57-AD4B-4A16-A7B1-49BCFBE71491}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.WinForms", "Eto.WinForms\Eto.WinForms.csproj", "{69D38C57-AD4B-4A16-A7B1-49BCFBE71491}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test", "Eto.Test\Eto.Test\Eto.Test.csproj", "{F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}"
EndProject
@@ -17,15 +17,15 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.WinForms", "Eto.Te
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Direct2D", "Eto.Test\Eto.Test.Direct2D\Eto.Test.Direct2D.csproj", "{74328428-C412-4BC3-BD0C-E1DBC43FB479}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Gtk", "Eto.Test\Eto.Test.Gtk\Eto.Test.Gtk.csproj", "{DD350D2E-149A-4EF1-8AAE-CBA9740B5735}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Gtk2", "Eto.Test\Eto.Test.Gtk2\Eto.Test.Gtk2.csproj", "{DD350D2E-149A-4EF1-8AAE-CBA9740B5735}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Json", "Eto.Json\Eto.Json.csproj", "{2F2C45E0-4142-44D0-8A0C-7264C0F925B2}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Json", "Eto.Serialization.Json\Eto.Serialization.Json.csproj", "{2F2C45E0-4142-44D0-8A0C-7264C0F925B2}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.Wpf", "Eto.Platform.Wpf\Eto.Platform.Wpf.csproj", "{E3524178-5A24-47C0-B155-92314FE4B2B6}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Wpf", "Eto.Wpf\Eto.Wpf.csproj", "{E3524178-5A24-47C0-B155-92314FE4B2B6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Wpf", "Eto.Test\Eto.Test.Wpf\Eto.Test.Wpf.csproj", "{DBAEAD48-6540-43FA-B86A-114ECCB15C7A}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.Gtk3", "Eto.Platform.Gtk\Eto.Platform.Gtk3.csproj", "{EECFE22F-A544-4498-AE2D-90C81BD2931A}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Gtk3", "Eto.Gtk\Eto.Gtk3.csproj", "{EECFE22F-A544-4498-AE2D-90C81BD2931A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Gtk3", "Eto.Test\Eto.Test.Gtk3\Eto.Test.Gtk3.csproj", "{B2148BDC-7D98-419B-B329-FF580FB481DE}"
EndProject
@@ -36,200 +36,192 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{9D5A60
.nuget\NuGet.targets = .nuget\NuGet.targets
EndProjectSection
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.Direct2D", "Eto.Platform.Direct2D\Eto.Platform.Direct2D.csproj", "{3C1B77D5-6C93-4366-A487-3D307FC29FFB}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Direct2D", "Eto.Direct2D\Eto.Direct2D.csproj", "{3C1B77D5-6C93-4366-A487-3D307FC29FFB}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.UnitTest", "Eto.UnitTest\Eto.UnitTest.csproj", "{65F2B3D9-8611-4872-B7BE-6582FB428297}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Xaml", "Eto.Serialization.Xaml\Eto.Serialization.Xaml.csproj", "{FA4BC167-9909-45D2-B86A-D4AE4062A524}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Linux Debug|Any CPU = Linux Debug|Any CPU
- Linux Release|Any CPU = Linux Release|Any CPU
- Mac Debug|Any CPU = Mac Debug|Any CPU
- Mac Release|Any CPU = Mac Release|Any CPU
- Windows Debug|Any CPU = Windows Debug|Any CPU
- Windows Release|Any CPU = Windows Release|Any CPU
+ Debug|Linux = Debug|Linux
+ Release|Linux = Release|Linux
+ Debug|Mac = Debug|Mac
+ Release|Mac = Release|Mac
+ Debug|Windows = Debug|Windows
+ Release|Windows = Release|Windows
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {65F2B3D9-8611-4872-B7BE-6582FB428297}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {B2148BDC-7D98-419B-B329-FF580FB481DE}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Linux Debug|Any CPU.ActiveCfg = Debug|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Linux Debug|Any CPU.Build.0 = Debug|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Linux Release|Any CPU.ActiveCfg = Release|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Linux Release|Any CPU.Build.0 = Release|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Mac Debug|Any CPU.ActiveCfg = Debug|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Mac Debug|Any CPU.Build.0 = Debug|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Mac Release|Any CPU.ActiveCfg = Release|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Mac Release|Any CPU.Build.0 = Release|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Windows Debug|Any CPU.ActiveCfg = Debug|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Windows Debug|Any CPU.Build.0 = Debug|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Windows Release|Any CPU.ActiveCfg = Release|x86
- {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Windows Release|Any CPU.Build.0 = Release|x86
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {E3524178-5A24-47C0-B155-92314FE4B2B6}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Linux Debug|Any CPU.Build.0 = Debug|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Linux Release|Any CPU.Build.0 = Release|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Windows Debug|Any CPU.Build.0 = Debug|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Windows Release|Any CPU.Build.0 = Release|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Linux Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Linux Release|Any CPU.ActiveCfg = Release|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Mac Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Mac Debug|Any CPU.Build.0 = Debug|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Mac Release|Any CPU.ActiveCfg = Release|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Mac Release|Any CPU.Build.0 = Release|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Windows Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Windows Release|Any CPU.ActiveCfg = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Linux.Build.0 = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Mac.Build.0 = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.Build.0 = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Linux.ActiveCfg = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Linux.Build.0 = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Mac.ActiveCfg = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Mac.Build.0 = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.ActiveCfg = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.Build.0 = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Linux.Build.0 = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Mac.Build.0 = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Windows.Build.0 = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Linux.ActiveCfg = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Linux.Build.0 = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Mac.ActiveCfg = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Mac.Build.0 = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Windows.ActiveCfg = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Windows.Build.0 = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Linux.Build.0 = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Mac.Build.0 = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Windows.Build.0 = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Linux.ActiveCfg = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Linux.Build.0 = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Mac.ActiveCfg = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Mac.Build.0 = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Windows.ActiveCfg = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Windows.Build.0 = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Linux.Build.0 = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Mac.Build.0 = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Windows.Build.0 = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Linux.ActiveCfg = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Linux.Build.0 = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Mac.ActiveCfg = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Mac.Build.0 = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Windows.ActiveCfg = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Windows.Build.0 = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Windows.Build.0 = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Linux.ActiveCfg = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Mac.ActiveCfg = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Windows.ActiveCfg = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Windows.Build.0 = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Mac.Build.0 = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Linux.ActiveCfg = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Mac.ActiveCfg = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Mac.Build.0 = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Windows.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Linux.Build.0 = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Mac.Build.0 = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Windows.Build.0 = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Linux.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Linux.Build.0 = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Mac.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Mac.Build.0 = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Windows.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Windows.Build.0 = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.Build.0 = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Linux.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Mac.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.Build.0 = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Linux.Build.0 = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Mac.Build.0 = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Windows.Build.0 = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Linux.ActiveCfg = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Linux.Build.0 = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Mac.ActiveCfg = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Mac.Build.0 = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Windows.ActiveCfg = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Windows.Build.0 = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Linux.Build.0 = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Mac.Build.0 = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Windows.Build.0 = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Linux.ActiveCfg = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Linux.Build.0 = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Mac.ActiveCfg = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Mac.Build.0 = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Windows.ActiveCfg = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Windows.Build.0 = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Windows.Build.0 = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Linux.ActiveCfg = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Mac.ActiveCfg = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Windows.ActiveCfg = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Windows.Build.0 = Release|Any CPU
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Linux.ActiveCfg = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Linux.Build.0 = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Mac.ActiveCfg = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Mac.Build.0 = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Windows.ActiveCfg = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Windows.Build.0 = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Linux.ActiveCfg = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Linux.Build.0 = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Mac.ActiveCfg = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Mac.Build.0 = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Windows.ActiveCfg = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Windows.Build.0 = Release|x86
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Windows.Build.0 = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Linux.ActiveCfg = Release|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Mac.ActiveCfg = Release|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Windows.ActiveCfg = Release|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Windows.Build.0 = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Linux.Build.0 = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Mac.Build.0 = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Windows.Build.0 = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Linux.ActiveCfg = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Linux.Build.0 = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Mac.ActiveCfg = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Mac.Build.0 = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Windows.ActiveCfg = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Windows.Build.0 = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Linux.Build.0 = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Mac.Build.0 = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Windows.Build.0 = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Linux.ActiveCfg = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Linux.Build.0 = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Mac.ActiveCfg = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Mac.Build.0 = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Windows.ActiveCfg = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Windows.Build.0 = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Linux.Build.0 = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Mac.Build.0 = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Windows.Build.0 = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Linux.ActiveCfg = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Linux.Build.0 = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Mac.ActiveCfg = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Mac.Build.0 = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Windows.ActiveCfg = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Windows.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
EndGlobalSection
diff --git a/Source/Eto - iOS.sln b/Source/Eto - iOS.sln
index 2ea5d207e1..05fa7fe9cd 100644
--- a/Source/Eto - iOS.sln
+++ b/Source/Eto - iOS.sln
@@ -1,143 +1,97 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto - iOS", "Eto\Eto - iOS.csproj", "{83452633-C37C-490F-852A-3ADE0A2CF0D4}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Platform.iOS", "Eto.Platform.iOS\Eto.Platform.iOS.csproj", "{E711B298-D141-4EC5-9BFD-84962B264F90}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test - iOS", "Eto.Test\Eto.Test\Eto.Test - iOS.csproj", "{97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.iOS", "Eto.Test\Eto.Test.iOS\Eto.Test.iOS.csproj", "{AB42209E-E87F-4749-96CF-8CAE83981808}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Json - iOS", "Eto.Json\Eto.Json - iOS.csproj", "{5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.UnitTest - iOS", "Eto.UnitTest\Eto.UnitTest - iOS.csproj", "{CB40A480-B4AD-11E3-A5E2-0800200C9A66}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|iPhoneSimulator = Debug|iPhoneSimulator
- Release|iPhoneSimulator = Release|iPhoneSimulator
- Debug|iPhone = Debug|iPhone
- Release|iPhone = Release|iPhone
- Ad-Hoc|iPhone = Ad-Hoc|iPhone
- AppStore|iPhone = AppStore|iPhone
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.AppStore|iPhone.Build.0 = Release|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Debug|iPhone.Build.0 = Debug|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Release|iPhone.ActiveCfg = Release|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Release|iPhone.Build.0 = Release|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {5F92A18F-6ED3-4BD6-AFB7-FEEF3F4DA1E0}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.AppStore|iPhone.Build.0 = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Debug|iPhone.Build.0 = Debug|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Release|iPhone.ActiveCfg = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Release|iPhone.Build.0 = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {83452633-C37C-490F-852A-3ADE0A2CF0D4}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.AppStore|iPhone.Build.0 = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Debug|iPhone.Build.0 = Debug|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Release|iPhone.ActiveCfg = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Release|iPhone.Build.0 = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {97DEC3D5-5E7C-493D-AB7E-C0001AF7085F}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.AppStore|iPhone.Build.0 = AppStore|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhone.ActiveCfg = Debug|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhone.Build.0 = Debug|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhone.ActiveCfg = Release|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhone.Build.0 = Release|iPhone
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
- {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.AppStore|iPhone.Build.0 = Release|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Debug|iPhone.Build.0 = Debug|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Release|iPhone.ActiveCfg = Release|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Release|iPhone.Build.0 = Release|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {CB40A480-B4AD-11E3-A5E2-0800200C9A66}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.AppStore|iPhone.Build.0 = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhone.Build.0 = Debug|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhone.ActiveCfg = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhone.Build.0 = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(MonoDevelopProperties) = preSolution
- StartupItem = Eto.Test\Eto.Test.iOS\Eto.Test.iOS.csproj
- Policies = $0
- $0.DotNetNamingPolicy = $1
- $1.DirectoryNamespaceAssociation = PrefixedHierarchical
- $1.ResourceNamePolicy = MSBuild
- $0.TextStylePolicy = $2
- $2.inheritsSet = null
- $2.scope = text/x-csharp
- $0.CSharpFormattingPolicy = $3
- $3.IndentSwitchBody = True
- $3.AnonymousMethodBraceStyle = NextLine
- $3.PropertyBraceStyle = NextLine
- $3.PropertyGetBraceStyle = NextLine
- $3.PropertySetBraceStyle = NextLine
- $3.EventBraceStyle = NextLine
- $3.EventAddBraceStyle = NextLine
- $3.EventRemoveBraceStyle = NextLine
- $3.StatementBraceStyle = NextLine
- $3.ElseNewLinePlacement = NewLine
- $3.CatchNewLinePlacement = NewLine
- $3.FinallyNewLinePlacement = NewLine
- $3.WhileNewLinePlacement = DoNotCare
- $3.ArrayInitializerWrapping = DoNotChange
- $3.ArrayInitializerBraceStyle = NextLine
- $3.BeforeMethodDeclarationParentheses = False
- $3.BeforeMethodCallParentheses = False
- $3.BeforeConstructorDeclarationParentheses = False
- $3.BeforeDelegateDeclarationParentheses = False
- $3.NewParentheses = False
- $3.SpacesBeforeBrackets = False
- $3.inheritsSet = Mono
- $3.inheritsScope = text/x-csharp
- $3.scope = text/x-csharp
- $0.TextStylePolicy = $4
- $4.FileWidth = 120
- $4.TabsToSpaces = False
- $4.inheritsSet = VisualStudio
- $4.inheritsScope = text/plain
- $4.scope = text/plain
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.iOS", "Eto.iOS\Eto.iOS.csproj", "{E711B298-D141-4EC5-9BFD-84962B264F90}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.iOS", "Eto.Test\Eto.Test.iOS\Eto.Test.iOS.csproj", "{AB42209E-E87F-4749-96CF-8CAE83981808}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto - Pcl", "Eto\Eto - Pcl.csproj", "{35EF0A4E-2A1A-492C-8BED-106774EA09F2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Json - Pcl", "Eto.Serialization.Json\Eto.Serialization.Json - Pcl.csproj", "{3F8178EF-0710-43F7-92E2-130B9BE2212D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test - Pcl", "Eto.Test\Eto.Test\Eto.Test - Pcl.csproj", "{EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Ad-Hoc|iPhone = Ad-Hoc|iPhone
+ AppStore|iPhone = AppStore|iPhone
+ Debug|iPhone = Debug|iPhone
+ Debug|iPhoneSimulator = Debug|iPhoneSimulator
+ Release|iPhone = Release|iPhone
+ Release|iPhoneSimulator = Release|iPhoneSimulator
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|iPhone.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|iPhone.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Ad-Hoc|iPhone.Deploy.0 = Ad-Hoc|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.AppStore|iPhone.Build.0 = AppStore|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.AppStore|iPhone.Deploy.0 = AppStore|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhone.ActiveCfg = Debug|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhone.Build.0 = Debug|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhone.Deploy.0 = Debug|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Debug|iPhoneSimulator.Deploy.0 = Debug|iPhoneSimulator
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhone.ActiveCfg = Release|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhone.Build.0 = Release|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhone.Deploy.0 = Release|iPhone
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
+ {AB42209E-E87F-4749-96CF-8CAE83981808}.Release|iPhoneSimulator.Deploy.0 = Release|iPhoneSimulator
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhone.Build.0 = Release|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {E711B298-D141-4EC5-9BFD-84962B264F90}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|iPhone.Build.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Eto.Test\Eto.Test.iOS\Eto.Test.iOS.csproj
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Eto - net40.sln b/Source/Eto - net40.sln
new file mode 100644
index 0000000000..1f6adb8c75
--- /dev/null
+++ b/Source/Eto - net40.sln
@@ -0,0 +1,290 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+VisualStudioVersion = 12.0.30324.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto", "Eto\Eto.csproj", "{16289D2F-044C-49EF-83E9-9391AFF8FD2B}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Gtk2", "Eto.Gtk\Eto.Gtk2.csproj", "{1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Mac", "Eto.Mac\Eto.Mac.csproj", "{9DD10DFF-5AB3-4E66-B798-CA17911A61E4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.WinForms", "Eto.WinForms\Eto.WinForms.csproj", "{69D38C57-AD4B-4A16-A7B1-49BCFBE71491}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Json", "Eto.Serialization.Json\Eto.Serialization.Json.csproj", "{2F2C45E0-4142-44D0-8A0C-7264C0F925B2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Wpf", "Eto.Wpf\Eto.Wpf.csproj", "{E3524178-5A24-47C0-B155-92314FE4B2B6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.XamMac", "Eto.Mac\Eto.XamMac.csproj", "{15490F6C-C579-4A86-AD16-8D9B5B41EB87}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Gtk3", "Eto.Gtk\Eto.Gtk3.csproj", "{EECFE22F-A544-4498-AE2D-90C81BD2931A}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{9D5A6006-2595-4E8E-8F54-9A4216E00370}"
+ ProjectSection(SolutionItems) = preProject
+ .nuget\NuGet.Config = .nuget\NuGet.Config
+ .nuget\NuGet.exe = .nuget\NuGet.exe
+ .nuget\NuGet.targets = .nuget\NuGet.targets
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Direct2D", "Eto.Direct2D\Eto.Direct2D.csproj", "{3C1B77D5-6C93-4366-A487-3D307FC29FFB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Xaml", "Eto.Serialization.Xaml\Eto.Serialization.Xaml.csproj", "{FA4BC167-9909-45D2-B86A-D4AE4062A524}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Mac", "Eto.Test\Eto.Test.Mac\Eto.Test.Mac.csproj", "{57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test", "Eto.Test\Eto.Test\Eto.Test.csproj", "{F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.WinForms", "Eto.Test\Eto.Test.WinForms\Eto.Test.WinForms.csproj", "{01118427-C412-4BC3-BD0C-E1DBC43FB479}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Direct2D", "Eto.Test\Eto.Test.Direct2D\Eto.Test.Direct2D.csproj", "{74328428-C412-4BC3-BD0C-E1DBC43FB479}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Gtk2", "Eto.Test\Eto.Test.Gtk2\Eto.Test.Gtk2.csproj", "{DD350D2E-149A-4EF1-8AAE-CBA9740B5735}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Wpf", "Eto.Test\Eto.Test.Wpf\Eto.Test.Wpf.csproj", "{DBAEAD48-6540-43FA-B86A-114ECCB15C7A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.XamMac", "Eto.Test\Eto.Test.Mac\Eto.Test.XamMac.csproj", "{5CFF5206-278B-4DE2-93AF-571B2121B5A7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Gtk3", "Eto.Test\Eto.Test.Gtk3\Eto.Test.Gtk3.csproj", "{B2148BDC-7D98-419B-B329-FF580FB481DE}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Mac64", "Eto.Mac\Eto.Mac64.csproj", "{75EADBA0-15B4-11E4-8C21-0800200C9A66}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Linux = Debug|Linux
+ Debug|Mac = Debug|Mac
+ Debug|Windows = Debug|Windows
+ Release|Linux = Release|Linux
+ Release|Mac = Release|Mac
+ Release|Windows = Release|Windows
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Linux.Build.0 = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Mac.Build.0 = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.Build.0 = Debug|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Linux.ActiveCfg = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Linux.Build.0 = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Mac.ActiveCfg = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Mac.Build.0 = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.ActiveCfg = Release|Any CPU
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.Build.0 = Release|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Debug|Mac.Build.0 = Debug|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Release|Linux.ActiveCfg = Release|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Release|Mac.ActiveCfg = Release|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Release|Mac.Build.0 = Release|Any CPU
+ {15490F6C-C579-4A86-AD16-8D9B5B41EB87}.Release|Windows.ActiveCfg = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Linux.Build.0 = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Mac.Build.0 = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Debug|Windows.Build.0 = Debug|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Linux.ActiveCfg = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Linux.Build.0 = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Mac.ActiveCfg = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Mac.Build.0 = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Windows.ActiveCfg = Release|Any CPU
+ {16289D2F-044C-49EF-83E9-9391AFF8FD2B}.Release|Windows.Build.0 = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Linux.Build.0 = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Mac.Build.0 = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Debug|Windows.Build.0 = Debug|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Linux.ActiveCfg = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Linux.Build.0 = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Mac.ActiveCfg = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Mac.Build.0 = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Windows.ActiveCfg = Release|Any CPU
+ {1FF7BE58-A6A2-4132-8CAF-AA2EF18122A1}.Release|Windows.Build.0 = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Linux.Build.0 = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Mac.Build.0 = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Debug|Windows.Build.0 = Debug|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Linux.ActiveCfg = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Linux.Build.0 = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Mac.ActiveCfg = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Mac.Build.0 = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Windows.ActiveCfg = Release|Any CPU
+ {2F2C45E0-4142-44D0-8A0C-7264C0F925B2}.Release|Windows.Build.0 = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Debug|Windows.Build.0 = Debug|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Linux.ActiveCfg = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Mac.ActiveCfg = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Mac.Build.0 = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Windows.ActiveCfg = Release|Any CPU
+ {3C1B77D5-6C93-4366-A487-3D307FC29FFB}.Release|Windows.Build.0 = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Mac.Build.0 = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Linux.ActiveCfg = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Mac.ActiveCfg = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Mac.Build.0 = Release|Any CPU
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB}.Release|Windows.ActiveCfg = Release|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Debug|Mac.Build.0 = Debug|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Release|Linux.ActiveCfg = Release|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Release|Mac.ActiveCfg = Release|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Release|Mac.Build.0 = Release|Any CPU
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7}.Release|Windows.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Linux.Build.0 = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Mac.Build.0 = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Debug|Windows.Build.0 = Debug|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Linux.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Linux.Build.0 = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Mac.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Mac.Build.0 = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Windows.ActiveCfg = Release|Any CPU
+ {69D38C57-AD4B-4A16-A7B1-49BCFBE71491}.Release|Windows.Build.0 = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.Build.0 = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Linux.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Mac.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.Build.0 = Release|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {75EADBA0-15B4-11E4-8C21-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Linux.Build.0 = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Mac.Build.0 = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Debug|Windows.Build.0 = Debug|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Linux.ActiveCfg = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Linux.Build.0 = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Mac.ActiveCfg = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Mac.Build.0 = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Windows.ActiveCfg = Release|Any CPU
+ {9DD10DFF-5AB3-4E66-B798-CA17911A61E4}.Release|Windows.Build.0 = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Linux.Build.0 = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Mac.Build.0 = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Debug|Windows.Build.0 = Debug|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Linux.ActiveCfg = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Linux.Build.0 = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Mac.ActiveCfg = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Mac.Build.0 = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Windows.ActiveCfg = Release|Any CPU
+ {B2148BDC-7D98-419B-B329-FF580FB481DE}.Release|Windows.Build.0 = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Debug|Windows.Build.0 = Debug|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Linux.ActiveCfg = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Mac.ActiveCfg = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Windows.ActiveCfg = Release|Any CPU
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A}.Release|Windows.Build.0 = Release|Any CPU
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Linux.ActiveCfg = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Linux.Build.0 = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Mac.ActiveCfg = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Mac.Build.0 = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Windows.ActiveCfg = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Debug|Windows.Build.0 = Debug|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Linux.ActiveCfg = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Linux.Build.0 = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Mac.ActiveCfg = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Mac.Build.0 = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Windows.ActiveCfg = Release|x86
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735}.Release|Windows.Build.0 = Release|x86
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Debug|Windows.Build.0 = Debug|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Linux.ActiveCfg = Release|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Mac.ActiveCfg = Release|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Windows.ActiveCfg = Release|Any CPU
+ {E3524178-5A24-47C0-B155-92314FE4B2B6}.Release|Windows.Build.0 = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Linux.Build.0 = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Mac.Build.0 = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Debug|Windows.Build.0 = Debug|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Linux.ActiveCfg = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Linux.Build.0 = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Mac.ActiveCfg = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Mac.Build.0 = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Windows.ActiveCfg = Release|Any CPU
+ {EECFE22F-A544-4498-AE2D-90C81BD2931A}.Release|Windows.Build.0 = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Linux.Build.0 = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Mac.Build.0 = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Debug|Windows.Build.0 = Debug|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Linux.ActiveCfg = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Linux.Build.0 = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Mac.ActiveCfg = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Mac.Build.0 = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Windows.ActiveCfg = Release|Any CPU
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5}.Release|Windows.Build.0 = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Linux.Build.0 = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Mac.Build.0 = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Debug|Windows.Build.0 = Debug|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Linux.ActiveCfg = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Linux.Build.0 = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Mac.ActiveCfg = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Mac.Build.0 = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Windows.ActiveCfg = Release|Any CPU
+ {FA4BC167-9909-45D2-B86A-D4AE4062A524}.Release|Windows.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {57BCCF63-1D05-4AD6-9BBB-E2CE4E2451AB} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ {F8F400B8-A2F6-4342-82F6-D6D8B544A7E5} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ {01118427-C412-4BC3-BD0C-E1DBC43FB479} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ {DD350D2E-149A-4EF1-8AAE-CBA9740B5735} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ {DBAEAD48-6540-43FA-B86A-114ECCB15C7A} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ {5CFF5206-278B-4DE2-93AF-571B2121B5A7} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ {B2148BDC-7D98-419B-B329-FF580FB481DE} = {D5AF5792-1085-4EC1-8C5D-B5A5FF98C8D8}
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Eto.Test\Eto.Test.Mac\Eto.Test.Mac.csproj
+ Policies = $0
+ $0.DotNetNamingPolicy = $1
+ $1.DirectoryNamespaceAssociation = PrefixedHierarchical
+ $1.ResourceNamePolicy = MSBuild
+ $0.TextStylePolicy = $2
+ $2.FileWidth = 120
+ $2.TabsToSpaces = False
+ $2.inheritsSet = VisualStudio
+ $2.inheritsScope = text/plain
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Eto - net45.sln b/Source/Eto - net45.sln
new file mode 100644
index 0000000000..f55f1f6754
--- /dev/null
+++ b/Source/Eto - net45.sln
@@ -0,0 +1,340 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+VisualStudioVersion = 12.0.30723.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto - Pcl", "Eto\Eto - Pcl.csproj", "{35EF0A4E-2A1A-492C-8BED-106774EA09F2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Json - Pcl", "Eto.Serialization.Json\Eto.Serialization.Json - Pcl.csproj", "{3F8178EF-0710-43F7-92E2-130B9BE2212D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Direct2D - Pcl", "Eto.Direct2D\Eto.Direct2D - Pcl.csproj", "{330EF9FD-5947-4AC9-9796-950C7633695F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.WinForms - Pcl", "Eto.WinForms\Eto.WinForms - Pcl.csproj", "{9F51798A-354C-47A1-9207-4BB7D7FC7FC4}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Mac - Pcl", "Eto.Mac\Eto.Mac - Pcl.csproj", "{3E7995E0-C9EB-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Gtk2 - Pcl", "Eto.Gtk\Eto.Gtk2 - Pcl.csproj", "{80915A80-CA54-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Wpf - Pcl", "Eto.Wpf\Eto.Wpf - Pcl.csproj", "{63137FA0-CA55-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Gtk3 - Pcl", "Eto.Gtk\Eto.Gtk3 - Pcl.csproj", "{543B2F90-CA56-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.XamMac - Pcl", "Eto.Mac\Eto.XamMac - Pcl.csproj", "{BF405A10-C9EB-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Serialization.Xaml - Pcl", "Eto.Serialization.Xaml\Eto.Serialization.Xaml - Pcl.csproj", "{231FB3B0-CB71-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test - Pcl", "Eto.Test\Eto.Test\Eto.Test - Pcl.csproj", "{EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Gtk2 - Pcl", "Eto.Test\Eto.Test.Gtk2\Eto.Test.Gtk2 - Pcl.csproj", "{CC33FE70-CA54-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Gtk3 - Pcl", "Eto.Test\Eto.Test.Gtk3\Eto.Test.Gtk3 - Pcl.csproj", "{D70E9E90-CA54-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.WinForms - Pcl", "Eto.Test\Eto.Test.WinForms\Eto.Test.WinForms - Pcl.csproj", "{CF18B0BB-2C60-437F-8AA3-711ABAE11A91}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Wpf - Pcl", "Eto.Test\Eto.Test.Wpf\Eto.Test.Wpf - Pcl.csproj", "{DD0C2B40-CA55-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Mac - Pcl", "Eto.Test\Eto.Test.Mac\Eto.Test.Mac - Pcl.csproj", "{A4267C50-C9EB-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.XamMac - Pcl", "Eto.Test\Eto.Test.Mac\Eto.Test.XamMac - Pcl.csproj", "{9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Direct2D - Pcl", "Eto.Test\Eto.Test.Direct2D\Eto.Test.Direct2D - Pcl.csproj", "{74328428-C412-4BC3-BD0C-E1DBC43FB479}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.XamMac2", "Eto.Test\Eto.Test.Mac\Eto.Test.XamMac2.csproj", "{689E4C20-2702-11E4-8C21-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.Mac64 - Pcl", "Eto.Test\Eto.Test.Mac\Eto.Test.Mac64 - Pcl.csproj", "{B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Test.WinRT", "Eto.Test\Eto.Test.WinRT\Eto.Test.WinRT.csproj", "{DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{451A0C58-A0FE-4DAE-9B57-FB1450C2071B}"
+ ProjectSection(SolutionItems) = preProject
+ .nuget\NuGet.Config = .nuget\NuGet.Config
+ .nuget\NuGet.exe = .nuget\NuGet.exe
+ .nuget\NuGet.targets = .nuget\NuGet.targets
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.Mac64 - Pcl", "Eto.Mac\Eto.Mac64 - Pcl.csproj", "{55DAB390-1CFC-11E4-8C21-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.XamMac2 - Pcl", "Eto.Mac\Eto.XamMac2 - Pcl.csproj", "{856E8C70-2702-11E4-8C21-0800200C9A66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eto.WinRT", "Eto.WinRT\Eto.WinRT.csproj", "{4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Linux = Debug|Linux
+ Debug|Mac = Debug|Mac
+ Debug|Windows = Debug|Windows
+ Release|Linux = Release|Linux
+ Release|Mac = Release|Mac
+ Release|Windows = Release|Windows
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {231FB3B0-CB71-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Debug|Windows.Build.0 = Debug|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Release|Linux.ActiveCfg = Release|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Release|Mac.ActiveCfg = Release|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Release|Mac.Build.0 = Release|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Release|Windows.ActiveCfg = Release|Any CPU
+ {330EF9FD-5947-4AC9-9796-950C7633695F}.Release|Windows.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Linux.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Mac.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Debug|Windows.Build.0 = Debug|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Linux.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Linux.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Mac.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Mac.Build.0 = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Windows.ActiveCfg = Release|Any CPU
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}.Release|Windows.Build.0 = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {3E7995E0-C9EB-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Linux.Build.0 = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Mac.Build.0 = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Debug|Windows.Build.0 = Debug|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Linux.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Linux.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Mac.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Mac.Build.0 = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Windows.ActiveCfg = Release|Any CPU
+ {3F8178EF-0710-43F7-92E2-130B9BE2212D}.Release|Windows.Build.0 = Release|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Debug|Windows.Build.0 = Debug|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Release|Linux.ActiveCfg = Release|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Release|Mac.ActiveCfg = Release|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Release|Windows.ActiveCfg = Release|Any CPU
+ {4C2B4FA7-5C94-4582-82CB-FC856BEBFE75}.Release|Windows.Build.0 = Release|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {543B2F90-CA56-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {55DAB390-1CFC-11E4-8C21-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {63137FA0-CA55-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {689E4C20-2702-11E4-8C21-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Debug|Windows.Build.0 = Debug|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Linux.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Mac.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.ActiveCfg = Release|Any CPU
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479}.Release|Windows.Build.0 = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {80915A80-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {856E8C70-2702-11E4-8C21-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Linux.Build.0 = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Mac.Build.0 = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Debug|Windows.Build.0 = Debug|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Linux.ActiveCfg = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Linux.Build.0 = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Mac.ActiveCfg = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Mac.Build.0 = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Windows.ActiveCfg = Release|Any CPU
+ {9F51798A-354C-47A1-9207-4BB7D7FC7FC4}.Release|Windows.Build.0 = Release|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Debug|Linux.Build.0 = Debug|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Debug|Mac.Build.0 = Debug|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Debug|Windows.Build.0 = Debug|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Release|Linux.ActiveCfg = Release|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Release|Linux.Build.0 = Release|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Release|Mac.ActiveCfg = Release|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Release|Mac.Build.0 = Release|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Release|Windows.ActiveCfg = Release|Any CPU
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689}.Release|Windows.Build.0 = Release|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {BF405A10-C9EB-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|x86
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|x86
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Debug|Linux.Build.0 = Debug|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Debug|Mac.Build.0 = Debug|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Debug|Windows.Build.0 = Debug|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Release|Linux.ActiveCfg = Release|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Release|Linux.Build.0 = Release|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Release|Mac.ActiveCfg = Release|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Release|Mac.Build.0 = Release|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Release|Windows.ActiveCfg = Release|Any CPU
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91}.Release|Windows.Build.0 = Release|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Debug|Linux.Build.0 = Debug|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Debug|Mac.Build.0 = Debug|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Release|Linux.Build.0 = Release|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Release|Mac.Build.0 = Release|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Debug|Windows.Build.0 = Debug|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Release|Linux.ActiveCfg = Release|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Release|Mac.ActiveCfg = Release|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Release|Windows.ActiveCfg = Release|Any CPU
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66}.Release|Windows.Build.0 = Release|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Debug|Windows.Build.0 = Debug|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Debug|Windows.Deploy.0 = Debug|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Release|Linux.ActiveCfg = Release|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Release|Mac.ActiveCfg = Release|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Release|Windows.ActiveCfg = Release|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Release|Windows.Build.0 = Release|Any CPU
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F}.Release|Windows.Deploy.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Linux.ActiveCfg = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Linux.Build.0 = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Mac.ActiveCfg = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Mac.Build.0 = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Windows.ActiveCfg = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Debug|Windows.Build.0 = Debug|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Linux.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Linux.Build.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Mac.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Mac.Build.0 = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Windows.ActiveCfg = Release|Any CPU
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1}.Release|Windows.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {EB9C0A22-6644-46E4-948C-F7C95E1F8CE1} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {CC33FE70-CA54-11E3-9C1A-0800200C9A66} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {D70E9E90-CA54-11E3-9C1A-0800200C9A66} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {CF18B0BB-2C60-437F-8AA3-711ABAE11A91} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {DD0C2B40-CA55-11E3-9C1A-0800200C9A66} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {A4267C50-C9EB-11E3-9C1A-0800200C9A66} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {9CEE7E60-C9EB-11E3-9C1A-0800200C9A66} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {74328428-C412-4BC3-BD0C-E1DBC43FB479} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {689E4C20-2702-11E4-8C21-0800200C9A66} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {B5BC1D10-24ED-441C-A4D6-1F3AB9FF3689} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ {DFAC63ED-7563-4F09-97E0-9FC3F0FD552F} = {E121B009-AB4B-4585-B3FB-D70E3DF8D3CC}
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = Eto.Test\Eto.Test.Mac\Eto.Test.Mac - Pcl.csproj
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Source/Eto.Android/Conversions.cs b/Source/Eto.Android/Conversions.cs
new file mode 100644
index 0000000000..a9ea1701c9
--- /dev/null
+++ b/Source/Eto.Android/Conversions.cs
@@ -0,0 +1,329 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using Eto.Android.Drawing;
+
+namespace Eto.Android
+{
+ public static class Conversions
+ {
+ public static Padding GetPadding(this av.View view)
+ {
+ return new Padding(view.PaddingLeft, view.PaddingTop, view.PaddingRight, view.PaddingBottom);
+ }
+
+ public static void SetPadding(this av.View view, Padding padding)
+ {
+ view.SetPadding(padding.Left, padding.Top, padding.Right, padding.Bottom);
+ }
+
+ public static Color ToEto(this global::Android.Content.Res.ColorStateList colors)
+ {
+ return Color.FromArgb(colors.DefaultColor);
+ }
+
+ public static Color ToEto(this ag.Color color)
+ {
+ return Color.FromArgb(color.R, color.G, color.B, color.A);
+ }
+
+ public static ag.Color ToAndroid(this Color color)
+ {
+ return new ag.Color((int)color.ToArgb());
+ }
+
+ public static ag.Paint ToAndroid(this Pen pen)
+ {
+ return (ag.Paint)pen.ControlObject;
+ }
+
+ public static ag.Paint ToAndroid(this Brush brush)
+ {
+ return ((BrushHandler)brush.Handler).GetPaint(brush);
+ }
+
+ public static MouseEventArgs ToEto(av.MotionEvent e)
+ {
+ if (e.Action == av.MotionEventActions.Down)
+ {
+ return new MouseEventArgs(MouseButtons.Primary, Keys.None, new PointF(e.GetX(), e.GetY()));
+ }
+ // Is this correct? It generates a mouse event for pointer-up and cancel actions
+ // See the iOS handler as well, which does something similar
+ return new MouseEventArgs(MouseButtons.Primary, Keys.None, Point.Empty);
+ }
+
+ public static ag.Paint.Join ToAndroid(this PenLineJoin value)
+ {
+ switch (value)
+ {
+ case PenLineJoin.Miter:
+ return ag.Paint.Join.Miter;
+ case PenLineJoin.Bevel:
+ return ag.Paint.Join.Bevel;
+ case PenLineJoin.Round:
+ return ag.Paint.Join.Round;
+ default:
+ throw new NotSupportedException();
+ }
+ }
+
+ public static PenLineJoin ToEto(this ag.Paint.Join value)
+ {
+ if (object.ReferenceEquals(value, ag.Paint.Join.Bevel))
+ return PenLineJoin.Bevel;
+ if (object.ReferenceEquals(value, ag.Paint.Join.Miter))
+ return PenLineJoin.Miter;
+ if (object.ReferenceEquals(value, ag.Paint.Join.Round))
+ return PenLineJoin.Round;
+ throw new NotSupportedException();
+ }
+
+ public static ag.Paint.Cap ToSD(this PenLineCap value)
+ {
+ switch (value)
+ {
+ case PenLineCap.Butt:
+ return ag.Paint.Cap.Butt;
+ case PenLineCap.Round:
+ return ag.Paint.Cap.Round;
+ case PenLineCap.Square:
+ return ag.Paint.Cap.Square;
+ default:
+ throw new NotSupportedException();
+ }
+ }
+
+ public static PenLineCap ToEto(this ag.Paint.Cap value)
+ {
+ if (object.ReferenceEquals(value, ag.Paint.Cap.Butt))
+ return PenLineCap.Butt;
+ if (object.ReferenceEquals(value, ag.Paint.Cap.Round))
+ return PenLineCap.Round;
+ if (object.ReferenceEquals(value, ag.Paint.Cap.Square))
+ return PenLineCap.Square;
+ throw new NotSupportedException();
+ }
+
+ public static ag.Matrix ToAndroid(this IMatrix m)
+ {
+ return (ag.Matrix)m.ControlObject;
+ }
+
+ public static Point ToEto(this ag.Point point)
+ {
+ return new Point(point.X, point.Y);
+ }
+
+ public static PointF ToEto(this ag.PointF point)
+ {
+ return new PointF(point.X, point.Y);
+ }
+
+ public static ag.PointF ToAndroid(this PointF point)
+ {
+ return new ag.PointF(point.X, point.Y);
+ }
+
+ public static ag.Point ToAndroidPoint(this PointF point)
+ {
+ return new ag.Point((int)point.X, (int)point.Y);
+ }
+
+ public static Rectangle ToEto(this ag.Rect rect)
+ {
+ return new Rectangle(rect.Left, rect.Top, rect.Width(), rect.Height());
+ }
+
+ public static RectangleF ToEto(this ag.RectF rect)
+ {
+ return new RectangleF(rect.Left, rect.Top, rect.Width(), rect.Height());
+ }
+
+ public static ag.Rect ToAndroid(this Rectangle rect)
+ {
+ return new ag.Rect(rect.X, rect.Y, rect.Width, rect.Height);
+ }
+
+ public static ag.RectF ToAndroid(this RectangleF rect)
+ {
+ return new ag.RectF(rect.X, rect.Y, rect.Width, rect.Height);
+ }
+
+ public static ag.Rect ToAndroidRectangle(this RectangleF rect)
+ {
+ return new ag.Rect((int)rect.X, (int)rect.Y, (int)rect.Width, (int)rect.Height);
+ }
+
+ internal static ag.Point[] ToAndroid(this Point[] points)
+ {
+ var result =
+ new ag.Point[points.Length];
+
+ for (var i = 0;
+ i < points.Length;
+ ++i)
+ {
+ var p = points[i];
+ result[i] =
+ new ag.Point(p.X, p.Y);
+ }
+
+ return result;
+ }
+
+ internal static ag.PointF[] ToAndroid(this PointF[] points)
+ {
+ var result =
+ new ag.PointF[points.Length];
+
+ for (var i = 0;
+ i < points.Length;
+ ++i)
+ {
+ var p = points[i];
+ result[i] =
+ new ag.PointF(p.X, p.Y);
+ }
+
+ return result;
+ }
+
+ internal static PointF[] ToEto(this ag.PointF[] points)
+ {
+ var result =
+ new PointF[points.Length];
+
+ for (var i = 0;
+ i < points.Length;
+ ++i)
+ {
+ var p = points[i];
+ result[i] =
+ new PointF(p.X, p.Y);
+ }
+
+ return result;
+ }
+
+ public static GraphicsPathHandler ToHandler(this IGraphicsPath path)
+ {
+ return ((GraphicsPathHandler)path.ControlObject);
+ }
+
+ public static ag.Path ToAndroid(this IGraphicsPath path)
+ {
+ return ((GraphicsPathHandler)path.ControlObject).Control;
+ }
+
+ public static ag.TypefaceStyle ToAndroid(this FontStyle style)
+ {
+ var ret = ag.TypefaceStyle.Normal;
+ if ((style & FontStyle.Bold) != 0)
+ ret = ag.TypefaceStyle.Bold;
+ if ((style & FontStyle.Italic) != 0)
+ ret = ag.TypefaceStyle.Italic;
+ return ret;
+ }
+
+ public static FontStyle ToEto(this ag.TypefaceStyle style)
+ {
+ var ret = FontStyle.None;
+ if (style == ag.TypefaceStyle.Normal)
+ ret = FontStyle.None;
+ else if (style == ag.TypefaceStyle.Bold)
+ ret = FontStyle.Bold;
+ else if (style == ag.TypefaceStyle.Italic)
+ ret = FontStyle.Italic;
+ return ret;
+ }
+
+ public static HorizontalAlign ToEtoHorizontal(this av.GravityFlags gravity)
+ {
+ switch (gravity & av.GravityFlags.HorizontalGravityMask)
+ {
+ case av.GravityFlags.CenterHorizontal:
+ return HorizontalAlign.Center;
+ case av.GravityFlags.Left:
+ return HorizontalAlign.Left;
+ case av.GravityFlags.Right:
+ return HorizontalAlign.Right;
+ default:
+ throw new NotSupportedException();
+ }
+ }
+
+ public static av.GravityFlags ToAndroid(this HorizontalAlign value)
+ {
+ switch (value)
+ {
+ case HorizontalAlign.Center:
+ return av.GravityFlags.CenterHorizontal;
+ case HorizontalAlign.Right:
+ return av.GravityFlags.Right;
+ case HorizontalAlign.Left:
+ return av.GravityFlags.Left;
+ default:
+ throw new NotSupportedException();
+ }
+ }
+
+ public static VerticalAlign ToEtoVertical(this av.GravityFlags gravity)
+ {
+ switch (gravity & av.GravityFlags.VerticalGravityMask)
+ {
+ case av.GravityFlags.CenterVertical:
+ return VerticalAlign.Middle;
+ case av.GravityFlags.Top:
+ return VerticalAlign.Top;
+ case av.GravityFlags.Bottom:
+ return VerticalAlign.Bottom;
+ default:
+ throw new NotSupportedException();
+ }
+ }
+
+ public static av.GravityFlags ToAndroid(this VerticalAlign value)
+ {
+ switch (value)
+ {
+ case VerticalAlign.Middle:
+ return av.GravityFlags.CenterVertical;
+ case VerticalAlign.Top:
+ return av.GravityFlags.Top;
+ case VerticalAlign.Bottom:
+ return av.GravityFlags.Bottom;
+ default:
+ throw new NotSupportedException();
+ }
+ }
+
+ public static ag.Bitmap ToAndroid(this Image image)
+ {
+ var handler = (IAndroidImage)image.Handler;
+ return handler.GetImageWithSize(null);
+ }
+ public static ag.Drawables.BitmapDrawable ToAndroidDrawable(this Image image)
+ {
+ var bmp = image.ToAndroid();
+ return bmp != null ? new ag.Drawables.BitmapDrawable(aa.Application.Context.Resources, bmp) : null;
+ }
+
+ public static ag.Typeface ToAndroid(this Font font)
+ {
+ return FontHandler.GetControl(font);
+ }
+
+ public static Font ToEto(this ag.Typeface typeface)
+ {
+ return new Font(new FontHandler(typeface));
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/BitmapHandler.cs b/Source/Eto.Android/Drawing/BitmapHandler.cs
new file mode 100644
index 0000000000..9e111184ee
--- /dev/null
+++ b/Source/Eto.Android/Drawing/BitmapHandler.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ ///
+ /// Interface for all Android images
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public interface IAndroidImage
+ {
+ ag.Bitmap GetImageWithSize(int? size);
+
+ void DrawImage(GraphicsHandler graphics, RectangleF source, RectangleF destination);
+
+ void DrawImage(GraphicsHandler graphics, float x, float y);
+
+ void DrawImage(GraphicsHandler graphics, float x, float y, float width, float height);
+ }
+
+
+ ///
+ /// Bitmap handler.
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ class BitmapHandler : WidgetHandler, Bitmap.IHandler, IAndroidImage
+ {
+ public BitmapHandler()
+ {
+ }
+
+ public BitmapHandler(ag.Bitmap image)
+ {
+ Control = image;
+ }
+
+ public void Create(string fileName)
+ {
+ Control = ag.BitmapFactory.DecodeFile(fileName);
+ }
+
+ public void Create(System.IO.Stream stream)
+ {
+ Control = ag.BitmapFactory.DecodeStream(stream);
+ }
+
+ public void Create(int width, int height, PixelFormat pixelFormat)
+ {
+ ag.Bitmap.Config config = ag.Bitmap.Config.Argb8888;
+ switch(pixelFormat)
+ {
+ /*case PixelFormat.Format24bppRgb:
+ config = ag.Bitmap.Config.Argb8888;
+ break;*/
+ case PixelFormat.Format32bppRgb:
+ case PixelFormat.Format32bppRgba:
+ config = ag.Bitmap.Config.Argb8888;
+ break;
+ default:
+ throw new ArgumentOutOfRangeException("pixelFormat", pixelFormat, "Not supported");
+ }
+
+ Control = ag.Bitmap.CreateBitmap(width, height, config);
+ }
+
+ public void Create(int width, int height, Graphics graphics)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Create(Image image, int width, int height, ImageInterpolation interpolation)
+ {
+ Control = ag.Bitmap.CreateScaledBitmap(image.ToAndroid(), width, height, false);
+ }
+
+ public void Save(System.IO.Stream stream, ImageFormat format)
+ {
+ ag.Bitmap.CompressFormat compressFormat;
+ if(format == ImageFormat.Jpeg)
+ compressFormat =ag.Bitmap.CompressFormat.Jpeg;
+ else if(format == ImageFormat.Png)
+ compressFormat = ag.Bitmap.CompressFormat.Png;
+ else
+ throw new ArgumentException("ImageFormat must be Jpeg or Png");
+ Control.Compress(compressFormat, 100, stream); // 100 means maximum quality. Png ignores this since it is lossless.
+ }
+
+ public Bitmap Clone(Rectangle? rectangle = null)
+ {
+ if (rectangle != null)
+ {
+ var r = rectangle.Value;
+ return new Bitmap(new BitmapHandler(
+ ag.Bitmap.CreateBitmap(this.Control, r.X, r.Y, r.Width, r.Height)));
+ }
+ else
+ return new Bitmap(new BitmapHandler(ag.Bitmap.CreateBitmap(this.Control)));
+ }
+
+ public Color GetPixel(int x, int y)
+ {
+ return new ag.Color(Control.GetPixel(x, y)).ToEto();
+ }
+
+ public Size Size
+ {
+ get { return new Size(Control.Width, Control.Height); }
+ }
+
+ public BitmapData Lock()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Unlock(BitmapData bitmapData)
+ {
+ throw new NotImplementedException();
+ }
+
+ public ag.Bitmap GetImageWithSize(int? size)
+ {
+ return Control;
+ }
+
+ public void DrawImage(GraphicsHandler graphics, RectangleF source, RectangleF destination)
+ {
+ graphics.Control.DrawBitmap(Control, new Rectangle(source).ToAndroid(), destination.ToAndroid(), paint: null);
+ }
+
+ public void DrawImage(GraphicsHandler graphics, float x, float y)
+ {
+ graphics.Control.DrawBitmap(Control, x, y, paint: null);
+ }
+
+ public void DrawImage(GraphicsHandler graphics, float x, float y, float width, float height)
+ {
+ graphics.Control.DrawBitmap(Control, null, new RectangleF(x, y, width, height).ToAndroid(), paint: null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/BrushHandler.cs b/Source/Eto.Android/Drawing/BrushHandler.cs
new file mode 100644
index 0000000000..6af7436641
--- /dev/null
+++ b/Source/Eto.Android/Drawing/BrushHandler.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ public abstract class BrushHandler
+ {
+ public abstract ag.Paint GetPaint(Brush brush);
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/FontFamilyHandler.cs b/Source/Eto.Android/Drawing/FontFamilyHandler.cs
new file mode 100644
index 0000000000..41460d7568
--- /dev/null
+++ b/Source/Eto.Android/Drawing/FontFamilyHandler.cs
@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ public class FontFamilyHandler : WidgetHandler, FontFamily.IHandler
+ {
+ public string Name
+ {
+ get { return Control.Class.Name; }
+ }
+
+ public IEnumerable Typefaces
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public void Create(string familyName)
+ {
+ Control = ag.Typeface.Create(familyName, ag.TypefaceStyle.Normal); // the style doesn't matter
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/FontHandler.cs b/Source/Eto.Android/Drawing/FontHandler.cs
new file mode 100644
index 0000000000..5414340c80
--- /dev/null
+++ b/Source/Eto.Android/Drawing/FontHandler.cs
@@ -0,0 +1,159 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public class FontHandler : WidgetHandler, Font.IHandler
+ {
+ float size;
+ ///
+ /// Used by GraphicsHandler.MeasureText
+ ///
+ ag.Paint paint;
+ public ag.Paint Paint
+ {
+ get
+ {
+ if (paint == null)
+ {
+ paint = new ag.Paint();
+ paint.SetTypeface(this.Control);
+ }
+ return paint;
+ }
+ }
+
+ ag.Paint.FontMetrics fontMetrics;
+ ag.Paint.FontMetrics FontMetrics { get { return fontMetrics = fontMetrics ?? Paint.GetFontMetrics(); } }
+
+ public FontHandler()
+ {
+ }
+
+ public FontHandler(ag.Typeface typeface)
+ {
+ Control = typeface;
+ }
+
+ public void Create(FontFamily family, float size, FontStyle style, FontDecoration decoration)
+ {
+ this.size = size;
+ this.Control = ag.Typeface.Create(family.ControlObject as ag.Typeface, style.ToAndroid());
+ }
+
+ // TODO:
+ public void Create(SystemFont systemFont, float? size, FontDecoration decoration)
+ {
+ var style = ag.TypefaceStyle.Normal;
+ switch (systemFont)
+ {
+ case SystemFont.Default:
+ break;
+ case SystemFont.Bold:
+ break;
+ case SystemFont.Label:
+ break;
+ case SystemFont.TitleBar:
+ break;
+ case SystemFont.ToolTip:
+ break;
+ case SystemFont.MenuBar:
+ break;
+ case SystemFont.Menu:
+ break;
+ case SystemFont.Message:
+ break;
+ case SystemFont.Palette:
+ break;
+ case SystemFont.StatusBar:
+ break;
+ default:
+ break;
+ }
+
+ Control = ag.Typeface.Create(ag.Typeface.Default, style);
+ }
+
+ public void Create(FontTypeface typeface, float size, FontDecoration decoration)
+ {
+ this.size = size;
+ this.Control = ag.Typeface.Create(typeface.Family.Name, typeface.FontStyle.ToAndroid());
+ }
+
+ public float XHeight
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public float Ascent
+ {
+ get { return Math.Abs(FontMetrics.Ascent); } // TODO: does this need to be scaled?
+ }
+
+ public float Descent
+ {
+ get { return Math.Abs(FontMetrics.Descent); } // TODO: does this need to be scaled?
+ }
+
+ public float LineHeight
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public float Leading
+ {
+ get { return Math.Abs(FontMetrics.Leading); } // TODO: does this need to be scaled?
+ }
+
+ public float Baseline
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public float Size
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public string FamilyName
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public FontStyle FontStyle
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public FontDecoration FontDecoration
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public FontFamily Family
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public FontTypeface Typeface
+ {
+ get { throw new NotImplementedException(); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/FontTypefaceHandler.cs b/Source/Eto.Android/Drawing/FontTypefaceHandler.cs
new file mode 100644
index 0000000000..8fbbf64b37
--- /dev/null
+++ b/Source/Eto.Android/Drawing/FontTypefaceHandler.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ class FontTypefaceHandler : WidgetHandler, FontTypeface.IHandler
+ {
+ public FontTypefaceHandler(ag.TypefaceStyle style)
+ {
+ this.Control = style;
+ Name = this.FontStyle.ToString().Replace(',', ' ');
+ }
+
+ public string Name { get; set; }
+
+ public FontStyle FontStyle
+ {
+ get { return Control.ToEto(); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/FontsHandler.cs b/Source/Eto.Android/Drawing/FontsHandler.cs
new file mode 100644
index 0000000000..0387ecb20a
--- /dev/null
+++ b/Source/Eto.Android/Drawing/FontsHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ class FontsHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/GraphicsHandler.cs b/Source/Eto.Android/Drawing/GraphicsHandler.cs
new file mode 100644
index 0000000000..d3545635c5
--- /dev/null
+++ b/Source/Eto.Android/Drawing/GraphicsHandler.cs
@@ -0,0 +1,209 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public class GraphicsHandler : WidgetHandler, Graphics.IHandler
+ {
+ public GraphicsHandler()
+ {
+ }
+
+ public float PointsPerPixel { get { return 1f; } } // TODO
+
+ public PixelOffsetMode PixelOffsetMode { get; set; } // TODO
+
+ public void CreateFromImage(Bitmap image)
+ {
+ Control = new ag.Canvas((ag.Bitmap)image.ControlObject);
+ }
+
+ public void DrawLine(Pen pen, float startx, float starty, float endx, float endy)
+ {
+ Control.DrawLine(startx, starty, endx, endy, pen.ToAndroid());
+ }
+
+ public void DrawRectangle(Pen pen, float x, float y, float width, float height)
+ {
+ Control.DrawRect(new RectangleF(x, y, width, height).ToAndroid(), pen.ToAndroid());
+ }
+
+ public void FillRectangle(Brush brush, float x, float y, float width, float height)
+ {
+ Control.DrawRect(new RectangleF(x, y, width, height).ToAndroid(), brush.ToAndroid());
+ }
+
+ public void FillEllipse(Brush brush, float x, float y, float width, float height)
+ {
+ Control.DrawOval(new RectangleF(x, y, width, height).ToAndroid(), brush.ToAndroid());
+ }
+
+ public void DrawEllipse(Pen pen, float x, float y, float width, float height)
+ {
+ Control.DrawOval(new RectangleF(x, y, width, height).ToAndroid(), pen.ToAndroid());
+ }
+
+ public void DrawArc(Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle)
+ {
+ Control.DrawArc(new RectangleF(x, y, width, height).ToAndroid(), startAngle, sweepAngle, false, pen.ToAndroid());
+ }
+
+ public void FillPie(Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle)
+ {
+ Control.DrawArc(new RectangleF(x, y, width, height).ToAndroid(), startAngle, sweepAngle, true, brush.ToAndroid());
+ }
+
+ public void FillPath(Brush brush, IGraphicsPath path)
+ {
+ Control.DrawPath(path.ToAndroid(), brush.ToAndroid());
+ }
+
+ public void DrawPath(Pen pen, IGraphicsPath path)
+ {
+ Control.DrawPath(path.ToAndroid(), pen.ToAndroid());
+ }
+
+ public void DrawImage(Image image, float x, float y)
+ {
+ var handler = image.Handler as IAndroidImage;
+ handler.DrawImage(this, x, y);
+ }
+
+ public void DrawImage(Image image, float x, float y, float width, float height)
+ {
+ var handler = image.Handler as IAndroidImage;
+ handler.DrawImage(this, x, y, width, height);
+ }
+
+ public void DrawImage(Image image, RectangleF source, RectangleF destination)
+ {
+ var handler = image.Handler as IAndroidImage;
+ handler.DrawImage(this, source, destination);
+ }
+
+
+ public void DrawText(Font font, SolidBrush brush, float x, float y, string text)
+ {
+ var paint = GetTextPaint(font);
+ paint.Color = brush.ToAndroid().Color; // this overwrites the color on the cached paint, but that's ok since it is only used here.
+ Control.DrawText(text, x, y, paint);
+ }
+
+ public SizeF MeasureString(Font font, string text)
+ {
+ if(string.IsNullOrEmpty(text)) // needed to avoid exception
+ return SizeF.Empty;
+ var paint = GetTextPaint(font);
+
+ // See http://stackoverflow.com/questions/7549182/android-paint-measuretext-vs-gettextbounds
+ var bounds = new ag.Rect();
+ paint.GetTextBounds(text, 0, text.Length, bounds);
+
+ // TODO: see the above article; the width may be truncated to the nearest integer.
+ return new SizeF(bounds.Width(), bounds.Height());
+ }
+
+ ///
+ /// Returns a Paint that is cached on the font.
+ /// This is used by all font operations (across all Canvases) that use the same font.
+ ///
+ private ag.Paint GetTextPaint(Font font)
+ {
+ var paint = (font.Handler as FontHandler).Paint;
+ paint.AntiAlias = AntiAlias;
+ return paint;
+ }
+
+ public void Flush()
+ {
+ }
+
+ // The ANTI_ALIAS flag on Paint (not Canvas) causes it to render antialiased.
+ // SUBPIXEL_TEXT_FLAG is currently unsupported on Android.
+ // See http://stackoverflow.com/questions/4740565/meaning-of-some-paint-constants-in-android
+ public bool AntiAlias { get; set; }
+
+ // TODO: setting the FILTER_BITMAP_FLAG on Paint (not Canvas)
+ // causes it to do a bilinear interpolation.
+ public ImageInterpolation ImageInterpolation { get; set; }
+
+ public bool IsRetained
+ {
+ get { return false; }
+ }
+
+ public void TranslateTransform(float offsetX, float offsetY)
+ {
+ Control.Translate(offsetX, offsetY);
+ }
+
+ public void RotateTransform(float angle)
+ {
+ Control.Rotate(angle);
+ }
+
+ public void ScaleTransform(float scaleX, float scaleY)
+ {
+ Control.Scale(scaleX, scaleY);
+ }
+
+ public void MultiplyTransform(IMatrix matrix)
+ {
+ Control.Concat(matrix.ToAndroid());
+ }
+
+ public void SaveTransform()
+ {
+ Control.Save(ag.SaveFlags.Matrix);
+ }
+
+ public void RestoreTransform()
+ {
+ Control.Restore();
+ }
+
+ public RectangleF ClipBounds
+ {
+ get { return Control.ClipBounds.ToEto(); }
+ }
+
+ public void SetClip(RectangleF rectangle)
+ {
+ Control.ClipRect(rectangle.ToAndroid(), ag.Region.Op.Replace);
+ }
+
+ public void SetClip(IGraphicsPath path)
+ {
+ // NOTE: This may not work with hardware acceleration.
+ // See http://developer.android.com/guide/topics/graphics/hardware-accel.html#drawing-support
+ // See http://stackoverflow.com/questions/16889815/canvas-clippath-only-works-on-android-emulator
+ Control.ClipPath(path.ToAndroid(), ag.Region.Op.Replace);
+ }
+
+ public void ResetClip()
+ {
+ Control.ClipRect(new ag.Rect(int.MinValue, int.MinValue, int.MaxValue, int.MaxValue));
+ }
+
+ public void Clear(SolidBrush brush)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/GraphicsPathHandler.cs b/Source/Eto.Android/Drawing/GraphicsPathHandler.cs
new file mode 100644
index 0000000000..aa0fed1720
--- /dev/null
+++ b/Source/Eto.Android/Drawing/GraphicsPathHandler.cs
@@ -0,0 +1,146 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public class GraphicsPathHandler : GraphicsPath.IHandler
+ {
+ public ag.Path Control { get; private set; }
+ ag.PointF position;
+
+ public GraphicsPathHandler()
+ {
+ Control = new ag.Path();
+ }
+
+ public GraphicsPathHandler(ag.Path control)
+ {
+ Control = control;
+ }
+
+ public RectangleF Bounds
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public FillMode FillMode
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool IsEmpty
+ {
+ get { return Control.IsEmpty; }
+ }
+
+ public PointF CurrentPoint
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public void AddLine(float startX, float startY, float endX, float endY)
+ {
+ this.Control.MoveTo(startX, startY);
+ this.Control.LineTo(endX, endY);
+ position = new ag.PointF(endX, endY);
+ }
+
+ public void AddLines(IEnumerable points)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void LineTo(float x, float y)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void MoveTo(float x, float y)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void AddArc(float x, float y, float width, float height, float startAngle, float sweepAngle)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void AddBezier(PointF start, PointF control1, PointF control2, PointF end)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void AddCurve(IEnumerable points, float tension = 0.5f)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void AddEllipse(float x, float y, float width, float height)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void AddRectangle(float x, float y, float width, float height)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void AddPath(IGraphicsPath path, bool connect = false)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Transform(IMatrix matrix)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void StartFigure()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void CloseFigure()
+ {
+ throw new NotImplementedException();
+ }
+
+ public IGraphicsPath Clone()
+ {
+ return new GraphicsPathHandler(new ag.Path(this.Control));
+ }
+
+ public void Dispose()
+ {
+ Control.Dispose();
+ }
+
+ public object ControlObject
+ {
+ get { return this; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/IconHandler.cs b/Source/Eto.Android/Drawing/IconHandler.cs
new file mode 100644
index 0000000000..20befc98e6
--- /dev/null
+++ b/Source/Eto.Android/Drawing/IconHandler.cs
@@ -0,0 +1,53 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ class IconHandler : WidgetHandler, Icon.IHandler, IAndroidImage
+ {
+ public void Create(System.IO.Stream stream)
+ {
+ Control = ag.BitmapFactory.DecodeStream(stream);
+ }
+
+ public void Create(string fileName)
+ {
+ Control = ag.BitmapFactory.DecodeFile(fileName);
+ }
+ public Size Size
+ {
+ get { return new Size(Control.Width, Control.Height); }
+ }
+
+ public ag.Bitmap GetImageWithSize(int? size)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void DrawImage(GraphicsHandler graphics, RectangleF source, RectangleF destination)
+ {
+ graphics.Control.DrawBitmap(Control, new Rectangle(source).ToAndroid(), destination.ToAndroid(), paint: null);
+ }
+
+ public void DrawImage(GraphicsHandler graphics, float x, float y)
+ {
+ graphics.Control.DrawBitmap(Control, x, y, paint: null);
+ }
+
+ public void DrawImage(GraphicsHandler graphics, float x, float y, float width, float height)
+ {
+ graphics.Control.DrawBitmap(Control, null, new RectangleF(x, y, width, height).ToAndroid(), paint: null);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/IndexedBitmapHandler.cs b/Source/Eto.Android/Drawing/IndexedBitmapHandler.cs
new file mode 100644
index 0000000000..f23988d4f4
--- /dev/null
+++ b/Source/Eto.Android/Drawing/IndexedBitmapHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ class IndexedBitmapHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/LinearGradientBrushHandler.cs b/Source/Eto.Android/Drawing/LinearGradientBrushHandler.cs
new file mode 100644
index 0000000000..c78c3ce5dd
--- /dev/null
+++ b/Source/Eto.Android/Drawing/LinearGradientBrushHandler.cs
@@ -0,0 +1,67 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ public class LinearGradientBrushHandler : BrushHandler, LinearGradientBrush.IHandler
+ {
+ // TODO: Android does not have the concept of a linear
+ class BrushObject
+ {
+ public ag.Paint Paint { get; set; }
+ public ag.Matrix InitialMatrix { get; set; }
+ public IMatrix Matrix { get; set; }
+ }
+
+ public override ag.Paint GetPaint(Brush brush)
+ {
+ return ((BrushObject)brush.ControlObject).Paint;
+ }
+
+ public object Create(Color startColor, Color endColor, PointF startPoint, PointF endPoint)
+ {
+ var shader = new ag.LinearGradient(startPoint.X, startPoint.Y, endPoint.X, endPoint.Y, startColor.ToAndroid(), endColor.ToAndroid(),
+ // is this correct?
+ ag.Shader.TileMode.Clamp);
+ var paint = new ag.Paint();
+ paint.SetShader(shader);
+ return new BrushObject { Paint = paint }; // TODO: initial matrix
+ }
+
+ public object Create(RectangleF rectangle, Color startColor, Color endColor, float angle)
+ {
+ throw new NotImplementedException();
+ }
+
+ public IMatrix GetTransform(LinearGradientBrush widget)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SetTransform(LinearGradientBrush widget, IMatrix transform)
+ {
+ throw new NotImplementedException();
+ }
+
+ public GradientWrapMode GetGradientWrap(LinearGradientBrush widget)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SetGradientWrap(LinearGradientBrush widget, GradientWrapMode gradientWrap)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/MatrixHandler.cs b/Source/Eto.Android/Drawing/MatrixHandler.cs
new file mode 100644
index 0000000000..53a26bb93b
--- /dev/null
+++ b/Source/Eto.Android/Drawing/MatrixHandler.cs
@@ -0,0 +1,232 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public class MatrixHandler : Matrix.IHandler, IDisposable
+ {
+ ag.Matrix control;
+
+ public ag.Matrix Control { get { return control; } }
+
+ object IControlObjectSource.ControlObject { get { return control; } }
+
+ public MatrixHandler()
+ {
+ }
+
+ public MatrixHandler(ag.Matrix matrix)
+ {
+ control = matrix;
+ }
+
+ public float[] Elements
+ {
+ get
+ {
+ var nineValues = NineValues;
+ var result = new float[6]
+ {
+ nineValues[0], nineValues[1], // array[2] not copied as it is always 1
+ nineValues[3], nineValues[4], // array[5] not copied as it is always 1
+ nineValues[6], nineValues[7] // array[8] not copied as it is always 1
+ };
+
+ return result;
+ }
+ }
+
+ private float[] NineValues
+ {
+ get
+ {
+ var nineValues = new float[9];
+ control.GetValues(nineValues);
+ return nineValues;
+ }
+ }
+
+ private void SetValue(int indexInNineValues, float value)
+ {
+ var nineValues = new float[9];
+ control.GetValues(nineValues);
+ nineValues[indexInNineValues] = value;
+ control.SetValues(nineValues);
+ }
+
+ public float Xx
+ {
+ get { return NineValues[0]; }
+ set { SetValue(0, value); }
+ }
+
+ public float Xy
+ {
+ get { return NineValues[1]; }
+ set { SetValue(1, value); }
+ }
+
+ public float Yx
+ {
+ get { return NineValues[3]; }
+ set { SetValue(3, value); }
+ }
+
+ public float Yy
+ {
+ get { return NineValues[4]; }
+ set { SetValue(4, value); }
+ }
+
+ public float X0
+ {
+ get { return NineValues[6]; }
+ set { SetValue(6, value); }
+ }
+
+ public float Y0
+ {
+ get { return NineValues[7]; }
+ set { SetValue(7, value); }
+ }
+
+ public void Rotate(float angle)
+ {
+ this.Control.PreRotate(angle);
+ }
+
+ public void RotateAt(float angle, float centerX, float centerY)
+ {
+#if TODO
+ this.Control.RotateAt(angle, new ag.PointF(centerX, centerY), ag.MatrixOrder.Prepend);
+#else
+ throw new NotImplementedException();
+#endif
+ }
+
+ public void Translate(float x, float y)
+ {
+ this.Control.PreTranslate(x, y);
+ }
+
+ public void Scale(float scaleX, float scaleY)
+ {
+ this.Control.PreScale(scaleX, scaleY);
+ }
+
+ public void ScaleAt(float scaleX, float scaleY, float centerX, float centerY)
+ {
+#if TODO
+ var m = new ag.Matrix(scaleX, 0, 0, scaleY, centerX - centerX * scaleX, centerY - centerY * scaleY);
+ this.Control.Multiply(m, ag.MatrixOrder.Prepend);
+#else
+ throw new NotImplementedException();
+#endif
+ }
+
+ public void Skew(float skewX, float skewY)
+ {
+#if TODO
+ var m = new ag.Matrix(1, (float)Math.Tan(Conversions.DegreesToRadians(skewX)), (float)Math.Tan(Conversions.DegreesToRadians(skewY)), 1, 0, 0);
+ this.Control.Multiply(m, ag.MatrixOrder.Prepend);
+#else
+ throw new NotImplementedException();
+#endif
+ }
+
+ public void Append(IMatrix matrix)
+ {
+ this.Control.PostConcat(matrix.ToAndroid());
+ }
+
+ public void Prepend(IMatrix matrix)
+ {
+ this.Control.PreConcat(matrix.ToAndroid());
+ }
+
+ public void Create()
+ {
+ control = new ag.Matrix();
+ }
+
+ public void Create(float xx, float yx, float xy, float yy, float dx, float dy)
+ {
+ control = new ag.Matrix();
+ var values = new float[]
+ {
+ xx, yx, 1,
+ xy, yy, 1,
+ dx, dy, 1
+ };
+ control.SetValues(values);
+ }
+
+ public void Invert()
+ {
+ var inverse = new ag.Matrix();
+ this.Control.Invert(inverse);
+ this.control = inverse;
+ }
+
+ public PointF TransformPoint(Point p)
+ {
+ var px = new ag.Point[] { Conversions.ToAndroidPoint(p) };
+
+#if TODO
+ this.Control.TransformPoints(px);
+
+ return Platform.Conversions.ToEto(px[0]);
+#else
+ throw new NotImplementedException();
+#endif
+ }
+
+ public PointF TransformPoint(PointF p)
+ {
+ var px = new ag.PointF[] { p.ToAndroid() };
+
+#if TODO
+ this.Control.TransformPoints(px);
+#else
+ throw new NotImplementedException();
+#endif
+
+
+ return px[0].ToEto();
+ }
+
+ public void Dispose()
+ {
+ if (control != null)
+ {
+ control.Dispose();
+ control = null;
+ }
+ }
+
+ public IMatrix Clone()
+ {
+#if TODO
+ return new MatrixHandler(control.Clone());
+#else
+ throw new NotImplementedException();
+#endif
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/PenHandler.cs b/Source/Eto.Android/Drawing/PenHandler.cs
new file mode 100644
index 0000000000..9815c2cfd3
--- /dev/null
+++ b/Source/Eto.Android/Drawing/PenHandler.cs
@@ -0,0 +1,101 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public class PenHandler : Pen.IHandler
+ {
+ public object Create(Color color, float thickness)
+ {
+ var paint = new ag.Paint
+ {
+ Color = color.ToAndroid(),
+ StrokeWidth = thickness,
+ StrokeCap = ag.Paint.Cap.Square,
+ StrokeMiter = 10f
+ };
+ return paint;
+ }
+
+ public Color GetColor(Pen widget)
+ {
+ return widget.ToAndroid().Color.ToEto();
+ }
+
+ public void SetColor(Pen widget, Color color)
+ {
+ widget.ToAndroid().Color = color.ToAndroid();
+ }
+
+ public float GetThickness(Pen widget)
+ {
+ return widget.ToAndroid().StrokeWidth;
+ }
+
+ public void SetThickness(Pen widget, float thickness)
+ {
+ widget.ToAndroid().StrokeWidth = thickness;
+ }
+
+ public PenLineJoin GetLineJoin(Pen widget)
+ {
+ return widget.ToAndroid().StrokeJoin.ToEto();
+ }
+
+ public void SetLineJoin(Pen widget, PenLineJoin lineJoin)
+ {
+ widget.ToAndroid().StrokeJoin = lineJoin.ToAndroid();
+ }
+
+ public PenLineCap GetLineCap(Pen widget)
+ {
+ return widget.ToAndroid().StrokeCap.ToEto();
+ }
+
+ public void SetLineCap(Pen widget, PenLineCap lineCap)
+ {
+ var pen = widget.ToAndroid();
+ pen.StrokeCap = lineCap.ToSD();
+ SetDashStyle(widget, widget.DashStyle);
+ }
+
+ public float GetMiterLimit(Pen widget)
+ {
+ return widget.ToAndroid().StrokeMiter;
+ }
+
+ public void SetMiterLimit(Pen widget, float miterLimit)
+ {
+ widget.ToAndroid().StrokeMiter = miterLimit;
+ }
+
+ public void SetDashStyle(Pen widget, DashStyle dashStyle)
+ {
+ var pen = widget.ToAndroid();
+
+ if (dashStyle == null || dashStyle.IsSolid)
+ pen.SetPathEffect(null);
+ else
+ {
+ // TODO: create a new ag.DashPathEffect with the appropriate intervals
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/SolidBrushHandler.cs b/Source/Eto.Android/Drawing/SolidBrushHandler.cs
new file mode 100644
index 0000000000..27b5ca3007
--- /dev/null
+++ b/Source/Eto.Android/Drawing/SolidBrushHandler.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public class SolidBrushHandler : BrushHandler, SolidBrush.IHandler
+ {
+ public object Create(Color color)
+ {
+ var result = new ag.Paint
+ {
+ Color = color.ToAndroid(),
+ };
+ result.SetStyle(ag.Paint.Style.Fill);
+ return result;
+ }
+
+ public Color GetColor(SolidBrush widget)
+ {
+ return ((ag.Paint)widget.ControlObject).Color.ToEto();
+ }
+
+ public void SetColor(SolidBrush widget, Color color)
+ {
+ throw new NotImplementedException();
+ }
+
+ public override ag.Paint GetPaint(Brush brush)
+ {
+ return (ag.Paint)brush.ControlObject;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Drawing/TextureBrushHandler.cs b/Source/Eto.Android/Drawing/TextureBrushHandler.cs
new file mode 100644
index 0000000000..f6dd8e0720
--- /dev/null
+++ b/Source/Eto.Android/Drawing/TextureBrushHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Drawing
+{
+ class TextureBrushHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Eto.Android.csproj b/Source/Eto.Android/Eto.Android.csproj
new file mode 100644
index 0000000000..1b68e4d3e8
--- /dev/null
+++ b/Source/Eto.Android/Eto.Android.csproj
@@ -0,0 +1,119 @@
+
+
+
+ Debug
+ AnyCPU
+ {7A02E771-D30B-41A1-8A35-C78D3940FC33}
+ {EFBA0AD7-5A72-4C68-AF49-83D382785DCF};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
+ Library
+ Eto.Android
+ Assets
+ Resources
+ Eto.Android
+ Resources\Resource.designer.cs
+ Resource
+ True
+ v4.4
+
+
+ true
+ full
+ false
+ ..\..\BuildOutput\Android\Debug
+ DEBUG;
+ 4
+ false
+ None
+
+
+ full
+ true
+ ..\..\BuildOutput\Android\Release
+ 4
+ false
+ false
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {35EF0A4E-2A1A-492C-8BED-106774EA09F2}
+ Eto - Pcl
+
+
+
+
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/AndroidContainer.cs b/Source/Eto.Android/Forms/AndroidContainer.cs
new file mode 100644
index 0000000000..ff208040db
--- /dev/null
+++ b/Source/Eto.Android/Forms/AndroidContainer.cs
@@ -0,0 +1,28 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using a = Android;
+using av = Android.Views;
+using aw = Android.Widget;
+
+namespace Eto.Android.Forms
+{
+ ///
+ /// Base handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public abstract class AndroidContainer : AndroidControl, Container.IHandler
+ where TControl: av.View
+ where TWidget: Container
+ where TCallback: Container.ICallback
+ {
+ protected AndroidContainer()
+ {
+ }
+
+ public virtual bool RecurseToChildren { get { return true; } }
+
+ public virtual Size ClientSize { get { return Size; } set { Size = value; } }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/AndroidControl.cs b/Source/Eto.Android/Forms/AndroidControl.cs
new file mode 100644
index 0000000000..cd50e4eddb
--- /dev/null
+++ b/Source/Eto.Android/Forms/AndroidControl.cs
@@ -0,0 +1,165 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using a = Android;
+using av = Android.Views;
+using aw = Android.Widget;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace Eto.Android.Forms
+{
+ public interface IAndroidControl
+ {
+ av.View ContainerControl { get; }
+ }
+
+ ///
+ /// Base handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public abstract class AndroidControl : WidgetHandler, Control.IHandler, IAndroidControl
+ where TControl: av.View
+ where TWidget: Control
+ where TCallback: Control.ICallback
+ {
+ public abstract av.View ContainerControl { get; }
+
+ public void Invalidate()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Invalidate(Rectangle rect)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SuspendLayout()
+ {
+ }
+
+ public void ResumeLayout()
+ {
+ }
+
+ public void Focus()
+ {
+ Control.RequestFocus();
+ }
+
+ public virtual void OnPreLoad(EventArgs e)
+ {
+ }
+
+ public virtual void OnLoad(EventArgs e)
+ {
+ }
+
+ public virtual void OnLoadComplete(EventArgs e)
+ {
+ }
+
+ public virtual void OnUnLoad(EventArgs e)
+ {
+ }
+
+ public virtual void SetParent(Container parent)
+ {
+ }
+
+ public PointF PointFromScreen(PointF point)
+ {
+ throw new NotImplementedException();
+ }
+
+ public PointF PointToScreen(PointF point)
+ {
+ throw new NotImplementedException();
+ }
+
+ Color? backgroundColor;
+
+ public Color BackgroundColor
+ {
+ get { return backgroundColor ?? Colors.Transparent; }
+ set
+ {
+ backgroundColor = value;
+ ContainerControl.SetBackgroundColor(value.ToAndroid());
+ }
+ }
+
+ public virtual Size Size
+ {
+ get { return new Size(ContainerControl.Width, ContainerControl.Height); }
+ set
+ {
+ Control.SetMinimumWidth(value.Width);
+ Control.SetMinimumHeight(value.Height);
+ }
+ }
+
+ public virtual bool Enabled
+ {
+ get { return Control.Enabled; }
+ set { Control.Enabled = value; }
+ }
+
+ public bool HasFocus
+ {
+ get { return Control.IsFocused; }
+ }
+
+ public bool Visible
+ {
+ get { return Control.Visibility == av.ViewStates.Visible; }
+ set { Control.Visibility = value ? av.ViewStates.Visible : av.ViewStates.Invisible; }
+ }
+
+ public virtual Point Location
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set { }
+ }
+
+ public IEnumerable SupportedPlatformCommands
+ {
+ get { return Enumerable.Empty(); }
+ }
+
+ public void MapPlatformCommand(string systemAction, Command action)
+ {
+ throw new NotImplementedException();
+ }
+
+
+ public string ToolTip
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Cursor Cursor
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Platform.Android/Forms/AndroidExtensions.cs b/Source/Eto.Android/Forms/AndroidExtensions.cs
similarity index 96%
rename from Source/Eto.Platform.Android/Forms/AndroidExtensions.cs
rename to Source/Eto.Android/Forms/AndroidExtensions.cs
index 1e9e772083..b7c0dd45ac 100644
--- a/Source/Eto.Platform.Android/Forms/AndroidExtensions.cs
+++ b/Source/Eto.Android/Forms/AndroidExtensions.cs
@@ -5,7 +5,7 @@
using av = Android.Views;
using aw = Android.Widget;
-namespace Eto.Platform.Android.Forms
+namespace Eto.Android.Forms
{
public static class AndroidExtensions
{
diff --git a/Source/Eto.Android/Forms/AndroidPanel.cs b/Source/Eto.Android/Forms/AndroidPanel.cs
new file mode 100644
index 0000000000..2e2be183fd
--- /dev/null
+++ b/Source/Eto.Android/Forms/AndroidPanel.cs
@@ -0,0 +1,88 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using a = Android;
+using av = Android.Views;
+using aw = Android.Widget;
+
+namespace Eto.Android.Forms
+{
+ ///
+ /// Base handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public abstract class AndroidPanel : AndroidContainer, Panel.IHandler
+ where TControl: av.View
+ where TWidget: Panel
+ where TCallback: Panel.ICallback
+ {
+ readonly aw.FrameLayout frame;
+ Control content;
+ Size minimumSize;
+
+ protected aw.FrameLayout InnerFrame { get { return frame; } }
+
+ protected AndroidPanel()
+ {
+ frame = new aw.FrameLayout(a.App.Application.Context);
+ }
+
+ protected override void Initialize()
+ {
+ base.Initialize();
+ SetContent(frame);
+ }
+
+ public Control Content
+ {
+ get { return content; }
+ set
+ {
+ if (content != null)
+ {
+ var view = content.GetContainerView();
+ frame.RemoveView(view);
+ }
+ content = value;
+ if (content != null)
+ {
+ var view = content.GetContainerView();
+ view.LayoutParameters = new av.ViewGroup.LayoutParams(av.ViewGroup.LayoutParams.MatchParent, av.ViewGroup.LayoutParams.MatchParent);
+ frame.AddView(view);
+ }
+ }
+ }
+
+ protected abstract void SetContent(av.View content);
+
+ public Padding Padding
+ {
+ get { return frame.GetPadding(); }
+ set { frame.SetPadding(value); }
+ }
+
+ public Size MinimumSize
+ {
+ get { return minimumSize; }
+ set
+ {
+ minimumSize = value;
+ ContainerControl.SetMinimumWidth(value.Width);
+ ContainerControl.SetMinimumHeight(value.Height);
+ }
+ }
+
+ public ContextMenu ContextMenu
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/AndroidWindow.cs b/Source/Eto.Android/Forms/AndroidWindow.cs
new file mode 100644
index 0000000000..aa1e43a186
--- /dev/null
+++ b/Source/Eto.Android/Forms/AndroidWindow.cs
@@ -0,0 +1,183 @@
+using System;
+using System.Threading.Tasks;
+using Eto.Forms;
+using Eto.Drawing;
+using a = Android;
+using av = Android.Views;
+using aw = Android.Widget;
+
+namespace Eto.Android.Forms
+{
+ public interface IAndroidWindow
+ {
+ a.App.Activity Activity { get; set; }
+ }
+
+ ///
+ /// Base handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public abstract class AndroidWindow : AndroidPanel, Window.IHandler, IAndroidWindow
+ where TWidget: Window
+ where TCallback: Window.ICallback
+ {
+ a.App.Activity activity;
+ public a.App.Activity Activity
+ {
+ get { return activity ?? (activity = CreateActivity()); }
+ set { activity = value; }
+ }
+
+ protected virtual a.App.Activity CreateActivity()
+ {
+ return null; // todo
+ }
+
+ protected AndroidWindow()
+ {
+ }
+
+ public override av.View ContainerControl
+ {
+ get { return InnerFrame; }
+ }
+
+ public void Close()
+ {
+ //a.App.Application.Context.Start
+ }
+
+ protected override void SetContent(av.View content)
+ {
+ }
+
+ public ToolBar ToolBar { get; set; }
+
+ public double Opacity { get; set; }
+
+ public string Title { get; set; }
+
+ public Screen Screen
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+
+ public MenuBar Menu
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Icon Icon { get { return null; } set { } }
+
+ public bool Resizable
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool Maximizable
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool Minimizable
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool ShowInTaskbar
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool Topmost
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public WindowState WindowState
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Rectangle? RestoreBounds
+ {
+ get { throw new NotImplementedException(); }
+ }
+
+ public WindowStyle WindowStyle
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public void BringToFront()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void SendToBack()
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/ApplicationHandler.cs b/Source/Eto.Android/Forms/ApplicationHandler.cs
new file mode 100644
index 0000000000..f3342c35bf
--- /dev/null
+++ b/Source/Eto.Android/Forms/ApplicationHandler.cs
@@ -0,0 +1,122 @@
+using System;
+using a = Android;
+using Eto.Forms;
+using System.Collections.Generic;
+using System.Threading;
+
+namespace Eto.Android.Forms
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public class ApplicationHandler : WidgetHandler, Application.IHandler
+ {
+ public static ApplicationHandler Instance { get { return Application.Instance.Handler as ApplicationHandler; } }
+
+ public a.App.Activity MainActivity { get; private set; }
+
+ public ApplicationHandler()
+ {
+ Control = a.App.Application.Context as a.App.Application;
+ }
+
+ public void OnMainFormChanged()
+ {
+ if (Widget.MainForm != null)
+ {
+ var window = Widget.MainForm.Handler as IAndroidWindow;
+ if (window != null)
+ window.Activity = MainActivity;
+ }
+ }
+
+ public void Attach(object context)
+ {
+ var activity = context as a.App.Activity;
+ if (activity != null)
+ {
+ MainActivity = activity;
+ }
+ }
+
+ public void Run()
+ {
+ Callback.OnInitialized(Widget, EventArgs.Empty);
+ }
+
+ public void Quit()
+ {
+ throw new NotImplementedException();
+ }
+
+ public bool QuitIsSupported { get { return false; } }
+
+ public void Open(string url)
+ {
+ throw new NotImplementedException();
+ }
+
+ public void Invoke(Action action)
+ {
+ if (MainActivity != null)
+ {
+ var ev = new ManualResetEvent(false);
+ MainActivity.RunOnUiThread(() =>
+ {
+ try
+ {
+ action();
+ }
+ finally
+ {
+ ev.Set();
+ }
+ });
+ ev.WaitOne();
+ }
+ }
+
+ public void AsyncInvoke(Action action)
+ {
+ if (MainActivity != null)
+ {
+ MainActivity.RunOnUiThread(action);
+ }
+ }
+
+ public Keys CommonModifier
+ {
+ get { return Keys.Control; }
+ }
+
+ public Keys AlternateModifier
+ {
+ get { return Keys.Alt; }
+ }
+
+ public string BadgeLabel
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+
+ public void Restart()
+ {
+ throw new NotImplementedException();
+ }
+
+ public void RunIteration()
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Cells/TextBoxCellHandler.cs b/Source/Eto.Android/Forms/Cells/TextBoxCellHandler.cs
new file mode 100644
index 0000000000..1dd7ffd908
--- /dev/null
+++ b/Source/Eto.Android/Forms/Cells/TextBoxCellHandler.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using Eto.Forms;
+
+namespace Eto.Android.Forms.Cells
+{
+ public interface ICellHandler
+ {
+ av.View CreateView(av.View view, object item);
+ }
+
+ public abstract class CellHandler : WidgetHandler, Cell.IHandler, ICellHandler
+ where TWidget: Cell
+ {
+ public abstract av.View CreateView(av.View view, object item);
+ }
+
+ public class TextBoxCellHandler : CellHandler, TextBoxCell.IHandler
+ {
+ public override av.View CreateView(av.View view, object item)
+ {
+ var tv = view as aw.TextView ?? new aw.TextView(aa.Application.Context);
+
+ tv.Text = Widget.Binding != null ? Widget.Binding.GetValue(item) : null;
+ return tv;
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/AndroidCommonControl.cs b/Source/Eto.Android/Forms/Controls/AndroidCommonControl.cs
new file mode 100644
index 0000000000..faae5d8e2d
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/AndroidCommonControl.cs
@@ -0,0 +1,44 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using a = Android;
+using av = Android.Views;
+using aw = Android.Widget;
+
+namespace Eto.Android.Forms.Controls
+{
+ public abstract class AndroidCommonControl : AndroidControl, CommonControl.IHandler
+ where TWidget: CommonControl
+ where TControl: av.View
+ where TCallback: CommonControl.ICallback
+ {
+ public override av.View ContainerControl
+ {
+ get { return Control; }
+ }
+
+ // TODO
+ public virtual Font Font
+ {
+ get;
+ set;
+ }
+
+ public override Size Size
+ {
+ get { return new Size(Control.Width, Control.Height); }
+ set
+ {
+ // TODO: need to change to desired size, not min size.. e.g. if control is in a container
+ Control.SetMinimumWidth(value.Width);
+ Control.SetMinimumHeight(value.Height);
+ }
+ }
+
+ public override bool Enabled
+ {
+ get { return Control.Enabled; }
+ set { Control.Enabled = value; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/ButtonHandler.cs b/Source/Eto.Android/Forms/Controls/ButtonHandler.cs
new file mode 100644
index 0000000000..ffce31e09a
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/ButtonHandler.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using Eto.Drawing;
+
+namespace Eto.Android.Forms.Controls
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Vivek Jhaveri
+ /// See LICENSE for full terms
+ public class ButtonHandler : AndroidCommonControl, Button.IHandler
+ {
+ public ButtonHandler()
+ {
+ Control = new aw.Button(aa.Application.Context);
+ Control.Click += (sender, e) => Callback.OnClick(Widget, EventArgs.Empty);
+ }
+
+ Image image;
+ public Image Image
+ {
+ get { return image; }
+ set
+ {
+ image = value;
+ Control.SetCompoundDrawablesWithIntrinsicBounds(image.ToAndroidDrawable(), null, null, null);
+ }
+ }
+
+ public ButtonImagePosition ImagePosition
+ {
+ get;
+ set;
+ }
+
+ public string Text
+ {
+ get { return Control.Text; }
+ set { Control.Text = value; }
+ }
+
+ public Color TextColor
+ {
+ get { return Control.TextColors.ToEto(); }
+ set { Control.SetTextColor(value.ToAndroid()); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/CheckBoxHandler.cs b/Source/Eto.Android/Forms/Controls/CheckBoxHandler.cs
new file mode 100644
index 0000000000..86e72ee5f2
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/CheckBoxHandler.cs
@@ -0,0 +1,49 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using Eto.Drawing;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class CheckBoxHandler : AndroidCommonControl, CheckBox.IHandler
+ {
+ public CheckBoxHandler()
+ {
+ Control = new aw.CheckBox(aa.Application.Context);
+ }
+
+ public bool? Checked
+ {
+ get { return Control.Checked; }
+ set { Control.Checked = value ?? false; }
+ }
+
+ // TODO:
+ public bool ThreeState
+ {
+ get;
+ set;
+ }
+
+ public string Text
+ {
+ get { return Control.Text; }
+ set { Control.Text = value; }
+ }
+
+ public Color TextColor
+ {
+ get { return Control.TextColors.ToEto(); }
+ set { Control.SetTextColor(value.ToAndroid()); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/ComboBoxHandler.cs b/Source/Eto.Android/Forms/Controls/ComboBoxHandler.cs
new file mode 100644
index 0000000000..ac4806bfcf
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/ComboBoxHandler.cs
@@ -0,0 +1,94 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class ComboBoxHandler : AndroidControl, ComboBox.IHandler
+ {
+ public override av.View ContainerControl { get { return Control; } }
+
+ public ComboBoxHandler()
+ {
+ Control = new aw.Spinner(aa.Application.Context);
+ }
+
+ public IEnumerable DataStore
+ {
+ get;
+ set;
+ }
+
+ public int SelectedIndex { get; set; }
+
+ public Eto.Drawing.Font Font
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Eto.Drawing.Color TextColor
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public string Text
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool ReadOnly
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool AutoComplete
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/DateTimePickerHandler.cs b/Source/Eto.Android/Forms/Controls/DateTimePickerHandler.cs
new file mode 100644
index 0000000000..4834ce9164
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/DateTimePickerHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class DateTimePickerHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/DrawableHandler.cs b/Source/Eto.Android/Forms/Controls/DrawableHandler.cs
new file mode 100644
index 0000000000..e5dd20315e
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/DrawableHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class DrawableHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/DropDownHandler.cs b/Source/Eto.Android/Forms/Controls/DropDownHandler.cs
new file mode 100644
index 0000000000..8d220a98e5
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/DropDownHandler.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class DropDownHandler : AndroidControl, DropDown.IHandler
+ {
+ public override av.View ContainerControl { get { return Control; } }
+
+ public DropDownHandler()
+ {
+ Control = new aw.Spinner(aa.Application.Context);
+ }
+
+ public IEnumerable DataStore
+ {
+ get;
+ set;
+ }
+
+ public int SelectedIndex { get; set; }
+
+ public Eto.Drawing.Font Font
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Eto.Drawing.Color TextColor
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/GridColumnHandler.cs b/Source/Eto.Android/Forms/Controls/GridColumnHandler.cs
new file mode 100644
index 0000000000..89a8b262d4
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/GridColumnHandler.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class GridColumnHandler : WidgetHandler, GridColumn.IHandler
+ {
+ public string HeaderText { get; set; }
+ public bool Resizable { get; set; }
+ public bool Sortable { get; set; }
+ public bool AutoSize { get; set; }
+ public int Width { get; set; }
+ public Cell DataCell { get; set; }
+ public bool Editable { get; set; }
+ public bool Visible { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/GridHandler.cs b/Source/Eto.Android/Forms/Controls/GridHandler.cs
new file mode 100644
index 0000000000..987d58c9d5
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/GridHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class GridHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/GridViewHandler.cs b/Source/Eto.Android/Forms/Controls/GridViewHandler.cs
new file mode 100644
index 0000000000..a2e5becf90
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/GridViewHandler.cs
@@ -0,0 +1,292 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using Eto.Android.Forms.Cells;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class GridViewHandler : AndroidControl, GridView.IHandler
+ {
+ ColumnsChangedHandler columns;
+ DataStoreHandler collection;
+ Adapter adapter;
+
+ class ColumnsChangedHandler : EnumerableChangedHandler
+ {
+ public GridViewHandler Handler { get; set; }
+
+ public override void AddRange(IEnumerable items)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void RemoveRange(int index, int count)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void AddItem(GridColumn item)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void InsertItem(int index, GridColumn item)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void RemoveItem(int index)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void RemoveAllItems()
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+ }
+
+ class DataStoreHandler : EnumerableChangedHandler
+ {
+ public GridViewHandler Handler { get; set; }
+
+ public override void AddRange(IEnumerable items)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void InsertRange(int index, IEnumerable items)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void AddItem(object item)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void InsertItem(int index, object item)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void RemoveItem(int index)
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+
+ public override void RemoveAllItems()
+ {
+ Handler.adapter.NotifyDataSetChanged();
+ }
+ }
+
+ class Adapter : aw.BaseAdapter
+ {
+ public GridViewHandler Handler { get; set; }
+
+ public override Java.Lang.Object GetItem(int position)
+ {
+ return null;
+ }
+
+ public override long GetItemId(int position)
+ {
+ return position;
+ }
+
+ public override int GetItemViewType(int position)
+ {
+ return position % ViewTypeCount;
+ }
+
+ public override int ViewTypeCount
+ {
+ get { return Math.Max(Handler.columns.Count, 1); }
+ }
+
+ public override av.View GetView(int position, av.View convertView, av.ViewGroup parent)
+ {
+ var colCount = Handler.columns.Count;
+ var row = position;
+ var view = convertView as aw.LinearLayout;
+ var item = Handler.collection.ElementAt(row);
+ if (view == null || view.ChildCount != Handler.columns.Count)
+ {
+ view = new aw.LinearLayout(aa.Application.Context);
+
+ for (int i = 0; i < Handler.columns.Count; i++)
+ {
+ var column = Handler.columns.ElementAt(i);
+ var cell = column.DataCell;
+ av.View colView = null;
+ if (cell != null)
+ {
+ var cellHandler = cell.Handler as ICellHandler;
+ if (cellHandler != null)
+ {
+ colView = cellHandler.CreateView(null, item);
+ }
+ }
+ view.AddView(colView ?? new av.View(aa.Application.Context), new aw.LinearLayout.LayoutParams(av.ViewGroup.LayoutParams.MatchParent, av.ViewGroup.LayoutParams.MatchParent, 1f));
+ }
+ }
+ else
+ {
+ for (int i = 0; i < Handler.columns.Count; i++)
+ {
+ var column = Handler.columns.ElementAt(i);
+ var cell = column.DataCell;
+ if (cell != null)
+ {
+ var cellHandler = cell.Handler as ICellHandler;
+ if (cellHandler != null)
+ {
+ var colView = view.GetChildAt(i);
+ cellHandler.CreateView(colView, item);
+ }
+ }
+ }
+ }
+ return view;
+ }
+
+ public override int Count
+ {
+ get { return Handler.collection.Count; }
+ }
+ }
+
+ public GridViewHandler()
+ {
+ columns = new ColumnsChangedHandler { Handler = this };
+ collection = new DataStoreHandler { Handler = this };
+ adapter = new Adapter { Handler = this };
+ Control = new aw.ListView(aa.Application.Context)
+ {
+ Adapter = adapter,
+ ChoiceMode = aw.ChoiceMode.Single
+ };
+ }
+
+ public override void AttachEvent(string id)
+ {
+ switch (id)
+ {
+ case GridView.SelectionChangedEvent:
+ Control.ItemClick += (sender, e) =>
+ Callback.OnSelectionChanged(Widget, EventArgs.Empty);
+ break;
+ default:
+ base.AttachEvent(id);
+ break;
+ }
+ }
+
+ protected override void Initialize()
+ {
+ base.Initialize();
+ columns.Register(Widget.Columns);
+ }
+
+ public IEnumerable DataStore
+ {
+ get { return collection.Collection; }
+ set { collection.Register(value); }
+ }
+
+ public bool ShowCellBorders { get; set; }
+
+ public bool ShowHeader { get; set; }
+
+ public int RowHeight { get; set; }
+
+ public bool AllowColumnReordering { get; set; }
+
+ public bool AllowMultipleSelection
+ {
+ get { return Control.ChoiceMode == aw.ChoiceMode.Multiple; }
+ set { Control.ChoiceMode = value ? aw.ChoiceMode.Multiple : aw.ChoiceMode.Single; }
+ }
+
+ public IEnumerable SelectedItems
+ {
+ get
+ {
+ foreach (var row in SelectedRows)
+ yield return collection.ElementAt(row);
+ }
+ }
+
+ public IEnumerable SelectedRows
+ {
+ get
+ {
+ var c = Control.CheckedItemPositions;
+ for (int i = 0; i < c.Size(); i++)
+ yield return c.KeyAt(i);
+ }
+ set
+ {
+ var c = Control.CheckedItemPositions;
+ c.Clear();
+ foreach (var row in value)
+ c.Append(row, true);
+
+ }
+ }
+
+ public void SelectRow(int row)
+ {
+ Control.SetItemChecked(row, true);
+ }
+
+ public void UnselectRow(int row)
+ {
+ Control.SetItemChecked(row, false);
+ }
+
+ public void SelectAll()
+ {
+ for (int i = 0; i < collection.Count; i++)
+ SelectRow(i);
+ }
+
+ public void UnselectAll()
+ {
+ Control.ClearChoices();
+ }
+
+ public override av.View ContainerControl
+ {
+ get { return Control; }
+ }
+
+ public ContextMenu ContextMenu
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public void BeginEdit(int row, int column)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/GroupBoxHandler.cs b/Source/Eto.Android/Forms/Controls/GroupBoxHandler.cs
new file mode 100644
index 0000000000..b5597578d7
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/GroupBoxHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class GroupBoxHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/ImageViewHandler.cs b/Source/Eto.Android/Forms/Controls/ImageViewHandler.cs
new file mode 100644
index 0000000000..6c6341961f
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/ImageViewHandler.cs
@@ -0,0 +1,38 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using Eto.Drawing;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class ImageViewHandler : AndroidControl, ImageView.IHandler
+ {
+ public override av.View ContainerControl { get { return Control; } }
+
+ public ImageViewHandler()
+ {
+ Control = new aw.ImageView(aa.Application.Context);
+ }
+
+ Image image;
+ public Image Image
+ {
+ get { return image; }
+ set
+ {
+ image = value;
+ Control.SetImageBitmap(image.ToAndroid());
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/LabelHandler.cs b/Source/Eto.Android/Forms/Controls/LabelHandler.cs
new file mode 100644
index 0000000000..79ddbe3c80
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/LabelHandler.cs
@@ -0,0 +1,77 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using a = Android;
+using av = Android.Views;
+using aw = Android.Widget;
+
+namespace Eto.Android.Forms.Controls
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public class LabelHandler : AndroidCommonControl, Label.IHandler
+ {
+ const av.GravityFlags AlignmentMask = av.GravityFlags.HorizontalGravityMask | av.GravityFlags.VerticalGravityMask;
+
+ public LabelHandler()
+ {
+ Control = new aw.TextView(a.App.Application.Context);
+ }
+
+ public HorizontalAlign HorizontalAlign
+ {
+ get { return Control.Gravity.ToEtoHorizontal(); }
+ set
+ {
+ var gravity = value.ToAndroid();
+ Control.Gravity = (Control.Gravity & ~av.GravityFlags.HorizontalGravityMask & AlignmentMask) | gravity;
+ }
+ }
+
+ public VerticalAlign VerticalAlign
+ {
+ get { return Control.Gravity.ToEtoVertical(); }
+ set
+ {
+ var gravity = value.ToAndroid();
+ Control.Gravity = (Control.Gravity & ~av.GravityFlags.VerticalGravityMask & AlignmentMask) | gravity;
+ }
+ }
+
+ // TODO
+ public WrapMode Wrap
+ {
+ get;
+ set;
+ }
+
+ Font font;
+ public override Font Font
+ {
+ get { return font ?? (font = Control.Typeface.ToEto()); }
+ set
+ {
+ if (font != value)
+ {
+ font = value;
+ Control.Typeface = font.ToAndroid();
+ }
+ }
+ }
+
+ public Color TextColor
+ {
+ get { return Color.FromArgb((int)Control.CurrentTextColor); }
+ set { Control.SetTextColor(value.ToAndroid()); }
+ }
+
+ public string Text
+ {
+ get { return Control.Text; }
+ set { Control.Text = value; }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/ListBoxHandler.cs b/Source/Eto.Android/Forms/Controls/ListBoxHandler.cs
new file mode 100644
index 0000000000..7e5420c6e5
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/ListBoxHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class ListBoxHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/NavigationHandler.cs b/Source/Eto.Android/Forms/Controls/NavigationHandler.cs
new file mode 100644
index 0000000000..44618ee2cd
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/NavigationHandler.cs
@@ -0,0 +1,88 @@
+using System;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using Eto.Forms;
+using System.Collections.Generic;
+
+namespace Eto.Android.Forms.Controls
+{
+ [aa.Activity]
+ public class EtoNavigationActivity : aa.Activity
+ {
+ INavigationItem content;
+
+ protected override void OnCreate(ao.Bundle savedInstanceState)
+ {
+ base.OnCreate(savedInstanceState);
+ var key = Intent.GetStringExtra("item");
+
+ content = NavigationHandler.GetItem(key);
+ if (content != null && content.Content != null)
+ {
+ SetContentView(content.Content.GetContainerView());
+ }
+ }
+ }
+
+ public class NavigationHandler : AndroidContainer, Navigation.IHandler
+ {
+ static Dictionary itemsLookup = new Dictionary();
+
+ public static INavigationItem GetItem(string key)
+ {
+ INavigationItem item;
+ return itemsLookup.TryGetValue(key, out item) ? item : null;
+ }
+
+ readonly Stack items = new Stack();
+
+ public override av.View ContainerControl { get { return Control; } }
+
+ public NavigationHandler()
+ {
+ Control = new aw.FrameLayout(aa.Application.Context);
+ }
+
+ public void Push(INavigationItem item)
+ {
+ if (items.Count > 0)
+ {
+ var intent = new ac.Intent(Control.Context, typeof(EtoNavigationActivity));
+ var key = Guid.NewGuid().ToString();
+ itemsLookup.Add(key, item);
+ intent.PutExtra("item", key);
+ intent.SetFlags(ac.ActivityFlags.NewTask);
+ aa.Application.Context.StartActivity(intent);
+ }
+ else
+ {
+ SetContent(item.Content);
+ }
+ items.Push(item);
+ }
+
+ public void Pop()
+ {
+ var item = items.Pop();
+ SetContent(item.Content);
+ }
+
+ void SetContent(Control content)
+ {
+ Control.RemoveAllViews();
+
+ var view = content.GetContainerView();
+ if (view != null)
+ {
+ view.LayoutParameters = new av.ViewGroup.LayoutParams(av.ViewGroup.LayoutParams.MatchParent, av.ViewGroup.LayoutParams.MatchParent);
+ Control.AddView(view);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/NumericUpDownHandler.cs b/Source/Eto.Android/Forms/Controls/NumericUpDownHandler.cs
new file mode 100644
index 0000000000..c96c226aa5
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/NumericUpDownHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class NumericUpDownHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/PanelHandler.cs b/Source/Eto.Android/Forms/Controls/PanelHandler.cs
new file mode 100644
index 0000000000..49f4742b5d
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/PanelHandler.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public class PanelHandler : AndroidPanel, Panel.IHandler
+ {
+ public override av.View ContainerControl { get { return InnerFrame; } }
+
+ protected override void SetContent(av.View content)
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/PasswordBoxHandler.cs b/Source/Eto.Android/Forms/Controls/PasswordBoxHandler.cs
new file mode 100644
index 0000000000..0add33298f
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/PasswordBoxHandler.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+using Eto.Drawing;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class PasswordBoxHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/ProgressBarHandler.cs b/Source/Eto.Android/Forms/Controls/ProgressBarHandler.cs
new file mode 100644
index 0000000000..1e7a09b89b
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/ProgressBarHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class ProgressBarHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/RadioButtonHandler.cs b/Source/Eto.Android/Forms/Controls/RadioButtonHandler.cs
new file mode 100644
index 0000000000..064b7df956
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/RadioButtonHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class RadioButtonHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/ScrollableHandler.cs b/Source/Eto.Android/Forms/Controls/ScrollableHandler.cs
new file mode 100644
index 0000000000..2a4b7e69d6
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/ScrollableHandler.cs
@@ -0,0 +1,111 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+using Eto.Drawing;
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public class ScrollableHandler : AndroidPanel, Scrollable.IHandler
+ {
+ public ScrollableHandler()
+ {
+ Control = new aw.ScrollView(aa.Application.Context);
+ }
+
+ public void UpdateScrollSizes()
+ {
+ }
+
+ public override av.View ContainerControl
+ {
+ get { return Control; }
+ }
+
+ protected override void SetContent(av.View content)
+ {
+ Control.AddView(content);
+ }
+
+ public Point ScrollPosition
+ {
+ get { return new Point(Control.ScrollX, Control.ScrollY); }
+ set { Control.ScrollTo(value.X, value.Y); }
+ }
+
+ public float MinimumZoom { get; set; }
+
+ public float MaximumZoom { get; set; }
+
+ public float Zoom { get; set; }
+
+ public Size ScrollSize
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public BorderType Border
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Rectangle VisibleRect
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool ExpandContentWidth
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public bool ExpandContentHeight
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/SearchBoxHandler.cs b/Source/Eto.Android/Forms/Controls/SearchBoxHandler.cs
new file mode 100644
index 0000000000..f4c999d06f
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/SearchBoxHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class SearchBoxHandler : TextBoxHandler, SearchBox.IHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/SliderHandler.cs b/Source/Eto.Android/Forms/Controls/SliderHandler.cs
new file mode 100644
index 0000000000..d0f5d1a09d
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/SliderHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class SliderHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/SpinnerHandler.cs b/Source/Eto.Android/Forms/Controls/SpinnerHandler.cs
new file mode 100644
index 0000000000..d8bfd1f991
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/SpinnerHandler.cs
@@ -0,0 +1,43 @@
+using System;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class SpinnerHandler : AndroidControl, Spinner.IHandler
+ {
+ bool enabled;
+
+ public override av.View ContainerControl { get { return Control; } }
+
+ public SpinnerHandler()
+ {
+ Control = new aw.ProgressBar(aa.Application.Context);
+ Control.Indeterminate = true;
+ }
+
+ public override bool Enabled
+ {
+ get { return enabled; }
+ set
+ {
+ if (enabled != value)
+ {
+ enabled = value;
+ if (enabled)
+ Control.Visibility = av.ViewStates.Visible;
+ else
+ Control.Visibility = av.ViewStates.Invisible;
+ }
+ }
+ }
+ }
+}
+
diff --git a/Source/Eto.Android/Forms/Controls/SplitterHandler.cs b/Source/Eto.Android/Forms/Controls/SplitterHandler.cs
new file mode 100644
index 0000000000..a3d4aea477
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/SplitterHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class SplitterHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/TabControlHandler.cs b/Source/Eto.Android/Forms/Controls/TabControlHandler.cs
new file mode 100644
index 0000000000..baa981c96e
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/TabControlHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class TabControlHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/TabPageHandler.cs b/Source/Eto.Android/Forms/Controls/TabPageHandler.cs
new file mode 100644
index 0000000000..a511528411
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/TabPageHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class TabPageHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/TextAreaHandler.cs b/Source/Eto.Android/Forms/Controls/TextAreaHandler.cs
new file mode 100644
index 0000000000..7dfca7dd9e
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/TextAreaHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class TextAreaHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/TextBoxHandler.cs b/Source/Eto.Android/Forms/Controls/TextBoxHandler.cs
new file mode 100644
index 0000000000..7c506619d6
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/TextBoxHandler.cs
@@ -0,0 +1,92 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+using at = Android.Text;
+using Eto.Drawing;
+using Eto.Forms;
+
+namespace Eto.Android.Forms.Controls
+{
+ public class TextBoxHandler : AndroidControl, TextBox.IHandler
+ {
+ public override av.View ContainerControl { get { return Control; } }
+
+ public TextBoxHandler()
+ {
+ Control = new aw.EditText(aa.Application.Context);
+ }
+
+ public void SelectAll()
+ {
+ Control.SelectAll();
+ }
+
+ // TODO
+ public bool ReadOnly
+ {
+ get { return Control.Enabled; }
+ set { Control.Enabled = value; }
+ }
+
+ public override void AttachEvent(string id)
+ {
+ switch (id)
+ {
+ case TextControl.TextChangedEvent:
+ Control.TextChanged += (sender, e) => Callback.OnTextChanged(Widget, EventArgs.Empty);
+ break;
+ default:
+ base.AttachEvent(id);
+ break;
+ }
+ }
+
+ int maxLength = int.MaxValue;
+ public int MaxLength
+ {
+ get { return maxLength; }
+ set
+ {
+ maxLength = value;
+ Control.SetFilters(new [] { new at.InputFilterLengthFilter(maxLength) });
+ }
+ }
+ public string PlaceholderText
+ {
+ get { return Control.Hint; }
+ set { Control.Hint = value; }
+ }
+ public string Text
+ {
+ get { return Control.Text; }
+ set { Control.Text = value; }
+ }
+
+ public Eto.Drawing.Font Font
+ {
+ get
+ {
+ throw new NotImplementedException();
+ }
+ set
+ {
+ throw new NotImplementedException();
+ }
+ }
+
+ public Color TextColor
+ {
+ get { return Control.TextColors.ToEto(); }
+ set { Control.SetTextColor(value.ToAndroid()); }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/TreeGridViewHandler.cs b/Source/Eto.Android/Forms/Controls/TreeGridViewHandler.cs
new file mode 100644
index 0000000000..89cc442b1a
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/TreeGridViewHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class TreeGridViewHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/TreeViewHandler.cs b/Source/Eto.Android/Forms/Controls/TreeViewHandler.cs
new file mode 100644
index 0000000000..8c31c612cf
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/TreeViewHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class TreeViewHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/Controls/WebViewHandler.cs b/Source/Eto.Android/Forms/Controls/WebViewHandler.cs
new file mode 100644
index 0000000000..fdab40eb90
--- /dev/null
+++ b/Source/Eto.Android/Forms/Controls/WebViewHandler.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Eto.Forms;
+
+using aa = Android.App;
+using ac = Android.Content;
+using ao = Android.OS;
+using ar = Android.Runtime;
+using av = Android.Views;
+using aw = Android.Widget;
+using ag = Android.Graphics;
+
+namespace Eto.Android.Forms.Controls
+{
+ class WebViewHandler
+ {
+ }
+}
\ No newline at end of file
diff --git a/Source/Eto.Android/Forms/FormHandler.cs b/Source/Eto.Android/Forms/FormHandler.cs
new file mode 100644
index 0000000000..e99cc266f8
--- /dev/null
+++ b/Source/Eto.Android/Forms/FormHandler.cs
@@ -0,0 +1,24 @@
+using System;
+using Eto.Forms;
+using Eto.Drawing;
+using a = Android;
+using av = Android.Views;
+using aw = Android.Widget;
+
+namespace Eto.Android.Forms
+{
+ ///
+ /// Handler for
+ ///
+ /// (c) 2013 by Curtis Wensley
+ /// See LICENSE for full terms
+ public class FormHandler : AndroidWindow