summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoradrianknight89 <adrianknight89@outlook.com>2017-01-09 04:53:15 -0600
committerRui Marinho <me@ruimarinho.net>2017-01-09 10:53:15 +0000
commita0417309b8dce62dacce1a5519d6de47533b8802 (patch)
treec4d98ed22f030f73c9c4320f61d51a752e5893b5
parentc8d54e69ce047b97fdc21afcdad68644ccb1be7a (diff)
downloadxamarin-forms-a0417309b8dce62dacce1a5519d6de47533b8802.tar.gz
xamarin-forms-a0417309b8dce62dacce1a5519d6de47533b8802.tar.bz2
xamarin-forms-a0417309b8dce62dacce1a5519d6de47533b8802.zip
[iOS] Register effects for ScrollView and WebView (#641)
* fix effects * move effect utilities to core * use core class * move to internals namespace * remove IEffectControlProvider from IVisualElementRenderer
-rw-r--r--Xamarin.Forms.Core/Internals/EffectUtilities.cs16
-rw-r--r--Xamarin.Forms.Core/Xamarin.Forms.Core.csproj3
-rw-r--r--Xamarin.Forms.Platform.Android/VisualElementRenderer.cs9
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/CarouselPageRenderer.cs5
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs4
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/PageRenderer.cs4
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs4
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs9
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs4
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/TabletMasterDetailRenderer.cs4
-rw-r--r--Xamarin.Forms.Platform.iOS/Renderers/WebViewRenderer.cs9
-rw-r--r--Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs10
12 files changed, 56 insertions, 25 deletions
diff --git a/Xamarin.Forms.Core/Internals/EffectUtilities.cs b/Xamarin.Forms.Core/Internals/EffectUtilities.cs
new file mode 100644
index 00000000..f4fe8323
--- /dev/null
+++ b/Xamarin.Forms.Core/Internals/EffectUtilities.cs
@@ -0,0 +1,16 @@
+namespace Xamarin.Forms.Internals
+{
+ internal static class EffectUtilities
+ {
+ public static void RegisterEffectControlProvider(IEffectControlProvider self, IElementController oldElement, IElementController newElement)
+ {
+ IElementController controller = oldElement;
+ if (controller != null && controller.EffectControlProvider == self)
+ controller.EffectControlProvider = null;
+
+ controller = newElement;
+ if (controller != null)
+ controller.EffectControlProvider = self;
+ }
+ }
+} \ No newline at end of file
diff --git a/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj b/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
index dd01d4b2..9bfb7ba2 100644
--- a/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
+++ b/Xamarin.Forms.Core/Xamarin.Forms.Core.csproj
@@ -86,6 +86,7 @@
<Compile Include="DataTemplateSelector.cs" />
<Compile Include="DateChangedEventArgs.cs" />
<Compile Include="DelegateLogListener.cs" />
+ <Compile Include="Internals\EffectUtilities.cs" />
<Compile Include="EnumerableExtensions.cs" />
<Compile Include="PlatformConfiguration\AndroidSpecific\AppCompat\Application.cs" />
<Compile Include="PlatformConfiguration\AndroidSpecific\Application.cs" />
@@ -461,4 +462,4 @@
</PostBuildEvent>
</PropertyGroup>
<ItemGroup />
-</Project>
+</Project> \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs b/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs
index 637ac3bc..f67eb66e 100644
--- a/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs
+++ b/Xamarin.Forms.Platform.Android/VisualElementRenderer.cs
@@ -5,6 +5,7 @@ using System.Collections.Specialized;
using System.ComponentModel;
using Android.Support.V4.View;
using Android.Views;
+using Xamarin.Forms.Internals;
using AView = Android.Views.View;
namespace Xamarin.Forms.Platform.Android
@@ -197,13 +198,7 @@ namespace Xamarin.Forms.Platform.Android
if (element != null)
SendVisualElementInitialized(element, this);
- var controller = (IElementController)oldElement;
- if (controller != null && controller.EffectControlProvider == this)
- controller.EffectControlProvider = null;
-
- controller = element;
- if (controller != null)
- controller.EffectControlProvider = this;
+ EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);
if (element != null && !string.IsNullOrEmpty(element.AutomationId))
SetAutomationId(element.AutomationId);
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/CarouselPageRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/CarouselPageRenderer.cs
index f1364de7..d84dd740 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/CarouselPageRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/CarouselPageRenderer.cs
@@ -382,5 +382,10 @@ namespace Xamarin.Forms.Platform.iOS
Subviews[0].Frame = new RectangleF(0, 0, (float)Element.Width, (float)Element.Height);
}
}
+
+ public void RegisterEffect(Effect effect)
+ {
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, View);
+ }
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
index 55e39ada..6af40216 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/NavigationRenderer.cs
@@ -978,9 +978,7 @@ namespace Xamarin.Forms.Platform.iOS
void IEffectControlProvider.RegisterEffect(Effect effect)
{
- var platformEffect = effect as PlatformEffect;
- if (platformEffect != null)
- platformEffect.Container = View;
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, View);
}
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/PageRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/PageRenderer.cs
index e2455d78..1c7730e8 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/PageRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/PageRenderer.cs
@@ -23,9 +23,7 @@ namespace Xamarin.Forms.Platform.iOS
void IEffectControlProvider.RegisterEffect(Effect effect)
{
- var platformEffect = effect as PlatformEffect;
- if (platformEffect != null)
- platformEffect.Container = View;
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, View);
}
public VisualElement Element { get; private set; }
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs
index 501312cd..b26e3148 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/PhoneMasterDetailRenderer.cs
@@ -401,9 +401,7 @@ namespace Xamarin.Forms.Platform.iOS
void IEffectControlProvider.RegisterEffect(Effect effect)
{
- var platformEffect = effect as PlatformEffect;
- if (platformEffect != null)
- platformEffect.Container = View;
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, View);
}
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs
index 3d38bb6b..c9c24ad6 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/ScrollViewRenderer.cs
@@ -6,7 +6,7 @@ using RectangleF = CoreGraphics.CGRect;
namespace Xamarin.Forms.Platform.iOS
{
- public class ScrollViewRenderer : UIScrollView, IVisualElementRenderer
+ public class ScrollViewRenderer : UIScrollView, IVisualElementRenderer, IEffectControlProvider
{
EventTracker _events;
KeyboardInsetTracker _insetTracker;
@@ -88,6 +88,8 @@ namespace Xamarin.Forms.Platform.iOS
OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
+ EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);
+
if (element != null)
element.SendViewInitialized(this);
@@ -234,5 +236,10 @@ namespace Xamarin.Forms.Platform.iOS
if (ScrollView != null)
Controller.SetScrolledPosition(ContentOffset.X, ContentOffset.Y);
}
+
+ void IEffectControlProvider.RegisterEffect(Effect effect)
+ {
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, this, NativeView);
+ }
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs
index f0aa7c7f..27492768 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/TabbedRenderer.cs
@@ -375,9 +375,7 @@ namespace Xamarin.Forms.Platform.iOS
void IEffectControlProvider.RegisterEffect(Effect effect)
{
- var platformEffect = effect as PlatformEffect;
- if (platformEffect != null)
- platformEffect.Container = View;
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, View);
}
void SetTabBarItem(IVisualElementRenderer renderer)
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/TabletMasterDetailRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/TabletMasterDetailRenderer.cs
index 9f0dff00..fd03d468 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/TabletMasterDetailRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/TabletMasterDetailRenderer.cs
@@ -388,9 +388,7 @@ namespace Xamarin.Forms.Platform.iOS
void IEffectControlProvider.RegisterEffect(Effect effect)
{
- var platformEffect = effect as PlatformEffect;
- if (platformEffect != null)
- platformEffect.Container = View;
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, View);
}
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/Renderers/WebViewRenderer.cs b/Xamarin.Forms.Platform.iOS/Renderers/WebViewRenderer.cs
index 70c9bf60..390e16d2 100644
--- a/Xamarin.Forms.Platform.iOS/Renderers/WebViewRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/Renderers/WebViewRenderer.cs
@@ -7,7 +7,7 @@ using Xamarin.Forms.Internals;
namespace Xamarin.Forms.Platform.iOS
{
- public class WebViewRenderer : UIWebView, IVisualElementRenderer, IWebViewDelegate
+ public class WebViewRenderer : UIWebView, IVisualElementRenderer, IWebViewDelegate, IEffectControlProvider
{
EventTracker _events;
bool _ignoreSourceChanges;
@@ -55,6 +55,8 @@ namespace Xamarin.Forms.Platform.iOS
OnElementChanged(new VisualElementChangedEventArgs(oldElement, element));
+ EffectUtilities.RegisterEffectControlProvider(this, oldElement, element);
+
if (Element != null && !string.IsNullOrEmpty(Element.AutomationId))
AccessibilityIdentifier = Element.AutomationId;
@@ -260,5 +262,10 @@ namespace Xamarin.Forms.Platform.iOS
}
#endregion
+
+ void IEffectControlProvider.RegisterEffect(Effect effect)
+ {
+ VisualElementRenderer<VisualElement>.RegisterEffect(effect, this, NativeView);
+ }
}
} \ No newline at end of file
diff --git a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
index bb971858..155f8b60 100644
--- a/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
+++ b/Xamarin.Forms.Platform.iOS/VisualElementRenderer.cs
@@ -73,6 +73,16 @@ namespace Xamarin.Forms.Platform.iOS
}
}
+ public static void RegisterEffect(Effect effect, UIView container, UIView control = null)
+ {
+ var platformEffect = effect as PlatformEffect;
+ if (platformEffect == null)
+ return;
+
+ platformEffect.Container = container;
+ platformEffect.Control = control;
+ }
+
void IEffectControlProvider.RegisterEffect(Effect effect)
{
var platformEffect = effect as PlatformEffect;