blob: 2b582c6318240dcd1260fab3892cc4e7c0ccfd92 [file] [log] [blame]
// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
part of $LIBRARYNAME;
$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
factory $CLASSNAME(String type,
{Window view, int detail: 0, int screenX: 0, int screenY: 0,
int clientX: 0, int clientY: 0, int button: 0, bool canBubble: true,
bool cancelable: true, bool ctrlKey: false, bool altKey: false,
bool shiftKey: false, bool metaKey: false, EventTarget relatedTarget}) {
if (view == null) {
view = window;
}
MouseEvent event = document._createEvent('MouseEvent');
event._initMouseEvent(type, canBubble, cancelable, view, detail,
screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
button, relatedTarget);
return event;
}
$!MEMBERS
@DomName('MouseEvent.clientX') @DomName('MouseEvent.clientY')
Point get client => new Point(_clientX, _clientY);
@DomName('MouseEvent.movementX')
@DomName('MouseEvent.movementY')
@SupportedBrowser(SupportedBrowser.CHROME)
@SupportedBrowser(SupportedBrowser.FIREFOX)
@Experimental()
Point get movement => new Point(_movementX, _movementY);
/**
* The coordinates of the mouse pointer in target node coordinates.
*
* This value may vary between platforms if the target node moves
* after the event has fired or if the element has CSS transforms affecting
* it.
*/
Point get offset {
if (JS('bool', '!!#.offsetX', this)) {
var x = JS('int', '#.offsetX', this);
var y = JS('int', '#.offsetY', this);
return new Point(x, y);
} else {
// Firefox does not support offsetX.
if (!(this.target is Element)) {
throw new UnsupportedError(
'offsetX is only supported on elements');
}
Element target = this.target;
var point = (this.client - target.getBoundingClientRect().topLeft);
return new Point(point.x.toInt(), point.y.toInt());
}
}
@DomName('MouseEvent.screenX')
@DomName('MouseEvent.screenY')
Point get screen => new Point(_screenX, _screenY);
@DomName('MouseEvent.layerX')
@DomName('MouseEvent.layerY')
Point get layer => new Point(_layerX, _layerY);
@DomName('MouseEvent.pageX')
@DomName('MouseEvent.pageY')
Point get page => new Point(_pageX, _pageY);
@DomName('MouseEvent.dataTransfer')
DataTransfer get dataTransfer => JS('DataTransfer', "#['dataTransfer']", this);
}