From f06b57f2400b67dbd4dc0dc2217f48b3e5126248 Mon Sep 17 00:00:00 2001 From: "Frank A. Krueger" Date: Wed, 8 Nov 2017 23:12:59 -0800 Subject: [PATCH] Init Forms platform --- Ooui.Forms/Forms.cs | 97 +++++++++++++++++++++++++++++++++++ Ooui.Forms/PageExtensions.cs | 15 ++++++ Samples/Program.cs | 3 +- Samples/Samples.csproj | 4 ++ Samples/XamarinFormsSample.cs | 36 +++++++++++++ 5 files changed, 154 insertions(+), 1 deletion(-) create mode 100644 Ooui.Forms/Forms.cs create mode 100644 Samples/XamarinFormsSample.cs diff --git a/Ooui.Forms/Forms.cs b/Ooui.Forms/Forms.cs new file mode 100644 index 0000000..5399852 --- /dev/null +++ b/Ooui.Forms/Forms.cs @@ -0,0 +1,97 @@ +using System; +using System.Diagnostics; +using Xamarin.Forms; +using Xamarin.Forms.Internals; +using Ooui.Forms; +using System.IO; +using System.Reflection; +using System.Threading; +using System.Threading.Tasks; + +namespace Xamarin.Forms +{ + public static class Forms + { + public static bool IsInitialized { get; private set; } + + public static void Init () + { + if (IsInitialized) + return; + IsInitialized = true; + + Log.Listeners.Add (new DelegateLogListener ((c, m) => Trace.WriteLine (m, c))); + + Device.SetIdiom (TargetIdiom.Desktop); + Device.PlatformServices = new OouiPlatformServices (); + Device.Info = new OouiDeviceInfo (); + + Registrar.RegisterAll (new[] { + typeof(ExportRendererAttribute), + //typeof(ExportCellAttribute), + //typeof(ExportImageSourceHandlerAttribute), + }); + } + + class OouiDeviceInfo : DeviceInfo + { + public override Size PixelScreenSize => new Size (640, 480); + + public override Size ScaledScreenSize => PixelScreenSize; + + public override double ScalingFactor => 1; + } + + class OouiPlatformServices : IPlatformServices + { + public bool IsInvokeRequired => false; + + public string RuntimePlatform => "Ooui"; + + public void BeginInvokeOnMainThread (Action action) + { + Task.Run (action); + } + + public Ticker CreateTicker () + { + throw new NotImplementedException (); + } + + public Assembly[] GetAssemblies () + { + return AppDomain.CurrentDomain.GetAssemblies (); + } + + public string GetMD5Hash (string input) + { + throw new NotImplementedException (); + } + + public double GetNamedSize (NamedSize size, Type targetElementType, bool useOldSizes) + { + throw new NotImplementedException (); + } + + public Task GetStreamAsync (Uri uri, CancellationToken cancellationToken) + { + throw new NotImplementedException (); + } + + public IIsolatedStorageFile GetUserStoreForApplication () + { + throw new NotImplementedException (); + } + + public void OpenUriAction (Uri uri) + { + throw new NotImplementedException (); + } + + public void StartTimer (TimeSpan interval, Func callback) + { + throw new NotImplementedException (); + } + } + } +} diff --git a/Ooui.Forms/PageExtensions.cs b/Ooui.Forms/PageExtensions.cs index 398ad59..d9cc03d 100644 --- a/Ooui.Forms/PageExtensions.cs +++ b/Ooui.Forms/PageExtensions.cs @@ -1,10 +1,25 @@ using System; + namespace Ooui.Forms { public static class PageExtensions { + public static void Publish (this Xamarin.Forms.Page page, string path) + { + UI.Publish (path, () => page.CreateElement ()); + } + + public static void PublishShared (this Xamarin.Forms.Page page, string path) + { + var lazyPage = new Lazy ((() => page.CreateElement ()), true); + UI.Publish (path, () => lazyPage.Value); + } + public static Element CreateElement (this Xamarin.Forms.Page page) { + if (!Xamarin.Forms.Forms.IsInitialized) + throw new InvalidOperationException ("call Forms.Init() before this"); + throw new NotImplementedException (); } } diff --git a/Samples/Program.cs b/Samples/Program.cs index 72fd445..80723e5 100644 --- a/Samples/Program.cs +++ b/Samples/Program.cs @@ -27,8 +27,9 @@ namespace Samples new TodoSample ().Publish (); new DrawSample ().Publish (); new FilesSample ().Publish (); + new XamarinFormsSample ().Publish (); - UI.Present ("/files"); + UI.Present ("/xamarin-forms"); Console.ReadLine (); } diff --git a/Samples/Samples.csproj b/Samples/Samples.csproj index abebf5d..db31a86 100644 --- a/Samples/Samples.csproj +++ b/Samples/Samples.csproj @@ -2,8 +2,12 @@ + + + + Exe netcoreapp2.0 diff --git a/Samples/XamarinFormsSample.cs b/Samples/XamarinFormsSample.cs new file mode 100644 index 0000000..644a7ed --- /dev/null +++ b/Samples/XamarinFormsSample.cs @@ -0,0 +1,36 @@ +using System; +using Xamarin.Forms; +using Ooui.Forms; + +namespace Samples +{ + public class XamarinFormsSample + { + public void Publish () + { + Forms.Init (); + + var countLabel = new Label { + Text = "0", + }; + var countButton = new Button { + }; + countButton.Clicked += (sender, e) => { + var v = int.Parse (countLabel.Text); + countLabel.Text = (v + 1).ToString (); + }; + var page = new ContentPage { + Content = new StackLayout { + Children = { + new Label { Text = "Hello World!" }, + countLabel, + countButton, + }, + }, + }; + + page.Publish ("/xamarin-forms"); + page.PublishShared ("/xamarin-forms-shared"); + } + } +}