summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
diff options
context:
space:
mode:
authorSamantha Houts <samantha@teamredwall.com>2016-08-30 10:46:14 -0700
committerJason Smith <jason.smith@xamarin.com>2016-08-30 10:46:14 -0700
commit5e553f6195e66e48688b8ab324f1bab1e9251f0a (patch)
treef8843e5e9e8afe89a05a1cc91c3b7fa05588bac7 /Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
parentf551654b1cfe654c579ca50978445e7cb93f287d (diff)
downloadxamarin-forms-5e553f6195e66e48688b8ab324f1bab1e9251f0a.tar.gz
xamarin-forms-5e553f6195e66e48688b8ab324f1bab1e9251f0a.tar.bz2
xamarin-forms-5e553f6195e66e48688b8ab324f1bab1e9251f0a.zip
Platform Specifics (#301)
* Playing around with how the platform specifics interfaces etc. might work * Sample implementation of iOS navigation translucency * Very slightly reduced code * Better vendor stuff * Drop single-implemenation interfaces * Generics on NavigationPage * On-demand vendor stuff * Remove functionally duplicate classes and make ControlGallery work again * Namespace all the things. XAML test. * Can use Effect to attach platform specific * Attach Effect on PropertyChanging for XAML support! * Rename IConfigPlatform interfaces for readability * Some renaming to match the documents * Split class files * Clear out test-only code * Re-namespace * Added On method to rendered Elements * Allow for removal of platform suffix, convenience methods on specific platforms * Creating a gallery page for specifics * Add rudimentary Platform Specifics gallery; make CollapseStyle work on UWP; Add CollapsedPaneWidth specific property * Toolbar now working with both collapse styles * MDP now displaying Content title; toolbar routing around title * Add a gallery for the iOS NavigationPage stuff * Add Navigation Page as detail page to verify it works with new Toolbar options * Make titlebar/toolbar background colors consistent * ToolbarPlacement now working on NavigationPage * Toolbar Placement working for tabbed and nav pages * Fix bug where phone doesn't get default toolbar placement on start * [Core] Add PS WindowSoftInputModeAdjust [Core] Make Application extendable * Toolbar placement now working on Nav, Tabbed, and Master pages on desktop/phone Remove unnecessary style indirection Fix build errors * [A] Add PlatformConfigurationExtensions * SetSoftInputMode test page * [A] SetSoftInputMode Known issue: Status bar color does not work in AdjustResize mode * [Core] Add PS Blur * [iOS] Configure renderer for blur * Add test page * Move to blur VisualElement for broader support * Move test pages to gallery * Update docs * Use lazy initializer for PlatformConfigurationRegistry
Diffstat (limited to 'Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs')
-rw-r--r--Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs60
1 files changed, 60 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
index ab212b21..d4da0930 100644
--- a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
@@ -4,6 +4,8 @@ using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Drawing;
using System.ComponentModel;
+using Xamarin.Forms.PlatformConfiguration.iOSSpecific;
+
#if __UNIFIED__
using UIKit;
#else
@@ -13,6 +15,7 @@ using MonoTouch.UIKit;
using RectangleF = CoreGraphics.CGRect;
using SizeF = CoreGraphics.CGSize;
using PointF = CoreGraphics.CGPoint;
+using CoreGraphics;
#else
using nfloat=System.Single;
@@ -44,6 +47,9 @@ namespace Xamarin.Forms.Platform.iOS
VisualElementPackager _packager;
VisualElementTracker _tracker;
+ UIVisualEffectView _blur;
+ BlurEffectStyle _previousBlur;
+
protected VisualElementRenderer() : base(RectangleF.Empty)
{
_propertyChangedHandler = OnElementPropertyChanged;
@@ -180,6 +186,17 @@ namespace Xamarin.Forms.Platform.iOS
return new SizeF(0, 0);
}
+ public override void Draw(RectangleF rect)
+ {
+ base.Draw(rect);
+ if (_blur != null)
+ {
+ _blur.Frame = rect;
+ if (_blur.Superview == null)
+ Superview.Add(_blur);
+ }
+ }
+
protected override void Dispose(bool disposing)
{
if ((_flags & VisualElementRendererFlags.Disposed) != 0)
@@ -220,6 +237,9 @@ namespace Xamarin.Forms.Platform.iOS
var changed = ElementChanged;
if (changed != null)
changed(this, e);
+
+ if (e.NewElement != null)
+ SetBlur((BlurEffectStyle)e.NewElement.GetValue(PlatformConfiguration.iOSSpecific.VisualElement.BlurEffectProperty));
}
protected virtual void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
@@ -228,6 +248,8 @@ namespace Xamarin.Forms.Platform.iOS
SetBackgroundColor(Element.BackgroundColor);
else if (e.PropertyName == Layout.IsClippedToBoundsProperty.PropertyName)
UpdateClipToBounds();
+ else if (e.PropertyName == PlatformConfiguration.iOSSpecific.VisualElement.BlurEffectProperty.PropertyName)
+ SetBlur((BlurEffectStyle)Element.GetValue(PlatformConfiguration.iOSSpecific.VisualElement.BlurEffectProperty));
}
protected virtual void OnRegisterEffect(PlatformEffect effect)
@@ -248,6 +270,44 @@ namespace Xamarin.Forms.Platform.iOS
BackgroundColor = color.ToUIColor();
}
+ protected virtual void SetBlur(BlurEffectStyle blur)
+ {
+ if (_previousBlur == blur)
+ return;
+
+ _previousBlur = blur;
+
+ if (_blur != null)
+ {
+ _blur.RemoveFromSuperview();
+ _blur = null;
+ }
+
+ if (blur == BlurEffectStyle.None)
+ {
+ SetNeedsDisplay();
+ return;
+ }
+
+ UIBlurEffect blurEffect;
+ switch (blur)
+ {
+ default:
+ case BlurEffectStyle.ExtraLight:
+ blurEffect = UIBlurEffect.FromStyle(UIBlurEffectStyle.ExtraLight);
+ break;
+ case BlurEffectStyle.Light:
+ blurEffect = UIBlurEffect.FromStyle(UIBlurEffectStyle.Light);
+ break;
+ case BlurEffectStyle.Dark:
+ blurEffect = UIBlurEffect.FromStyle(UIBlurEffectStyle.Dark);
+ break;
+ }
+
+ _blur = new UIVisualEffectView(blurEffect);
+ SetNeedsDisplay();
+ }
+
protected virtual void UpdateNativeWidget()
{
}