OSDN Git Service

Modify the setFrame method of the object
authordhrname <dhrname@users.sourceforge.jp>
Wed, 7 Oct 2015 14:01:49 +0000 (23:01 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Wed, 7 Oct 2015 14:01:49 +0000 (23:01 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index df589a3..f52cc67 100644 (file)
@@ -1191,23 +1191,30 @@ base("$calcMode").up("$attribute").mix( {
 \r
 /*$svgEventオブジェクトは、SVGEvent発火を監視するためのオブジェクト*/\r
 base("$frame").up("$svgEvent").mix( {\r
+  /*イベントのスケジュール記録*/\r
   log: [],\r
-  setFrame: function(num) {\r
-    for (var i=0;i<this.log.length;++i) {\r
-      /*ログを検索して、過去にイベントを実行したものは除外する*/\r
-      if (this.log[i].frame <= num) {\r
-        return this.$frame.setFrame(num);\r
-      }\r
+  \r
+  /*タイムラインの長さのキャッシュ*/\r
+  length: 0,\r
+  \r
+  setFrame: function (num) {\r
+    /*キャッシュのlengthプロパティを使って、再びログの計算をさせないようにする*/\r
+    if (this.length === this.timelines.length) {\r
+      return this.$frame.setFrame(num);\r
     }\r
+    this.length = this.timelines.length;\r
     for (var i=0;i<this.timelines.length;++i) {\r
       var timeline = this.timelines[i];\r
-      if (timeline.begin <= num) {\r
-        /*beginEventを発動させる*/\r
-        this.log.push( {\r
-          frame: num,\r
-          target: timeline.target\r
-        } );\r
-      }\r
+      this.log.push( {\r
+        frame: timeline.begin,\r
+        eventType: "begin",\r
+        target: timeline.target\r
+      },\r
+      {\r
+        frame: timeline.begin+timeline.activeTime,\r
+        eventType: "end",\r
+        target: timeline.target\r
+      });\r
     }\r
     return this.$frame.setFrame(num);\r
   }\r
index 27b7520..a216bde 100644 (file)
@@ -4204,6 +4204,7 @@ describe("SMIL Animation Spec", function() {
         } );\r
       /*境界条件を調べておく (limit value analysis)*/\r
       it("should be this for the value  (limit value analysis)", function() {\r
+        expect(frame.length).toBe(0);\r
         expect(frame.log).toEqual([]);\r
         frame.setFrame(0);\r
         expect(frame.log).toEqual([]);\r
@@ -4216,32 +4217,48 @@ describe("SMIL Animation Spec", function() {
         frame.setFrame(0);\r
         expect(frame.log).toEqual([\r
           { frame: 0,\r
+            eventType: "begin",\r
+            target: ele\r
+          },\r
+          { frame: 0,\r
+            eventType: "end",\r
             target: ele\r
           }\r
         ]);\r
+      } );\r
+      /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
+      it("should be this for the value (the valid partion )", function() {\r
+        frame.length = 0;\r
+        frame.log = [];\r
+        base("$frame").addLine( base("$frame").$begin.up().mix({\r
+          timelines: [],\r
+          begin: 0,\r
+          activeTime: 0,\r
+          target: ele\r
+        }) );\r
         frame.setFrame(0);\r
         expect(frame.log).toEqual([\r
           { frame: 0,\r
+            eventType: "begin",\r
             target: ele\r
-          }\r
-        ]);\r
-        \r
-        frame.setFrame(1);\r
-        expect(frame.log).toEqual([\r
+          },\r
           { frame: 0,\r
+            eventType: "end",\r
             target: ele\r
           }\r
         ]);\r
         frame.setFrame(1);\r
         expect(frame.log).toEqual([\r
           { frame: 0,\r
+            eventType: "begin",\r
+            target: ele\r
+          },\r
+          { frame: 0,\r
+            eventType: "end",\r
             target: ele\r
           }\r
         ]);\r
       } );\r
-      /*同値分割をして、有効同値クラスを調べておく (Equivalence partitioning, the following is the valid partion)*/\r
-      it("should be this for the value (the valid partion )", function() {\r
-      } );\r
     } );\r
     describe("Event", function() {\r
       var $animate, ele, frame, p;\r