Merge origin/master

This commit is contained in:
Jindra Petřík
2016-03-26 20:17:37 +01:00
43 changed files with 429 additions and 358 deletions
@@ -434,7 +434,7 @@ public class CommandLineArgumentParser {
if (filter == null || filter.equals("zoom")) {
out.println(" " + (cnt++) + ") -zoom <N>");
out.println(" ...apply zoom during export (currently for FlashPaper conversion only)");
out.println(" ...apply zoom during export");
}
if (filter == null || filter.equals("replace")) {
@@ -2042,11 +2042,7 @@ public class CommandLineArgumentParser {
}
System.out.print("Page " + page + "/" + totalPages + "...");
RECT displayRect = new RECT(ds.getTimeline().displayRect);
//displayRect.Xmax *= zoom;
//displayRect.Ymax *= zoom;
Matrix m = new Matrix();
//m.scale(zoom);
BufferedImage img = SWF.frameToImageGet(ds.getTimeline(), 0, 0, null, 0, displayRect, m, m, null, Color.white, zoom).getBufferedImage();
BufferedImage img = SWF.frameToImageGet(ds.getTimeline(), 0, 0, null, 0, displayRect, new Matrix(), null, Color.white, zoom).getBufferedImage();
PageFormat pf = new PageFormat();
pf.setOrientation(PageFormat.PORTRAIT);
Paper p = new Paper();
@@ -313,7 +313,7 @@ public class FolderPreviewPanel extends JPanel {
String key = "frame_" + fn.frame + "_" + timeline.id + "_" + zoom;
imgSrc = swf.getFromCache(key);
if (imgSrc == null) {
imgSrc = SWF.frameToImageGet(timeline, fn.frame, fn.frame, null, 0, rect, new Matrix(), new Matrix(), null, null, zoom);
imgSrc = SWF.frameToImageGet(timeline, fn.frame, fn.frame, null, 0, rect, new Matrix(), null, null, zoom);
swf.putToCache(key, imgSrc);
}
@@ -50,7 +50,6 @@ import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
@@ -418,8 +417,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
/*if (width > swf.displayRect.getWidth()) {
scale = (double) swf.displayRect.getWidth() / (double) width;
}*/
Matrix m = new Matrix();
m.translate(-rect.Xmin, -rect.Ymin);
Matrix m = Matrix.getTranslateInstance(-rect.Xmin, -rect.Ymin);
m.scale(scale);
Point p = lastMouseEvent == null ? null : lastMouseEvent.getPoint();
@@ -491,7 +489,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
ButtonTag button = iconPanel.mouseOverButton;
if (button != null) {
DefineButtonSoundTag sounds = button.getSounds();
if (sounds != null && sounds.buttonSoundChar2 != 0) { //OverUpToOverDown
if (sounds != null && sounds.buttonSoundChar2 != 0) { // OverUpToOverDown
playSound((SoundTag) swf.getCharacter(sounds.buttonSoundChar2), sounds.buttonSoundInfo2, timer);
}
}
@@ -507,7 +505,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
ButtonTag button = iconPanel.mouseOverButton;
if (button != null) {
DefineButtonSoundTag sounds = button.getSounds();
if (sounds != null && sounds.buttonSoundChar3 != 0) { //OverDownToOverUp
if (sounds != null && sounds.buttonSoundChar3 != 0) { // OverDownToOverUp
playSound((SoundTag) swf.getCharacter(sounds.buttonSoundChar3), sounds.buttonSoundInfo3, timer);
}
}
@@ -736,8 +734,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
SerializableImage image = new SerializableImage((int) (width / SWF.unitDivisor) + 1,
(int) (height / SWF.unitDivisor) + 1, SerializableImage.TYPE_INT_ARGB);
image.fillTransparent();
Matrix m = new Matrix();
m.translate(-rect.Xmin * zoomDouble, -rect.Ymin * zoomDouble);
Matrix m = Matrix.getTranslateInstance(-rect.Xmin * zoomDouble, -rect.Ymin * zoomDouble);
m.scale(zoomDouble);
textTag.toImage(0, 0, 0, new RenderContext(), image, false, m, m, m, new ConstantColorColorTransform(0xFFC0C0C0));
@@ -864,7 +861,7 @@ public final class ImagePanel extends JPanel implements MediaDisplay {
Matrix m = new Matrix();
m.translate(-rect.Xmin * zoom, -rect.Ymin * zoom);
m.scale(zoom);
timeline.toImage(frame, time, renderContext, image, false, m, new Matrix(), m, null);
timeline.toImage(frame, time, renderContext, image, false, m, m, m, null);
Graphics2D gg = (Graphics2D) image.getGraphics();
gg.setStroke(new BasicStroke(3));
@@ -288,7 +288,7 @@ public class LoadFromMemoryFrame extends AppFrame {
tableRes.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent e) {
if (e.getKeyCode() == 10) { //Enter pressed
if (e.getKeyCode() == KeyEvent.VK_ENTER) { //Enter pressed
openSwf();
}
}
+5 -6
View File
@@ -228,8 +228,7 @@ public class Main {
try {
proc = Runtime.getRuntime().exec(new String[]{exePath, ffile});
} catch (IOException ex) {
Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex);
logger.log(Level.SEVERE, null, ex);
return null;
}
boolean isDebug;
@@ -344,7 +343,7 @@ public class Main {
try (FileInputStream fis = new FileInputStream(fTempFile)) {
instrSWF = new SWF(fis, false, false);
} catch (InterruptedException ex) {
Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex);
logger.log(Level.SEVERE, null, ex);
}
if (instrSWF != null) {
String swfFileName = fTempFile.getAbsolutePath();
@@ -373,7 +372,7 @@ public class Main {
try (FileInputStream fis = new FileInputStream(toPrepareFile)) {
instrSWF = new SWF(fis, toPrepareFile.getAbsolutePath(), origFile.getName(), false);
} catch (InterruptedException ex) {
Logger.getLogger(MainFrameMenu.class.getName()).log(Level.SEVERE, null, ex);
logger.log(Level.SEVERE, null, ex);
}
if (instrSWF != null) {
for (Tag t : instrSWF.getLocalTags()) {
@@ -1608,7 +1607,7 @@ public class Main {
Helper.writeFile(tfile, data);
openFile(new SWFSourceInfo(null, tfile, title));
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, "Cannot create tempfile");
logger.log(Level.SEVERE, "Cannot create tempfile");
}
}
@@ -1654,7 +1653,7 @@ public class Main {
});
flashDebugger.addConnectionListener(debugHandler);
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, "eeex", ex);
logger.log(Level.SEVERE, "eeex", ex);
}
});
}
@@ -675,6 +675,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
});
searchPanel.add(closeSearchButton, BorderLayout.EAST);
searchPanel.setVisible(false);
treePanel = new JPanel(new CardLayout());
treePanel.add(createResourcesViewCard(), RESOURCES_VIEW);
treePanel.add(createDumpViewCard(), DUMP_VIEW);
@@ -2878,23 +2879,6 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
@Override
public void valueChanged(TreeSelectionEvent e) {
Object source = e.getSource();
if (source == dumpTree) {
reload(false);
Object sel = e.getPath().getLastPathComponent();
if (sel instanceof DumpInfo) {
DumpInfo di = (DumpInfo) sel;
Tag t = di.getTag();
if (t != null) {
showPreview(t, dumpPreviewPanel);
} else {
showPreview(null, dumpPreviewPanel);
}
} else {
showPreview(null, dumpPreviewPanel);
}
return;
}
TreeItem treeItem = (TreeItem) e.getPath().getLastPathComponent();
if (!(treeItem instanceof SWFList)) {
@@ -2914,6 +2898,17 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
reload(false);
if (source == dumpTree) {
Object sel = e.getPath().getLastPathComponent();
Tag t = null;
if (sel instanceof DumpInfo) {
DumpInfo di = (DumpInfo) sel;
t = di.getTag();
}
showPreview(t, dumpPreviewPanel);
}
}
public void unloadFlashPlayer() {
@@ -3047,6 +3042,8 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
}
if (item instanceof Timelined) {
timelineViewPanel.setTimelined((Timelined) item);
} else if (item instanceof Frame) {
timelineViewPanel.setTimelined(((Frame) item).timeline.timelined);
} else {
timelineViewPanel.setTimelined(swf);
}
@@ -3171,13 +3168,7 @@ public final class MainPanel extends JPanel implements TreeSelectionListener, Se
} else if (treeItem instanceof Frame && internalViewer) {
Frame fn = (Frame) treeItem;
SWF swf = fn.getSwf();
Timelined timelined = swf;
if (fn.timeline.timelined instanceof DefineSpriteTag) {
DefineSpriteTag parentSprite = (DefineSpriteTag) fn.timeline.timelined;
timelined = parentSprite;
}
previewPanel.showImagePanel(timelined, swf, fn.frame);
previewPanel.showImagePanel(fn.timeline.timelined, swf, fn.frame);
} else if ((treeItem instanceof SoundTag)) { //&& isInternalFlashViewerSelected() && (Arrays.asList("mp3", "wav").contains(((SoundTag) tagObj).getExportFormat())))) {
previewPanel.showImagePanel(new SerializableImage(View.loadImage("sound32")));
previewPanel.setImageReplaceButtonVisible(((Tag) treeItem).isReadOnly() && (treeItem instanceof DefineSoundTag), false);
@@ -28,6 +28,7 @@ import com.jpexs.decompiler.flash.gui.editor.LineMarkedEditorPane;
import com.jpexs.decompiler.flash.helpers.HighlightedTextWriter;
import com.jpexs.decompiler.flash.helpers.hilight.HighlightSpecialType;
import com.jpexs.decompiler.flash.helpers.hilight.Highlighting;
import com.jpexs.decompiler.flash.tags.Tag;
import java.awt.BorderLayout;
import java.io.IOException;
import java.io.StringReader;
@@ -129,6 +130,8 @@ public class SlotConstTraitDetailPanel extends JPanel implements TraitDetail {
Logger.getLogger(SlotConstTraitDetailPanel.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
((Tag) abc.parentTag).setModified(true);
return true;
}
@@ -347,7 +347,7 @@ config.description.lastSessionSelection = Contient la s\u00e9lection lors de la
config.name.loopMedia = Rejouer les sons et les sprites
config.description.loopMedia = Rejoue automatiquement les sons et les sprites
config.name.gui.timeLineSplitPane.dividerLocationPercent = (Internal) Timeline Splitter location
config.name.gui.timeLineSplitPane.dividerLocationPercent = (Internal) Position du \u00e9parateur de la fen\u00eatre du chronogramme
config.description.gui.timeLineSplitPane.dividerLocationPercent =
config.name.cacheImages = Images en m\u00e9moire cache
@@ -219,9 +219,9 @@ config.name.formatting.indent.useTabs = Indentare con tab
config.description.formatting.indent.useTabs = Utilizzare tab invece degli spazi per l'indentazione
config.name.beginBlockOnNewLine = Parentesi graffa su riga successiva
config.description.beginBlockOnNewLine = Iniziare un blocco con parentesi { } dopo un a-capo
config.description.beginBlockOnNewLine = Iniziare un blocco di parentesi graffe dopo un a-capo
config.name.check.updates.delay = Intervallo tra verifiche aggiornamenti
config.name.check.updates.delay = Intervallo tra controllo aggiornamenti
config.description.check.updates.delay = Tempo minimo tra controlli automatici per aggiornamenti all'avvio
config.name.check.updates.stable = Cercare versioni stabili
@@ -318,7 +318,7 @@ config.name.editorMode = Modalit\u00e0 editor
config.description.editorMode = Rende modificabili le aree di testo in automatico alla selezione di un nodo text o script
config.name.autoSaveTagModifications = Salvataggio automatico modifiche ai tag
config.description.autoSaveTagModifications = Salvare le modifiche quando si seleziona un nuovo tag nella struttura
config.description.autoSaveTagModifications = Salva le modifiche quando si seleziona un nuovo tag nella struttura
config.name.saveSessionOnExit = Salva sessione in uscita
config.description.saveSessionOnExit = Salva la sessione corrente e la riapre dopo il riavvio di FFDec (funziona solo con file reali)
@@ -326,10 +326,10 @@ config.description.saveSessionOnExit = Salva la sessione corrente e la riapre do
config.name.showDebugMenu = Mostra il menu di debug
config.description.showDebugMenu = Mostra il menu di debug
config.name.allowOnlyOneInstance = Permettere una sola istanza FFDec (sotto Windows)
config.description.allowOnlyOneInstance = FFDec pu\u00f2 essere eseguito solo una volta, tutti i file aperti verranno aggiunti alla stessa finestra.\nFunziona solo sotto sistema operativo Windows
config.name.allowOnlyOneInstance = Permetti una sola istanza di FFDec (sotto Windows)
config.description.allowOnlyOneInstance = FFDec pu\u00f2 essere avviato solo una volta, tutti i file aperti verranno aggiunti alla stessa finestra.\nFunziona solo sotto sistema operativo Windows
config.name.scriptExportSingleFile = Esportare script verso un singolo file
config.name.scriptExportSingleFile = Esporta script verso un unico file
config.description.scriptExportSingleFile = Esportazione script verso un unico file invece che file multipli
config.name.setFFDecVersionInExportedFont = Imposta il numero di versione di FFDec nel font esportato
@@ -359,8 +359,8 @@ config.description.swfSpecificConfigs = Contiene le configurazioni specifiche ag
config.name.exeExportMode = Modalit\u00e0 di esportazione EXE
config.description.exeExportMode = Modalit\u00e0 di esportazione EXE
config.name.ignoreCLikePackages = Ignora FlashCC / Alchimia o package simili
config.description.ignoreCLikePackages = I package FlashCC / Alchimia non possono solitamente essere decompilati correttamente.\r\n\u00c8 possibile disattivarli per velocizzare la decompilazione di altri package.
config.name.ignoreCLikePackages = Ignora FlashCC / Alchemy o package simili
config.description.ignoreCLikePackages = I package FlashCC / Alchemy non possono solitamente essere decompilati correttamente.\r\n\u00c8 possibile disattivarli per velocizzare la decompilazione di altri package.
config.name.overwriteExistingFiles = Sovrascrivere i file esistenti
config.description.overwriteExistingFiles = Sovrascrivere i file esistenti durante l'esportazione. Attualmente solo per script AS2/3
@@ -378,33 +378,33 @@ config.name.lastSessionFileTitles = Titoli file ultima sessione
config.description.lastSessionFileTitles = Contiene i titoli dei file aperti nell'ultima sessione (ad es. quelli caricati da URL ecc.)
config.group.name.paths = Percorsi
config.group.description.paths = Ubicazione dei file necessari
config.group.tip.paths = \u00c8 possibile ottenere questi file dal sito Adobe
config.group.description.paths = Ubicazione dei file richiesti
config.group.tip.paths = \ufffd possibile ottenere questi file dal sito Adobe
config.group.link.paths = https://www.adobe.com/support/flashplayer/debug_downloads.html
config.group.linkText.paths = [apri]
config.name.playerLocation = 1) Percorso Flash Player
config.description.playerLocation = Posizione eseguibile Flash Player. Utilizzato per l'azione Esegui.
config.name.playerDebugLocation = 2) Percorso Flash Player per debug
config.name.playerDebugLocation = 2) Percorso Flash Player per il debug
config.description.playerDebugLocation = Posizione eseguibile Flash Player per il debug. Utilizzato per l'azione Debug.
config.name.playerLibLocation = 3) Percorso PlayerGlobal (.swc)
config.description.playerLibLocation = Posizione della libreria Flash Player playerglobal.swc. Utilizzato perlopi\u00f9 per compilare AS3.
config.description.playerLibLocation = Posizione della libreria playerglobal.swc utilizzata perlopi\u00f9 per compilare AS3.
config.name.debugHalt = Blocca esecuzione all'avvio del debug
config.name.debugHalt = Pausa esecuzione all'avvio del debug
config.description.debugHalt = Pausa SWF all'avvio del debug.
config.name.gui.avm2.splitPane.vars.dividerLocationPercent = (Interno) Posizione splitter del menu Debug
config.name.gui.avm2.splitPane.vars.dividerLocationPercent = (Interno) Posizione divisorio del menu Debug
config.description.gui.avm2.splitPane.vars.dividerLocationPercent =
tip = Suggerimento:\u0020
config.name.gui.action.splitPane.vars.dividerLocationPercent = (Interno) Posizione splitter del menu Debug AS1/2
config.name.gui.action.splitPane.vars.dividerLocationPercent = (Interno) Posizione divisorio del menu Debug AS1/2
config.description.gui.action.splitPane.vars.dividerLocationPercent =
config.name.setMovieDelay = Ritardo in ms prima di cambiare il file SWF nel riproduttore esterno
config.description.setMovieDelay = Si sconsigliano valori sotto i 1000ms
config.description.setMovieDelay = Si sconsigliano valori inferiori a 1000ms
config.name.warning.svgImport = Avvisa all'importazione SVG
config.description.warning.svgImport =
@@ -422,8 +422,10 @@ config.name.displayDupInstructions = Mostra istruzioni \u00a7\u00a7dup
config.description.displayDupInstructions = Visualizza istruzioni \u00a7\u00a7dup nel codice. In loro assenza il codice pu\u00f2 essere facilmente compilato ma i dup con effetti collaterali potrebbero essere eseguiti due volte.
config.name.useRegExprLiteral = Decompila RegExp nella forma /pattern/mod.
config.description.useRegExprLiteral = Usa la sintassi /pattern/mod nella decompilazione di espressioni regolari. Altrimenti, utilizzare new RegExp(\"pat\",\"mod\")
config.description.useRegExprLiteral = Usa la sintassi /pattern/mod nella decompilazione di espressioni regolari. Altrimenti, utilizza new RegExp(\"pat\",\"mod\")
config.name.handleSkinPartsAutomatically = Gestisce metadati [SkinPart] in automatico
config.description.handleSkinPartsAutomatically = Decompila e modifica direttamente i metadati [SkinPart] in automatico. Se disattivato, l'attributo _skinParts ed il suo metodo getter sono visibili e modificabili direttamente.
config.description.handleSkinPartsAutomatically = Decompila e modifica direttamente i metadati [SkinPart] in automatico. Se disattivato, l'attributo _skinParts ed il suo metodo getter sono visibili e modificabili dall'utente.
config.name.resetLetterSpacingOnTextImport = Ripristina spaziatura lettere all'importazione di testo
config.description.resetLetterSpacingOnTextImport = Utile per i font cirillici, essendo piu ampi
@@ -29,3 +29,4 @@ column.version = Version
column.fileSize = Taille du fichier
column.pid = PID
column.processName = Nom du processus
column.address = Addresse
@@ -713,3 +713,6 @@ menu.settings.simplifyExpressions = Simplification d'expressions
#after 8.0.1
menu.recentFiles.empty = La liste des fichiers r\u00e9cents est vide
message.warning.outOfMemory32BitJre = M\u00e9moire insuffisante. Vous utilisez une version 32 bits de Java sur un syst\u00e8me 64 bits. Veuillez utiliser Java 64 bits.
menu.file.reloadAll = Recharger tout
message.confirm.reloadAll = Cette action annule tous les changements qui n'ont pas \u00e9t\u00e9 enregistr\u00e9s dans les fichiers SWF et recharge tous les fichiers dans l'application.\nContinuer ?
@@ -334,10 +334,12 @@ message.confirm.reload = Questa azione annulla tutte le modifiche non salvate e
dialog.selectbkcolor.title = Scelta colore di sfondo
error.font.nocharacter = Il font sorgente selezionato non contiene il carattere "%char%".
warning.initializers = I campi statici e le costanti sono spesso valorizzati negli initializer.\nLa modifica del valore qui spesso non \u00e8 sufficiente!
#after version 1.7.0u1:
menu.tools.searchMemory = Cerca SWF in memoria
@@ -349,7 +351,7 @@ ColorChooser.resetText = Risetta
ColorChooser.previewText = Anteprima
ColorChooser.swatchesNameText = Palette
ColorChooser.swatchesRecentText = Recente:
ColorChooser.sampleText = Testo Campione Testo Campione
ColorChooser.sampleText=Testo Campione Testo Campione
#after version 1.7.1:
@@ -448,8 +450,8 @@ button.next = Successivo
#after version 2.1.0
message.action.playerglobal.title = Libreria PlayerGlobal.swc mancante
message.action.playerglobal.needed = Per effetuare modifiche immediate AS3 la libreria "PlayerGlobal.swc" deve essere scaricato dal sito di Adobe.\r\n%adobehomepage%\r\nPremere OK per visitare la pagina di download.
message.action.playerglobal.place = Scarica la libreria PlayerGlobal(.swc) e posizionarla nella cartella \r\n%libpath%\r\nScegliere OK per continuare.
message.action.playerglobal.needed = Per effettuare modifiche immediate in AS3 la libreria "PlayerGlobal.swc" deve essere scaricato dal sito di Adobe.\r\n%adobehomepage%\r\nPremere OK per visitare la pagina di download.
message.action.playerglobal.place = Scarica la libreria PlayerGlobal(.swc) e posizionala nella cartella \r\n%libpath%\r\nScegliere OK per continuare.
message.confirm.experimental.function = Questa funzione \u00e8 SPERIMENTALE. Ci\u00f2 significa che non \u00e8 garantito il risultato ed il file SWF pu\u00f2 essere non funzionale dopo il salvataggio.
message.confirm.donotshowagain = Non mostrare pi\u00f9 il messaggio
@@ -631,9 +633,9 @@ abc.traitslist.scriptinitializer = Inizializzatore script
menu.settings.autoOpenLoadedSWFs = Apri SWF caricati durante la riproduzione
#after version 6.1.1
menu.file.start = Inizia
menu.file.start = Avvio
menu.file.start.run = Esegui
menu.file.start.stop = Ferma
menu.file.start.stop = Arresta
menu.file.start.debug = Debug
menu.debugging = Debug
menu.debugging.debug = Debug
@@ -641,14 +643,15 @@ menu.debugging.debug.stop = Ferma
menu.debugging.debug.pause = Pausa
menu.debugging.debug.stepOver = Passo successivo
menu.debugging.debug.stepInto = Entra nel metodo
menu.debugging.debug.stepOut = Esci dal metodo
menu.debugging.debug.stepOut = Risali dal metodo
menu.debugging.debug.continue = Continua
menu.debugging.debug.stack = Stack...
menu.debugging.debug.watch = Nuovo osservatore...
message.playerpath.notset = Proiettore Flash Player non trovato. Si prega di configurare il suo percorso in Impostazioni avanzate / Percorsi (1).
message.playerpath.debug.notset = Proiettore Flash Player debugger di contenuto non trovato. Si prega di configurare il suo percorso in Impostazioni avanzate / Percorsi (2).
message.playerpath.lib.notset = PlayerGlobal (.swc) non trovato. Si prega di configurare il suo percorso in Impostazioni avanzate / Percorsi (3).
message.playerpath.notset = Proiettore Flash Player non trovato. Si prega di configurarne il percorso in Impostazioni avanzate / Percorsi (1).
message.playerpath.debug.notset = Proiettore Flash Player debugger di contenuto non trovato. Si prega di configurarne il percorso in Impostazioni avanzate / Percorsi (2).
message.playerpath.lib.notset = PlayerGlobal (.swc) non trovato. Si prega di configurarne il percorso in Impostazioni avanzate / Percorsi (3).
debugpanel.header = Debug
@@ -699,8 +702,14 @@ menu.file.start.debugpcode = Debug P-code
# after 7.1.2
button.replaceNoFill = Sostituisci - Aggiorna limiti...
message.warning.svgImportExperimental = Non tutte le funzioni SVG sono supportate. Controllare il registro dopo l'importazione.
message.imported.swf = Il file SWF utilizza asset da un file SWF importato:\n%url%\nVuoi caricare gli asset da quell'indirizzo?
message.imported.swf = Il file SWF utilizza asset da un file SWF importato:\n%url%\nCaricare gli asset da quell'indirizzo?
message.imported.swf.manually = Impossibile caricare SWF importato\n%url%\nFile o URL non esistente.\nSelezionare un file locale?
message.warning.hexViewNotUpToDate = Hex View non aggiornato. Si prega di salvare e ricaricare il file per aggiornare la visuale esadecimale.
message.warning.hexViewNotUpToDate = Hex View non aggiornato. Si prega di salvare e ricaricare il file per aggiornare la visuale.
message.font.replace.updateTexts = Sono stati sostituiti alcuni caratteri. Vuoi aggiornare i testi esistenti?
menu.settings.simplifyExpressions = Semplifica espressioni
#after 8.0.1
menu.recentFiles.empty = Lista file recenti \u00e8 vuota
message.warning.outOfMemeory32BitJre = Errore di memoria esaurita. Stai eseguendo Java a 32bit su sistema operativo a 64bit. Prova con Java a 64bit.
@@ -117,6 +117,8 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
private static Font notUnderlinedFont = null;
private final int zeroCharacterWidth;
static {
Font font = new JLabel().getFont();
notUnderlinedFont = font;
@@ -189,9 +191,7 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
frameLabel.setVisible(false);
Dimension min = new Dimension(frameLabel.getFontMetrics(notUnderlinedFont).stringWidth("000"), frameLabel.getPreferredSize().height);
frameLabel.setMinimumSize(min);
frameLabel.setPreferredSize(min);
zeroCharacterWidth = frameLabel.getFontMetrics(notUnderlinedFont).stringWidth("0");
frameLabel.addMouseListener(new MouseAdapter() {
@@ -333,6 +333,12 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
View.execInEventDispatchLater(() -> {
updateZoom();
int totalFrames = display.getTotalFrames();
int currentFrame = display.getCurrentFrame();
if (currentFrame >= totalFrames) {
currentFrame = totalFrames - 1;
}
float frameRate = display.getFrameRate();
Zoom zoom = display.getZoom();
zoomFitButton.setVisible(zoom != null);
percentLabel.setVisible(zoom != null);
@@ -342,13 +348,14 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
graphicControls.setVisible(screenAvailable);
totalFrameLabel.setVisible(screenAvailable);
frameLabel.setVisible(screenAvailable);
frameControls.setVisible(screenAvailable);
int totalFrames = display.getTotalFrames();
int currentFrame = display.getCurrentFrame();
if (currentFrame >= totalFrames) {
currentFrame = totalFrames - 1;
if (screenAvailable) {
int charCount = Math.max(Integer.toString(totalFrames).length(), 3);
Dimension min = new Dimension(zeroCharacterWidth * charCount, frameLabel.getPreferredSize().height);
frameLabel.setMinimumSize(min);
frameLabel.setPreferredSize(min);
}
float frameRate = display.getFrameRate();
frameControls.setVisible(screenAvailable);
if (totalFrames == 0) {
progress.setIndeterminate(true);
} else {
@@ -357,8 +364,8 @@ public class PlayerControls extends JPanel implements MediaDisplayListener {
progress.setValue(currentFrame);
progress.setIndeterminate(false);
}
frameLabel.setText(("" + (currentFrame + 1)));
totalFrameLabel.setText("" + totalFrames);
frameLabel.setText(Integer.toString(currentFrame + 1));
totalFrameLabel.setText(Integer.toString(totalFrames));
if (frameRate != 0) {
timeLabel.setText("(" + formatMs((int) (currentFrame * 1000.0 / frameRate)) + ")");
totalTimeLabel.setText("(" + formatMs((int) (totalFrames * 1000.0 / frameRate)) + ")");