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 01:33:35 UTC
wp7 commit: CB-953 mouse events fired twice
Updated Branches:
refs/heads/master 6543eb830 -> 769a66be8
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/769a66be
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/tree/769a66be
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/diff/769a66be
Branch: refs/heads/master
Commit: 769a66be801c57de47cb0e0c301ce76cfbf88f73
Parents: 6543eb8
Author: Jesse MacFadyen <pu...@gmail.com>
Authored: Wed Jun 27 16:32:09 2012 -0700
Committer: Jesse MacFadyen <pu...@gmail.com>
Committed: Wed Jun 27 16:32:09 2012 -0700
----------------------------------------------------------------------
framework/Cordova/BrowserMouseHelper.cs | 57 ++++++++++++++++++--------
1 files changed, 40 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-cordova-wp7/blob/769a66be/framework/Cordova/BrowserMouseHelper.cs
----------------------------------------------------------------------
diff --git a/framework/Cordova/BrowserMouseHelper.cs b/framework/Cordova/BrowserMouseHelper.cs
index 7d5ef98..281bff6 100644
--- a/framework/Cordova/BrowserMouseHelper.cs
+++ b/framework/Cordova/BrowserMouseHelper.cs
@@ -42,11 +42,13 @@ namespace WP7CordovaClassLib
/*
private static string mouseScript =
@"(function(win,doc){
- Object.defineProperty( MouseEvent.prototype, 'pageX', {
+ var mPro = MouseEvent.prototype;
+ var def = Object.defineProperty;
+ def( mPro, 'pageX', {
configurable: true,
get: function(){ return this.clientX }
});
- Object.defineProperty( MouseEvent.prototype, 'pageY', {
+ def( mPro, 'pageY', {
configurable: true,
get: function(){ return this.clientY }
});
@@ -59,7 +61,11 @@ namespace WP7CordovaClassLib
var xPos = doc.body.scrollLeft + Math.round(xMod * x);
var yPos = doc.body.scrollTop + Math.round(yMod * y);
var element = doc.elementFromPoint(xPos,yPos);
- evt.initMouseEvent(type, true, true, win, 1, xPos, yPos, xPos, yPos, false, false, false, false, 0, element);
+
+ evt.initMouseEvent(type, true, true, win, 1, xPos, yPos, xPos, yPos, false, false, false, false, -1, null);
+ evt.timeStamp = +new Date;
+ evt.isCordovaEvent = true;
+
var canceled = element ? !element.dispatchEvent(evt) : !doc.dispatchEvent(evt);
return canceled ? 'true' : 'false';
}
@@ -68,9 +74,9 @@ namespace WP7CordovaClassLib
})(window,document);";
*/
- private static string MinifiedMouseScript = "(function(f,a){Object.defineProperty(MouseEvent.prototype,'pageX',{configurable:!0,get:function(){return this.clientX}});Object.defineProperty(MouseEvent.prototype,'pageY',{configurable:!0,get:function(){return this.clientY}});f.onNativeMouseEvent=function(g,h,i)"
- + "{try{var j=screen.logicalXDPI/screen.deviceXDPI,k=screen.logicalYDPI/screen.deviceYDPI,b=a.createEvent('MouseEvents'),c=a.body.scrollLeft+Math.round(j*h),d=a.body.scrollTop+Math.round(k*i),e=a.elementFromPoint(c,d);b.initMouseEvent(g,!0,!0,"
- + "f,1,c,d,c,d,!1,!1,!1,!1,0,e);return(e?!e.dispatchEvent(b):!a.dispatchEvent(b))?'true':'false'}catch(l){return l}}})(window,document);";
+ private static string MinifiedMouseScript = "(function(g,a){var c=MouseEvent.prototype,d=Object.defineProperty;d(c,'pageX',{configurable:!0,get:function(){return this.clientX}});d(c,'pageY',{configurable:!0,get:function(){return this.clientY}});g.onNativeMouseEvent=function(c,d,i)"
+ + "{try{var j=screen.logicalXDPI/screen.deviceXDPI,k=screen.logicalYDPI/screen.deviceYDPI,b=a.createEvent('MouseEvents'),e=a.body.scrollLeft+Math.round(j*d),f=a.body.scrollTop+Math.round(k*i),h=a.elementFromPoint(e,f);b.initMouseEvent(c,!0,!0,g,1,e,f,e,f,!1,!1,!1,!1,-1,"
+ + "null);b.timeStamp=+new Date;b.isCordovaEvent=!0;return(h?!h.dispatchEvent(b):!a.dispatchEvent(b))?'true':'false'}catch(l){return l}}})(window,document);";
private WebBrowser _browser;
@@ -116,6 +122,9 @@ namespace WP7CordovaClassLib
}
+
+
+
void ParseViewportMeta()
{
string metaScript = "(function() { return document.querySelector('meta[name=viewport]').content; })()";
@@ -192,7 +201,7 @@ namespace WP7CordovaClassLib
void Border_Hold(object sender, GestureEventArgs e)
{
- Debug.WriteLine("Border_Hold");
+ //Debug.WriteLine("Border_Hold");
e.Handled = true;
}
@@ -202,7 +211,7 @@ namespace WP7CordovaClassLib
void Border_DoubleTap(object sender, GestureEventArgs e)
{
- Debug.WriteLine("Border_DoubleTap");
+ //Debug.WriteLine("Border_DoubleTap");
e.Handled = true;
}
@@ -212,32 +221,42 @@ namespace WP7CordovaClassLib
void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
+ //Debug.WriteLine("Border_MouseLeftButtonDown");
border.MouseMove += new MouseEventHandler(Border_MouseMove);
border.MouseLeftButtonUp += new MouseButtonEventHandler(Border_MouseLeftButtonUp);
-
+ // don't fire the down event until we know if this is a 'move' or not
firstMouseMove = true;
-
- Point pos = e.GetPosition(_browser);
- InvokeSimulatedMouseEvent("mousedown", pos);
}
-
+ //
void Border_MouseMove(object sender, MouseEventArgs e)
{
+ //Debug.WriteLine("Border_MouseMove");
Point pos = e.GetPosition(_browser);
- bool retVal = InvokeSimulatedMouseEvent("mousemove", pos);
// only the return value from the first mouse move event should be used to determine if scrolling is prevented.
if (firstMouseMove)
{
- ScrollDisabled = retVal;
+ InvokeSimulatedMouseEvent("mousedown", pos);
+ firstMouseMove = false;
+ ScrollDisabled = InvokeSimulatedMouseEvent("mousemove", pos);
}
+ else
+ {
+ InvokeSimulatedMouseEvent("mousemove", pos);
+ }
+
}
void Border_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
+ //Debug.WriteLine("Border_MouseLeftButtonUp");
border.MouseMove -= new MouseEventHandler(Border_MouseMove);
border.MouseLeftButtonUp -= new MouseButtonEventHandler(Border_MouseLeftButtonUp);
- Point pos = e.GetPosition(_browser);
- e.Handled = InvokeSimulatedMouseEvent("mouseup", pos);
+ // if firstMouseMove is false, then we have sent our simulated mousedown, so we should also send a matching mouseup
+ if (!firstMouseMove)
+ {
+ Point pos = e.GetPosition(_browser);
+ e.Handled = InvokeSimulatedMouseEvent("mouseup", pos);
+ }
ScrollDisabled = false;
}
@@ -248,6 +267,8 @@ namespace WP7CordovaClassLib
void Border_ManipulationStarted(object sender, ManipulationStartedEventArgs e)
{
+ //Debug.WriteLine("Border_ManipulationStarted");
+
if (ScrollDisabled)
{
e.Handled = true;
@@ -257,6 +278,7 @@ namespace WP7CordovaClassLib
private void Border_ManipulationDelta(object sender, ManipulationDeltaEventArgs e)
{
+ //Debug.WriteLine("Border_ManipulationDelta");
// optionally suppress zoom
if ((ScrollDisabled || !userScalable) && (e.DeltaManipulation.Scale.X != 0.0 || e.DeltaManipulation.Scale.Y != 0.0))
{
@@ -273,6 +295,7 @@ namespace WP7CordovaClassLib
private void Border_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
+ //Debug.WriteLine("Border_ManipulationCompleted");
// suppress zoom
if (!userScalable && e.FinalVelocities != null)
{