From 75301881156cf30a8f84cbcd1eb297ec95127579 Mon Sep 17 00:00:00 2001 From: Kangho Hur Date: Tue, 28 Feb 2017 09:36:00 +0900 Subject: Renew the VisualElement.Opacity - OpacityLayer is no more needed in renderer. - There is a limitation on this chagne - Entry and Label are not support Opacity property anymore. It will be fixed soon when Elm# is support. Change-Id: I52f0fc67fdfda65cf8141cceab877890d260a4e6 --- .../Renderers/BoxViewRenderer.cs | 51 +++++++++------ .../Renderers/VisualElementRenderer.cs | 74 ++++------------------ .../Xamarin.Forms.Platform.Tizen.project.json | 6 +- 3 files changed, 47 insertions(+), 84 deletions(-) diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/BoxViewRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/BoxViewRenderer.cs index 7a9f756d..b0651340 100644 --- a/Xamarin.Forms.Platform.Tizen/Renderers/BoxViewRenderer.cs +++ b/Xamarin.Forms.Platform.Tizen/Renderers/BoxViewRenderer.cs @@ -4,11 +4,8 @@ using ERectangle = ElmSharp.Rectangle; namespace Xamarin.Forms.Platform.Tizen { - public class BoxViewRenderer : - VisualElementRenderer + public class BoxViewRenderer : VisualElementRenderer { - static readonly EColor s_defaultColor = EColor.Transparent; - ERectangle _control; public BoxViewRenderer() @@ -23,10 +20,6 @@ namespace Xamarin.Forms.Platform.Tizen SetNativeControl(_control); } - if (e.OldElement != null) - { - } - if (e.NewElement != null) { UpdateColor(); @@ -35,27 +28,45 @@ namespace Xamarin.Forms.Platform.Tizen base.OnElementChanged(e); } - void UpdateColor() + protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) { - Color colorToSet = Element.Color; - - if (colorToSet == Color.Default) + if (e.PropertyName == BoxView.ColorProperty.PropertyName) { - colorToSet = Element.BackgroundColor; + UpdateColor(); } + base.OnElementPropertyChanged(sender, e); + } - _control.Color = (colorToSet == Color.Default) ? s_defaultColor : colorToSet.ToNative(); + protected override void UpdateBackgroundColor() + { + UpdateColor(); } - protected override void OnElementPropertyChanged(object sender, - PropertyChangedEventArgs e) + protected override void UpdateOpacity() + { + UpdateColor(); + } + + void UpdateColor() { - if (e.PropertyName == BoxView.ColorProperty.PropertyName || - e.PropertyName == VisualElement.BackgroundColorProperty.PropertyName) + if (Element.Color.IsDefault) { - UpdateColor(); + if (Element.BackgroundColor.IsDefault) + { + // Set to default color. (Transparent) + _control.Color = EColor.Transparent; + } + else + { + // Use BackgroundColor only if color is default and background color is not default. + _control.Color = Element.BackgroundColor.MultiplyAlpha(Element.Opacity).ToNative(); + } + } + else + { + // Color has higer priority than BackgroundColor. + _control.Color = Element.Color.MultiplyAlpha(Element.Opacity).ToNative(); } - base.OnElementPropertyChanged(sender, e); } } } diff --git a/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs b/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs index 37a5fafb..394ec02b 100644 --- a/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs +++ b/Xamarin.Forms.Platform.Tizen/Renderers/VisualElementRenderer.cs @@ -44,8 +44,6 @@ namespace Xamarin.Forms.Platform.Tizen HashSet _batchedProperties = new HashSet(); - ERectangle _opacityLayer; - internal GestureHandler _gestureHandler; /// @@ -209,7 +207,6 @@ namespace Xamarin.Forms.Platform.Tizen var y = ComputeAbsoluteY(Element); NativeView.Geometry = new Rectangle(x, y, Element.Width, Element.Height).ToPixel(); ApplyTransformation(); - UpdateOpacityLayer(); } void IVisualElementRenderer.SetElement(VisualElement element) @@ -309,7 +306,6 @@ namespace Xamarin.Forms.Platform.Tizen if (NativeView != null) { NativeView.Deleted -= NativeViewDeleted; - EnsureOpacityLayerIsDestroyed(); NativeView.Unrealize(); SetNativeView(null); } @@ -425,7 +421,6 @@ namespace Xamarin.Forms.Platform.Tizen { NativeView.Moved -= OnMoved; NativeView.Deleted -= NativeViewDeleted; - EnsureOpacityLayerIsDestroyed(); } Widget widget = NativeView as Widget; @@ -584,6 +579,18 @@ namespace Xamarin.Forms.Platform.Tizen } } + protected virtual void UpdateOpacity() + { + if (NativeView is Widget) + { + (NativeView as Widget).Opacity = (int)(Element.Opacity * 255.0); + } + else + { + Log.Warn("{0} uses {1} which does not support opacity", this, NativeView); + } + } + static double ComputeAbsoluteX(VisualElement e) { return e.X + (e.RealParent is VisualElement ? Forms.ConvertToScaledDP(Platform.GetRenderer(e.RealParent).NativeView.Geometry.X) : 0.0); @@ -719,7 +726,6 @@ namespace Xamarin.Forms.Platform.Tizen void OnMoved(object sender, EventArgs e) { - UpdateOpacityLayer(); ApplyTransformation(); _gestureHandler?.UpdateHitBox(); } @@ -752,30 +758,12 @@ namespace Xamarin.Forms.Platform.Tizen } } - void UpdateOpacity() - { - if (null != NativeView) - { - if (Element.Opacity < 1.0) - { - EnsureOpacityLayerExists(); - - var alpha = (int)(Element.Opacity * 255.0); - _opacityLayer.Color = new EColor(255, 255, 255, alpha); - } - else - { - EnsureOpacityLayerIsDestroyed(); - } - } - } - /// /// Updates the IsEnabled property. /// void UpdateIsEnabled() { - Widget widget = NativeView as Widget; + var widget = NativeView as Widget; if (widget != null) { widget.IsEnabled = Element.IsEnabled; @@ -874,48 +862,12 @@ namespace Xamarin.Forms.Platform.Tizen ApplyTranslation(map, geometry, ref changed); NativeView.IsMapEnabled = changed; - if (changed) { NativeView.EvasMap = map; - - if (_opacityLayer != null) - { - _opacityLayer.IsMapEnabled = true; - _opacityLayer.EvasMap = map; - } } _gestureHandler?.UpdateHitBox(); } - - protected virtual void UpdateOpacityLayer() - { - if (_opacityLayer != null) - { - _opacityLayer.Geometry = NativeView.Geometry; - NativeView.SetClip(_opacityLayer); - } - } - - void EnsureOpacityLayerExists() - { - if (_opacityLayer == null) - { - _opacityLayer = new ERectangle(NativeView); - UpdateOpacityLayer(); - _opacityLayer.Show(); - } - } - - void EnsureOpacityLayerIsDestroyed() - { - if (_opacityLayer != null) - { - NativeView.SetClip(null); - _opacityLayer.Unrealize(); - _opacityLayer = null; - } - } } internal static class Settings diff --git a/Xamarin.Forms.Platform.Tizen/Xamarin.Forms.Platform.Tizen.project.json b/Xamarin.Forms.Platform.Tizen/Xamarin.Forms.Platform.Tizen.project.json index 8f6afe77..b77e8cb5 100644 --- a/Xamarin.Forms.Platform.Tizen/Xamarin.Forms.Platform.Tizen.project.json +++ b/Xamarin.Forms.Platform.Tizen/Xamarin.Forms.Platform.Tizen.project.json @@ -1,6 +1,6 @@ -{ +{ "dependencies": { - "ElmSharp": "1.1.0-beta-010", + "ElmSharp": "1.1.0-beta-011", "NETStandard.Library": "1.6.0", "System.Runtime.Serialization.Xml": "4.1.1", "Tizen.Applications": "1.1.0", @@ -11,4 +11,4 @@ "imports": "portable-net45+win8+wpa81+wp8" } } -} +} \ No newline at end of file -- cgit v1.2.3