You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pu...@apache.org on 2012/06/28 19:23:15 UTC

wp7 commit: Minor improvement for CB-953 mouse events fired twice

Updated Branches:
  refs/heads/master 769a66be8 -> f8d313d09


Minor improvement for CB-953 mouse events fired twice


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/commit/f8d313d0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/tree/f8d313d0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/diff/f8d313d0

Branch: refs/heads/master
Commit: f8d313d09f84b373198b83abc5b930b88516ad36
Parents: 769a66b
Author: Sergei Grebnov <se...@akvelon.com>
Authored: Thu Jun 28 18:07:00 2012 +0400
Committer: Sergei Grebnov <se...@akvelon.com>
Committed: Thu Jun 28 18:07:00 2012 +0400

----------------------------------------------------------------------
 framework/Cordova/BrowserMouseHelper.cs |   31 ++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/f8d313d0/framework/Cordova/BrowserMouseHelper.cs
----------------------------------------------------------------------
diff --git a/framework/Cordova/BrowserMouseHelper.cs b/framework/Cordova/BrowserMouseHelper.cs
index 281bff6..6c8f541 100644
--- a/framework/Cordova/BrowserMouseHelper.cs
+++ b/framework/Cordova/BrowserMouseHelper.cs
@@ -93,6 +93,17 @@ namespace WP7CordovaClassLib
         protected Border border;
         private bool firstMouseMove = false;
 
+        /// <summary>
+        /// Represents last known mouse down position. 
+        /// Used to determine mouse move delta to avoid duplicate mouse events.
+        /// </summary>
+        private Point mouseDownPos;
+
+        /// <summary>
+        /// Represent min delta value to consider event as a mouse move. Experimental calculated.
+        /// </summary>
+        private const int MouseMoveDeltaThreshold = 10;
+
 
         public BrowserMouseHelper(ref WebBrowser browser)
         {
@@ -114,6 +125,7 @@ namespace WP7CordovaClassLib
                 border.ManipulationDelta += Border_ManipulationDelta;
                 border.ManipulationCompleted += Border_ManipulationCompleted;
                 border.DoubleTap += Border_DoubleTap;
+                border.Tap += Border_Tap;
                 border.Hold += Border_Hold;
                 border.MouseLeftButtonDown += Border_MouseLeftButtonDown;
             }
@@ -217,6 +229,16 @@ namespace WP7CordovaClassLib
 
         #endregion
 
+        #region Tap
+
+        void Border_Tap(object sender, GestureEventArgs e)
+        {
+            // prevents generating duplicated mouse events
+            // firstMouseMove == FALSE means we already handled this situation and generated mouse events
+            e.Handled = ! this.firstMouseMove;
+        }
+        #endregion
+
         #region MouseEvents
 
         void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
@@ -224,6 +246,8 @@ namespace WP7CordovaClassLib
             //Debug.WriteLine("Border_MouseLeftButtonDown");
             border.MouseMove += new MouseEventHandler(Border_MouseMove);
             border.MouseLeftButtonUp += new MouseButtonEventHandler(Border_MouseLeftButtonUp);
+            
+            this.mouseDownPos = e.GetPosition(_browser);
             // don't fire the down event until we know if this is a 'move' or not
             firstMouseMove = true;
         }
@@ -235,6 +259,13 @@ namespace WP7CordovaClassLib
             // only the return value from the first mouse move event should be used to determine if scrolling is prevented.
             if (firstMouseMove)
             {
+                // even for simple tap there are situations where ui control generates move with some little delta value
+                // we should avoid such situations allowing to browser control generate native js mousedown/up/click events
+                if (Math.Abs(pos.X - mouseDownPos.X) + Math.Abs(pos.Y - mouseDownPos.Y) <= MouseMoveDeltaThreshold)
+                {
+                    return;
+                }
+                
                 InvokeSimulatedMouseEvent("mousedown", pos);
                 firstMouseMove = false;
                 ScrollDisabled = InvokeSimulatedMouseEvent("mousemove", pos);