allow string based values for comboboxarray
[roojs1] / Roo / lib / AnimMgr.js
1
2 /*
3  * Portions of this file are based on pieces of Yahoo User Interface Library
4  * Copyright (c) 2007, Yahoo! Inc. All rights reserved.
5  * YUI licensed under the BSD License:
6  * http://developer.yahoo.net/yui/license.txt
7  * <script type="text/javascript">
8  *
9  */
10
11 Roo.lib.AnimMgr = new function() {
12
13     var thread = null;
14
15
16     var queue = [];
17
18
19     var tweenCount = 0;
20
21
22     this.fps = 1000;
23
24
25     this.delay = 1;
26
27
28     this.registerElement = function(tween) {
29         queue[queue.length] = tween;
30         tweenCount += 1;
31         tween._onStart.fire();
32         this.start();
33     };
34
35
36     this.unRegister = function(tween, index) {
37         tween._onComplete.fire();
38         index = index || getIndex(tween);
39         if (index != -1) {
40             queue.splice(index, 1);
41         }
42
43         tweenCount -= 1;
44         if (tweenCount <= 0) {
45             this.stop();
46         }
47     };
48
49
50     this.start = function() {
51         if (thread === null) {
52             thread = setInterval(this.run, this.delay);
53         }
54     };
55
56
57     this.stop = function(tween) {
58         if (!tween) {
59             clearInterval(thread);
60
61             for (var i = 0, len = queue.length; i < len; ++i) {
62                 if (queue[0].isAnimated()) {
63                     this.unRegister(queue[0], 0);
64                 }
65             }
66
67             queue = [];
68             thread = null;
69             tweenCount = 0;
70         }
71         else {
72             this.unRegister(tween);
73         }
74     };
75
76
77     this.run = function() {
78         for (var i = 0, len = queue.length; i < len; ++i) {
79             var tween = queue[i];
80             if (!tween || !tween.isAnimated()) {
81                 continue;
82             }
83
84             if (tween.currentFrame < tween.totalFrames || tween.totalFrames === null)
85             {
86                 tween.currentFrame += 1;
87
88                 if (tween.useSeconds) {
89                     correctFrame(tween);
90                 }
91                 tween._onTween.fire();
92             }
93             else {
94                 Roo.lib.AnimMgr.stop(tween, i);
95             }
96         }
97     };
98
99     var getIndex = function(anim) {
100         for (var i = 0, len = queue.length; i < len; ++i) {
101             if (queue[i] == anim) {
102                 return i;
103             }
104         }
105         return -1;
106     };
107
108
109     var correctFrame = function(tween) {
110         var frames = tween.totalFrames;
111         var frame = tween.currentFrame;
112         var expected = (tween.currentFrame * tween.duration * 1000 / tween.totalFrames);
113         var elapsed = (new Date() - tween.getStartTime());
114         var tweak = 0;
115
116         if (elapsed < tween.duration * 1000) {
117             tweak = Math.round((elapsed / expected - 1) * tween.currentFrame);
118         } else {
119             tweak = frames - (frame + 1);
120         }
121         if (tweak > 0 && isFinite(tweak)) {
122             if (tween.currentFrame + tweak >= frames) {
123                 tweak = frames - (frame + 1);
124             }
125
126             tween.currentFrame += tweak;
127         }
128     };
129 };
130
131