123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- if (!dojo._hasResource["dojox.gfx.move"]) { // _hasResource checks added by
- // build. Do not use _hasResource
- // directly in your code.
- dojo._hasResource["dojox.gfx.move"] = true;
- dojo.provide("dojox.gfx.move");
- dojo.experimental("dojox.gfx.move");
- dojox.gfx.Mover = function(shape, e) {
- // summary: an object, which makes a shape follow the mouse,
- // used as a default mover, and as a base class for custom movers
- // shape: dojox.gfx.Shape: a shape object to be moved
- // e: Event: a mouse event, which started the move;
- // only clientX and clientY properties are used
- this.shape = shape;
- this.lastX = e.clientX
- this.lastY = e.clientY;
- var d = document, firstEvent = dojo.connect(d, "onmousemove", this,
- "onFirstMove");
- this.events = [dojo.connect(d, "onmousemove", this, "onMouseMove"),
- dojo.connect(d, "onmouseup", this, "destroy"),
- // cancel text selection and text dragging
- dojo.connect(d, "ondragstart", dojo, "stopEvent"),
- dojo.connect(d, "onselectstart", dojo, "stopEvent"), firstEvent];
- // set globals to indicate that move has started
- dojo.publish("/gfx/move/start", [this]);
- dojo.addClass(dojo.body(), "dojoMove");
- };
- dojo.extend(dojox.gfx.Mover, {
- // mouse event processors
- onMouseMove : function(e) {
- // summary: event processor for onmousemove
- // e: Event: mouse event
- var x = e.clientX;
- var y = e.clientY;
- this.shape.applyLeftTransform({
- dx : x - this.lastX,
- dy : y - this.lastY
- });
- this.lastX = x;
- this.lastY = y;
- dojo.stopEvent(e);
- },
- // utilities
- onFirstMove : function() {
- // summary: it is meant to be called only once
- dojo.disconnect(this.events.pop());
- },
- destroy : function() {
- // summary: stops the move, deletes all references, so the
- // object can be garbage-collected
- dojo.forEach(this.events, dojo.disconnect);
- // undo global settings
- dojo.publish("/gfx/move/stop", [this]);
- dojo.removeClass(dojo.body(), "dojoMove");
- // destroy objects
- this.events = this.shape = null;
- }
- });
- dojox.gfx.Moveable = function(shape, params) {
- // summary: an object, which makes a shape moveable
- // shape: dojox.gfx.Shape: a shape object to be moved
- // params: Object: an optional object with additional parameters;
- // following parameters are recognized:
- // delay: Number: delay move by this number of pixels
- // mover: Object: a constructor of custom Mover
- this.shape = shape;
- this.delay = (params && params.delay > 0) ? params.delay : 0;
- this.mover = (params && params.mover) ? params.mover : dojox.gfx.Mover;
- this.events = [this.shape.connect("onmousedown", this, "onMouseDown"),
- // cancel text selection and text dragging
- // dojo.connect(this.handle, "ondragstart", dojo, "stopEvent"),
- // dojo.connect(this.handle, "onselectstart", dojo, "stopEvent")
- ];
- };
- dojo.extend(dojox.gfx.Moveable, {
- // methods
- destroy : function() {
- // summary: stops watching for possible move, deletes all
- // references, so the object can be garbage-collected
- dojo.forEach(this.events, "disconnect", this.shape);
- this.events = this.shape = null;
- },
- // mouse event processors
- onMouseDown : function(e) {
- // summary: event processor for onmousedown, creates a Mover
- // for the shape
- // e: Event: mouse event
- if (this.delay) {
- this.events.push(this.shape.connect("onmousemove",
- this, "onMouseMove"));
- this.events.push(this.shape.connect("onmouseup", this,
- "onMouseUp"));
- this._lastX = e.clientX;
- this._lastY = e.clientY;
- } else {
- new this.mover(this.shape, e);
- }
- dojo.stopEvent(e);
- },
- onMouseMove : function(e) {
- // summary: event processor for onmousemove, used only for
- // delayed drags
- // e: Event: mouse event
- if (Math.abs(e.clientX - this._lastX) > this.delay
- || Math.abs(e.clientY - this._lastY) > this.delay) {
- this.onMouseUp(e);
- new this.mover(this.shape, e);
- }
- dojo.stopEvent(e);
- },
- onMouseUp : function(e) {
- // summary: event processor for onmouseup, used only for
- // delayed delayed drags
- // e: Event: mouse event
- this.shape.disconnect(this.events.pop());
- this.shape.disconnect(this.events.pop());
- }
- });
- }
|