changeset 893:cad38ddb1253

Backed out changeset 23dffb564ace
author wycc
date Mon, 27 Sep 2010 23:00:51 +0800
parents 23dffb564ace
children 460b2629be30
files nodejs/animate.js nodejs/phone.js nodejs/testdesktop.js
diffstat 3 files changed, 93 insertions(+), 109 deletions(-) [+]
line wrap: on
line diff
--- a/nodejs/animate.js	Mon Sep 27 22:37:37 2010 +0800
+++ b/nodejs/animate.js	Mon Sep 27 23:00:51 2010 +0800
@@ -9,15 +9,35 @@
 var ffs = 12;
 var frame_interval = 1000 / ffs;
 
-function shift_draw(percent) {
+function linear_draw() {
     var percent;
+    
+    percent = (Date.now() - this._start_tm) / this.duration;
+    if(percent >= 1) {
+	percent = 1;
+        if (this.obj.timer) {
+	    this.obj.timer.stop();
+	    delete this.obj.timer;
+	}
+    }
     this.obj.x = (this.targetx-this.startposx)*percent+this.startposx;
     this.obj.y = (this.targety-this.startposy)*percent+this.startposy;
     this.app.refresh();
 }
 
-function shift(app,obj,shiftx,shifty) {
-    obj.animated_shift = this;
+function linear_draw_start() {
+    var obj = this.obj;
+    var self = this;
+    
+    if(obj.timer)
+	obj.timer.stop();
+
+    this._start_tm = Date.now();
+    obj.timer = setInterval(function() { self.draw(); }, frame_interval);
+}
+
+function linear(app,obj,shiftx,shifty,duration) {
+    obj.animated_linear = this;
     this.app = app;
     this.obj = obj;
     this.end = 0;
@@ -25,32 +45,48 @@
     this.targety = shifty + obj.y;
     this.startposx = obj.x;
     this.startposy = obj.y;
+    this.duration = duration*1000;
 }
 
-exports.shift = shift;
-shift.prototype.draw = shift_draw;
+exports.linear = linear;
+linear.prototype.start = linear_draw_start;
+linear.prototype.draw = linear_draw;
 
 /* ------------------------------------------------------------ */
 function rotate(app, obj, ang, duration) {
     this._app = app;
     this._obj = obj;
     this._ang = ang;
-    this._start_mtx = [obj[0], obj[1], obj[2], obj[3], obj[4], obj[5]];
+    this._duration = duration * 1000;
 }
 
-function rotate_draw(percent) {
+function rotate_start() {
+    var obj = this._obj;
+    var self = this;
+    
+    this._start_mtx = [obj[0], obj[1], obj[2], obj[3], obj[4], obj[5]];
+    this._start_tm = Date.now();
+    obj.timer = setInterval(function() { self.draw(); }, frame_interval);
+}
+
+function rotate_draw() {
     var percent;
     var ang;
     var sv, cv;
     var obj = this._obj;
     var mtx, shift;
 
+    percent = (Date.now() - this._start_tm) / this._duration;
+    if(percent >= 1) {
+	percent = 1;
+	obj.timer.stop();
+    }
 
     ang = percent * this._ang;
     sv = Math.sin(ang);
     cv = Math.cos(ang);
     mtx = [cv, -sv, 0, sv, cv, 0];
-    sys.puts('x='+obj.center.x+',y='+obj.center.y);
+
     shift = [1, 0, -obj.center.x, 0, 1, -obj.center.y];
     mtx = multiply(mtx, shift);
     shift = [1, 0, obj.center.x, 0, 1, obj.center.y];
@@ -67,6 +103,7 @@
     this._app.refresh();
 }
 
+rotate.prototype.start = rotate_start;
 rotate.prototype.draw = rotate_draw;
 exports.rotate = rotate;
 
@@ -82,8 +119,10 @@
 }
 
 
-function scale_draw(percent) {
+function scale_draw() {
     if (this.end == 1) return;
+    var percent = (Date.now() - this.starttime)/this.duration;
+    if (percent > 1) percent = 1;
     var sx = (this.targetx-this.startsx)*percent+this.startsx;
     var sy = (this.targety-this.startsy)*percent+this.startsy;
     var t=[sx,0,0,0,sy,0];
@@ -91,10 +130,13 @@
     this.obj[4] = sy;
     this.obj[2] = this.origin_offset_x - (sx-this.startsx)*this.obj.center.x;
     this.obj[5] = this.origin_offset_y - (sy-this.startsy)*this.obj.center.y;
-    sys.puts('x='+this.obj.center.x+',y='+this.obj.center.y);
 
     this.app.refresh();
     var self = this;
+    if (percent < 1) {
+	this.obj.timer=setTimeout(function() { self.draw();}, frame_interval);
+	return;
+    }
     this.app.refresh();
     this.obj.animated_scale = null;
 }
@@ -129,6 +171,7 @@
 
 
 exports.scale = scale;
+scale.prototype.start = scale_draw;
 scale.prototype.draw = scale_draw;
 
 function holder(app, coord) {
@@ -169,11 +212,20 @@
 
 
 
-function alpha_draw(percent) {
+function alpha_draw() {
 
     if (this.end == 1) return;
+    var percent = (Date.now() - this.starttime)/this.duration;
+    if (percent > 1) percent = 1;
     var sx = (this.targetalpha-this.startalpha)*percent+this.startalpha;
     this.obj.opacity=sx;
+
+    this.app.refresh();
+    var self = this;
+    if (percent < 1) {
+	this.obj.timer=setTimeout(function() { self.draw();}, frame_interval);
+	return;
+    }
     this.app.refresh();
     this.obj.animated_alpha = null;
 }
@@ -196,88 +248,6 @@
     this.duration = duration*1000;
 }
 
+alpha.prototype.start = alpha_draw;
 alpha.prototype.draw = alpha_draw;
 exports.alpha = alpha;
-
-function linear_update()
-{
-    var now = Date.now();
-    sys.puts("real time is "+now);
-    sys.puts("end is "+this.end);
-    if (now >= this.end) {
-        this.timer.stop();
-	now = this.end;
-    }
-    if (now < this.startmove) return;
-    sys.puts("now is "+now+" offset is "+(now-this.startmove));
-    var per = (now-this.startmove)/this.duration/1000;
-    if (per > 1) per = 1;
-    this.action.draw(per);
-}
-
-function linear_start()
-{
-    var self = this;
-    if (this.timer)
-        this.timer.stop();
-    this.timer = setInterval(function() { self.update();}, frame_interval);
-    this.startmove = Date.now()+this.starttime*1000;
-    this.end = this.startmove+this.duration*1000;
-}
-function linear_stop() 
-{
-    if (this.timer) {
-        this.timer.stop();
-	this.timer = null;
-    }
-}
-
-function linear_finish()
-{
-    this.action.draw(1);
-}
-function linear(action,start, duration) 
-{
-    this.action = action;
-    this.duration = duration;
-    this.starttime = start;
-    this.timer=null;
-}
-linear.prototype.update = linear_update;
-linear.prototype.start = linear_start;
-linear.prototype.stop = linear_stop;
-linear.prototype.finish = linear_finish;
-exports.linear = linear;
-
-
-function program(words)
-{
-    this.words = wrods;
-}
-
-program.prototype.start=function() {
-    for(w in this.words) {
-        w.start();
-    }
-}
-
-program.prototype.stop=function(s) {
-    for(w in this.words) {
-        w.stop();
-    }
-}
-program.prototype.finish=function() {
-    for(w in this.words) {
-        w.finish();
-    }
-}
-
-exports.run = function(actions,start,duration) {
-    for(a in actions) {
-        var li = new linear(actions[a],start,duration);
-	sys.puts(li);
-	li.start();
-    }
-}
-exports.runexp=function(actions,start,exp) {
-}
--- a/nodejs/phone.js	Mon Sep 27 22:37:37 2010 +0800
+++ b/nodejs/phone.js	Mon Sep 27 23:00:51 2010 +0800
@@ -41,16 +41,19 @@
 	});
     icon.mouse_event.add_event_observer(4, function(evt) {
 	    pressholder.go_center(evt.cur_tgt);
-	    animate.run([new animate.rotate(app, evt.cur_tgt, 2 * 3.1415)],0, 0.7);
+	    var rotate = new animate.rotate(app, evt.cur_tgt, 2 * 3.1415, 0.7);
+	    rotate.start();
 	});
 }
 
 var sw = 0;
+var dock_up = new animate.linear(app, dock, 0, -300, 0.5);
+var dock_down = new animate.linear(app, dock, 0, 0, 0.2);
 dock.mouse_event.add_event_observer(4, function(evt) {
 	if(sw == 0) {
-            animate.run([new animate.shift(app, dock, 0, -300)],0, 0.5);
+	    dock_up.start();
 	} else {
-            animate.run([new animate.shift(app, dock, 0, 0)],0, 0.2);
+	    dock_down.start();
 	}
 	sw = sw ^ 1;
     });
--- a/nodejs/testdesktop.js	Mon Sep 27 22:37:37 2010 +0800
+++ b/nodejs/testdesktop.js	Mon Sep 27 23:00:51 2010 +0800
@@ -17,14 +17,16 @@
 
 lightbar = app.get("lightbar");
 lines=[app.get("line1"),app.get("line2"),app.get("line3"), app.get("line4"),app.get("line5")];
+for(i=0;i<lines.length;i++) {
+    sys.puts("["+i+"]="+lines[i].y);
+}
 line=0;
 
 items=[video,audio,picture,setting];
 item = 0;
-
-animate.run([new animate.scale(app,items[item],1,1.5)],0,0.1);
+an = new animate.scale(app,items[item],1,1.5,0.1);
+an.start();
 app.refresh();
-
 app.addKeyListener(mbapp.KEY_LEFT, function() {
 	var old = items[item];
 	item = item - 1;
@@ -33,8 +35,10 @@
 		return;
 	}
         var target = items[item];
-	animate.run([new animate.scale(app,old,1,1)],0,0.1);
-	animate.run([new animate.scale(app,target,1,1.5)],0,0.3);
+	var an = new animate.scale(app,old,1,1,0.1);
+        an.start();
+	an = new animate.scale(app,target,1,1.5,0.3);
+        an.start();
 });
 
 app.addKeyListener(mbapp.KEY_RIGHT, function() {
@@ -45,8 +49,10 @@
 		return;
 	}
         var target = items[item];
-	animate.run([new animate.scale(app,old,1,1)],0,0.1);
-	animate.run([new animate.scale(app,target,1,1.5)],0,0.3);
+	var an = new animate.scale(app,old,1,1,0.1);
+        an.start();
+	an = new animate.scale(app,target,1,1.5,0.3);
+        an.start();
 });
 
 app.addKeyListener(mbapp.KEY_UP, function() {
@@ -59,7 +65,8 @@
         var target = lines[line];
 	var sy = target.y-lightbar.y;
 	sys.puts(sy);
-	animate.run([new animate.shift(app,lightbar,0,sy)],0,0.3);
+	var an = new animate.linear(app,lightbar,0,sy,0.3);
+        an.start();
 });
 app.addKeyListener(mbapp.KEY_DOWN, function() {
 	var old = lines[line];
@@ -74,7 +81,8 @@
 	sys.puts("sy="+sy);
 	sys.puts("target.y="+target.y);
 	sys.puts("lightbar.y="+lightbar.y);
-	animate.run([new animate.shift(app,lightbar,0,sy)],0,0.3);
+	var an = new animate.linear(app,lightbar,0,sy,0.3);
+        an.start();
 });
 
 app.addKeyListener(mbapp.KEY_ENTER, function() {
@@ -82,7 +90,8 @@
 	var sx = 500-target.x;
 	var sy = 220-target.y;
 	sys.puts("target "+sx+','+sy);
-	animate.run([new animate.shift(app,target,sx,sy)],0,1);
+	var an = new animate.linear(app,target,sx,sy,1);
+	an.start();
 	for(i=0;i<items.length;i++) {
 	    if (i == item) continue;
 	    var x = Math.random();
@@ -93,8 +102,10 @@
 	    else y = -500;
 	    sx = x-items[i].x;
 	    sy = y-items[i].y;
-	    animate.run([new animate.shift(app,items[i], sx,sy)],0,2);
-	    animate.run([new animate.alpha(app,items[i],0)],0, 1);
+	    an = new animate.linear(app,items[i], sx,sy,2);
+	    an.start();
+	    alpha = new animate.alpha(app,items[i],0, 1);
+	    alpha.start();
 	}
 });