diff --git a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java index 5079d4cc5..53fa6edbb 100644 --- a/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java +++ b/trunk/src/com/jpexs/decompiler/flash/SWFInputStream.java @@ -3020,7 +3020,7 @@ public class SWFInputStream extends InputStream { for (int i = 0; i < numZoneData; i++) { ret.zonedata[i] = readZONEDATA(); } - readUB(6); + readUB(6); ret.zoneMaskY = readUB(1) == 1; ret.zoneMaskX = readUB(1) == 1; return ret; diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/Main.java b/trunk/src/com/jpexs/decompiler/flash/gui/Main.java index b61fefb75..9f7a66a64 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/Main.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/Main.java @@ -632,101 +632,101 @@ public class Main { View.setLookAndFeel(); /*View.execInEventDispatch(new Runnable() { - @Override - public void run() { - new JFrame() { - private int size = 15*1024; - @Override - public void setVisible(boolean b) { - addKeyListener(new KeyAdapter() { + @Override + public void run() { + new JFrame() { + private int size = 15*1024; + @Override + public void setVisible(boolean b) { + addKeyListener(new KeyAdapter() { - @Override - public void keyPressed(KeyEvent e) { - size+=10; - repaint(); - } + @Override + public void keyPressed(KeyEvent e) { + size+=10; + repaint(); + } -}); - addWindowListener(new WindowAdapter(){ + }); + addWindowListener(new WindowAdapter(){ - @Override - public void windowClosing(WindowEvent e) { - super.windowClosing(e); - System.exit(0); - } + @Override + public void windowClosing(WindowEvent e) { + super.windowClosing(e); + System.exit(0); + } - }); - getContentPane().add(new JPanel() { - @Override - protected void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - AffineTransform t = AffineTransform.getTranslateInstance(0, 0); - t.translate(200, 400); - t.scale((((float)size)/1024)/(2000),(((float)size)/1024)/2000); + }); + getContentPane().add(new JPanel() { + @Override + protected void paintComponent(Graphics g) { + Graphics2D g2d = (Graphics2D) g; + AffineTransform t = AffineTransform.getTranslateInstance(0, 0); + t.translate(200, 400); + t.scale((((float)size)/1024)/(2000),(((float)size)/1024)/2000); - g2d.setTransform(t); + g2d.setTransform(t); - Font f = new Font("Cordia New", 0, size); - GlyphVector v = f.createGlyphVector((new JPanel()).getFontMetrics(f).getFontRenderContext(), "C"); - Shape shp = v.getOutline(); - g2d.setPaint(Color.black); - g.setColor(Color.black); - double points[] = new double[6]; - double lastX = 0; - double lastY = 0; - double startX = 0; - double startY = 0; - GeneralPath path=new GeneralPath(); - for (PathIterator it = shp.getPathIterator(null); !it.isDone(); it.next()) { - int type = it.currentSegment(points); + Font f = new Font("Cordia New", 0, size); + GlyphVector v = f.createGlyphVector((new JPanel()).getFontMetrics(f).getFontRenderContext(), "C"); + Shape shp = v.getOutline(); + g2d.setPaint(Color.black); + g.setColor(Color.black); + double points[] = new double[6]; + double lastX = 0; + double lastY = 0; + double startX = 0; + double startY = 0; + GeneralPath path=new GeneralPath(); + for (PathIterator it = shp.getPathIterator(null); !it.isDone(); it.next()) { + int type = it.currentSegment(points); - switch (type) { - case PathIterator.SEG_MOVETO: + switch (type) { + case PathIterator.SEG_MOVETO: - lastX = (points[0]); - lastY = (points[1]); - startX = lastX; - startY = lastY; - path.moveTo(lastX, lastY); - break; - case PathIterator.SEG_LINETO: - //g2d.drawLine((int) lastX, (int) lastY, (int) points[0], (int) points[1]); - lastX = (points[0]); - lastY = (points[1]); - path.lineTo(lastX, lastY); - break; - case PathIterator.SEG_CUBICTO: - throw new RuntimeException("NOCUBIC"); - case PathIterator.SEG_QUADTO: - //g2d.draw(new QuadCurve2D.Double(lastX, lastY, points[0], points[1], points[2], points[3])); - path.quadTo(points[0], points[1], points[2], points[3]); - lastX = (points[2]); - lastY = (points[3]); - break; - case PathIterator.SEG_CLOSE: //Closing line back to last SEG_MOVETO - if ((startX == lastX) && (startY == lastY)) { - break; - } - //g2d.drawLine((int) lastX, (int) lastY, (int) points[0], (int) points[1]); - path.lineTo(startX, startY); - lastX = startX; - lastY = startY; - break; - } - } - g2d.draw(path); - } - }); - setDefaultCloseOperation(HIDE_ON_CLOSE); - setSize(500, 500); - super.setVisible(b); - } - }.setVisible(true); - } - }); - if (true) { - return; - }//*/ + lastX = (points[0]); + lastY = (points[1]); + startX = lastX; + startY = lastY; + path.moveTo(lastX, lastY); + break; + case PathIterator.SEG_LINETO: + //g2d.drawLine((int) lastX, (int) lastY, (int) points[0], (int) points[1]); + lastX = (points[0]); + lastY = (points[1]); + path.lineTo(lastX, lastY); + break; + case PathIterator.SEG_CUBICTO: + throw new RuntimeException("NOCUBIC"); + case PathIterator.SEG_QUADTO: + //g2d.draw(new QuadCurve2D.Double(lastX, lastY, points[0], points[1], points[2], points[3])); + path.quadTo(points[0], points[1], points[2], points[3]); + lastX = (points[2]); + lastY = (points[3]); + break; + case PathIterator.SEG_CLOSE: //Closing line back to last SEG_MOVETO + if ((startX == lastX) && (startY == lastY)) { + break; + } + //g2d.drawLine((int) lastX, (int) lastY, (int) points[0], (int) points[1]); + path.lineTo(startX, startY); + lastX = startX; + lastY = startY; + break; + } + } + g2d.draw(path); + } + }); + setDefaultCloseOperation(HIDE_ON_CLOSE); + setSize(500, 500); + super.setVisible(b); + } + }.setVisible(true); + } + }); + if (true) { + return; + }//*/ if ((Boolean) Configuration.getConfig("cacheOnDisk", Boolean.TRUE)) { Cache.setStorageType(Cache.STORAGE_FILES); } else { diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java index 26974e612..eb94647d0 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/MainFrame.java @@ -2161,18 +2161,18 @@ public class MainFrame extends AppRibbonFrame implements ActionListener, TreeSel if (oldValue instanceof FontTag) { FontTag f = (FontTag) oldValue; String oldchars = f.getCharacters(swf.tags); - + for (int i = 0; i < newchars.length(); i++) { char c = newchars.charAt(i); if (oldchars.indexOf((int) c) == -1) { - Font font=new Font(fontSelection.getSelectedItem().toString(),f.getFontStyle(),1024); - if(!font.canDisplay(c)){ - JOptionPane.showMessageDialog(null, translate("error.font.nocharacter").replace("%char%", ""+c), translate("error"), JOptionPane.ERROR_MESSAGE); + Font font = new Font(fontSelection.getSelectedItem().toString(), f.getFontStyle(), 1024); + if (!font.canDisplay(c)) { + JOptionPane.showMessageDialog(null, translate("error.font.nocharacter").replace("%char%", "" + c), translate("error"), JOptionPane.ERROR_MESSAGE); return; - } + } } } - + for (int i = 0; i < newchars.length(); i++) { char c = newchars.charAt(i); if (oldchars.indexOf((int) c) == -1) { @@ -2376,7 +2376,7 @@ public class MainFrame extends AppRibbonFrame implements ActionListener, TreeSel } Font f = new Font(fontName, font.getFontStyle(), 18); if (!f.canDisplay(character)) { - JOptionPane.showMessageDialog(null, translate("error.font.nocharacter").replace("%char%", ""+character), translate("error"), JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, translate("error.font.nocharacter").replace("%char%", "" + character), translate("error"), JOptionPane.ERROR_MESSAGE); return false; } font.addCharacter(tags, character, fontName); @@ -2822,21 +2822,26 @@ public class MainFrame extends AppRibbonFrame implements ActionListener, TreeSel (new Thread() { @Override public void run() { - int classIndex = -1; - for (Trait t : scriptLeaf.abc.script_info[scriptLeaf.scriptIndex].traits.traits) { - if (t instanceof TraitClass) { - classIndex = ((TraitClass) t).class_info; - break; + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + int classIndex = -1; + for (Trait t : scriptLeaf.abc.script_info[scriptLeaf.scriptIndex].traits.traits) { + if (t instanceof TraitClass) { + classIndex = ((TraitClass) t).class_info; + break; + } + } + abcPanel.navigator.setABC(abcList, scriptLeaf.abc); + abcPanel.navigator.setClassIndex(classIndex, scriptLeaf.scriptIndex); + abcPanel.setAbc(scriptLeaf.abc); + abcPanel.decompiledTextArea.setScript(scriptLeaf, abcList); + abcPanel.decompiledTextArea.setClassIndex(classIndex); + abcPanel.decompiledTextArea.setNoTrait(); + abcPanel.detailPanel.methodTraitPanel.methodCodePanel.setCode(""); + Main.stopWork(); } - } - abcPanel.navigator.setABC(abcList, scriptLeaf.abc); - abcPanel.navigator.setClassIndex(classIndex, scriptLeaf.scriptIndex); - abcPanel.setAbc(scriptLeaf.abc); - abcPanel.decompiledTextArea.setScript(scriptLeaf, abcList); - abcPanel.decompiledTextArea.setClassIndex(classIndex); - abcPanel.decompiledTextArea.setNoTrait(); - abcPanel.detailPanel.methodTraitPanel.methodCodePanel.setCode(""); - Main.stopWork(); + }); } }).start(); } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/View.java b/trunk/src/com/jpexs/decompiler/flash/gui/View.java index 61de7a46c..e5e7322b1 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/View.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/View.java @@ -167,7 +167,7 @@ public class View { } else { try { SwingUtilities.invokeAndWait(r); - } catch ( InterruptedException | InvocationTargetException ex) { + } catch (InterruptedException | InvocationTargetException ex) { Logger.getLogger(View.class.getName()).log(Level.SEVERE, null, ex); } } diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java b/trunk/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java index e5c842684..e76ef802f 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/abc/ASMSourceEditorPane.java @@ -86,7 +86,10 @@ public class ASMSourceEditorPane extends LineMarkedEditorPane implements CaretLi for (Highlighting h2 : disassembledHilights) { if (h2.offset == offset) { ignoreCarret = true; - setCaretPosition(h2.startPos); + try { + setCaretPosition(h2.startPos); + } catch (IllegalArgumentException iex) { + } getCaret().setVisible(true); ignoreCarret = false; break; diff --git a/trunk/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java b/trunk/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java index bdada6712..f0e055a24 100644 --- a/trunk/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java +++ b/trunk/src/com/jpexs/decompiler/flash/gui/abc/DecompiledEditorPane.java @@ -25,13 +25,18 @@ import com.jpexs.decompiler.flash.abc.types.ScriptInfo; import com.jpexs.decompiler.flash.abc.types.traits.Trait; import com.jpexs.decompiler.flash.abc.types.traits.TraitSlotConst; import static com.jpexs.decompiler.flash.gui.AppStrings.translate; +import com.jpexs.decompiler.flash.gui.View; import com.jpexs.decompiler.flash.helpers.Cache; +import com.jpexs.decompiler.flash.helpers.Helper; import com.jpexs.decompiler.flash.helpers.Highlighting; import com.jpexs.decompiler.flash.tags.ABCContainerTag; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Timer; import java.util.TimerTask; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.event.CaretEvent; import javax.swing.event.CaretListener; @@ -364,15 +369,25 @@ public class DecompiledEditorPane extends LineMarkedEditorPane implements CaretL this.abcList = abcList; this.script = scriptLeaf; - String hilightedCode = ""; cacheScriptPack(scriptLeaf, abcList); CachedDecompilation cd = getCached(scriptLeaf); - hilightedCode = cd.text; + final String hilightedCode = cd.text; highlights = cd.getHighlights(); traitHighlights = cd.getTraitHighlights(); methodHighlights = cd.getMethodHighlights(); classHighlights = cd.getClassHighlights(); - setText(hilightedCode); + View.execInEventDispatch(new Runnable() { + @Override + public void run() { + if (hilightedCode.length() > 65000) { + setContentType("text/plain"); + } else { + setContentType("text/actionscript"); + } + setText(hilightedCode); + } + }); + } public void reloadClass() { diff --git a/trunk/src/com/jpexs/decompiler/flash/helpers/Highlighting.java b/trunk/src/com/jpexs/decompiler/flash/helpers/Highlighting.java index ad769bd10..5781a3a98 100644 --- a/trunk/src/com/jpexs/decompiler/flash/helpers/Highlighting.java +++ b/trunk/src/com/jpexs/decompiler/flash/helpers/Highlighting.java @@ -226,8 +226,9 @@ public class Highlighting implements Serializable { return text; } - private static List getSpecificHighlights(String text, String txtOpen, String txtClose, String txtEnd) { + private static List getSpecificHighlights(String texts, String txtOpen, String txtClose, String txtEnd) { List ret = new ArrayList<>(); + StringBuffer text = new StringBuffer(texts); int pos = 0; while (true) { int openpos = text.indexOf(txtOpen); @@ -248,7 +249,7 @@ public class Highlighting implements Serializable { long offset = Long.parseLong(text.substring(openpos + txtOpen.length(), closepos)); Highlighting hl = new Highlighting(pos + openpos, textlen, offset); pos += openpos + textlen; - text = text.substring(enpos + txtEnd.length()); + text = text.delete(0, enpos + txtEnd.length()); ret.add(hl); } return ret; diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java index 32c9656f6..7ac01a893 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineEditTextTag.java @@ -467,7 +467,7 @@ public class DefineEditTextTag extends CharacterTag implements BoundedTag, TextT /** * Constructor * - * @param swf + * @param swf * @param data Data bytes * @param version SWF version * @param pos diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java index 33659271f..873976ecf 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineFontTag.java @@ -226,29 +226,29 @@ public class DefineFontTag extends FontTag { @Override public void addCharacter(List tags, char character, String fontName) { SHAPE shp = SHAPERECORD.systemFontCharacterToSHAPE(fontName, getFontStyle(), getDivider() * 1024, character); - List codeTable=new ArrayList<>(); + List codeTable = new ArrayList<>(); ensureFontInfo(tags); if (fontInfoTag != null) { - codeTable =fontInfoTag.codeTable; + codeTable = fontInfoTag.codeTable; } if (fontInfo2Tag != null) { - codeTable =fontInfo2Tag.codeTable; + codeTable = fontInfo2Tag.codeTable; } - int code=(int)character; - int pos=-1; - for(int i=0;icode){ + int code = (int) character; + int pos = -1; + for (int i = 0; i < codeTable.size(); i++) { + if (codeTable.get(i) > code) { pos = i; break; } } - if(pos==-1){ + if (pos == -1) { pos = codeTable.size(); } FontTag.shiftGlyphIndices(fontId, pos, tags); - glyphShapeTable.add(pos,shp); - codeTable.add(pos,(int)character); - + glyphShapeTable.add(pos, shp); + codeTable.add(pos, (int) character); + } @Override diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java index ed8324028..0f7b6ea41 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineText2Tag.java @@ -165,7 +165,7 @@ public class DefineText2Tag extends CharacterTag implements BoundedTag, TextTag, } @Override - public boolean setFormattedText(MissingCharacterHandler missingCharHandler,List tags, String text, String fontName) throws ParseException { + public boolean setFormattedText(MissingCharacterHandler missingCharHandler, List tags, String text, String fontName) throws ParseException { try { TextLexer lexer = new TextLexer(new InputStreamReader(new ByteArrayInputStream(text.getBytes("UTF-8")), "UTF-8")); ParsedSymbol s = null; @@ -337,7 +337,7 @@ public class DefineText2Tag extends CharacterTag implements BoundedTag, TextTag, char c = txt.charAt(i); tr.glyphEntries[i] = new GLYPHENTRY(); if (!font.containsChar(tags, c)) { - if(!missingCharHandler.handle(font, tags, c)){ + if (!missingCharHandler.handle(font, tags, c)) { return false; } } @@ -426,7 +426,7 @@ public class DefineText2Tag extends CharacterTag implements BoundedTag, TextTag, /** * Constructor * - * @param swf + * @param swf * @param data Data bytes * @param version SWF version * @param pos diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java b/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java index d7ab506a7..fc1f8c78d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/DefineTextTag.java @@ -165,7 +165,7 @@ public class DefineTextTag extends CharacterTag implements BoundedTag, TextTag, } @Override - public boolean setFormattedText(MissingCharacterHandler missingCharHandler,List tags, String text, String fontName) throws ParseException { + public boolean setFormattedText(MissingCharacterHandler missingCharHandler, List tags, String text, String fontName) throws ParseException { try { TextLexer lexer = new TextLexer(new InputStreamReader(new ByteArrayInputStream(text.getBytes("UTF-8")), "UTF-8")); ParsedSymbol s = null; @@ -336,7 +336,7 @@ public class DefineTextTag extends CharacterTag implements BoundedTag, TextTag, char c = txt.charAt(i); tr.glyphEntries[i] = new GLYPHENTRY(); if (!font.containsChar(tags, c)) { - if(!missingCharHandler.handle(font, tags, c)){ + if (!missingCharHandler.handle(font, tags, c)) { return false; } } 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 208caac15..5819e5b83 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/FontTag.java @@ -100,7 +100,7 @@ public abstract class FontTag extends CharacterTag implements AloneTag { return name + " (" + getCharacterId() + nameAppend + ")"; } - public static void shiftGlyphIndices(int fontId,int startIndex, List tags) { + public static void shiftGlyphIndices(int fontId, int startIndex, List tags) { List textRecords = new ArrayList<>(); for (Tag t : tags) { if (t instanceof DefineTextTag) { @@ -110,12 +110,12 @@ public abstract class FontTag extends CharacterTag implements AloneTag { textRecords.addAll(((DefineTextTag) t).textRecords); } } - int curFontId=0; - for (TEXTRECORD tr : textRecords) { - if(tr.styleFlagsHasFont){ + int curFontId = 0; + for (TEXTRECORD tr : textRecords) { + if (tr.styleFlagsHasFont) { curFontId = tr.fontId; } - if(curFontId!=fontId){ + if (curFontId != fontId) { continue; } for (GLYPHENTRY en : tr.glyphEntries) { diff --git a/trunk/src/com/jpexs/decompiler/flash/tags/base/MissingCharacterHandler.java b/trunk/src/com/jpexs/decompiler/flash/tags/base/MissingCharacterHandler.java index f2cdc286b..43d9e3f59 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/MissingCharacterHandler.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/MissingCharacterHandler.java @@ -27,15 +27,16 @@ import java.util.List; * @author JPEXS */ public class MissingCharacterHandler { + protected static List fontNames = Arrays.asList(GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()); - - public boolean handle(FontTag font,List tags,char character){ + + public boolean handle(FontTag font, List tags, char character) { String fontName = font.getFontName(tags); - if(!fontNames.contains(fontName)){ + if (!fontNames.contains(fontName)) { return false; } - Font f=new Font(fontName,font.getFontStyle(),18); - if(!f.canDisplay(character)){ + Font f = new Font(fontName, font.getFontStyle(), 18); + if (!f.canDisplay(character)) { return false; } font.addCharacter(tags, character, fontName); 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 1681f206d..43863262d 100644 --- a/trunk/src/com/jpexs/decompiler/flash/tags/base/TextTag.java +++ b/trunk/src/com/jpexs/decompiler/flash/tags/base/TextTag.java @@ -34,7 +34,7 @@ public interface TextTag { public String getFormattedText(List tags); - public boolean setFormattedText(MissingCharacterHandler missingCharHandler,List tags, String text, String fontName) throws ParseException; + public boolean setFormattedText(MissingCharacterHandler missingCharHandler, List tags, String text, String fontName) throws ParseException; public int getCharacterId(); diff --git a/trunk/src/com/jpexs/decompiler/flash/types/ZONERECORD.java b/trunk/src/com/jpexs/decompiler/flash/types/ZONERECORD.java index 3182d39b2..c11dba749 100644 --- a/trunk/src/com/jpexs/decompiler/flash/types/ZONERECORD.java +++ b/trunk/src/com/jpexs/decompiler/flash/types/ZONERECORD.java @@ -34,7 +34,7 @@ public class ZONERECORD { public ZONEDATA zonedata[] = new ZONEDATA[0]; public boolean zoneMaskX; public boolean zoneMaskY; - + @Override public String toString() { String ret = "[ZONERECORD data:"; diff --git a/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java b/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java index bcf20d47b..ef5499313 100644 --- a/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java +++ b/trunk/src/com/jpexs/decompiler/flash/types/shaperecords/SHAPERECORD.java @@ -370,7 +370,7 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { GeneralPath ret = new GeneralPath(); int x = startX; int y = startY; - boolean wasMoveTo = false; + boolean wasMoveTo = false; for (SHAPERECORD rec : edges) { int nx = rec.changeX(x); int ny = rec.changeY(y); @@ -876,8 +876,8 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { public static SHAPE systemFontCharacterToSHAPE(final String fontName, final int fontStyle, int fontSize, char character) { int multiplier = 1; - if(fontSize>1024){ - multiplier = fontSize/1024; + if (fontSize > 1024) { + multiplier = fontSize / 1024; fontSize = 1024; } List retList = new ArrayList<>(); @@ -904,13 +904,13 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { int startX = 0; int startY = 0; for (PathIterator it = shp.getPathIterator(null); !it.isDone(); it.next()) { - int type = it.currentSegment(points); + int type = it.currentSegment(points); switch (type) { case PathIterator.SEG_MOVETO: StyleChangeRecord scr = new StyleChangeRecord(); scr.stateMoveTo = true; - scr.moveDeltaX = multiplier*(int) Math.round(points[0]); - scr.moveDeltaY = multiplier*(int) Math.round(points[1]); + scr.moveDeltaX = multiplier * (int) Math.round(points[0]); + scr.moveDeltaY = multiplier * (int) Math.round(points[1]); scr.moveBits = SWFOutputStream.getNeededBitsS(scr.moveDeltaX, scr.moveDeltaY); retList.add(scr); lastX = (int) Math.round(points[0]); @@ -919,12 +919,12 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { startY = lastY; break; case PathIterator.SEG_LINETO: - StraightEdgeRecord ser = new StraightEdgeRecord(); - ser.deltaX = multiplier*(((int) Math.round(points[0])) - lastX); - ser.deltaY = multiplier*(((int) Math.round(points[1])) - lastY); - - ser.generalLineFlag = ser.deltaX!=0 && ser.deltaY!=0; - if(ser.deltaX == 0){ + StraightEdgeRecord ser = new StraightEdgeRecord(); + ser.deltaX = multiplier * (((int) Math.round(points[0])) - lastX); + ser.deltaY = multiplier * (((int) Math.round(points[1])) - lastY); + + ser.generalLineFlag = ser.deltaX != 0 && ser.deltaY != 0; + if (ser.deltaX == 0) { ser.vertLineFlag = true; } ser.numBits = SWFOutputStream.getNeededBitsS(ser.deltaX, ser.deltaY) - 2; @@ -945,11 +945,11 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { double quadCoords[][] = approximateCubic(cubicCoords); for (int i = 0; i < quadCoords.length; i++) { CurvedEdgeRecord cer = new CurvedEdgeRecord(); - cer.controlDeltaX = multiplier*(((int) Math.round(quadCoords[i][0])) - lastX); - cer.controlDeltaY = multiplier*(((int) Math.round(quadCoords[i][1])) - lastY); - cer.anchorDeltaX = multiplier*(((int) Math.round(quadCoords[i][2])) - ((int) Math.round(quadCoords[i][0]))); - cer.anchorDeltaY = multiplier*(((int) Math.round(quadCoords[i][3])) - ((int) Math.round(quadCoords[i][1]))); - cer.numBits = SWFOutputStream.getNeededBitsS(cer.controlDeltaX, cer.controlDeltaY, cer.anchorDeltaX, cer.anchorDeltaY) - 2; + cer.controlDeltaX = multiplier * (((int) Math.round(quadCoords[i][0])) - lastX); + cer.controlDeltaY = multiplier * (((int) Math.round(quadCoords[i][1])) - lastY); + cer.anchorDeltaX = multiplier * (((int) Math.round(quadCoords[i][2])) - ((int) Math.round(quadCoords[i][0]))); + cer.anchorDeltaY = multiplier * (((int) Math.round(quadCoords[i][3])) - ((int) Math.round(quadCoords[i][1]))); + cer.numBits = SWFOutputStream.getNeededBitsS(cer.controlDeltaX, cer.controlDeltaY, cer.anchorDeltaX, cer.anchorDeltaY) - 2; if (cer.numBits < 0) { cer.numBits = 0; } @@ -960,17 +960,17 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { break; case PathIterator.SEG_QUADTO: CurvedEdgeRecord cer = new CurvedEdgeRecord(); - cer.controlDeltaX = multiplier*(((int) Math.round(points[0])) - lastX); - cer.controlDeltaY = multiplier*(((int) Math.round(points[1])) - lastY); - cer.anchorDeltaX = multiplier*(((int) Math.round(points[2])) - (int) Math.round(points[0])); - cer.anchorDeltaY = multiplier*(((int) Math.round(points[3])) - (int) Math.round(points[1])); + cer.controlDeltaX = multiplier * (((int) Math.round(points[0])) - lastX); + cer.controlDeltaY = multiplier * (((int) Math.round(points[1])) - lastY); + cer.anchorDeltaX = multiplier * (((int) Math.round(points[2])) - (int) Math.round(points[0])); + cer.anchorDeltaY = multiplier * (((int) Math.round(points[3])) - (int) Math.round(points[1])); cer.numBits = SWFOutputStream.getNeededBitsS(cer.controlDeltaX, cer.controlDeltaY, cer.anchorDeltaX, cer.anchorDeltaY) - 2; if (cer.numBits < 0) { cer.numBits = 0; } - retList.add(cer); + retList.add(cer); lastX = (int) Math.round(points[2]); - lastY = (int) Math.round(points[3]); + lastY = (int) Math.round(points[3]); break; case PathIterator.SEG_CLOSE: //Closing line back to last SEG_MOVETO if ((startX == lastX) && (startY == lastY)) { @@ -978,8 +978,8 @@ public abstract class SHAPERECORD implements Cloneable, NeedsCharacters { } StraightEdgeRecord closeSer = new StraightEdgeRecord(); closeSer.generalLineFlag = true; - closeSer.deltaX = multiplier*((int) Math.round((startX - lastX))); - closeSer.deltaY = multiplier*((int) Math.round((startY - lastY))); + closeSer.deltaX = multiplier * ((int) Math.round((startX - lastX))); + closeSer.deltaY = multiplier * ((int) Math.round((startY - lastY))); closeSer.numBits = SWFOutputStream.getNeededBitsS(closeSer.deltaX, closeSer.deltaY) - 2; if (closeSer.numBits < 0) { closeSer.numBits = 0;