diff options
| author | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-04-17 18:47:20 +0300 |
|---|---|---|
| committer | Roy Ben-Shabat <Roy@Twine-s.com> | 2019-04-17 18:47:20 +0300 |
| commit | aba62e86fcc78e71bdcb263abda735e844e86240 (patch) | |
| tree | edf8d5f2480e65be3981aaf76796658ae282ebb4 /Software/Visual_Studio/Tango.Core/ExtensionMethods | |
| parent | ca2d16fcff8b8776acee40ad6ee287e8293e8299 (diff) | |
| download | Tango-aba62e86fcc78e71bdcb263abda735e844e86240.tar.gz Tango-aba62e86fcc78e71bdcb263abda735e844e86240.zip | |
Fixed a few issues with PPC events and memory leak.
Changed color space PANTON to Coats.
Modified JobProgressBarItem in PPC to display the proper duration.
Diffstat (limited to 'Software/Visual_Studio/Tango.Core/ExtensionMethods')
| -rw-r--r-- | Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs | 82 |
1 files changed, 66 insertions, 16 deletions
diff --git a/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs b/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs index 909366ffd..ca546922f 100644 --- a/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs +++ b/Software/Visual_Studio/Tango.Core/ExtensionMethods/FrameworkElementExtensions.cs @@ -23,8 +23,15 @@ public static class FrameworkElementExtensions private static List<ElementEventsContainer> _containers = new List<ElementEventsContainer>(); private class ElementEventsContainer { + public String Token { get; set; } public EventHandler<MouseOrTouchEventArgs> Handler { get; set; } + public FrameworkElement Element { get; set; } public Action Clear { get; set; } + + public ElementEventsContainer() + { + Token = Guid.NewGuid().ToString(); + } } /// <summary> @@ -33,7 +40,7 @@ public static class FrameworkElementExtensions /// <param name="element">The element.</param> /// <param name="relativeTo">The relative to.</param> /// <param name="handler">The handler.</param> - public static void RegisterForMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) { bool mousePressed = false; bool touchDown = false; @@ -106,6 +113,7 @@ public static class FrameworkElementExtensions ElementEventsContainer container = new ElementEventsContainer(); container.Handler = handler; + container.Element = element; container.Clear = () => { element.MouseUp -= mouseUpHandler; @@ -114,6 +122,9 @@ public static class FrameworkElementExtensions }; _containers.Add(container); + UnregisterWhenUnloaded(container); + + return container.Token; } /// <summary> @@ -121,9 +132,9 @@ public static class FrameworkElementExtensions /// </summary> /// <param name="element">The element.</param> /// <param name="handler">The handler.</param> - public static void RegisterForMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) { - RegisterForMouseOrTouchDown(element, null, handler); + return RegisterForMouseOrTouchDown(element, null, handler); } /// <summary> @@ -132,7 +143,7 @@ public static class FrameworkElementExtensions /// <param name="element">The element.</param> /// <param name="relativeTo">The relative to.</param> /// <param name="handler">The handler.</param> - public static void RegisterForMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) { bool mouseReleased = false; bool touchReleased = false; @@ -202,6 +213,7 @@ public static class FrameworkElementExtensions ElementEventsContainer container = new ElementEventsContainer(); container.Handler = handler; + container.Element = element; container.Clear = () => { element.TouchDown -= touchDownHandler; @@ -210,6 +222,9 @@ public static class FrameworkElementExtensions }; _containers.Add(container); + UnregisterWhenUnloaded(container); + + return container.Token; } /// <summary> @@ -217,9 +232,9 @@ public static class FrameworkElementExtensions /// </summary> /// <param name="element">The element.</param> /// <param name="handler">The handler.</param> - public static void RegisterForMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) { - RegisterForMouseOrTouchUp(element, null, handler); + return RegisterForMouseOrTouchUp(element, null, handler); } /// <summary> @@ -228,7 +243,7 @@ public static class FrameworkElementExtensions /// <param name="element">The element.</param> /// <param name="relativeTo">The relative to.</param> /// <param name="handler">The handler.</param> - public static void RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) { bool mousePressed = false; bool touchDown = false; @@ -301,6 +316,7 @@ public static class FrameworkElementExtensions ElementEventsContainer container = new ElementEventsContainer(); container.Handler = handler; + container.Element = element; container.Clear = () => { element.PreviewTouchDown -= previewTouchDownHandler; @@ -309,6 +325,9 @@ public static class FrameworkElementExtensions }; _containers.Add(container); + UnregisterWhenUnloaded(container); + + return container.Token; } /// <summary> @@ -316,9 +335,9 @@ public static class FrameworkElementExtensions /// </summary> /// <param name="element">The element.</param> /// <param name="handler">The handler.</param> - public static void RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForPreviewMouseOrTouchDown(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) { - RegisterForPreviewMouseOrTouchDown(element, null, handler); + return RegisterForPreviewMouseOrTouchDown(element, null, handler); } /// <summary> @@ -327,7 +346,7 @@ public static class FrameworkElementExtensions /// <param name="element">The element.</param> /// <param name="relativeTo">The relative to.</param> /// <param name="handler">The handler.</param> - public static void RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, FrameworkElement relativeTo, EventHandler<MouseOrTouchEventArgs> handler) { bool mouseReleased = false; bool touchReleased = false; @@ -397,6 +416,7 @@ public static class FrameworkElementExtensions ElementEventsContainer container = new ElementEventsContainer(); container.Handler = handler; + container.Element = element; container.Clear = () => { element.PreviewTouchDown -= previewTouchDownHandler; @@ -405,6 +425,9 @@ public static class FrameworkElementExtensions }; _containers.Add(container); + UnregisterWhenUnloaded(container); + + return container.Token; } /// <summary> @@ -412,9 +435,9 @@ public static class FrameworkElementExtensions /// </summary> /// <param name="element">The element.</param> /// <param name="handler">The handler.</param> - public static void RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) + public static String RegisterForPreviewMouseOrTouchUp(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) { - RegisterForPreviewMouseOrTouchUp(element, null, handler); + return RegisterForPreviewMouseOrTouchUp(element, null, handler); } /// <summary> @@ -422,9 +445,9 @@ public static class FrameworkElementExtensions /// </summary> /// <param name="element">The element.</param> /// <param name="handler">The handler.</param> - public static void UnRegisterMouseOrTouch(this FrameworkElement element, EventHandler<MouseOrTouchEventArgs> handler) + public static void UnRegisterMouseOrTouch(this FrameworkElement element) { - var containers = _containers.Where(x => x.Handler == handler); + var containers = _containers.Where(x => x.Element == element).ToList(); foreach (var container in containers.ToList()) { @@ -443,7 +466,7 @@ public static class FrameworkElementExtensions { bool _isTouch = false; - element.MouseMove += (x, e) => + MouseEventHandler mouseHandler = (x, e) => { if (!_isTouch) { @@ -461,7 +484,9 @@ public static class FrameworkElementExtensions } }; - element.TouchMove += (x, e) => + element.MouseMove += mouseHandler; + + EventHandler<TouchEventArgs> touchHandler = (x, e) => { _isTouch = true; @@ -478,6 +503,20 @@ public static class FrameworkElementExtensions handler(element, args); e.Handled = args.Handled; }; + + element.TouchMove += touchHandler; + + ElementEventsContainer container = new ElementEventsContainer(); + container.Handler = handler; + container.Element = element; + container.Clear = () => + { + element.MouseMove -= mouseHandler; + element.TouchMove -= touchHandler; + }; + + _containers.Add(container); + UnregisterWhenUnloaded(container); } /// <summary> @@ -490,6 +529,17 @@ public static class FrameworkElementExtensions RegisterForMouseOrTouchMove(element, null, handler); } + private static void UnregisterWhenUnloaded(ElementEventsContainer container) + { + container.Element.Unloaded += Element_Unloaded; + } + + private static void Element_Unloaded(object sender, RoutedEventArgs e) + { + (sender as FrameworkElement).Unloaded -= Element_Unloaded; + UnRegisterMouseOrTouch(sender as FrameworkElement); + } + #endregion #region Loaded |
