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);