OSDN Git Service

Support the repeatEvent
authordhrname <dhrname@users.sourceforge.jp>
Sun, 18 Oct 2015 14:07:40 +0000 (23:07 +0900)
committerdhrname <dhrname@users.sourceforge.jp>
Sun, 18 Oct 2015 14:07:40 +0000 (23:07 +0900)
org/w3c/dom/smil.js
tool/Spec/spec/SvgDomSpec.js

index 26b8f79..fcfea44 100644 (file)
@@ -1240,8 +1240,8 @@ base("$frame").up("$svgEvent").mix( {
             target: target,\r
             /*リピートの制限回数*/\r
             limit: Math.floor(activeTime / simpleDur),\r
-            /*リピートの回数*/\r
-            count: 0,\r
+            /*リピートの回数 (n >= 1)*/\r
+            count: 1,\r
             simpleDuration: simpleDur,\r
             next: first.next\r
           };\r
@@ -1269,12 +1269,19 @@ base("$frame").up("$svgEvent").mix( {
         /*IE11ではSVGEventsやDOMEventsを使うと問題が起きるため、MouseEventsで代用する*/\r
         var evt = target.ownerDocument.createEvent("MouseEvents");\r
         evt.initMouseEvent(obj.eventType+"Event" ,true, true, window, 0, 0, 0, 0, 0, false, false, false, false,0, target);\r
-        target.dispatchEvent(evt);\r
-        /*ポインタの連結を変更することで、リストからobj を除去*/\r
-        cobj.next = obj.next;\r
-        if (this.first === obj) {\r
-          cobj = this.first = obj.next;\r
+        if ( (obj.eventType === "repeat") && (obj.count < obj.limit) ) {\r
+          /*リピートイベントが、リピート制限内である場合*/\r
+          /*numの段階で、何回リピートしたかを求める*/\r
+          obj.count += Math.floor( (num - frame) / obj.simpleDuration);\r
+          cobj = obj;\r
+        } else {\r
+          /*ポインタの連結を変更することで、リストからobj を除去*/\r
+          cobj.next = obj.next;\r
+          if (this.first === obj) {\r
+            cobj = this.first = obj.next;\r
+          }\r
         }\r
+        target.dispatchEvent(evt);\r
       } else {\r
         /*next プロパティを書き換えるためのobj オブジェクトのキャッシュ*/\r
         cobj = obj;\r
index cf680fe..cd30cb4 100644 (file)
@@ -4316,7 +4316,7 @@ describe("SMIL Animation Spec", function() {
             next: { frame: 10,\r
               eventType: "repeat",\r
               limit: 1,\r
-              count: 0,\r
+              count: 1,\r
               simpleDuration: 9,\r
               target: ele,\r
             \r
@@ -4352,7 +4352,7 @@ describe("SMIL Animation Spec", function() {
             next: { frame: 5,\r
               eventType: "repeat",\r
               limit: 2,\r
-              count: 0,\r
+              count: 1,\r
               simpleDuration: 4,\r
               target: ele,\r
             \r
@@ -4372,6 +4372,19 @@ describe("SMIL Animation Spec", function() {
         frame.setFrame(5);\r
         a.count = 1;\r
         expect(frame.first).toEqual(a);\r
+        \r
+        frame.timelines = [];\r
+        frame.first = null;\r
+        frame.addLine( base("$frame").$begin.up().mix({\r
+          timelines: [],\r
+          begin: 1,\r
+          simpleDuration: 4,\r
+          activeTime: 10,\r
+          target: ele\r
+        }) );\r
+        frame.setFrame(9);\r
+        a.count = 2;\r
+        expect(frame.first).toEqual(a);\r
       } );\r
     } );\r
     describe("Event", function() {\r