MatrixNode mtxNode = fill.matrix;
if (mtxNode != null)
{
double tx = mtxNode.tx;
double ty = mtxNode.ty;
FXGMatrix fxgMtx = new FXGMatrix(mtxNode.a, mtxNode.b, mtxNode.c, mtxNode.d, 0, 0);
fxgMtx.scale(ISWFConstants.TWIPS_PER_PIXEL, ISWFConstants.TWIPS_PER_PIXEL);
fxgMtx.translate(tx, ty);
return fxgMtx;
}
FXGMatrix matrix = new FXGMatrix();
double tx;
double ty;
double scaleX;
double scaleY;
if ((fill.getFileVersion() != FXGVersion.v1_0) && (fill.fillMode.equals(FillMode.SCALE)))
{
tx = (Double.isNaN(fill.x)) ? pathBounds.xMin()/(double)ISWFConstants.TWIPS_PER_PIXEL : fill.x;
ty = (Double.isNaN(fill.y)) ? pathBounds.yMin()/(double)ISWFConstants.TWIPS_PER_PIXEL : fill.y;
scaleX = (Double.isNaN(fill.scaleX)) ? (pathBounds.getWidth()/(double) img.getWidth()) :
ISWFConstants.TWIPS_PER_PIXEL * fill.scaleX;
scaleY = (Double.isNaN(fill.scaleY)) ? (pathBounds.getHeight()/(double) img.getHeight()) :
ISWFConstants.TWIPS_PER_PIXEL * fill.scaleY;
}
else
{
tx = (Double.isNaN(fill.x)) ? pathBounds.xMin()/(double)ISWFConstants.TWIPS_PER_PIXEL : fill.x;
ty = (Double.isNaN(fill.y)) ? pathBounds.yMin()/(double)ISWFConstants.TWIPS_PER_PIXEL : fill.y;
scaleX = (Double.isNaN(fill.scaleX)) ? ISWFConstants.TWIPS_PER_PIXEL : ISWFConstants.TWIPS_PER_PIXEL * fill.scaleX;
scaleY = (Double.isNaN(fill.scaleY)) ? ISWFConstants.TWIPS_PER_PIXEL : ISWFConstants.TWIPS_PER_PIXEL * fill.scaleY;
}
double angle = fill.rotation;
while (angle < 0)
angle += 360;
angle %= 360;
matrix.scale(scaleX, scaleY);
matrix.rotate(angle);
matrix.translate(tx, ty);
return matrix;
}