diff options
author | Seungkeun Lee <sngn.lee@samsung.com> | 2017-07-04 16:20:24 +0900 |
---|---|---|
committer | Kangho Hur <kangho.hur@samsung.com> | 2017-10-23 13:34:38 +0900 |
commit | ab0a0b82f2ca28dfb6482ffe53fabd9a290a26a5 (patch) | |
tree | 4092ab3fac099f59bf19dfa07538545498f2db8f | |
parent | 83e080577f658e2657993548bdb7cb50f758f8ec (diff) | |
download | xamarin-forms-ab0a0b82f2ca28dfb6482ffe53fabd9a290a26a5.tar.gz xamarin-forms-ab0a0b82f2ca28dfb6482ffe53fabd9a290a26a5.tar.bz2 xamarin-forms-ab0a0b82f2ca28dfb6482ffe53fabd9a290a26a5.zip |
Fix Layout issue
- All layouts should update all children position when their position is updated
But it was done by EFL box
- Some case, before child was added into Box(efl), Layout(Box) was moved.
and child who didn't added into Box does not moved
- Fixing
* Remove overried UpdateLayout method on LayoutRenderer
* Moved SetRenderer position after adding the children
- Refactoring
* Change IVisualElementRenderer interface
* UpdateNativeGeometry was Changed to private
* UpdateLayout was exposed as IVisualElementRenderer
Change-Id: I74bfdab00667bd6fa13cd8d392868af901b98dae
3 files changed, 21 insertions, 24 deletions
diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/IVisualElementRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/IVisualElementRenderer.cs index 4702fd37..0b64549f 100644 --- a/Xamarin.Forms.Platform.Tizen/Renderers/IVisualElementRenderer.cs +++ b/Xamarin.Forms.Platform.Tizen/Renderers/IVisualElementRenderer.cs @@ -34,6 +34,6 @@ namespace Xamarin.Forms.Platform.Tizen SizeRequest GetDesiredSize(double widthConstraint, double heightConstraint); - void UpdateNativeGeometry(); + void UpdateLayout(); } } diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/LayoutRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/LayoutRenderer.cs index 69fd24a8..226afbb2 100644 --- a/Xamarin.Forms.Platform.Tizen/Renderers/LayoutRenderer.cs +++ b/Xamarin.Forms.Platform.Tizen/Renderers/LayoutRenderer.cs @@ -42,18 +42,6 @@ namespace Xamarin.Forms.Platform.Tizen base.Dispose(disposing); } - protected override void UpdateLayout() - { - base.UpdateLayout(); - if (!_layoutUpdatedRegistered) - { - foreach (var child in Element.LogicalChildren) - { - Platform.GetRenderer(child)?.UpdateNativeGeometry(); - } - } - } - void OnLayoutUpdated(object sender, Native.LayoutEventArgs e) { DoLayout(e); diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs index 4a409f09..0d6b3036 100644 --- a/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs +++ b/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs @@ -188,9 +188,6 @@ namespace Xamarin.Forms.Platform.Tizen // send notification OnElementChanged(new ElementChangedEventArgs<TElement>(oldElement, newElement)); - // store renderer for the new element - Platform.SetRenderer(newElement, this); - // add children var logicalChildren = (newElement as IElementController).LogicalChildren; foreach (Element child in logicalChildren) @@ -198,18 +195,15 @@ namespace Xamarin.Forms.Platform.Tizen AddChild(child); } + // store renderer for the new element + Platform.SetRenderer(newElement, this); + OnElementReady(); } - public void UpdateNativeGeometry() + void IVisualElementRenderer.UpdateLayout() { - var updatedGeometry = new Rectangle(ComputeAbsolutePoint(Element), new Size(Element.Width, Element.Height)).ToPixel(); - - if (NativeView.Geometry != updatedGeometry) - { - NativeView.Geometry = updatedGeometry; - ApplyTransformation(); - } + UpdateLayout(); } void IVisualElementRenderer.SetElement(VisualElement element) @@ -288,6 +282,10 @@ namespace Xamarin.Forms.Platform.Tizen { Platform.SetRenderer(Element, null); } + + // Reset Element geometry, to re-calculate when Renderer was re-attached + Element.Layout(new Rectangle(0, 0, -1, -1)); + Element = default(TElement); } @@ -438,6 +436,17 @@ namespace Xamarin.Forms.Platform.Tizen } } + void UpdateNativeGeometry() + { + var updatedGeometry = new Rectangle(ComputeAbsolutePoint(Element), new Size(Element.Width, Element.Height)).ToPixel(); + + if (NativeView.Geometry != updatedGeometry) + { + NativeView.Geometry = updatedGeometry; + ApplyTransformation(); + } + } + void NativeViewDeleted(object sender, EventArgs e) { Dispose(); |