diff --git a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java index 4004b9a58..e3a1ebed6 100644 --- a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java +++ b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java @@ -669,6 +669,7 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis String key = "drawable_" + frame + "_" + drawable.hashCode() + "_" + mouseButton + "_depth" + selectedDepth + "_" + (stateUnderCursor == null ? "out" : stateUnderCursor.hashCode()) + "_" + zoom; SerializableImage img = SWF.getFromCache(key); if (img == null) { + Timeline timeline = drawable.getTimeline(); if (drawable instanceof BoundedTag) { BoundedTag bounded = (BoundedTag) drawable; RECT rect = bounded.getRect(); @@ -686,7 +687,7 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis RenderContext renderContext = new RenderContext(); renderContext.stateUnderCursor = stateUnderCursor; renderContext.mouseButton = mouseButton; - drawable.getTimeline().toImage(frame, time, frame, renderContext, image, m, new ColorTransform()); + timeline.toImage(frame, time, frame, renderContext, image, m, new ColorTransform()); Graphics2D gg = (Graphics2D) image.getGraphics(); gg.setStroke(new BasicStroke(3)); @@ -694,7 +695,11 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis gg.setTransform(AffineTransform.getTranslateInstance(0, 0)); List dss = new ArrayList<>(); List os = new ArrayList<>(); - DepthState ds = drawable.getTimeline().getFrame(frame).layers.get(selectedDepth); + DepthState ds = null; + if (timeline.getFrameCount() > frame) { + ds = timeline.getFrame(frame).layers.get(selectedDepth); + } + if (ds != null) { CharacterTag cht = swf.getCharacter(ds.characterId); if (cht != null) { @@ -724,7 +729,8 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis img = image; } - if (drawable.getTimeline().isSingleFrame(frame)) { + + if (timeline.isSingleFrame(frame)) { SWF.putToCache(key, img); } } diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java index a9aa93daf..742210430 100644 --- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java +++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java @@ -871,8 +871,9 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec if (n instanceof ClassesListTreeModel) { ((ClassesListTreeModel) n).setFilter(filterField.getText()); TagTreeModel tm = tagTree.getModel(); - tm.updateNode(n); - View.expandTreeNodes(tagTree, tm.getTreePath(n), true); + TreePath path = tm.getTreePath(n); + tm.updateNode(path); + View.expandTreeNodes(tagTree, path, true); } } } diff --git a/src/com/jpexs/decompiler/flash/gui/View.java b/src/com/jpexs/decompiler/flash/gui/View.java index e1403109c..304c18e93 100644 --- a/src/com/jpexs/decompiler/flash/gui/View.java +++ b/src/com/jpexs/decompiler/flash/gui/View.java @@ -71,7 +71,6 @@ import javax.swing.UIDefaults; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.plaf.FontUIResource; -import javax.swing.plaf.TreeUI; import javax.swing.plaf.basic.BasicColorChooserUI; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.DefaultTableColumnModel; @@ -541,10 +540,7 @@ public class View { } public static void expandTreeNodes(JTree tree, TreePath parent, boolean expand) { - TreeUI ui = tree.getUI(); - tree.setUI(null); expandTreeNodesRecursive(tree, parent, expand); - tree.setUI(ui); } private static void expandTreeNodesRecursive(JTree tree, TreePath parent, boolean expand) { diff --git a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java index a12e3bcb5..cf24866af 100644 --- a/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java +++ b/src/com/jpexs/decompiler/flash/gui/tagtree/TagTreeModel.java @@ -144,6 +144,10 @@ public class TagTreeModel implements TreeModel { fireTreeStructureChanged(new TreeModelEvent(this, changedPath)); } + public void updateNode(TreePath changedPath) { + fireTreeStructureChanged(new TreeModelEvent(this, changedPath.getParentPath())); + } + private void fireTreeNodesRemoved(TreeModelEvent e) { for (TreeModelListener listener : listeners) { listener.treeNodesRemoved(e);