blob: 032c8aeafc263a8386f97530cd633c9f7d9d8266 [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.
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;
var event = document._createEvent('MouseEvent');
event._initMouseEvent(type, canBubble, cancelable, view, detail,
screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey,
button, relatedTarget);
return event;
int get clientX => client.x;
int get clientY => client.y;
int get offsetX => offset.x;
int get offsetY => offset.y;
int get movementX => movement.x;
int get movementY => movement.y;
int get screenX => screen.x;
int get screenY => screen.y;
Point get client => new Point(_clientX, _clientY);
Point get movement => new Point(_webkitMovementX, _webkitMovementY);
* 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 (!( is Element)) {
throw new UnsupportedError(
'offsetX is only supported on elements');
Element target =;
var point = (this.client - target.getBoundingClientRect().topLeft);
return new Point(point.x.toInt(), point.y.toInt());
Point get screen => new Point(_screenX, _screenY);