diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java index aa421b3e1..4921a94a7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWF.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java @@ -1466,7 +1466,12 @@ public final class SWF implements TreeItem, Timelined { for (int c : library) { CharacterTag ch = fswf.characters.get(c); - if (ch instanceof ImageTag) { + if(ch instanceof FontTag){ + fos.write(Utf8Helper.getBytes("function " + getTypePrefix(ch) + c + "(ctx,ch,textColor){\r\n")); + fos.write(Utf8Helper.getBytes(((FontTag) ch).toHtmlCanvas(1))); + fos.write(Utf8Helper.getBytes("}\r\n\r\n")); + } + else if (ch instanceof ImageTag) { ImageTag image = (ImageTag) ch; String format = image.getImageFormat(); InputStream imageStream = image.getImageData(); @@ -2281,26 +2286,24 @@ public final class SWF implements TreeItem, Timelined { sb.append("\t\t\tfctx.applyTransforms(ctx._matrices);\r\n"); sb.append("\t\t\tctx = fctx;\r\n"); } - sb.append("\t\t\tctx.save();\r\n"); - sb.append("\t\t\tctx.transform(").append(Helper.doubleStr(placeMatrix.scaleX)).append(","); - sb.append(Helper.doubleStr(placeMatrix.rotateSkew0)).append(","); - sb.append(Helper.doubleStr(placeMatrix.rotateSkew1)).append(","); - sb.append(Helper.doubleStr(placeMatrix.scaleY)).append(","); - sb.append(Helper.doubleStr(placeMatrix.translateX)).append(","); - sb.append(Helper.doubleStr(placeMatrix.translateY)); - sb.append(");\r\n"); + ColorTransform ctrans =layer.colorTransForm; + String ctrans_str = "ctrans"; if(ctrans==null){ ctrans = new ColorTransform(); - sb.append("\t\t\tvar nctrans = ctrans;\r\n"); }else{ - sb.append("\t\t\tvar nctrans = ctrans.merge(new cxform("+ + ctrans_str = "ctrans.merge(new cxform("+ ctrans.getRedAdd()+","+ctrans.getGreenAdd()+","+ctrans.getBlueAdd()+","+ctrans.getAlphaAdd()+","+ ctrans.getRedMulti()+","+ctrans.getGreenMulti()+","+ctrans.getBlueMulti()+","+ctrans.getAlphaMulti() - +"));\r\n"); + +"))"; } - sb.append("\t\t\t").append(getTypePrefix(character)).append(layer.characterId).append("(ctx,nctrans,").append(f).append(",").append(layer.ratio < 0 ? 0 : layer.ratio).append(");\r\n"); - sb.append("\t\t\tctx.restore();\r\n"); + sb.append("\t\t\t").append("place(\"").append(getTypePrefix(character)).append(layer.characterId).append("\",canvas,ctx,[").append(placeMatrix.scaleX).append(",") + .append(placeMatrix.rotateSkew0).append(",") + .append(placeMatrix.rotateSkew1).append(",") + .append(placeMatrix.scaleY).append(",") + .append(placeMatrix.translateX).append(",") + .append(placeMatrix.translateY).append("],").append(ctrans_str).append(",").append(f).append(",").append(layer.ratio < 0 ? 0 : layer.ratio).append(");\r\n"); + if(layer.filters!=null){ for(FILTER filter:layer.filters){ if(filter instanceof COLORMATRIXFILTER){ diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java index bd4cc64f0..b1fe0f59d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/morphshape/CanvasMorphShapeExporter.java @@ -261,7 +261,7 @@ public class CanvasMorphShapeExporter extends MorphShapeExporterBase { } - fillData += "\tvar fimg = ctrans.applyToImage(image" + bitmapId + ");"; + fillData += "\tvar fimg = ctrans.applyToImage(image" + bitmapId + ");\r\n"; fillData += "\tvar pat=ctx.createPattern(fimg,\"repeat\");\r\n"; fillData += "\tctx.fillStyle = pat;\r\n"; } diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java index 1df623012..6cbba3f9d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java @@ -142,7 +142,7 @@ public class CanvasShapeExporter extends ShapeExporterBase { + "\tvar imdata=ictx.getImageData(0,0,icanvas.width,icanvas.height);\r\n" + "\tvar idata=imdata.data;\r\n" + "\tfor(var i=0;i shapes = getGlyphShapeTable(); + StringBuilder sb=new StringBuilder(); + sb.append("\tdefaultFill = textColor;\r\n"); + sb.append("\tswitch(ch){\r\n"); + for(int i=0;i glyphs = new ArrayList<>(); for (TEXTRECORD rec : textRecords) { if (rec.styleFlagsHasColor) { @@ -334,6 +336,7 @@ public abstract class TextTag extends CharacterTag implements BoundedTag, Drawab } if (rec.styleFlagsHasFont) { font = (FontTag) swf.characters.get(rec.fontId); + fontId = rec.fontId; glyphs = font.getGlyphShapeTable(); textHeight = rec.textHeight; } @@ -346,17 +349,15 @@ public abstract class TextTag extends CharacterTag implements BoundedTag, Drawab double rat = textHeight / 1024.0 / font.getDivider(); + + ret += "\tvar textColor = "+CanvasShapeExporter.color(textColor)+";\r\n"; for (GLYPHENTRY entry : rec.glyphEntries) { Matrix mat = (new Matrix(textMatrix).concatenate(Matrix.getTranslateInstance(x, y))).concatenate(Matrix.getScaleInstance(rat)); if (entry.glyphIndex != -1) { // shapeNum: 1 ret += "\tctx.save();\r\n"; ret += "\tctx.transform(" + mat.scaleX + "," + mat.rotateSkew0 + "," + mat.rotateSkew1 + "," + mat.scaleY + "," + mat.translateX + "," + mat.translateY + ");\r\n"; - - SHAPE shape = glyphs.get(entry.glyphIndex); - CanvasShapeExporter exporter = new CanvasShapeExporter(new RGBA(textColor), unitDivisor, swf, shape, colorTransform, 0, 0); - exporter.export(); - ret += exporter.getShapeData(); + ret += "\tfont"+fontId+"(ctx,\""+(""+font.glyphToChar(entry.glyphIndex)).replace("\"", "\\\"")+"\",textColor);\r\n"; ret += "\tctx.restore();\r\n"; x += entry.glyphAdvance; }