]> git.pond.sub.org Git - eow/blobdiff - static/dojo-release-1.1.1/dojo/dnd/TimedMoveable.js
add Dojo 1.1.1
[eow] / static / dojo-release-1.1.1 / dojo / dnd / TimedMoveable.js
diff --git a/static/dojo-release-1.1.1/dojo/dnd/TimedMoveable.js b/static/dojo-release-1.1.1/dojo/dnd/TimedMoveable.js
new file mode 100644 (file)
index 0000000..4f4fb0b
--- /dev/null
@@ -0,0 +1,66 @@
+if(!dojo._hasResource["dojo.dnd.TimedMoveable"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojo.dnd.TimedMoveable"] = true;
+dojo.provide("dojo.dnd.TimedMoveable");
+
+dojo.require("dojo.dnd.Moveable");
+
+(function(){
+       // precalculate long expressions
+       var oldOnMove = dojo.dnd.Moveable.prototype.onMove;
+               
+       dojo.declare("dojo.dnd.TimedMoveable", dojo.dnd.Moveable, {
+               // summary:
+               //      A specialized version of Moveable to support an FPS throttling.
+               //      This class puts an upper restriction on FPS, which may reduce 
+               //      the CPU load. The additional parameter "timeout" regulates
+               //      the delay before actually moving the moveable object.
+               
+               // object attributes (for markup)
+               timeout: 40,    // in ms, 40ms corresponds to 25 fps
+       
+               constructor: function(node, params){
+                       // summary: an object, which makes a node moveable with a timer
+                       // node: Node: a node (or node's id) to be moved
+                       // params: Object: an optional object with additional parameters.
+                       //      See dojo.dnd.Moveable for details on general parameters.
+                       //      Following parameters are specific for this class:
+                       //              timeout: Number: delay move by this number of ms
+                       //                      accumulating position changes during the timeout
+                       
+                       // sanitize parameters
+                       if(!params){ params = {}; }
+                       if(params.timeout && typeof params.timeout == "number" && params.timeout >= 0){
+                               this.timeout = params.timeout;
+                       }
+               },
+       
+               // markup methods
+               markupFactory: function(params, node){
+                       return new dojo.dnd.TimedMoveable(node, params);
+               },
+       
+               onMoveStop: function(/* dojo.dnd.Mover */ mover){
+                       if(mover._timer){
+                               // stop timer
+                               clearTimeout(mover._timer)
+                               // reflect the last received position
+                               oldOnMove.call(this, mover, mover._leftTop)
+                       }
+                       dojo.dnd.Moveable.prototype.onMoveStop.apply(this, arguments);
+               },
+               onMove: function(/* dojo.dnd.Mover */ mover, /* Object */ leftTop){
+                       mover._leftTop = leftTop;
+                       if(!mover._timer){
+                               var _t = this;  // to avoid using dojo.hitch()
+                               mover._timer = setTimeout(function(){
+                                       // we don't have any pending requests
+                                       mover._timer = null;
+                                       // reflect the last received position
+                                       oldOnMove.call(_t, mover, mover._leftTop);
+                               }, this.timeout);
+                       }
+               }
+       });
+})();
+
+}