From 2b58581ed775f79b799a490b62cddcdfd24d4787 Mon Sep 17 00:00:00 2001 From: Andrew Klaassen Date: Fri, 15 Dec 2017 09:26:52 -0500 Subject: [PATCH] Added signedMinBits to SWF writer to better match Flash behaviour. --- format/swf/Reader.hx | 2 +- format/swf/Writer.hx | 25 ++++++++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/format/swf/Reader.hx b/format/swf/Reader.hx index 312989a1..4699d205 100644 --- a/format/swf/Reader.hx +++ b/format/swf/Reader.hx @@ -849,7 +849,7 @@ class Reader { var endBounds = readRect(); switch(ver) { case 1: - readInt(); // ? + var offsetToEndEdges = readInt(); var fillStyles = readMorphFillStyles(ver); var lineStyles = readMorph1LineStyles(); var startEdges = readShapeWithoutStyle(3); // Assume DefineShape3 diff --git a/format/swf/Writer.hx b/format/swf/Writer.hx index 21bb0829..9d170871 100644 --- a/format/swf/Writer.hx +++ b/format/swf/Writer.hx @@ -60,8 +60,23 @@ class Writer { writeEnd(); } + function signedMinBits(values: Array): Int { + var x: Int = 0; + var allZeroes = true; + for (v in values) { + if (v != 0) { + allZeroes = false; + break; + } + } + if (! allZeroes) { + x = Tools.minBits(values) + 1; + } + return x; + } + function writeRect(r) { - var nbits = Tools.minBits([r.left, r.right, r.top, r.bottom]) + 1; + var nbits = signedMinBits([r.left, r.right, r.top, r.bottom]); bits.writeBits(5,nbits); bits.writeBits(nbits,r.left); @@ -136,7 +151,7 @@ class Writer { var sx = Tools.toFixed16(m.scale.x); var sy = Tools.toFixed16(m.scale.y); - var nbits = Tools.minBits([sx, sy]) + 1; + var nbits = signedMinBits([sx, sy]); bits.writeBits(5, nbits); bits.writeBits(nbits, sx); @@ -150,7 +165,7 @@ class Writer { var rs0 = Tools.toFixed16(m.rotate.rs0); var rs1 = Tools.toFixed16(m.rotate.rs1); - var nbits = Tools.minBits([rs0, rs1]) + 1; + var nbits = signedMinBits([rs0, rs1]); bits.writeBits(5, nbits); bits.writeBits(nbits, rs0); @@ -159,7 +174,7 @@ class Writer { } else bits.writeBit(false); - var nbits = Tools.minBits([m.translate.x, m.translate.y]) + 1; + var nbits = signedMinBits([m.translate.x, m.translate.y]); bits.writeBits(5, nbits); bits.writeBits(nbits, m.translate.x); @@ -890,7 +905,7 @@ class Writer { writeMorphGradients(ver, gradients); case MFSRadialGradient(startMatrix, endMatrix, gradients): - o.writeByte(FillStyleTypeId.LinearGradient); + o.writeByte(FillStyleTypeId.RadialGradient); writeMatrix(startMatrix); writeMatrix(endMatrix); writeMorphGradients(ver, gradients);