Move EventProxy initialization code to EventProxy.js
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/ClientScriptingUtil.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/ClientScriptingUtil.js
index 8516a4e..ed570b4 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/ClientScriptingUtil.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/ClientScriptingUtil.js
@@ -91,83 +91,7 @@
}
},
- initEvent : function( event, type, target, originalEvent ) {
- var SWT = rwt.scripting.SWT;
- event.widget = rwt.scripting.WidgetProxyFactory.getWidgetProxy( target );
- event.type = type;
- switch( type ) {
- case SWT.KeyDown:
- case SWT.KeyUp:
- this._initKeyEvent( event, originalEvent );
- break;
- case SWT.MouseDown:
- case SWT.MouseUp:
- case SWT.MouseMove:
- case SWT.MouseEnter:
- case SWT.MouseExit:
- case SWT.MouseDoubleClick:
- this._initMouseEvent( event, originalEvent );
- break;
- case SWT.Verify:
- this._initVerifyEvent( event, originalEvent );
- break;
- case SWT.Paint:
- this._initPaintEvent( event, target );
- break;
- }
- },
-
- _initKeyEvent : function( event, originalEvent ) {
- var charCode = originalEvent.getCharCode();
- var SWT = rwt.scripting.SWT;
- if( charCode !== 0 ) {
- event.character = String.fromCharCode( charCode );
- // TODO [tb] : keyCode will be off when character is not a-z
- event.keyCode = event.character.toLowerCase().charCodeAt( 0 );
- } else {
- var keyCode = this._getLastKeyCode();
- switch( keyCode ) {
- case 16:
- event.keyCode = SWT.SHIFT;
- break;
- case 17:
- event.keyCode = SWT.CTRL;
- break;
- case 18:
- event.keyCode = SWT.ALT;
- break;
- case 224:
- event.keyCode = SWT.COMMAND;
- break;
- default:
- event.keyCode = keyCode;
- break;
- }
- }
- this._setStateMask( event, originalEvent );
- },
-
- _initMouseEvent : function( event, originalEvent ) {
- var target = originalEvent.getTarget()._getTargetNode();
- var offset = rwt.html.Location.get( target, "scroll" );
- event.x = originalEvent.getPageX() - offset.left;
- event.y = originalEvent.getPageY() - offset.top;
- if( originalEvent.isLeftButtonPressed() ) {
- event.button = 1;
- } else if( originalEvent.isRightButtonPressed() ) {
- event.button = 3;
- } if( originalEvent.isMiddleButtonPressed() ) {
- event.button = 2;
- }
- this._setStateMask( event, originalEvent );
- },
-
- _initPaintEvent : function( event, target ) {
- var gc = this._getGCFor( target );
- event.gc = gc.getNativeContext();
- },
-
- _getGCFor : function( widget ) {
+ getGCFor : function( widget ) {
var gc = widget.getUserData( rwt.scripting.WidgetProxyFactory._GC_KEY );
if( gc == null ) {
gc = this._findExistingGC( widget );
@@ -190,27 +114,6 @@
return result;
},
- _initVerifyEvent : function( event, originalEvent ) {
- var text = originalEvent.getTarget();
- if( text.classname === "rwt.widgets.Text" ) {
- var keyCode = this._getLastKeyCode();
- var newValue = text.getComputedValue();
- var oldValue = text.getValue();
- var oldSelection = text.getSelection();
- var diff = this._getDiff( newValue, oldValue, oldSelection, keyCode );
- if( diff[ 0 ].length === 1
- && diff[ 1 ] === diff[ 2 ]
- && diff[ 0 ] === originalEvent.getData()
- ) {
- event.keyCode = keyCode;
- event.character = diff[ 0 ];
- }
- event.text = diff[ 0 ];
- event.start = diff[ 1 ];
- event.end = diff[ 2 ];
- }
- },
-
_postProcessVerifyEvent : function( event, wrappedEvent, originalEvent ) {
var widget = originalEvent.getTarget();
if( wrappedEvent.doit !== false ) {
@@ -236,44 +139,6 @@
if( wrappedEvent.doit === false ) {
originalEvent.preventDefault();
}
- },
-
- _setStateMask : function( event, originalEvent ) {
- var SWT = rwt.scripting.SWT;
- event.stateMask |= originalEvent.isShiftPressed() ? SWT.SHIFT : 0;
- event.stateMask |= originalEvent.isCtrlPressed() ? SWT.CTRL : 0;
- event.stateMask |= originalEvent.isAltPressed() ? SWT.ALT : 0;
- event.stateMask |= originalEvent.isMetaPressed() ? SWT.COMMAND : 0;
- },
-
- _getLastKeyCode : function() {
- // NOTE : While this is a private field, this mechanism must be integrated with
- // KeyEventSupport anyway to support the doit flag better.
- return rwt.remote.KeyEventSupport.getInstance()._currentKeyCode;
- },
-
- _getDiff : function( newValue, oldValue, oldSel, keyCode ) {
- var start;
- var end;
- var text;
- if( newValue.length >= oldValue.length || oldSel[ 0 ] !== oldSel[ 1 ] ) {
- start = oldSel[ 0 ];
- end = oldSel[ 1 ];
- text = newValue.slice( start, newValue.length - ( oldValue.length - oldSel[ 1 ] ) );
- } else {
- text = "";
- if( oldSel[ 0 ] === oldSel[ 1 ]
- && keyCode === 8 // backspace
- && ( oldValue.length - 1 ) === newValue.length
- ) {
- start = oldSel[ 0 ] - 1;
- end = oldSel[ 0 ];
- } else {
- start = oldSel[ 0 ];
- end = start + oldValue.length - newValue.length;
- }
- }
- return [ text, start, end ];
}
};
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventProxy.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventProxy.js
index 79e7828..a28a84b 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventProxy.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/EventProxy.js
@@ -9,11 +9,35 @@
* EclipseSource - initial API and implementation
******************************************************************************/
+(function(){
+
+var SWT = rwt.scripting.SWT;
+
rwt.qx.Class.createNamespace( "rwt.scripting", {} );
-rwt.scripting.EventProxy = function( eventType, target, originalEvent ) {
- var ClientScriptingUtil = rwt.scripting.ClientScriptingUtil;
- ClientScriptingUtil.initEvent( this, eventType, target, originalEvent );
+rwt.scripting.EventProxy = function( eventType, originalTarget, originalEvent ) {
+ this.widget = rwt.scripting.WidgetProxyFactory.getWidgetProxy( originalTarget );
+ this.type = eventType;
+ switch( eventType ) {
+ case SWT.KeyDown:
+ case SWT.KeyUp:
+ initKeyEvent( this, originalEvent );
+ break;
+ case SWT.MouseDown:
+ case SWT.MouseUp:
+ case SWT.MouseMove:
+ case SWT.MouseEnter:
+ case SWT.MouseExit:
+ case SWT.MouseDoubleClick:
+ initMouseEvent( this, originalEvent );
+ break;
+ case SWT.Verify:
+ initVerifyEvent( this, originalEvent );
+ break;
+ case SWT.Paint:
+ initPaintEvent( this, originalTarget );
+ break;
+ }
};
rwt.scripting.EventProxy.prototype = {
@@ -128,9 +152,118 @@
*/
gc : null
-
};
rwt.scripting.EventProxy.disposeEventProxy = function( eventProxy ) {
eventProxy.widget = null;
};
+
+var initKeyEvent = function( event, originalEvent ) {
+ var charCode = originalEvent.getCharCode();
+ var SWT = rwt.scripting.SWT;
+ if( charCode !== 0 ) {
+ event.character = String.fromCharCode( charCode );
+ // TODO [tb] : keyCode will be off when character is not a-z
+ event.keyCode = event.character.toLowerCase().charCodeAt( 0 );
+ } else {
+ var keyCode = getLastKeyCode();
+ switch( keyCode ) {
+ case 16:
+ event.keyCode = SWT.SHIFT;
+ break;
+ case 17:
+ event.keyCode = SWT.CTRL;
+ break;
+ case 18:
+ event.keyCode = SWT.ALT;
+ break;
+ case 224:
+ event.keyCode = SWT.COMMAND;
+ break;
+ default:
+ event.keyCode = keyCode;
+ break;
+ }
+ }
+ setStateMask( event, originalEvent );
+};
+
+var initMouseEvent = function( event, originalEvent ) {
+ var target = originalEvent.getTarget()._getTargetNode();
+ var offset = rwt.html.Location.get( target, "scroll" );
+ event.x = originalEvent.getPageX() - offset.left;
+ event.y = originalEvent.getPageY() - offset.top;
+ if( originalEvent.isLeftButtonPressed() ) {
+ event.button = 1;
+ } else if( originalEvent.isRightButtonPressed() ) {
+ event.button = 3;
+ } if( originalEvent.isMiddleButtonPressed() ) {
+ event.button = 2;
+ }
+ setStateMask( event, originalEvent );
+};
+
+var initPaintEvent = function( event, target ) {
+ var gc = rwt.scripting.ClientScriptingUtil.getGCFor( target );
+ event.gc = gc.getNativeContext();
+};
+
+var initVerifyEvent = function( event, originalEvent ) {
+ var text = originalEvent.getTarget();
+ if( text.classname === "rwt.widgets.Text" ) {
+ var keyCode = getLastKeyCode();
+ var newValue = text.getComputedValue();
+ var oldValue = text.getValue();
+ var oldSelection = text.getSelection();
+ var diff = getDiff( newValue, oldValue, oldSelection, keyCode );
+ if( diff[ 0 ].length === 1
+ && diff[ 1 ] === diff[ 2 ]
+ && diff[ 0 ] === originalEvent.getData()
+ ) {
+ event.keyCode = keyCode;
+ event.character = diff[ 0 ];
+ }
+ event.text = diff[ 0 ];
+ event.start = diff[ 1 ];
+ event.end = diff[ 2 ];
+ }
+};
+
+var getLastKeyCode = function() {
+ // NOTE : While this is a private field, this mechanism must be integrated with
+ // KeyEventSupport anyway to support the doit flag better.
+ return rwt.remote.KeyEventSupport.getInstance()._currentKeyCode;
+};
+
+var getDiff = function( newValue, oldValue, oldSel, keyCode ) {
+ var start;
+ var end;
+ var text;
+ if( newValue.length >= oldValue.length || oldSel[ 0 ] !== oldSel[ 1 ] ) {
+ start = oldSel[ 0 ];
+ end = oldSel[ 1 ];
+ text = newValue.slice( start, newValue.length - ( oldValue.length - oldSel[ 1 ] ) );
+ } else {
+ text = "";
+ if( oldSel[ 0 ] === oldSel[ 1 ]
+ && keyCode === 8 // backspace
+ && ( oldValue.length - 1 ) === newValue.length
+ ) {
+ start = oldSel[ 0 ] - 1;
+ end = oldSel[ 0 ];
+ } else {
+ start = oldSel[ 0 ];
+ end = start + oldValue.length - newValue.length;
+ }
+ }
+ return [ text, start, end ];
+};
+
+var setStateMask = function( event, originalEvent ) {
+ event.stateMask |= originalEvent.isShiftPressed() ? SWT.SHIFT : 0;
+ event.stateMask |= originalEvent.isCtrlPressed() ? SWT.CTRL : 0;
+ event.stateMask |= originalEvent.isAltPressed() ? SWT.ALT : 0;
+ event.stateMask |= originalEvent.isMetaPressed() ? SWT.COMMAND : 0;
+};
+
+}());
diff --git a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/WidgetProxyFactory.js b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/WidgetProxyFactory.js
index 1346fa4..d26ab6b 100644
--- a/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/WidgetProxyFactory.js
+++ b/bundles/org.eclipse.rap.clientscripting/js/rwt/scripting/WidgetProxyFactory.js
@@ -196,7 +196,7 @@
},
_initGC : function( widget ) {
- var gc = rwt.scripting.ClientScriptingUtil._getGCFor( widget );
+ var gc = rwt.scripting.ClientScriptingUtil.getGCFor( widget );
var width = widget.getInnerWidth();
var height = widget.getInnerHeight();
var fillStyle = widget.getBackgroundColor();
diff --git a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java
index b5af539..e989586 100644
--- a/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java
+++ b/bundles/org.eclipse.rap.clientscripting/src/org/eclipse/rap/clientscripting/internal/resources/ClientScriptingResources.java
@@ -26,13 +26,13 @@
private static final String REGISTER_NAME = "clientscripting.js";
private static final String PREFIX = "rwt/scripting/";
private static final String[] ALL_RESOURCES = {
+ "SWT.js",
"ClientScriptingUtil.js",
"handler/EventBindingHandler.js",
"EventBinding.js",
"EventProxy.js",
"FunctionFactory.js",
"handler/FunctionHandler.js",
- "SWT.js",
"WidgetProxyFactory.js",
"handler/ScriptHandler.js",
"init.js"