Skip to content

Commit

Permalink
Added signedMinBits to SWF writer to better match Flash behaviour.
Browse files Browse the repository at this point in the history
  • Loading branch information
andrew-klaassen committed Dec 15, 2017
1 parent 00c26ea commit 2b58581
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 6 deletions.
2 changes: 1 addition & 1 deletion format/swf/Reader.hx
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
25 changes: 20 additions & 5 deletions format/swf/Writer.hx
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,23 @@ class Writer {
writeEnd();
}

function signedMinBits(values: Array<Int>): 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);
Expand Down Expand Up @@ -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);
Expand All @@ -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);
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down

0 comments on commit 2b58581

Please sign in to comment.