mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-05-28 17:55:35 +00:00
This commit is contained in:
@@ -32,6 +32,7 @@ All notable changes to this project will be documented in this file.
|
||||
- [#2334] AS1/2 P-code export - Do not export on(xxx) header
|
||||
- [#2338] AS decompiling threads got stuck after cancelling / timeout
|
||||
- [#2338] AS2 class detection in some minor cases
|
||||
- [#2337], [#2339] Replace shape update bounds - allow selecting multiple shapes
|
||||
|
||||
## [21.1.0] - 2024-09-23
|
||||
### Added
|
||||
@@ -3618,6 +3619,8 @@ Major version of SWF to XML export changed to 2.
|
||||
[#2335]: https://www.free-decompiler.com/flash/issues/2335
|
||||
[#2334]: https://www.free-decompiler.com/flash/issues/2334
|
||||
[#2338]: https://www.free-decompiler.com/flash/issues/2338
|
||||
[#2337]: https://www.free-decompiler.com/flash/issues/2337
|
||||
[#2339]: https://www.free-decompiler.com/flash/issues/2339
|
||||
[#943]: https://www.free-decompiler.com/flash/issues/943
|
||||
[#1812]: https://www.free-decompiler.com/flash/issues/1812
|
||||
[#2287]: https://www.free-decompiler.com/flash/issues/2287
|
||||
|
||||
@@ -5006,6 +5006,9 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
}
|
||||
|
||||
public boolean replace(List<TreeItem> items, boolean create) {
|
||||
return replace(items, create, true);
|
||||
}
|
||||
public boolean replace(List<TreeItem> items, boolean create, boolean fill) {
|
||||
if (items.isEmpty()) {
|
||||
return false;
|
||||
}
|
||||
@@ -5037,12 +5040,12 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
return false;
|
||||
}
|
||||
for (TreeItem ti : items) {
|
||||
doReplaceAction(ti, file, create);
|
||||
doReplaceAction(ti, file, create, fill);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void doReplaceAction(TreeItem item, File selectedFile, boolean create) {
|
||||
private void doReplaceAction(TreeItem item, File selectedFile, boolean create, boolean fill) {
|
||||
if (selectedFile == null) {
|
||||
return;
|
||||
}
|
||||
@@ -5118,16 +5121,16 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
Tag newTag = null;
|
||||
if (st instanceof ShapeTag) {
|
||||
if (svgText != null) {
|
||||
newTag = new SvgImporter().importSvg((ShapeTag) st, svgText);
|
||||
newTag = new SvgImporter().importSvg((ShapeTag) st, svgText, fill);
|
||||
} else {
|
||||
newTag = new ShapeImporter().importImage((ShapeTag) st, data);
|
||||
newTag = new ShapeImporter().importImage((ShapeTag) st, data, 0, fill);
|
||||
}
|
||||
}
|
||||
if (st instanceof MorphShapeTag) {
|
||||
if (svgText != null) {
|
||||
newTag = new SvgImporter().importSvg((MorphShapeTag) st, svgText);
|
||||
newTag = new SvgImporter().importSvg((MorphShapeTag) st, svgText, fill);
|
||||
} else {
|
||||
newTag = new ShapeImporter().importImage((MorphShapeTag) st, data);
|
||||
newTag = new ShapeImporter().importImage((MorphShapeTag) st, data, 0, fill);
|
||||
}
|
||||
}
|
||||
SWF swf = st.getSwf();
|
||||
@@ -5210,58 +5213,16 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
|
||||
replaceSpriteWithGif(item);
|
||||
}
|
||||
|
||||
public void replaceNoFillButtonActionPerformed(TreeItem item) {
|
||||
replaceNoFill(item);
|
||||
}
|
||||
public void replaceNoFillButtonActionPerformed(List<TreeItem> items) {
|
||||
replace(items, false, false);
|
||||
}
|
||||
|
||||
public boolean replaceNoFill(TreeItem item) {
|
||||
if (item == null) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (item instanceof MorphShapeTag) {
|
||||
return replaceMorphShape((MorphShapeTag) item, false, false);
|
||||
}
|
||||
if (item instanceof ShapeTag) {
|
||||
ShapeTag st = (ShapeTag) item;
|
||||
String filter = "filter.images|*.jpg;*.jpeg;*.gif;*.png;*.bmp;*.svg";
|
||||
File selectedFile = showImportFileChooser(filter, true, "importshape");
|
||||
if (selectedFile != null) {
|
||||
File selfile = Helper.fixDialogFile(selectedFile);
|
||||
byte[] data = null;
|
||||
String svgText = null;
|
||||
if (".svg".equals(Path.getExtension(selfile))) {
|
||||
svgText = Helper.readTextFile(selfile.getAbsolutePath());
|
||||
showSvgImportWarning();
|
||||
} else {
|
||||
data = Helper.readFile(selfile.getAbsolutePath());
|
||||
}
|
||||
try {
|
||||
Tag newTag = null;
|
||||
if (svgText != null) {
|
||||
newTag = new SvgImporter().importSvg(st, svgText, false);
|
||||
} else {
|
||||
newTag = new ShapeImporter().importImage(st, data, 0, false);
|
||||
}
|
||||
SWF swf = st.getSwf();
|
||||
if (newTag != null) {
|
||||
refreshTree(swf);
|
||||
setTagTreeSelectedNode(getCurrentTree(), newTag);
|
||||
}
|
||||
|
||||
swf.clearImageCache();
|
||||
swf.clearShapeCache();
|
||||
} catch (IOException ex) {
|
||||
logger.log(Level.SEVERE, "Invalid image", ex);
|
||||
ViewMessages.showMessageDialog(this, translate("error.image.invalid"), translate("error"), JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
reload(true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
List<TreeItem> items = new ArrayList<>();
|
||||
items.add(item);
|
||||
return replace(items, false, false);
|
||||
}
|
||||
|
||||
|
||||
private void showSvgImportWarning() {
|
||||
ViewMessages.showMessageDialog(this, AppStrings.translate("message.warning.svgImportExperimental"), AppStrings.translate("message.warning"), JOptionPane.WARNING_MESSAGE, Configuration.warningSvgImport);
|
||||
}
|
||||
|
||||
@@ -1426,7 +1426,7 @@ public class PreviewPanel extends JPersistentSplitPane implements TagEditorPanel
|
||||
replaceShapeUpdateBoundsButton.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
mainPanel.replaceNoFillButtonActionPerformed(mainPanel.getCurrentTree().getCurrentTreeItem());
|
||||
mainPanel.replaceNoFill(mainPanel.getCurrentTree().getCurrentTreeItem());
|
||||
}
|
||||
});
|
||||
replaceShapeUpdateBoundsButton.setVisible(false);
|
||||
|
||||
@@ -517,7 +517,7 @@ public class TagTreeContextMenu extends JPopupMenu {
|
||||
replaceNoFillMenuItem.addActionListener(new ActionListener() {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
mainPanel.replaceNoFillButtonActionPerformed(getCurrentItem());
|
||||
mainPanel.replaceNoFillButtonActionPerformed(getSelectedItems());
|
||||
}
|
||||
});
|
||||
replaceNoFillMenuItem.setIcon(View.getIcon("replaceitem16"));
|
||||
|
||||
Reference in New Issue
Block a user