From ca2f6ede8f2300e6032620f3275b6c38fb71412f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Wed, 23 Apr 2014 18:07:08 +0200 Subject: [PATCH] Frames to HTML5 Canvas - Static texts --- trunk/src/com/jpexs/decompiler/flash/SWF.java | 16 ++++- .../flash/exporters/ShapeExporter.java | 2 +- .../exporters/shape/CanvasShapeExporter.java | 20 ++++-- .../flash/tags/DefineEditTextTag.java | 18 ++++- .../decompiler/flash/tags/DefineFontTag.java | 2 +- .../flash/tags/DefineMorphShape2Tag.java | 5 ++ .../flash/tags/DefineMorphShapeTag.java | 6 +- .../flash/tags/DefineSpriteTag.java | 5 ++ .../decompiler/flash/tags/DefineText2Tag.java | 5 ++ .../decompiler/flash/tags/DefineTextTag.java | 5 ++ .../decompiler/flash/tags/base/ButtonTag.java | 8 +++ .../flash/tags/base/DrawableTag.java | 3 + .../decompiler/flash/tags/base/FontTag.java | 5 ++ .../decompiler/flash/tags/base/ShapeTag.java | 10 +++ .../decompiler/flash/tags/base/TextTag.java | 68 +++++++++++++++++-- .../decompiler/flash/timeline/Timeline.java | 7 ++ .../decompiler/flash/timeline/Timelined.java | 2 +- 17 files changed, 170 insertions(+), 17 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java index bc368488a..461fb22f5 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWF.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java @@ -2170,7 +2170,19 @@ public final class SWF implements TreeItem, Timelined { f = layer.time % tim.getFrameCount(); } if (!library.containsKey(layer.characterId)) { - if (character instanceof ShapeTag) { + + if (character instanceof DefineSpriteTag) { + DefineSpriteTag sp = (DefineSpriteTag) character; + Timeline tim = sp.getTimeline(); + framesToHtmlCanvas(1, library, usedRatios, tim, null, 0, stateUnderCursor, mouseButton, displayRect, colorTransform, backGroundColor, level + 1); + //placeMatrix = new Matrix(); + charStr = null; + }else{ + if(character instanceof DrawableTag){ + charStr = ((DrawableTag)character).toHtmlCanvas(1); + } + } + /*if (character instanceof ShapeTag) { ShapeTag sh = (ShapeTag) character; CanvasShapeExporter cse = new CanvasShapeExporter(1,timeline.swf, sh.getShapes(), colorTransform, 0, 0); cse.export(); @@ -2195,7 +2207,7 @@ public final class SWF implements TreeItem, Timelined { } } charStr = mb.toString(); - } + }*/ if (charStr != null) { library.put(layer.characterId, charStr); } diff --git a/trunk/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java b/trunk/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java index fea160135..f9c28bc4b 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/ShapeExporter.java @@ -102,7 +102,7 @@ public class ShapeExporter { SHAPE shp = st.getShapes(); int deltaX = -shp.getBounds().Xmin; int deltaY = -shp.getBounds().Ymin; - CanvasShapeExporter cse = new CanvasShapeExporter(SWF.unitDivisor,((Tag)st).getSwf(),shp, new CXFORMWITHALPHA(),deltaX,deltaY); + CanvasShapeExporter cse = new CanvasShapeExporter(null,SWF.unitDivisor,((Tag)st).getSwf(),shp, new CXFORMWITHALPHA(),deltaX,deltaY); cse.export(); fos.write(Utf8Helper.getBytes(cse.getHtml())); } 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 6bb196d70..36fecfe3d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java +++ b/trunk/src/com/jpexs/decompiler/flash/exporters/shape/CanvasShapeExporter.java @@ -32,6 +32,7 @@ import com.jpexs.decompiler.flash.types.RGBA; import com.jpexs.decompiler.flash.types.SHAPE; import com.jpexs.helpers.Helper; import com.jpexs.helpers.SerializableImage; +import java.awt.Color; import java.awt.geom.AffineTransform; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -58,6 +59,7 @@ public class CanvasShapeExporter extends ShapeExporterBase { protected SWF swf; protected int repeatCnt = 0; protected double unitDivisor; + protected RGB basicFill; public static String getJsPrefix(){ @@ -98,10 +100,11 @@ public class CanvasShapeExporter extends ShapeExporterBase { - public CanvasShapeExporter(double unitDivisor,SWF swf, SHAPE shape, ColorTransform colorTransform, int deltaX, int deltaY) { + public CanvasShapeExporter(RGB basicFill,double unitDivisor,SWF swf, SHAPE shape, ColorTransform colorTransform, int deltaX, int deltaY) { super(shape, colorTransform); this.swf = swf; this.unitDivisor = unitDivisor; + this.basicFill = basicFill; } @Override @@ -133,7 +136,10 @@ public class CanvasShapeExporter extends ShapeExporterBase { @Override public void beginFill(RGB color) { finalizePath(); - fillData += "ctx.fillStyle=\"" + color(color) + "\";\r\n"; + if(color == null){ + color = basicFill; + } + fillData += "ctx.fillStyle=\"" + color(color) + "\";\r\n"; } @Override @@ -165,6 +171,8 @@ public class CanvasShapeExporter extends ShapeExporterBase { matrix.translateX += deltaX / unitDivisor; matrix.translateY += deltaY / unitDivisor; + //TODO: Focal point + fillData += "var grd=ctx.createRadialGradient(0,0,0,0,0," + (16384 + 32768 * repeatCnt) + ");\r\n"; } int repeatTotal = repeatCnt * 2 + 1; @@ -187,8 +195,12 @@ public class CanvasShapeExporter extends ShapeExporterBase { fillData += "ctx.fillStyle = grd;\r\n"; } - private String color(RGB rgb) { - if (rgb instanceof RGBA) { + public static String color(Color color) { + return color(new RGBA(color.getRed(),color.getGreen(),color.getBlue(),color.getAlpha())); + } + + public static String color(RGB rgb) { + if ((rgb instanceof RGBA)&&(((RGBA) rgb).alpha<255)) { RGBA rgba = (RGBA) rgb; return "rgba(" + rgba.red + "," + rgba.green + "," + rgba.blue + "," + rgba.getAlphaFloat() + ")"; } else { diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java index d822769ee..442c070cd 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java @@ -762,6 +762,14 @@ public class DefineEditTextTag extends TextTag { @Override public void toImage(int frame, int time, int ratio, DepthState stateUnderCursor, int mouseButton, SerializableImage image, Matrix transformation, ColorTransform colorTransform) { + render(false, image, transformation, colorTransform); + } + + + private String render(boolean canvas,SerializableImage image, Matrix transformation, ColorTransform colorTransform){ + if(image == null){ + return ""; //TODO: handle Html Canvas conversion + } if (border) { // border is always black, fill color is always white? RGB borderColor = new RGBA(Color.black); @@ -936,8 +944,9 @@ public class DefineEditTextTag extends TextTag { staticTextToImage(swf, allTextRecords, 2, image, getTextMatrix(), transformation, colorTransform); } - } - + return ""; //TODO: Return HTML Canvas converted + } + @Override public String toSVG(SVGExporterContext exporterContext, int ratio, ColorTransform colorTransform, int level) { return ""; @@ -965,4 +974,9 @@ public class DefineEditTextTag extends TextTag { public boolean isSingleFrame() { return true; } + + @Override + public String toHtmlCanvas(double unitDivisor) { + return render(true, null, new Matrix(), new ColorTransform()); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java index bdbba9793..b1393a74f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java @@ -323,5 +323,5 @@ public class DefineFontTag extends FontTag { @Override public int getGlyphKerningAdjustment(int glyphIndex, int nextGlyphIndex) { return 0; - } + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java index c2092d34e..cb7375e45 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShape2Tag.java @@ -360,4 +360,9 @@ public class DefineMorphShape2Tag extends CharacterTag implements MorphShapeTag public Shape getOutline(int frame, int time, int ratio, DepthState stateUnderCursor, int mouseButton, Matrix transformation) { return transformation.toTransform().createTransformedShape(getShapeAtRatio(ratio).getOutline()); } + + @Override + public String toHtmlCanvas(double unitDivisor) { + return ""; //TODO + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java index b5d30ddab..1622c3c3d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineMorphShapeTag.java @@ -343,5 +343,9 @@ public class DefineMorphShapeTag extends CharacterTag implements MorphShapeTag { public Shape getOutline(int frame, int time, int ratio, DepthState stateUnderCursor, int mouseButton, Matrix transformation) { return transformation.toTransform().createTransformedShape(getShapeAtRatio(ratio).getOutline()); } - + + @Override + public String toHtmlCanvas(double unitDivisor) { + return ""; //TODO + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java index 9a0ba19cf..1309336fe 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java @@ -335,4 +335,9 @@ public class DefineSpriteTag extends CharacterTag implements Container, Drawable } return false; } + + @Override + public String toHtmlCanvas(double unitDivisor) { + return getTimeline().toHtmlCanvas(unitDivisor, null); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java index f9f851f14..e90dff178 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java @@ -512,4 +512,9 @@ public class DefineText2Tag extends TextTag { public boolean isSingleFrame() { return true; } + + @Override + public String toHtmlCanvas(double unitDivisor) { + return staticTextToHtmlCanvas(unitDivisor, swf, textRecords, 2, textBounds, textMatrix, new ColorTransform()); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java index ca2d96eed..3158c40f6 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java @@ -528,4 +528,9 @@ public class DefineTextTag extends TextTag { public boolean isSingleFrame() { return true; } + + @Override + public String toHtmlCanvas(double unitDivisor) { + return staticTextToHtmlCanvas(unitDivisor, swf, textRecords, 1, textBounds, textMatrix, new ColorTransform()); + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java index 3f49a5455..856be433d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/ButtonTag.java @@ -28,6 +28,7 @@ import com.jpexs.decompiler.flash.types.ColorTransform; import com.jpexs.helpers.SerializableImage; import java.awt.Shape; import java.io.IOException; +import java.util.Arrays; import java.util.List; /** @@ -76,4 +77,11 @@ public abstract class ButtonTag extends CharacterTag implements DrawableTag, Tim return null; } + @Override + public String toHtmlCanvas(double unitDivisor) { + return getTimeline().toHtmlCanvas(unitDivisor, Arrays.asList(0)); //TODO: handle states? + } + + + } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java index 900ba6121..804f984a4 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/DrawableTag.java @@ -23,6 +23,7 @@ import com.jpexs.decompiler.flash.types.ColorTransform; import com.jpexs.helpers.SerializableImage; import java.awt.Shape; import java.io.IOException; +import java.util.Set; /** * @@ -33,6 +34,8 @@ public interface DrawableTag extends BoundedTag { public void toImage(int frame, int time, int ratio, DepthState stateUnderCursor, int mouseButton, SerializableImage image, Matrix transformation, ColorTransform colorTransform); public String toSVG(SVGExporterContext exporterContext, int ratio, ColorTransform colorTransform, int level) throws IOException; + + public String toHtmlCanvas(double unitDivisor); public int getNumFrames(); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java index 5ba4ccc7d..c83e8b9a7 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java @@ -312,4 +312,9 @@ public abstract class FontTag extends CharacterTag implements AloneTag, Drawable } return dfn.fontCopyright; } + + @Override + public String toHtmlCanvas(double unitDivisor) { + return ""; //TODO + } } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java index c5c762a6e..3424acccc 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/ShapeTag.java @@ -22,6 +22,7 @@ import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporterContext; import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; import com.jpexs.decompiler.flash.timeline.DepthState; import com.jpexs.decompiler.flash.types.ColorTransform; @@ -62,4 +63,13 @@ public abstract class ShapeTag extends CharacterTag implements BoundedTag, Drawa exporter.export(); return svgExporter.getSVG(); } + + @Override + public String toHtmlCanvas(double unitDivisor) { + CanvasShapeExporter cse = new CanvasShapeExporter(null,unitDivisor, swf, getShapes(), new ColorTransform(), 0, 0); + cse.export(); + return cse.getShapeData(); + } + + } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/TextTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/TextTag.java index a43c37e2f..5caf48961 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -20,6 +20,7 @@ import com.jpexs.decompiler.flash.SWF; import com.jpexs.decompiler.flash.exporters.commonshape.Matrix; import com.jpexs.decompiler.flash.exporters.commonshape.SVGExporter; import com.jpexs.decompiler.flash.exporters.shape.BitmapExporter; +import com.jpexs.decompiler.flash.exporters.shape.CanvasShapeExporter; import com.jpexs.decompiler.flash.exporters.shape.SVGShapeExporter; import com.jpexs.decompiler.flash.tags.Tag; import com.jpexs.decompiler.flash.tags.text.ParseException; @@ -33,6 +34,7 @@ import com.jpexs.decompiler.flash.types.LINESTYLEARRAY; import com.jpexs.decompiler.flash.types.MATRIX; import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.decompiler.flash.types.RGB; +import com.jpexs.decompiler.flash.types.RGBA; import com.jpexs.decompiler.flash.types.SHAPE; import com.jpexs.decompiler.flash.types.SHAPEWITHSTYLE; import com.jpexs.decompiler.flash.types.TEXTRECORD; @@ -210,10 +212,7 @@ public abstract class TextTag extends CharacterTag implements BoundedTag, Drawab return att; } - public static void drawBorder(SWF swf, SerializableImage image, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { - Graphics2D g = (Graphics2D) image.getGraphics(); - Matrix mat = transformation.clone(); - mat = mat.concatenate(new Matrix(textMatrix)); + public static SHAPE getBorderShape(RGB borderColor, RGB fillColor, RECT rect){ SHAPEWITHSTYLE shape = new SHAPEWITHSTYLE(); shape.fillStyles = new FILLSTYLEARRAY(); if (fillColor != null) { @@ -258,7 +257,14 @@ public abstract class TextTag extends CharacterTag implements BoundedTag, Drawab shape.shapeRecords.add(bottom); shape.shapeRecords.add(left); shape.shapeRecords.add(new EndShapeRecord()); - BitmapExporter.export(swf, shape, null, image, mat, colorTransform); + return shape; + } + + public static void drawBorder(SWF swf, SerializableImage image, RGB borderColor, RGB fillColor, RECT rect, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { + Graphics2D g = (Graphics2D) image.getGraphics(); + Matrix mat = transformation.clone(); + mat = mat.concatenate(new Matrix(textMatrix)); + BitmapExporter.export(swf, getBorderShape(borderColor, fillColor, rect), null, image, mat, colorTransform); } public static void staticTextToImage(SWF swf, List textRecords, int numText, SerializableImage image, MATRIX textMatrix, Matrix transformation, ColorTransform colorTransform) { @@ -306,6 +312,58 @@ public abstract class TextTag extends CharacterTag implements BoundedTag, Drawab } } + + public static String staticTextToHtmlCanvas(double unitDivisor, SWF swf, List textRecords, int numText, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform) { + Color textColor = new Color(0, 0, 0); + String ret = ""; + FontTag font = null; + int textHeight = 12; + int x = 0; + int y = 0; + List glyphs = new ArrayList<>(); + SVGExporter svgExporter = new SVGExporter(null, colorTransform); + for (TEXTRECORD rec : textRecords) { + if (rec.styleFlagsHasColor) { + if (numText == 2) { + textColor = colorTransform.apply(rec.textColorA.toColor()); + } else { + textColor = colorTransform.apply(rec.textColor.toColor()); + } + } + if (rec.styleFlagsHasFont) { + font = (FontTag) swf.characters.get(rec.fontId); + glyphs = font.getGlyphShapeTable(); + textHeight = rec.textHeight; + } + if (rec.styleFlagsHasXOffset) { + x = rec.xOffset; + } + if (rec.styleFlagsHasYOffset) { + y = rec.yOffset; + } + + double rat = textHeight / 1024.0 / font.getDivider(); + + for (GLYPHENTRY entry : rec.glyphEntries) { + Matrix mat = (new Matrix(textMatrix).concatenate(Matrix.getTranslateInstance(x - bounds.Xmin, y - bounds.Ymin))).concatenate(Matrix.getScaleInstance(rat)); + if (entry.glyphIndex != -1) { + // shapeNum: 1 + ret += "ctx.save();\r\n"; + ret += "ctx.transform(" + mat.scaleX + "," + mat.rotateSkew0 + "," + mat.rotateSkew1 + "," + mat.scaleY + "," + mat.translateX + "," + mat.translateY + ");\r\n"; + + SHAPE shape = glyphs.get(entry.glyphIndex); + svgExporter.createNewGroup(mat); + CanvasShapeExporter exporter = new CanvasShapeExporter(new RGBA(textColor),unitDivisor, swf, shape, colorTransform,0,0); + exporter.export(); + ret += exporter.getShapeData(); + ret += "ctx.restore();\r\n"; + x += entry.glyphAdvance; + } + } + } + return ret; + } + public static String staticTextToSVG(SWF swf, List textRecords, int numText, RECT bounds, MATRIX textMatrix, ColorTransform colorTransform) { Color textColor = new Color(0, 0, 0); FontTag font = null; diff --git a/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java b/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java index b737808a7..d67edb16f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java +++ b/trunk/src/com/jpexs/decompiler/flash/timeline/Timeline.java @@ -35,6 +35,7 @@ import com.jpexs.decompiler.flash.types.MATRIX; import com.jpexs.decompiler.flash.types.RECT; import com.jpexs.decompiler.flash.types.filters.FILTER; import com.jpexs.helpers.SerializableImage; +import java.awt.Color; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Area; @@ -169,6 +170,12 @@ public class Timeline { public void toImage(int frame, int time, int ratio, DepthState stateUnderCursor, int mouseButton, SerializableImage image, Matrix transformation, ColorTransform colorTransform) { SWF.frameToImage(this, frame, time, stateUnderCursor, mouseButton, image, transformation, colorTransform); } + + + public String toHtmlCanvas(double unitDivisor,List frames){ + // SWF.framesToHtmlCanvas(unitDivisor, null, null, this, frames, id, null, frameRate, displayRect, null, Color.darkGray, id)r + return null; + } public void getSounds(int frame, int time, DepthState stateUnderCursor, int mouseButton, List sounds, List soundClasses) { Frame fr = this.frames.get(frame); diff --git a/trunk/src/com/jpexs/decompiler/flash/timeline/Timelined.java b/trunk/src/com/jpexs/decompiler/flash/timeline/Timelined.java index 8b341182d..3db106488 100644 --- a/trunk/src/com/jpexs/decompiler/flash/timeline/Timelined.java +++ b/trunk/src/com/jpexs/decompiler/flash/timeline/Timelined.java @@ -26,5 +26,5 @@ public interface Timelined extends BoundedTag { public Timeline getTimeline(); - public void resetTimeline(); + public void resetTimeline(); }