From 7b535415bb91bf169a203cfb942f942d23e9e158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=F8=EDk?= Date: Mon, 8 Jul 2013 17:21:08 +0200 Subject: [PATCH] sprite frames display fix other flash viewer fixes --- trunk/src/com/jpexs/decompiler/flash/SWF.java | 120 +++++++++--------- .../decompiler/flash/graph/SwitchItem.java | 2 +- .../jpexs/decompiler/flash/gui/MainFrame.java | 8 +- .../flash/tags/DefineButton2Tag.java | 4 +- .../flash/tags/DefineButtonTag.java | 4 +- .../flash/tags/DefineSpriteTag.java | 2 +- .../com/jpexs/decompiler/flash/tags/Tag.java | 10 +- 7 files changed, 75 insertions(+), 75 deletions(-) diff --git a/trunk/src/com/jpexs/decompiler/flash/SWF.java b/trunk/src/com/jpexs/decompiler/flash/SWF.java index 3fbfc6846..1a4d12e33 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWF.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWF.java @@ -331,7 +331,7 @@ public class SWF { findFileAttributes(); } - private void findFileAttributes(){ + private void findFileAttributes() { for (Tag t : tags) { if (t instanceof FileAttributesTag) { fileAttributes = (FileAttributesTag) t; @@ -339,7 +339,7 @@ public class SWF { } } } - + private void assignExportNamesToSymbols() { HashMap exportNames = new HashMap<>(); for (Tag t : tags) { @@ -2100,7 +2100,7 @@ public class SWF { g.setTransform(trans); if (character instanceof DrawableTag) { DrawableTag drawable = (DrawableTag) character; - BufferedImage img = drawable.toImage(layer.ratio < 0 ? 0 : layer.ratio/*layer.duration*/, allTags, displayRect, characters, visited); + BufferedImage img = drawable.toImage(layer.ratio < 0 ? 0 : layer.ratio/*layer.duration*/, allTags, displayRect, characters, visited); if (layer.filters != null) { for (FILTER filter : layer.filters) { img = filter.apply(img); @@ -2114,62 +2114,54 @@ public class SWF { img = layer.colorTransFormAlpha.apply(img); } Point imgPos = drawable.getImagePos(layer.ratio < 0 ? 0 : layer.ratio, characters, visited); - //imgPos.x+=fixX; - //imgPos.y+=fixY; - /*if (imgPos.x < 0) { - imgPos.x = 0; - } - if (imgPos.y < 0) { - imgPos.y = 0; - }*/ - /*switch (layer.blendMode) { - case 0: - case 1: - g.setComposite(AlphaComposite.SrcOver); - break; - case 2: //TODO:Layer - g.setComposite(AlphaComposite.SrcOver); - break; - case 3: - g.setComposite(BlendComposite.Multiply); - break; - case 4: - g.setComposite(BlendComposite.Screen); - break; - case 5: - g.setComposite(BlendComposite.Lighten); - break; - case 6: - g.setComposite(BlendComposite.Darken); - break; - case 7: - g.setComposite(BlendComposite.Difference); - break; - case 8: - g.setComposite(BlendComposite.Add); - break; - case 9: - g.setComposite(BlendComposite.Subtract); - break; - case 10: - g.setComposite(BlendComposite.Invert); - break; - case 11: - g.setComposite(BlendComposite.Alpha); - break; - case 12: - g.setComposite(BlendComposite.Erase); - break; - case 13: - g.setComposite(BlendComposite.Overlay); - break; - case 14: - g.setComposite(BlendComposite.HardLight); - break; - default: //Not implemented - g.setComposite(AlphaComposite.SrcOver); - break; - }*/ + switch (layer.blendMode) { + case 0: + case 1: + g.setComposite(AlphaComposite.SrcOver); + break; + case 2: //TODO:Layer + g.setComposite(AlphaComposite.SrcOver); + break; + case 3: + g.setComposite(BlendComposite.Multiply); + break; + case 4: + g.setComposite(BlendComposite.Screen); + break; + case 5: + g.setComposite(BlendComposite.Lighten); + break; + case 6: + g.setComposite(BlendComposite.Darken); + break; + case 7: + g.setComposite(BlendComposite.Difference); + break; + case 8: + g.setComposite(BlendComposite.Add); + break; + case 9: + g.setComposite(BlendComposite.Subtract); + break; + case 10: + g.setComposite(BlendComposite.Invert); + break; + case 11: + g.setComposite(BlendComposite.Alpha); + break; + case 12: + g.setComposite(BlendComposite.Erase); + break; + case 13: + g.setComposite(BlendComposite.Overlay); + break; + case 14: + g.setComposite(BlendComposite.HardLight); + break; + default: //Not implemented + g.setComposite(AlphaComposite.SrcOver); + break; + } g.drawImage(img, imgPos.x, imgPos.y, null); } else if (character instanceof BoundedTag) { @@ -2188,6 +2180,12 @@ public class SWF { /*g.setPaint(Color.yellow); g.draw(new Rectangle(ret.getWidth()-1,ret.getHeight()-1));*/ cache.put(key, new CachedImage(ret)); + + /*try { + ImageIO.write(ret, "png", new File("tst_id_" + containerId + "_time_" + System.currentTimeMillis() + ".png")); + } catch (IOException ex) { + Logger.getLogger(SWF.class.getName()).log(Level.SEVERE, null, ex); + }*/ return ret; } @@ -2217,11 +2215,11 @@ public class SWF { return; } - while (startFrame > totalFrameCount) { + while (startFrame >= totalFrameCount) { startFrame -= totalFrameCount; } - while (stopFrame > totalFrameCount) { + while (stopFrame >= totalFrameCount) { stopFrame -= totalFrameCount; } diff --git a/trunk/src/com/jpexs/decompiler/flash/graph/SwitchItem.java b/trunk/src/com/jpexs/decompiler/flash/graph/SwitchItem.java index 107ac0d1a..40358af35 100644 --- a/trunk/src/com/jpexs/decompiler/flash/graph/SwitchItem.java +++ b/trunk/src/com/jpexs/decompiler/flash/graph/SwitchItem.java @@ -51,7 +51,7 @@ public class SwitchItem extends LoopItem implements Block { ret += hilight("switch(") + switchedObject.toString(localData) + hilight(")") + "\r\n{\r\n"; for (int i = 0; i < caseCommands.size(); i++) { for (int k = 0; k < valuesMapping.size(); k++) { - if (valuesMapping.get(k) == i) { + if (valuesMapping.get(k) == i) { ret += "case " + caseValues.get(k).toString(localData) + ":\r\n"; } } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java index 467f85ba6..ad75e7071 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java @@ -2241,12 +2241,14 @@ public class MainFrame extends AppFrame implements ActionListener, TreeSelection List controlTags = swf.tags; int containerId = 0; RECT rect = swf.displayRect; + int totalFrameCount = swf.frameCount; if (fn.getParent() instanceof DefineSpriteTag) { controlTags = ((DefineSpriteTag) fn.getParent()).subTags; containerId = ((DefineSpriteTag) fn.getParent()).spriteId; rect = ((DefineSpriteTag) fn.getParent()).getRect(characters, new Stack()); + totalFrameCount = ((DefineSpriteTag) fn.getParent()).frameCount; } - previewImagePanel.setImage(SWF.frameToImage(containerId, ((FrameNode) tagObj).getFrame() - 1, swf.tags, controlTags, rect, swf.frameCount, new Stack())); + previewImagePanel.setImage(SWF.frameToImage(containerId, ((FrameNode) tagObj).getFrame() - 1, swf.tags, controlTags, rect, totalFrameCount, new Stack())); } else if (((tagObj instanceof FrameNode) && ((FrameNode) tagObj).isDisplayed()) || ((tagObj instanceof CharacterTag) || (tagObj instanceof FontTag)) && (tagObj instanceof Tag)) { try { @@ -2292,7 +2294,7 @@ public class MainFrame extends AppFrame implements ActionListener, TreeSelection break; } Tag t = (Tag) o; - Set needed = t.getDeepNeededCharacters(characters,new ArrayList()); + Set needed = t.getDeepNeededCharacters(characters, new ArrayList()); for (int n : needed) { if (!doneCharacters.contains(n)) { sos2.writeTag(characters.get(n)); @@ -2336,7 +2338,7 @@ public class MainFrame extends AppFrame implements ActionListener, TreeSelection } } else if (tagObj instanceof AloneTag) { } else { - Set needed = ((Tag) tagObj).getDeepNeededCharacters(characters,new ArrayList()); + Set needed = ((Tag) tagObj).getDeepNeededCharacters(characters, new ArrayList()); for (int n : needed) { sos2.writeTag(characters.get(n)); } diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineButton2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineButton2Tag.java index f79c18ed2..d72469020 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineButton2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineButton2Tag.java @@ -272,8 +272,8 @@ public class DefineButton2Tag extends CharacterTag implements Container, Bounded @Override public Point getImagePos(int frame, HashMap characters, Stack visited) { - RECT r=getRect(characters, visited); - return new Point(r.Xmin/20, r.Ymin/20); + RECT r = getRect(characters, visited); + return new Point(r.Xmin / 20, r.Ymin / 20); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java index d6b3d868d..022c8dc51 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineButtonTag.java @@ -286,8 +286,8 @@ public class DefineButtonTag extends CharacterTag implements ASMSource, BoundedT @Override public Point getImagePos(int frame, HashMap characters, Stack visited) { - RECT r=getRect(characters, visited); - return new Point(r.Xmin/20, r.Ymin/20); + RECT r = getRect(characters, visited); + return new Point(r.Xmin / 20, r.Ymin / 20); } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java index 1f7bc16df..59ec67692 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineSpriteTag.java @@ -110,7 +110,7 @@ public class DefineSpriteTag extends CharacterTag implements Container, BoundedT if (visited.contains(spriteId)) { return new RECT(); } - visited.push(spriteId); + visited.push(spriteId); RECT emptyRet = new RECT(); RECT ret = new RECT(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE); HashMap depthMap = new HashMap<>(); diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java index 0b1648bae..36fae4836 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/Tag.java @@ -129,20 +129,20 @@ public class Tag implements NeedsCharacters, Exportable { return new HashSet<>(); } - public Set getDeepNeededCharacters(HashMap characters,List visited) { + public Set getDeepNeededCharacters(HashMap characters, List visited) { Set ret = new HashSet<>(); Set needed = getNeededCharacters(); - for (int ch : needed) { + for (int ch : needed) { if (!characters.containsKey(ch)) { //TODO: use Import tag (?) continue; } - if(visited.contains(ch)){ + if (visited.contains(ch)) { continue; - }else{ + } else { visited.add(ch); } ret.add(ch); - ret.addAll(characters.get(ch).getDeepNeededCharacters(characters,visited)); + ret.addAll(characters.get(ch).getDeepNeededCharacters(characters, visited)); } return ret; }