OSDN Git Service

- edgesType から M を外したので、edgesType があるかどうかの判定を「1より大きい」から「2より大きい」に変更
authorYoshihiro Yamazaki <yoya@awm.jp>
Mon, 10 Dec 2012 17:51:21 +0000 (02:51 +0900)
committerYoshihiro Yamazaki <yoya@awm.jp>
Mon, 10 Dec 2012 17:51:21 +0000 (02:51 +0900)
- ChangeStyle で処理する順番を誤っていた為、NewStyle が正しく読み取れなかったので修正。

src/swf/shaperecords.js

index ec51e01..7433b60 100644 (file)
@@ -67,59 +67,59 @@ FlappSWFShapeRecords.load = function(code, ibit, fillStyles, lineStyles, numFill
                 currentY = anchorY;
             }
         } else if (first6bits) { // Change (0XXXXX != 000000)
-            if (edgeTypeArray.length > 1) {
+            if (edgeTypeArray.length > 0) {
                 shapeRecords.push(
                     {fillStyle0:fillStyle0, fillStyle1:fillStyle1, lineStyle:lineStyle,
                     edgeTypes:edgeTypeArray.join(''),edges:edges}
                 );
             }
-            if (first6bits & 0x10) { // StateNewStyles
+           var stateNewStyles  = first6bits & 0x10;
+           var stateLineStyle  = first6bits &    8;
+           var stateFillStyle1 = first6bits &    4;
+           var stateFillStyle0 = first6bits &    2;
+           var stateMoveTo     = first6bits &    1;
+
+            if (stateMoveTo) {
+                var moveBits = ibit.ub(5);
+                currentX = ibit.sb(moveBits); // MoveDeltaX(?)
+                currentY = ibit.sb(moveBits); // MoveDeltaY(?)
+            }
+            if (stateFillStyle0) { // 
+                fillStyle0 = ibit.ub(numFillBits);
+            }
+            if (stateFillStyle1) {
+                fillStyle1 = ibit.ub(numFillBits);
+            }
+            if (stateLineStyle) {
+                lineStyle = ibit.ub(numLineBits);
+            }
+            if (stateNewStyles) {
                 fillStyleBaseIndex = fillStyles.length;
                 lineStyleBaseIndex = lineStyles.length;
                 var appendFillStyles = FlappSWFFillStyles.load(code, ibit);
                 var appendLineStyles = FlappSWFLineStyles.load(code, ibit);
-                var extendFillStyles = [];
-                var extendLineStyles = [];
-                for (var i = 0, l = fillStyles.length ; i < l ; i++) {
-                    extendFillStyles.push(fillStyles[i]);
-                }
                 for (var i = 0, l = appendFillStyles.length ; i < l ; i++) {
-                    extendFillStyles.push(appendFillStyles[i]);
-                }
-                for (var i = 0, l = lineStyles.length ; i < l ; i++) {
-                    extendLineStyles.push(lineStyles[i]);
+                    fillStyles.push(appendFillStyles[i]);
                 }
                 for (var i = 0, l = appendLineStyles.length ; i < l ; i++) {
-                    extendLineStyles.push(appendLineStyles[i]);
+                    lineStyles.push(appendLineStyles[i]);
                 }
-                fillStyles = extendFillStyles;
-                lineStyles = extendFillStyles;
                 ibit.a();
                 var numBits = ibit.ui8();
                 numFillBits = numBits >> 4;
                 numLineBits = numBits & 0x0f;
-                fillStyleBaseIndex = fillStyles.length;
-                lineStyleBaseIndex = lineStyles.length;
             }
-            if (first6bits & 1) { // StateMoveTo
-                var moveBits = ibit.ub(5);
-                currentX = ibit.sb(moveBits); // MoveDeltaX(?)
-                currentY = ibit.sb(moveBits); // MoveDeltaY(?)
-            }
-            if (first6bits & 2) { // StateFillStyle0
-                fillStyle0 = ibit.ub(numFillBits);
+            if (stateFillStyle0) { // 
                 if (fillStyle0) {
                     fillStyle0 += fillStyleBaseIndex;
                 }
             }
-            if (first6bits & 4) { // StateFillStyle1
-                fillStyle1 = ibit.ub(numFillBits);
+            if (stateFillStyle1) {
                 if (fillStyle1) {
                     fillStyle1 += fillStyleBaseIndex;
                 }
             }
-            if (first6bits & 8) { // StateLineStyle
-                lineStyle = ibit.ub(numLineBits);
+            if (stateLineStyle) {
                 if (lineStyle) {
                     lineStyle += lineStyleBaseIndex;
                 }
@@ -128,7 +128,7 @@ FlappSWFShapeRecords.load = function(code, ibit, fillStyles, lineStyles, numFill
             edges = [currentX, currentY];
         }
     }
-    if (edgeTypeArray.length > 1) {
+    if (edgeTypeArray.length > 0) {
         shapeRecords.push(
             {fillStyle0:fillStyle0, fillStyle1:fillStyle1, lineStyle:lineStyle,
             edgeTypes:edgeTypeArray.join(''), edges:edges}