Issue #612: show color in hex format

This commit is contained in:
honfika
2014-08-16 16:09:03 +02:00
parent 40771b85c2
commit bc81826648
8 changed files with 194 additions and 173 deletions
+2
View File
@@ -253,6 +253,7 @@ public final class SWF implements TreeItem, Timelined {
*/ */
public byte[] lzmaProperties; public byte[] lzmaProperties;
public byte[] uncompressedData; public byte[] uncompressedData;
public byte[] originalUncompressedData;
public FileAttributesTag fileAttributes; public FileAttributesTag fileAttributes;
/** /**
* ScaleForm GFx * ScaleForm GFx
@@ -537,6 +538,7 @@ public final class SWF implements TreeItem, Timelined {
compression = header.compression; compression = header.compression;
lzmaProperties = header.lzmaProperties; lzmaProperties = header.lzmaProperties;
uncompressedData = baos.toByteArray(); uncompressedData = baos.toByteArray();
originalUncompressedData = uncompressedData;
SWFInputStream sis = new SWFInputStream(this, uncompressedData); SWFInputStream sis = new SWFInputStream(this, uncompressedData);
dumpInfo = new DumpInfoSwfNode(this, "rootswf", "", null, 0, 0); dumpInfo = new DumpInfoSwfNode(this, "rootswf", "", null, 0, 0);
@@ -96,6 +96,10 @@ public class Configuration {
@ConfigurationCategory("display") @ConfigurationCategory("display")
public static final ConfigurationItem<Boolean> dumpView = null; public static final ConfigurationItem<Boolean> dumpView = null;
@ConfigurationDefaultBoolean(false)
@ConfigurationCategory("display")
public static final ConfigurationItem<Boolean> useHexColorFormat = null;
@ConfigurationDefaultBoolean(false) @ConfigurationDefaultBoolean(false)
@ConfigurationCategory("ui") @ConfigurationCategory("ui")
public static final ConfigurationItem<Boolean> gotoMainClassOnStartup = null; public static final ConfigurationItem<Boolean> gotoMainClassOnStartup = null;
@@ -2170,7 +2170,7 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec
return; return;
} }
dumpViewPanel.setData(DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf().uncompressedData, dumpInfo); dumpViewPanel.setData(DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf().originalUncompressedData, dumpInfo);
dumpViewPanel.revalidate(); dumpViewPanel.revalidate();
showCard(CARDDUMPVIEW); showCard(CARDDUMPVIEW);
} }
@@ -228,7 +228,7 @@ public class DumpTree extends JTree implements ActionListener {
if (fc.showSaveDialog(f) == JFileChooser.APPROVE_OPTION) { if (fc.showSaveDialog(f) == JFileChooser.APPROVE_OPTION) {
File sf = Helper.fixDialogFile(fc.getSelectedFile()); File sf = Helper.fixDialogFile(fc.getSelectedFile());
try (FileOutputStream fos = new FileOutputStream(sf)) { try (FileOutputStream fos = new FileOutputStream(sf)) {
byte[] data = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf().uncompressedData; byte[] data = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf().originalUncompressedData;
fos.write(data, (int) dumpInfo.startByte, (int) (dumpInfo.getEndByte() - dumpInfo.startByte + 1)); fos.write(data, (int) dumpInfo.startByte, (int) (dumpInfo.getEndByte() - dumpInfo.startByte + 1));
} catch (IOException ex) { } catch (IOException ex) {
Logger.getLogger(DumpTree.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(DumpTree.class.getName()).log(Level.SEVERE, null, ex);
@@ -240,7 +240,7 @@ public class DumpTree extends JTree implements ActionListener {
TreePath[] paths = getSelectionPaths(); TreePath[] paths = getSelectionPaths();
DumpInfo dumpInfo = (DumpInfo) paths[0].getLastPathComponent(); DumpInfo dumpInfo = (DumpInfo) paths[0].getLastPathComponent();
SWF swf = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf(); SWF swf = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf();
byte[] data = swf.uncompressedData; byte[] data = swf.originalUncompressedData;
int prevLength = (int) dumpInfo.startByte; int prevLength = (int) dumpInfo.startByte;
try { try {
SWFInputStream rri = new SWFInputStream(swf, data); SWFInputStream rri = new SWFInputStream(swf, data);
@@ -266,7 +266,7 @@ public class DumpTree extends JTree implements ActionListener {
TreePath[] paths = getSelectionPaths(); TreePath[] paths = getSelectionPaths();
DumpInfo dumpInfo = (DumpInfo) paths[0].getLastPathComponent(); DumpInfo dumpInfo = (DumpInfo) paths[0].getLastPathComponent();
SWF swf = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf(); SWF swf = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf();
byte[] data = swf.uncompressedData; byte[] data = swf.originalUncompressedData;
int prevLength = (int) dumpInfo.startByte; int prevLength = (int) dumpInfo.startByte;
try { try {
ABCInputStream ais = new ABCInputStream(new MemoryInputStream(data, 0, prevLength + (int) dumpInfo.lengthBytes)); ABCInputStream ais = new ABCInputStream(new MemoryInputStream(data, 0, prevLength + (int) dumpInfo.lengthBytes));
@@ -283,7 +283,7 @@ public class DumpTree extends JTree implements ActionListener {
TreePath[] paths = getSelectionPaths(); TreePath[] paths = getSelectionPaths();
DumpInfo dumpInfo = (DumpInfo) paths[0].getLastPathComponent(); DumpInfo dumpInfo = (DumpInfo) paths[0].getLastPathComponent();
SWF swf = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf(); SWF swf = DumpInfoSwfNode.getSwfNode(dumpInfo).getSwf();
byte[] data = swf.uncompressedData; byte[] data = swf.originalUncompressedData;
int prevLength = (int) dumpInfo.startByte; int prevLength = (int) dumpInfo.startByte;
try { try {
ABCInputStream ais = new ABCInputStream(new MemoryInputStream(data, 0, prevLength + (int) dumpInfo.lengthBytes)); ABCInputStream ais = new ABCInputStream(new MemoryInputStream(data, 0, prevLength + (int) dumpInfo.lengthBytes));
@@ -50,7 +50,6 @@ config.group.description.decompilation = Global decompilation related functions
config.group.name.other = Other config.group.name.other = Other
config.group.description.other = Other uncategorized configs config.group.description.other = Other uncategorized configs
config.name.openMultipleFiles = Open multiple files config.name.openMultipleFiles = Open multiple files
config.description.openMultipleFiles = Allows opening multiple files at once in one window config.description.openMultipleFiles = Allows opening multiple files at once in one window
@@ -60,6 +59,9 @@ config.description.decompile = You can disable AS decompilation, then only P-cod
config.name.dumpView = Dump View config.name.dumpView = Dump View
config.description.dumpView = View raw data dump config.description.dumpView = View raw data dump
config.name.useHexColorFormat = Hex color format
config.description.useHexColorFormat = Show the colors in hex format
config.name.parallelSpeedUp = Parallel SpeedUp config.name.parallelSpeedUp = Parallel SpeedUp
config.description.parallelSpeedUp = Parallelism can speed up decompilation config.description.parallelSpeedUp = Parallelism can speed up decompilation
@@ -60,6 +60,9 @@ config.description.decompile = Kikapcsolhatja az AS visszaford\u00edt\u00e1s\u00
config.name.dumpView = Dump N\u00e9zet config.name.dumpView = Dump N\u00e9zet
config.description.dumpView = Nyers adatok mutat\u00e1sa config.description.dumpView = Nyers adatok mutat\u00e1sa
config.name.useHexColorFormat = Hexa sz\u00edn form\u00e1tum
config.description.useHexColorFormat = A sz\u00ednek hexa form\u00e1tum\u00fa mutat\u00e1sa
config.name.parallelSpeedUp = P\u00e1rhuzamos gyors\u00edt\u00e1s config.name.parallelSpeedUp = P\u00e1rhuzamos gyors\u00edt\u00e1s
config.description.parallelSpeedUp = P\u00e1rhuzamos\u00edt\u00e1s fel tudja gyors\u00edtani a visszaford\u00edt\u00e1st config.description.parallelSpeedUp = P\u00e1rhuzamos\u00edt\u00e1s fel tudja gyors\u00edtani a visszaford\u00edt\u00e1st
+90 -85
View File
@@ -1,85 +1,90 @@
/* /*
* Copyright (C) 2010-2014 JPEXS * Copyright (C) 2010-2014 JPEXS
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.jpexs.decompiler.flash.types; package com.jpexs.decompiler.flash.types;
import com.jpexs.decompiler.flash.types.annotations.SWFType; import com.jpexs.decompiler.flash.configuration.Configuration;
import java.awt.Color; import com.jpexs.decompiler.flash.types.annotations.SWFType;
import java.io.Serializable; import java.awt.Color;
import java.io.Serializable;
/**
* Represents 24-bit red, green, blue value /**
* * Represents 24-bit red, green, blue value
* @author JPEXS *
*/ * @author JPEXS
public class RGB implements Serializable { */
public class RGB implements Serializable {
/**
* Red color value /**
*/ * Red color value
@SWFType(BasicType.UI8) */
public int red; @SWFType(BasicType.UI8)
/** public int red;
* Green color value /**
*/ * Green color value
@SWFType(BasicType.UI8) */
public int green; @SWFType(BasicType.UI8)
/** public int green;
* Blue color value /**
*/ * Blue color value
@SWFType(BasicType.UI8) */
public int blue; @SWFType(BasicType.UI8)
public int blue;
public RGB(int red, int green, int blue) {
this.red = red; public RGB(int red, int green, int blue) {
this.green = green; this.red = red;
this.blue = blue; this.green = green;
} this.blue = blue;
}
public RGB() {
} public RGB() {
}
public String toHexRGB() {
String rh = Integer.toHexString(red); public String toHexRGB() {
if (rh.length() < 2) { String rh = Integer.toHexString(red);
rh = "0" + rh; if (rh.length() < 2) {
} rh = "0" + rh;
String gh = Integer.toHexString(green); }
if (gh.length() < 2) { String gh = Integer.toHexString(green);
gh = "0" + gh; if (gh.length() < 2) {
} gh = "0" + gh;
String bh = Integer.toHexString(blue); }
if (bh.length() < 2) { String bh = Integer.toHexString(blue);
bh = "0" + bh; if (bh.length() < 2) {
} bh = "0" + bh;
return "#" + rh + gh + bh; }
} return "#" + rh + gh + bh;
}
public Color toColor() {
return new Color(red, green, blue); public Color toColor() {
} return new Color(red, green, blue);
}
public RGB(Color color) {
this.red = color.getRed(); public RGB(Color color) {
this.green = color.getGreen(); this.red = color.getRed();
this.blue = color.getBlue(); this.green = color.getGreen();
} this.blue = color.getBlue();
}
@Override
public String toString() { @Override
return "[RGB red:" + red + ", green:" + green + ", blue:" + blue + "]"; public String toString() {
} if (Configuration.useHexColorFormat.get()) {
} return "[RGB " + toHexRGB() + "]";
} else {
return "[RGB red:" + red + ", green:" + green + ", blue:" + blue + "]";
}
}
}
+87 -82
View File
@@ -1,82 +1,87 @@
/* /*
* Copyright (C) 2010-2014 JPEXS * Copyright (C) 2010-2014 JPEXS
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or * the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version. * (at your option) any later version.
* *
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details. * GNU General Public License for more details.
* *
* You should have received a copy of the GNU General Public License * You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>. * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/ */
package com.jpexs.decompiler.flash.types; package com.jpexs.decompiler.flash.types;
import com.jpexs.decompiler.flash.types.annotations.SWFType; import com.jpexs.decompiler.flash.configuration.Configuration;
import java.awt.Color; import com.jpexs.decompiler.flash.types.annotations.SWFType;
import java.io.Serializable; import java.awt.Color;
import java.io.Serializable;
/**
* Represents 32-bit red, green, blue and alpha value /**
* * Represents 32-bit red, green, blue and alpha value
* @author JPEXS *
*/ * @author JPEXS
public class RGBA extends RGB implements Serializable { */
public class RGBA extends RGB implements Serializable {
/**
* Alpha value defining opacity /**
*/ * Alpha value defining opacity
@SWFType(BasicType.UI8) */
public int alpha; @SWFType(BasicType.UI8)
public int alpha;
public float getAlphaFloat() {
return ((float) alpha) / 255.0f; public float getAlphaFloat() {
} return ((float) alpha) / 255.0f;
}
public String toHexARGB() {
String ra = Integer.toHexString(alpha); public String toHexARGB() {
if (ra.length() < 2) { String ra = Integer.toHexString(alpha);
ra = "0" + ra; if (ra.length() < 2) {
} ra = "0" + ra;
String rh = Integer.toHexString(red); }
if (rh.length() < 2) { String rh = Integer.toHexString(red);
rh = "0" + rh; if (rh.length() < 2) {
} rh = "0" + rh;
String gh = Integer.toHexString(green); }
if (gh.length() < 2) { String gh = Integer.toHexString(green);
gh = "0" + gh; if (gh.length() < 2) {
} gh = "0" + gh;
String bh = Integer.toHexString(blue); }
if (bh.length() < 2) { String bh = Integer.toHexString(blue);
bh = "0" + bh; if (bh.length() < 2) {
} bh = "0" + bh;
return "#" + ra + rh + gh + bh; }
} return "#" + ra + rh + gh + bh;
}
public RGBA(int red, int green, int blue, int alpha) {
super(red, green, blue); public RGBA(int red, int green, int blue, int alpha) {
this.alpha = alpha; super(red, green, blue);
} this.alpha = alpha;
}
public RGBA(Color color) {
super(color); public RGBA(Color color) {
this.alpha = color.getAlpha(); super(color);
} this.alpha = color.getAlpha();
}
public RGBA() {
} public RGBA() {
}
@Override
public Color toColor() { @Override
return new Color(red, green, blue, alpha); public Color toColor() {
} return new Color(red, green, blue, alpha);
}
@Override
public String toString() { @Override
return "[RGB red:" + red + ", green:" + green + ", blue:" + blue + ", alpha:" + alpha + "]"; public String toString() {
} if (Configuration.useHexColorFormat.get()) {
} return "[RGB " + toHexRGB() + "]";
} else {
return "[RGB red:" + red + ", green:" + green + ", blue:" + blue + ", alpha:" + alpha + "]";
}
}
}