diff options
author | Stephane Delcroix <stephane@delcroix.org> | 2017-09-13 11:18:59 +0200 |
---|---|---|
committer | Kangho Hur <kangho.hur@samsung.com> | 2017-10-23 13:30:51 +0900 |
commit | 1cacb2a4bcb238e8eb534a26ce39b86cbaa75161 (patch) | |
tree | 4e14f93aa1a98d53f817f97aa06b51a0e54b4b11 /Xamarin.Forms.Platform.iOS | |
parent | 1aefef5d2f0c61b57ab4dbe0c109f559d762fef9 (diff) | |
download | xamarin-forms-1cacb2a4bcb238e8eb534a26ce39b86cbaa75161.tar.gz xamarin-forms-1cacb2a4bcb238e8eb534a26ce39b86cbaa75161.tar.bz2 xamarin-forms-1cacb2a4bcb238e8eb534a26ce39b86cbaa75161.zip |
[C, iOS, Android] LayoutCompression (#1136)
* [C, iOS, Android] LayoutCompression
* fix docs
* minor fixups
Diffstat (limited to 'Xamarin.Forms.Platform.iOS')
-rw-r--r-- | Xamarin.Forms.Platform.iOS/RendererPool.cs | 12 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.iOS/VisualElementPackager.cs | 30 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.iOS/VisualElementTracker.cs | 4 |
3 files changed, 30 insertions, 16 deletions
diff --git a/Xamarin.Forms.Platform.iOS/RendererPool.cs b/Xamarin.Forms.Platform.iOS/RendererPool.cs index 563201f0..e95148da 100644 --- a/Xamarin.Forms.Platform.iOS/RendererPool.cs +++ b/Xamarin.Forms.Platform.iOS/RendererPool.cs @@ -108,10 +108,14 @@ namespace Xamarin.Forms.Platform.MacOS var child = logicalChild as VisualElement; if (child != null) { - var renderer = GetFreeRenderer(child) ?? Platform.CreateRenderer(child); - Platform.SetRenderer(child, renderer); - - _parent.NativeView.AddSubview(renderer.NativeView); + if (CompressedLayout.GetIsHeadless(child)) { + child.IsPlatformEnabled = true; + FillChildrenWithRenderers(child); + } else { + var renderer = GetFreeRenderer(child) ?? Platform.CreateRenderer(child); + Platform.SetRenderer(child, renderer); + _parent.NativeView.AddSubview(renderer.NativeView); + } } } } diff --git a/Xamarin.Forms.Platform.iOS/VisualElementPackager.cs b/Xamarin.Forms.Platform.iOS/VisualElementPackager.cs index fa91cf6a..72ab654a 100644 --- a/Xamarin.Forms.Platform.iOS/VisualElementPackager.cs +++ b/Xamarin.Forms.Platform.iOS/VisualElementPackager.cs @@ -13,16 +13,20 @@ namespace Xamarin.Forms.Platform.MacOS bool _isDisposed; - IElementController ElementController => Renderer.Element as IElementController; + IElementController ElementController => _element; - public VisualElementPackager(IVisualElementRenderer renderer) + public VisualElementPackager(IVisualElementRenderer renderer) : this(renderer, null) + { + } + + VisualElementPackager(IVisualElementRenderer renderer, VisualElement element) { if (renderer == null) throw new ArgumentNullException(nameof(renderer)); Renderer = renderer; renderer.ElementChanged += OnRendererElementChanged; - SetElement(null, renderer.Element); + SetElement(null, element ?? renderer.Element); } protected IVisualElementRenderer Renderer { get; set; } @@ -65,16 +69,22 @@ namespace Xamarin.Forms.Platform.MacOS if (_isDisposed) return; - var viewRenderer = Platform.CreateRenderer(view); - Platform.SetRenderer(view, viewRenderer); + if (CompressedLayout.GetIsHeadless(view)) { + var packager = new VisualElementPackager(Renderer, view); + view.IsPlatformEnabled = true; + packager.Load(); + } else { + var viewRenderer = Platform.CreateRenderer(view); + Platform.SetRenderer(view, viewRenderer); - var uiview = Renderer.NativeView; - uiview.AddSubview(viewRenderer.NativeView); + var uiview = Renderer.NativeView; + uiview.AddSubview(viewRenderer.NativeView); - if (Renderer.ViewController != null && viewRenderer.ViewController != null) - Renderer.ViewController.AddChildViewController(viewRenderer.ViewController); + if (Renderer.ViewController != null && viewRenderer.ViewController != null) + Renderer.ViewController.AddChildViewController(viewRenderer.ViewController); - EnsureChildrenOrder(); + EnsureChildrenOrder(); + } } protected virtual void OnChildRemoved(VisualElement view) diff --git a/Xamarin.Forms.Platform.iOS/VisualElementTracker.cs b/Xamarin.Forms.Platform.iOS/VisualElementTracker.cs index 5c84b991..68625a32 100644 --- a/Xamarin.Forms.Platform.iOS/VisualElementTracker.cs +++ b/Xamarin.Forms.Platform.iOS/VisualElementTracker.cs @@ -138,8 +138,8 @@ namespace Xamarin.Forms.Platform.MacOS var scale = (float)view.Scale; var width = (float)view.Width; var height = (float)view.Height; - var x = (float)view.X; - var y = (float)view.Y; + var x = (float)view.X + (float)CompressedLayout.GetHeadlessOffset(view).X; + var y = (float)view.Y + (float)CompressedLayout.GetHeadlessOffset(view).Y; var opacity = (float)view.Opacity; var isVisible = view.IsVisible; |