diff --git a/build_common.xml b/build_common.xml
index f3e48a6c7..5d4627f31 100644
--- a/build_common.xml
+++ b/build_common.xml
@@ -6,7 +6,8 @@
-
+
+
diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java
index 6f7ddf493..a66b76c67 100644
--- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java
+++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/configuration/Configuration.java
@@ -266,6 +266,11 @@ public class Configuration {
@ConfigurationName("gui.splitPane2.dividerLocation")
public static final ConfigurationItem guiSplitPane2DividerLocation = null;
+ @ConfigurationDefaultString("com.jpexs.decompiler.flash.gui.OceanicSkin")
+ @ConfigurationName("gui.skin")
+ @ConfigurationCategory("ui")
+ public static final ConfigurationItem guiSkin = null;
+
@ConfigurationDefaultInt(3)
@ConfigurationCategory("export")
public static final ConfigurationItem saveAsExeScaleMode = null;
diff --git a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java
index 6cb844901..e14f1fc56 100644
--- a/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java
+++ b/src/com/jpexs/decompiler/flash/gui/AdvancedSettingsDialog.java
@@ -21,10 +21,15 @@ import com.jpexs.decompiler.flash.configuration.ConfigurationCategory;
import com.jpexs.decompiler.flash.configuration.ConfigurationItem;
import com.jpexs.decompiler.flash.gui.helpers.SpringUtilities;
import java.awt.BorderLayout;
+import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.FlowLayout;
+import java.awt.FontMetrics;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.lang.reflect.Field;
@@ -39,17 +44,27 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.logging.Level;
import java.util.logging.Logger;
+import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JLabel;
+import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
+import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableModel;
+import org.pushingpixels.substance.api.ColorSchemeAssociationKind;
+import org.pushingpixels.substance.api.ComponentState;
+import org.pushingpixels.substance.api.DecorationAreaType;
+import org.pushingpixels.substance.api.SubstanceLookAndFeel;
+import org.pushingpixels.substance.api.SubstanceSkin;
+import org.pushingpixels.substance.api.renderers.SubstanceDefaultListCellRenderer;
+import org.pushingpixels.substance.api.skin.SkinInfo;
/**
*
@@ -99,6 +114,27 @@ public class AdvancedSettingsDialog extends AppDialog implements ActionListener
}
};
}
+
+ private static class SkinSelect {
+ private String name;
+ private String className;
+
+ public SkinSelect(String name, String className) {
+ this.name = name;
+ this.className = className;
+ }
+
+ public String getClassName() {
+ return className;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+
+ }
private void initComponents() {
okButton = new JButton();
@@ -159,6 +195,65 @@ public class AdvancedSettingsDialog extends AppDialog implements ActionListener
JTabbedPane tabPane = new JTabbedPane();
Map tabs = new HashMap<>();
+
+ JComboBox skinComboBox=new JComboBox<>();
+ skinComboBox.setRenderer(new SubstanceDefaultListCellRenderer(){
+
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ SubstanceDefaultListCellRenderer cmp= (SubstanceDefaultListCellRenderer)super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); //To change body of generated methods, choose Tools | Templates.
+ final SkinSelect ss=(SkinSelect)value;
+ cmp.setIcon(new Icon() {
+
+ @Override
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ Graphics2D g2 = (Graphics2D) g;
+ g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+ g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ try {
+ Class> act = Class.forName(ss.getClassName());
+ SubstanceSkin skin = (SubstanceSkin)act.newInstance();
+ Color fill = skin.getColorScheme(DecorationAreaType.GENERAL,ColorSchemeAssociationKind.FILL,ComponentState.ENABLED).getBackgroundFillColor();
+ Color hilight=skin.getColorScheme(DecorationAreaType.GENERAL,ColorSchemeAssociationKind.FILL,ComponentState.ROLLOVER_SELECTED).getBackgroundFillColor();
+ Color border = skin.getColorScheme(DecorationAreaType.GENERAL,ColorSchemeAssociationKind.BORDER,ComponentState.ENABLED).getDarkColor();
+ g2.setColor(fill);
+ g2.fillOval(0, 0, 16, 16);
+ g2.setColor(hilight);
+ g2.fillArc(0, 0, 16, 16, -45, 90);
+ g2.setColor(border);
+ g2.drawOval(0, 0, 16, 16);
+
+ } catch (ClassNotFoundException | InstantiationException | IllegalAccessException ex) {
+ //no icon
+ }
+
+ }
+
+ @Override
+ public int getIconWidth() {
+ return 16;
+ }
+
+ @Override
+ public int getIconHeight() {
+ return 16;
+ }
+ });
+ return cmp;
+ }
+
+ });
+ skinComboBox.addItem(new SkinSelect(OceanicSkin.NAME, OceanicSkin.class.getName()));
+ Map skins = SubstanceLookAndFeel.getAllSkins();
+ for(String skinKey:skins.keySet()){
+ SkinInfo skin=skins.get(skinKey);
+ skinComboBox.addItem(new SkinSelect(skin.getDisplayName(), skin.getClassName()));
+ if(skin.getClassName().equals(Configuration.guiSkin.get())){
+ skinComboBox.setSelectedIndex(skinComboBox.getItemCount()-1);
+ }
+ }
+
for (String cat : categorized.keySet()) {
JPanel configPanel = new JPanel(new SpringLayout());
for (String name : categorized.get(cat).keySet()) {
@@ -172,23 +267,33 @@ public class AdvancedSettingsDialog extends AppDialog implements ActionListener
ParameterizedType listType = (ParameterizedType) field.getGenericType();
Class itemType = (Class>) listType.getActualTypeArguments()[0];
- /*String description = Configuration.getDescription(field);
- if (description == null) {
- description = "";
- }*/
+
String description = translate("config.description." + name);
Object defaultValue = Configuration.getDefaultValue(field);
+ if(name.equals("gui.skin")){
+ Class c;
+ try {
+ c = Class.forName((String)defaultValue);
+ defaultValue = c.getField("NAME").get(c);
+ } catch (ClassNotFoundException | NoSuchFieldException | SecurityException ex) {
+ Logger.getLogger(AdvancedSettingsDialog.class.getName()).log(Level.SEVERE, null, ex);
+ }
+
+ }
if (defaultValue != null) {
description += " (" + translate("default") + ": " + defaultValue + ")";
}
- //model.addRow(new Object[]{locName, item.get(), description});
-
+
JLabel l = new JLabel(locName, JLabel.TRAILING);
l.setToolTipText(description);
configPanel.add(l);
Component c = null;
- if ((itemType == String.class) || (itemType == Integer.class) || (itemType == Long.class) || (itemType == Double.class) || (itemType == Float.class) || (itemType == Calendar.class)) {
+ if(name.equals("gui.skin")){
+ skinComboBox.setToolTipText(description);
+ skinComboBox.setMaximumSize(new Dimension(Integer.MAX_VALUE, skinComboBox.getPreferredSize().height));
+ c = skinComboBox;
+ } else if ((itemType == String.class) || (itemType == Integer.class) || (itemType == Long.class) || (itemType == Double.class) || (itemType == Float.class) || (itemType == Calendar.class)) {
JTextField tf = new JTextField();
Object val = item.get();
if (val == null) {
@@ -298,7 +403,10 @@ public class AdvancedSettingsDialog extends AppDialog implements ActionListener
ParameterizedType listType = (ParameterizedType) fields.get(name).getGenericType();
Class itemType = (Class>) listType.getActualTypeArguments()[0];
- if (itemType == String.class) {
+ if(name.equals("gui.skin")){
+ value = ((SkinSelect)((JComboBox)c).getSelectedItem()).className;
+ }
+ else if (itemType == String.class) {
value = ((JTextField) c).getText();
}
if (itemType == Boolean.class) {
diff --git a/src/com/jpexs/decompiler/flash/gui/ErrorLogFrame.java b/src/com/jpexs/decompiler/flash/gui/ErrorLogFrame.java
index 3138794ec..596e1a5dd 100644
--- a/src/com/jpexs/decompiler/flash/gui/ErrorLogFrame.java
+++ b/src/com/jpexs/decompiler/flash/gui/ErrorLogFrame.java
@@ -78,6 +78,10 @@ public class ErrorLogFrame extends AppFrame {
return handler;
}
+ public static boolean hasInstance() {
+ return instance != null;
+ }
+
public static ErrorLogFrame getInstance() {
if (instance == null) {
instance = new ErrorLogFrame();
diff --git a/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java
index 84d8fc931..f33601a1e 100644
--- a/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java
+++ b/src/com/jpexs/decompiler/flash/gui/FolderPreviewPanel.java
@@ -50,6 +50,10 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import javax.swing.JLabel;
import javax.swing.JPanel;
+import org.pushingpixels.substance.api.ColorSchemeAssociationKind;
+import org.pushingpixels.substance.api.ComponentState;
+import org.pushingpixels.substance.api.DecorationAreaType;
+import org.pushingpixels.substance.api.SubstanceLookAndFeel;
/**
*
@@ -188,9 +192,13 @@ public class FolderPreviewPanel extends JPanel {
JLabel l = new JLabel();
Font f = l.getFont().deriveFont(AffineTransform.getScaleInstance(0.8, 0.8));
int finish_y = (int) Math.ceil((r.y + r.height) / (float) CELL_HEIGHT);
- g.setColor(Color.black);
- Color color = new Color(0xd9, 0xe8, 0xfb);
- Color selectedColor = new Color(0xfe, 0xca, 0x81);
+ Color color = SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED).getBackgroundFillColor();
+ Color selectedColor = SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).getBackgroundFillColor();
+ Color borderColor = SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.BORDER, ComponentState.ROLLOVER_SELECTED).getUltraDarkColor();
+ Color textColor = SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).getForegroundColor();
+
+ //g.setColor(SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED));
+
for (int y = start_y; y <= finish_y; y++) {
for (int x = 0; x < cols; x++) {
int index = y * cols + x;
@@ -222,10 +230,12 @@ public class FolderPreviewPanel extends JPanel {
s = treeItem.toString();
}
g.setFont(f);
- g.setColor(Color.black);
+ g.setColor(borderColor);
g.drawLine(x * CELL_WIDTH, y * CELL_HEIGHT + BORDER_SIZE + PREVIEW_SIZE, x * CELL_WIDTH + CELL_WIDTH, y * CELL_HEIGHT + BORDER_SIZE + PREVIEW_SIZE);
- g.drawString(s, x * CELL_WIDTH + BORDER_SIZE, y * CELL_HEIGHT + BORDER_SIZE + PREVIEW_SIZE + LABEL_HEIGHT);
g.drawRect(x * CELL_WIDTH, y * CELL_HEIGHT, CELL_WIDTH, CELL_HEIGHT);
+ g.setColor(textColor);
+ g.drawString(s, x * CELL_WIDTH + BORDER_SIZE, y * CELL_HEIGHT + BORDER_SIZE + PREVIEW_SIZE + LABEL_HEIGHT);
+
}
}
}
diff --git a/src/com/jpexs/decompiler/flash/gui/HeaderLabel.java b/src/com/jpexs/decompiler/flash/gui/HeaderLabel.java
index 8a8a148fb..66f2aa6f2 100644
--- a/src/com/jpexs/decompiler/flash/gui/HeaderLabel.java
+++ b/src/com/jpexs/decompiler/flash/gui/HeaderLabel.java
@@ -22,8 +22,12 @@ import java.awt.geom.GeneralPath;
import java.util.EnumSet;
import java.util.Set;
import javax.swing.JLabel;
+import org.pushingpixels.substance.api.ColorSchemeAssociationKind;
+import org.pushingpixels.substance.api.ComponentState;
import org.pushingpixels.substance.api.DecorationAreaType;
+import org.pushingpixels.substance.api.SubstanceColorScheme;
import org.pushingpixels.substance.api.SubstanceConstants;
+import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.painter.border.StandardBorderPainter;
import org.pushingpixels.substance.api.skin.OfficeBlue2007Skin;
import org.pushingpixels.substance.internal.utils.SubstanceOutlineUtilities;
@@ -65,7 +69,7 @@ public class HeaderLabel extends JLabel {
@Override
public void paint(Graphics g) {
- g.setColor(new Color(217, 232, 251));
+ g.setColor(SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.HEADER, ColorSchemeAssociationKind.FILL,ComponentState.ENABLED).getBackgroundFillColor());
g.fillRect(0, 0, getWidth(), getHeight());
StandardBorderPainter borderPainter = new StandardBorderPainter();
@@ -80,12 +84,12 @@ public class HeaderLabel extends JLabel {
GeneralPath contour = SubstanceOutlineUtilities.getBaseOutline(getWidth(),
getHeight() + dy, cornerRadius, straightSides, borderInsets);
+
borderPainter.paintBorder(g, this, getWidth(), getHeight() + dy,
- contour, contourInner, new OfficeBlue2007Skin().getActiveColorScheme(DecorationAreaType.HEADER));
- g.setColor(Color.black);
+ contour, contourInner,SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.HEADER, ColorSchemeAssociationKind.BORDER,ComponentState.ENABLED));
+ g.setColor(SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.HEADER, ColorSchemeAssociationKind.FILL,ComponentState.ENABLED).getForegroundColor());
JLabel lab = new JLabel(getText(), JLabel.CENTER);
lab.setSize(getSize());
- lab.paint(g);
- //g.drawString(getText(), getWidth()/2-getFontMetrics(getFont()).stringWidth(getText())/2, getFont().getSize());
+ lab.paint(g);
}
}
diff --git a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java
index e3a1ebed6..cde4afd42 100644
--- a/src/com/jpexs/decompiler/flash/gui/ImagePanel.java
+++ b/src/com/jpexs/decompiler/flash/gui/ImagePanel.java
@@ -207,7 +207,7 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis
g2d.setPaint(View.transparentPaint);
g2d.fill(new Rectangle(0, 0, getWidth(), getHeight()));
g2d.setComposite(AlphaComposite.SrcOver);
- g2d.setPaint(View.swfBackgroundColor);
+ g2d.setPaint(View.getSwfBackgroundColor());
g2d.fill(new Rectangle(0, 0, getWidth(), getHeight()));
if (img != null) {
calcRect();
@@ -342,7 +342,7 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis
super(new BorderLayout());
//iconPanel.setHorizontalAlignment(JLabel.CENTER);
setOpaque(true);
- setBackground(View.DEFAULT_BACKGROUND_COLOR);
+ setBackground(View.getDefaultBackgroundColor());
iconPanel = new IconPanel();
//labelPan.add(label, new GridBagConstraints());
@@ -554,7 +554,7 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis
}
public synchronized void setImage(SerializableImage image) {
- setBackground(View.swfBackgroundColor);
+ setBackground(View.getSwfBackgroundColor());
clear();
timelined = null;
@@ -567,7 +567,7 @@ public final class ImagePanel extends JPanel implements ActionListener, MediaDis
}
public synchronized void setText(TextTag textTag, TextTag newTextTag) {
- setBackground(View.swfBackgroundColor);
+ setBackground(View.getSwfBackgroundColor());
clear();
timelined = null;
diff --git a/src/com/jpexs/decompiler/flash/gui/Main.java b/src/com/jpexs/decompiler/flash/gui/Main.java
index 8293fa018..626c22886 100644
--- a/src/com/jpexs/decompiler/flash/gui/Main.java
+++ b/src/com/jpexs/decompiler/flash/gui/Main.java
@@ -791,6 +791,14 @@ public class Main {
logger.log(Level.SEVERE, null, ex);
}
}
+ View.execInEventDispatch(new Runnable() {
+
+ @Override
+ public void run() {
+ ErrorLogFrame.createNewInstance();
+ }
+ });
+
autoCheckForUpdates();
offerAssociation();
View.execInEventDispatch(new Runnable() {
@@ -867,8 +875,7 @@ public class Main {
}
}
Locale.setDefault(Locale.forLanguageTag(Configuration.locale.get()));
- AppStrings.updateLanguage();
- ErrorLogFrame.createNewInstance();
+ AppStrings.updateLanguage();
try {
Class> cl = Class.forName("org.pushingpixels.substance.api.SubstanceLookAndFeel");
@@ -1357,7 +1364,7 @@ public class Main {
fileTxt.setFormatter(formatterTxt);
logger.addHandler(fileTxt);
- if (!GraphicsEnvironment.isHeadless()) {
+ if (!GraphicsEnvironment.isHeadless() && ErrorLogFrame.hasInstance()) {
ErrorLogFrame.getInstance().clearErrorState();
}
diff --git a/src/com/jpexs/decompiler/flash/gui/MainPanel.java b/src/com/jpexs/decompiler/flash/gui/MainPanel.java
index cdb2133c2..40726850e 100644
--- a/src/com/jpexs/decompiler/flash/gui/MainPanel.java
+++ b/src/com/jpexs/decompiler/flash/gui/MainPanel.java
@@ -2147,9 +2147,9 @@ public final class MainPanel extends JPanel implements ActionListener, TreeSelec
public void actionPerformed(ActionEvent e) {
switch (e.getActionCommand()) {
case ACTION_SELECT_BKCOLOR:
- Color newColor = JColorChooser.showDialog(null, AppStrings.translate("dialog.selectbkcolor.title"), View.swfBackgroundColor);
+ Color newColor = JColorChooser.showDialog(null, AppStrings.translate("dialog.selectbkcolor.title"), View.getSwfBackgroundColor());
if (newColor != null) {
- View.swfBackgroundColor = newColor;
+ View.setSwfBackgroundColor(newColor);
reload(true);
}
break;
diff --git a/src/com/jpexs/decompiler/flash/gui/MyResizableIcon.java b/src/com/jpexs/decompiler/flash/gui/MyResizableIcon.java
index 773ea78b3..b5cb9ae02 100644
--- a/src/com/jpexs/decompiler/flash/gui/MyResizableIcon.java
+++ b/src/com/jpexs/decompiler/flash/gui/MyResizableIcon.java
@@ -19,6 +19,8 @@ package com.jpexs.decompiler.flash.gui;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import java.util.HashMap;
import java.util.Map;
diff --git a/src/com/jpexs/decompiler/flash/gui/MyRibbonApplicationMenuButtonUI.java b/src/com/jpexs/decompiler/flash/gui/MyRibbonApplicationMenuButtonUI.java
index c8a7c84c4..f052116f0 100644
--- a/src/com/jpexs/decompiler/flash/gui/MyRibbonApplicationMenuButtonUI.java
+++ b/src/com/jpexs/decompiler/flash/gui/MyRibbonApplicationMenuButtonUI.java
@@ -16,10 +16,19 @@
*/
package com.jpexs.decompiler.flash.gui;
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
+import java.awt.MultipleGradientPaint;
+import java.awt.RadialGradientPaint;
+import java.awt.RenderingHints;
+import java.awt.Shape;
import java.awt.event.MouseEvent;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Ellipse2D;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.plaf.ComponentUI;
@@ -27,6 +36,10 @@ import org.pushingpixels.flamingo.api.common.model.PopupButtonModel;
import org.pushingpixels.flamingo.internal.ui.ribbon.appmenu.BasicRibbonApplicationMenuButtonUI;
import org.pushingpixels.flamingo.internal.ui.ribbon.appmenu.JRibbonApplicationMenuButton;
import org.pushingpixels.lafwidget.animation.effects.GhostingListener;
+import org.pushingpixels.substance.api.ColorSchemeAssociationKind;
+import org.pushingpixels.substance.api.ComponentState;
+import org.pushingpixels.substance.api.DecorationAreaType;
+import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.flamingo.common.ui.ActionPopupTransitionAwareUI;
import org.pushingpixels.substance.flamingo.utils.CommandButtonVisualStateTracker;
import org.pushingpixels.substance.internal.animation.StateTransitionTracker;
@@ -49,6 +62,7 @@ public class MyRibbonApplicationMenuButtonUI extends BasicRibbonApplicationMenuB
private MyResizableIcon clickIcon = null;
private MyResizableIcon normalIcon = null;
+ private MyResizableIcon clearIcon = null;
private final boolean buttonResized = false;
@@ -56,11 +70,89 @@ public class MyRibbonApplicationMenuButtonUI extends BasicRibbonApplicationMenuB
return clickIcon;
}
+
+ public static MyResizableIcon[] getIcons(){
+ MyResizableIcon clearIcon = View.getMyResizableIcon("buttonicon_clear_256");
+ return new MyResizableIcon[]{
+ clearIcon,
+ //normal
+ new MyResizableIcon(clearIcon.originalImage) {
+
+ @Override
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ Graphics2D g2 = (Graphics2D) g;
+ g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+ g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g2.setPaint(new RadialGradientPaint(getIconWidth() / 2, getIconHeight() / 2, getIconWidth() / 2, new float[]{0.32f, 0.84f, 1f}, new Color[]{
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.HIGHLIGHT, ComponentState.ENABLED).shiftBackground(Color.white, 0.5).getUltraLightColor(),
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED).getMidColor(),
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.BORDER, ComponentState.ENABLED).getUltraDarkColor()
+ }, MultipleGradientPaint.CycleMethod.NO_CYCLE));
+ Shape s = new Ellipse2D.Double(x, y, getIconWidth(), getIconHeight());
+ g2.fill(s);
+ g2.setPaint(SubstanceLookAndFeel.getCurrentSkin().getEnabledColorScheme(DecorationAreaType.PRIMARY_TITLE_PANE).getMidColor());
+ super.paintIcon(c, g, x, y);
+ }
+ },
+ //hover
+ new MyResizableIcon(clearIcon.originalImage) {
+
+ @Override
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ Graphics2D g2 = (Graphics2D) g;
+ g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+ g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g2.setPaint(new RadialGradientPaint(getIconWidth() / 2, getIconHeight() / 2, getIconWidth() / 2, new float[]{0.32f, 0.84f, 1f}, new Color[]{
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.HIGHLIGHT, ComponentState.ROLLOVER_UNSELECTED)/*.shiftBackground(Color.white, 0.8)*/.getUltraLightColor(),
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_UNSELECTED).getMidColor(),
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.BORDER, ComponentState.ROLLOVER_UNSELECTED)/*.shiftBackground(new Color(0x7c, 0x7c, 0x7c), 0.8)*/.getUltraDarkColor()
+ }, MultipleGradientPaint.CycleMethod.NO_CYCLE));
+ Shape s = new Ellipse2D.Double(x, y, getIconWidth(), getIconHeight());
+ g2.fill(s);
+ super.paintIcon(c, g, x, y);
+ }
+ },
+ //click
+ new MyResizableIcon(clearIcon.originalImage) {
+
+ @Override
+ public void paintIcon(Component c, Graphics g, int x, int y) {
+ Graphics2D g2 = (Graphics2D) g;
+ g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
+ g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
+ g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+ g2.setPaint(new RadialGradientPaint(getIconWidth() / 2, getIconHeight() / 2, getIconWidth() / 2, new float[]{0.2f, 0.5f, 0.8f}, new Color[]{
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).getUltraLightColor(),
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).getMidColor(),
+ SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.SECONDARY_TITLE_PANE, ColorSchemeAssociationKind.FILL, ComponentState.ROLLOVER_SELECTED).shiftBackground(Color.black, 0.7).getUltraDarkColor()
+ }, MultipleGradientPaint.CycleMethod.NO_CYCLE));
+ Shape s = new Ellipse2D.Double(x, y, getIconWidth(), getIconHeight());
+ g2.fill(s);
+ AffineTransform origt = g2.getTransform();
+ AffineTransform t = (AffineTransform) origt.clone();
+ t.translate(-getIconWidth() / 2, -getIconHeight() / 2);
+ t.scale(0.8, 0.8);
+ t.translate(getIconWidth() / 2 + getIconWidth() / 4, getIconHeight() / 2 + getIconHeight() / 4);
+ g2.setTransform(t);
+ g2.setPaint(Color.BLACK);
+ super.paintIcon(c, g, x, y);
+ g2.setTransform(origt);
+ }
+ }
+
+ };
+ }
+
public MyRibbonApplicationMenuButtonUI() {
super();
- hoverIcon = View.getMyResizableIcon("buttonicon_hover_256");
- normalIcon = View.getMyResizableIcon("buttonicon_256");
- clickIcon = View.getMyResizableIcon("buttonicon_down_256");
+ MyResizableIcon[] icons=getIcons();
+ clearIcon = icons[0];
+ normalIcon = icons[1];
+ hoverIcon = icons[2];
+ clickIcon = icons[3];
+
}
/**
@@ -177,6 +269,7 @@ public class MyRibbonApplicationMenuButtonUI extends BasicRibbonApplicationMenuB
if (regular == null) {
return;
}
+ //SubstanceLookAndFeel.getCurrentSkin().getActiveColorScheme(DecorationAreaType.GENERAL);
Graphics2D g2d = (Graphics2D) g.create();
regular.paintIcon(this.applicationMenuButton, g2d, 0, 0);
diff --git a/src/com/jpexs/decompiler/flash/gui/OceanicSkin.java b/src/com/jpexs/decompiler/flash/gui/OceanicSkin.java
new file mode 100644
index 000000000..5a2e3d986
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/OceanicSkin.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2015 JPEXS
+ *
+ * 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
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+package com.jpexs.decompiler.flash.gui;
+
+import java.awt.Color;
+
+import org.pushingpixels.substance.api.*;
+import org.pushingpixels.substance.api.painter.border.CompositeBorderPainter;
+import org.pushingpixels.substance.api.painter.border.DelegateFractionBasedBorderPainter;
+import org.pushingpixels.substance.api.painter.border.FractionBasedBorderPainter;
+import org.pushingpixels.substance.api.painter.border.SubstanceBorderPainter;
+import org.pushingpixels.substance.api.painter.decoration.FractionBasedDecorationPainter;
+import org.pushingpixels.substance.api.painter.fill.FractionBasedFillPainter;
+import org.pushingpixels.substance.api.painter.highlight.ClassicHighlightPainter;
+import org.pushingpixels.substance.api.painter.overlay.BottomLineOverlayPainter;
+import org.pushingpixels.substance.api.shaper.ClassicButtonShaper;
+
+public class OceanicSkin extends SubstanceSkin {
+
+ /**
+ * Display name for this skin.
+ */
+ public static final String NAME = "Oceanic";
+
+ /**
+ * Creates a new Oceanic skin.
+ */
+ public OceanicSkin() {
+ SubstanceSkin.ColorSchemes colorSchemes = SubstanceSkin
+ .getColorSchemes("com/jpexs/decompiler/flash/gui/graphics/oceanic.colorschemes");
+
+ SubstanceColorScheme activeScheme = colorSchemes
+ .get("Oceanic Active");
+ SubstanceColorScheme enabledScheme = colorSchemes
+ .get("Oceanic Enabled");
+
+ SubstanceColorSchemeBundle defaultSchemeBundle = new SubstanceColorSchemeBundle(
+ activeScheme, enabledScheme, enabledScheme);
+ defaultSchemeBundle.registerColorScheme(enabledScheme, 0.5f,
+ ComponentState.DISABLED_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(activeScheme, 0.5f,
+ ComponentState.DISABLED_SELECTED);
+
+ SubstanceColorScheme rolloverScheme = colorSchemes
+ .get("Oceanic Rollover");
+ SubstanceColorScheme rolloverSelectedScheme = colorSchemes
+ .get("Oceanic Rollover Selected");
+ SubstanceColorScheme selectedScheme = colorSchemes
+ .get("Oceanic Selected");
+ SubstanceColorScheme pressedScheme = colorSchemes
+ .get("Oceanic Pressed");
+ SubstanceColorScheme pressedSelectedScheme = colorSchemes
+ .get("Oceanic Pressed Selected");
+
+ // register state-specific color schemes on rollovers and selections
+ defaultSchemeBundle.registerColorScheme(rolloverScheme,
+ ComponentState.ROLLOVER_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(rolloverSelectedScheme,
+ ComponentState.ROLLOVER_SELECTED);
+ defaultSchemeBundle.registerColorScheme(selectedScheme,
+ ComponentState.SELECTED);
+ defaultSchemeBundle.registerColorScheme(pressedScheme,
+ ComponentState.PRESSED_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(pressedSelectedScheme,
+ ComponentState.PRESSED_SELECTED);
+
+ // register state-specific highlight color schemes on rollover and
+ // selections
+ defaultSchemeBundle.registerHighlightColorScheme(rolloverScheme, 0.8f,
+ ComponentState.ROLLOVER_UNSELECTED);
+ defaultSchemeBundle.registerHighlightColorScheme(selectedScheme, 0.8f,
+ ComponentState.SELECTED);
+ defaultSchemeBundle.registerHighlightColorScheme(
+ rolloverSelectedScheme, 0.8f, ComponentState.ROLLOVER_SELECTED);
+ defaultSchemeBundle.registerHighlightColorScheme(selectedScheme, 0.8f,
+ ComponentState.ARMED, ComponentState.ROLLOVER_ARMED);
+
+ // borders and marks
+ SubstanceColorScheme borderEnabledScheme = colorSchemes
+ .get("Oceanic Border Enabled");
+ SubstanceColorScheme borderActiveScheme = colorSchemes
+ .get("Oceanic Border Active");
+ SubstanceColorScheme borderRolloverScheme = colorSchemes
+ .get("Oceanic Border Rollover");
+ SubstanceColorScheme borderRolloverSelectedScheme = colorSchemes
+ .get("Oceanic Border Rollover Selected");
+ SubstanceColorScheme borderSelectedScheme = colorSchemes
+ .get("Oceanic Border Selected");
+ SubstanceColorScheme borderPressedScheme = colorSchemes
+ .get("Oceanic Border Pressed");
+
+ defaultSchemeBundle.registerColorScheme(borderEnabledScheme,
+ ColorSchemeAssociationKind.BORDER, ComponentState.ENABLED);
+ defaultSchemeBundle.registerColorScheme(borderEnabledScheme,
+ ColorSchemeAssociationKind.BORDER,
+ ComponentState.DISABLED_SELECTED,
+ ComponentState.DISABLED_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(borderActiveScheme,
+ ColorSchemeAssociationKind.BORDER, ComponentState.DEFAULT);
+ defaultSchemeBundle.registerColorScheme(borderRolloverScheme,
+ ColorSchemeAssociationKind.BORDER,
+ ComponentState.ROLLOVER_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(borderRolloverSelectedScheme,
+ ColorSchemeAssociationKind.BORDER,
+ ComponentState.ROLLOVER_SELECTED, ComponentState.ARMED,
+ ComponentState.ROLLOVER_ARMED);
+ defaultSchemeBundle.registerColorScheme(borderSelectedScheme,
+ ColorSchemeAssociationKind.BORDER, ComponentState.SELECTED);
+ defaultSchemeBundle.registerColorScheme(borderPressedScheme,
+ ColorSchemeAssociationKind.BORDER,
+ ComponentState.PRESSED_SELECTED,
+ ComponentState.PRESSED_UNSELECTED);
+
+ // tabs and tab borders
+ SubstanceColorScheme tabSelectedScheme = colorSchemes
+ .get("Oceanic Tab Selected");
+ SubstanceColorScheme tabRolloverScheme = colorSchemes
+ .get("Oceanic Tab Rollover");
+ defaultSchemeBundle.registerColorScheme(tabSelectedScheme,
+ ColorSchemeAssociationKind.TAB, ComponentState.SELECTED,
+ ComponentState.ROLLOVER_SELECTED,
+ ComponentState.PRESSED_SELECTED,
+ ComponentState.PRESSED_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(tabRolloverScheme,
+ ColorSchemeAssociationKind.TAB,
+ ComponentState.ROLLOVER_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(borderEnabledScheme,
+ ColorSchemeAssociationKind.TAB_BORDER, ComponentState.SELECTED,
+ ComponentState.ROLLOVER_UNSELECTED);
+ defaultSchemeBundle.registerColorScheme(rolloverSelectedScheme,
+ ColorSchemeAssociationKind.TAB_BORDER,
+ ComponentState.ROLLOVER_SELECTED);
+
+ // separator
+ SubstanceColorScheme separatorScheme = colorSchemes
+ .get("Oceanic Separator");
+ defaultSchemeBundle.registerColorScheme(separatorScheme,
+ ColorSchemeAssociationKind.SEPARATOR);
+
+ this.registerDecorationAreaSchemeBundle(defaultSchemeBundle,
+ DecorationAreaType.NONE);
+
+ this.watermarkScheme = colorSchemes.get("Oceanic Watermark");
+
+ SubstanceColorScheme generalWatermarkScheme = colorSchemes
+ .get("Oceanic Header Watermark");
+
+ this.registerAsDecorationArea(generalWatermarkScheme,
+ DecorationAreaType.FOOTER, DecorationAreaType.HEADER,
+ DecorationAreaType.TOOLBAR);
+
+ SubstanceColorScheme titleWatermarkScheme = colorSchemes
+ .get("Oceanic Title Watermark");
+
+ this.registerAsDecorationArea(titleWatermarkScheme,
+ DecorationAreaType.GENERAL,
+ DecorationAreaType.PRIMARY_TITLE_PANE,
+ DecorationAreaType.SECONDARY_TITLE_PANE);
+
+ setSelectedTabFadeStart(0.7);
+ setSelectedTabFadeEnd(0.9);
+
+ this.addOverlayPainter(new BottomLineOverlayPainter(
+ new ColorSchemeSingleColorQuery() {
+ @Override
+ public Color query(SubstanceColorScheme scheme) {
+ Color fg = scheme.getForegroundColor();
+ return new Color(fg.getRed(), fg.getGreen(), fg
+ .getBlue(), 72);
+ }
+ }), DecorationAreaType.PRIMARY_TITLE_PANE,
+ DecorationAreaType.SECONDARY_TITLE_PANE);
+
+ this.buttonShaper = new ClassicButtonShaper();
+ this.watermark = null;
+
+ this.fillPainter = new FractionBasedFillPainter("Oceanic",
+ new float[]{0.0f, 0.49999f, 0.5f, 1.0f},
+ new ColorSchemeSingleColorQuery[]{
+ ColorSchemeSingleColorQuery.ULTRALIGHT,
+ ColorSchemeSingleColorQuery.LIGHT,
+ ColorSchemeSingleColorQuery.ULTRADARK,
+ ColorSchemeSingleColorQuery.EXTRALIGHT});
+
+ FractionBasedBorderPainter outerBorderPainter = new FractionBasedBorderPainter(
+ "Oceanic Outer", new float[]{0.0f, 0.5f, 1.0f},
+ new ColorSchemeSingleColorQuery[]{
+ ColorSchemeSingleColorQuery.EXTRALIGHT,
+ ColorSchemeSingleColorQuery.DARK,
+ ColorSchemeSingleColorQuery.MID});
+ SubstanceBorderPainter innerBorderPainter = new DelegateFractionBasedBorderPainter(
+ "Oceanic Inner", outerBorderPainter, new int[]{
+ 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
+ new ColorSchemeTransform() {
+ @Override
+ public SubstanceColorScheme transform(
+ SubstanceColorScheme scheme) {
+ return scheme.tint(0.8f);
+ }
+ });
+ this.borderPainter = new CompositeBorderPainter("Oceanic",
+ outerBorderPainter, innerBorderPainter);
+
+ this.decorationPainter = new FractionBasedDecorationPainter(
+ "Oceanic", new float[]{0.0f, 0.1199999f, 0.12f,
+ 0.5f, 0.9f, 1.0f}, new ColorSchemeSingleColorQuery[]{
+ ColorSchemeSingleColorQuery.LIGHT,
+ ColorSchemeSingleColorQuery.LIGHT,
+ ColorSchemeSingleColorQuery.ULTRADARK,
+ ColorSchemeSingleColorQuery.MID,
+ ColorSchemeSingleColorQuery.ULTRALIGHT,
+ ColorSchemeSingleColorQuery.LIGHT});
+ this.highlightPainter = new ClassicHighlightPainter();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.pushingpixels.substance.skin.SubstanceSkin#getDisplayName()
+ */
+ @Override
+ public String getDisplayName() {
+ return NAME;
+ }
+
+}
diff --git a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java
index 14650e55c..5af40bfde 100644
--- a/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java
+++ b/src/com/jpexs/decompiler/flash/gui/PreviewPanel.java
@@ -381,7 +381,7 @@ public class PreviewPanel extends JSplitPane implements ActionListener {
} else {
JPanel swtPanel = new JPanel(new BorderLayout());
swtPanel.add(new JLabel("" + mainPanel.translate("notavailonthisplatform") + "", JLabel.CENTER), BorderLayout.CENTER);
- swtPanel.setBackground(View.DEFAULT_BACKGROUND_COLOR);
+ swtPanel.setBackground(View.getDefaultBackgroundColor());
leftComponent = swtPanel;
}
@@ -654,10 +654,10 @@ public class PreviewPanel extends JSplitPane implements ActionListener {
tempFile = File.createTempFile("ffdec_view_", ".swf");
tempFile.deleteOnExit();
- Color backgroundColor = View.swfBackgroundColor;
+ Color backgroundColor = View.getSwfBackgroundColor();
if (tagObj instanceof FontTag) { //Fonts are always black on white
- backgroundColor = View.DEFAULT_BACKGROUND_COLOR;
+ backgroundColor = View.getDefaultBackgroundColor();
}
if (tagObj instanceof Frame) {
@@ -1112,7 +1112,7 @@ public class PreviewPanel extends JSplitPane implements ActionListener {
}
public void showSwf(SWF swf) {
- Color backgroundColor = View.DEFAULT_BACKGROUND_COLOR;
+ Color backgroundColor = View.getDefaultBackgroundColor();
for (Tag t : swf.tags) {
if (t instanceof SetBackgroundColorTag) {
backgroundColor = ((SetBackgroundColorTag) t).backgroundColor.toColor();
diff --git a/src/com/jpexs/decompiler/flash/gui/View.java b/src/com/jpexs/decompiler/flash/gui/View.java
index 304c18e93..08c255648 100644
--- a/src/com/jpexs/decompiler/flash/gui/View.java
+++ b/src/com/jpexs/decompiler/flash/gui/View.java
@@ -16,6 +16,7 @@
*/
package com.jpexs.decompiler.flash.gui;
+import com.jpexs.decompiler.flash.configuration.Configuration;
import com.jpexs.decompiler.flash.configuration.ConfigurationItem;
import java.awt.BorderLayout;
import java.awt.Color;
@@ -81,7 +82,9 @@ import javax.swing.text.JTextComponent;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;
import org.pushingpixels.flamingo.api.common.icon.ImageWrapperResizableIcon;
+import org.pushingpixels.substance.api.ColorSchemeAssociationKind;
import org.pushingpixels.substance.api.ComponentState;
+import org.pushingpixels.substance.api.DecorationAreaType;
import org.pushingpixels.substance.api.SubstanceColorScheme;
import org.pushingpixels.substance.api.SubstanceConstants;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
@@ -96,10 +99,25 @@ import org.pushingpixels.substance.internal.utils.SubstanceColorSchemeUtilities;
* @author JPEXS
*/
public class View {
+
+ public static Color getDefaultBackgroundColor() {
+ return SubstanceLookAndFeel.getCurrentSkin().getColorScheme(DecorationAreaType.GENERAL, ColorSchemeAssociationKind.FILL, ComponentState.ENABLED).getBackgroundFillColor();
+ }
+
+ private static Color swfBackgroundColor = null;
- public static final Color DEFAULT_BACKGROUND_COLOR = new Color(217, 231, 250);
+ public static void setSwfBackgroundColor(Color swfBackgroundColor) {
+ View.swfBackgroundColor = swfBackgroundColor;
+ }
- public static Color swfBackgroundColor = DEFAULT_BACKGROUND_COLOR;
+ public static Color getSwfBackgroundColor() {
+ if(swfBackgroundColor == null){
+ return getDefaultBackgroundColor();
+ }
+ return swfBackgroundColor;
+ }
+
+
private static final BufferedImage transparentTexture;
@@ -140,6 +158,7 @@ public class View {
try {
UIManager.setLookAndFeel(new SubstanceOfficeBlue2007LookAndFeel());
+ SubstanceLookAndFeel.setSkin(Configuration.guiSkin.get());
UIManager.put(SubstanceLookAndFeel.COLORIZATION_FACTOR, 0.999);//This works for not changing labels color and not changing Dialogs title
UIManager.put("Tree.expandedIcon", getIcon("expand16"));
UIManager.put("Tree.collapsedIcon", getIcon("collapse16"));
@@ -267,10 +286,15 @@ public class View {
*/
public static void setWindowIcon(Window f) {
List images = new ArrayList<>();
- images.add(loadImage("icon16"));
- images.add(loadImage("icon32"));
- images.add(loadImage("icon48"));
- images.add(loadImage("icon256"));
+ MyResizableIcon[] icons=MyRibbonApplicationMenuButtonUI.getIcons();
+ MyResizableIcon icon=icons[1];
+ int sizes[] = new int[] {16,32,48,256};
+ for(int size:sizes){
+ icon.setIconSize(size,size);
+ BufferedImage bi=new BufferedImage(size, size, BufferedImage.TYPE_4BYTE_ABGR);
+ icon.paintIcon(f, bi.getGraphics(), 0, 0);
+ images.add(bi);
+ }
f.setIconImages(images);
}
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/buttonicon_clear_256.png b/src/com/jpexs/decompiler/flash/gui/graphics/buttonicon_clear_256.png
new file mode 100644
index 000000000..3f0d105c2
Binary files /dev/null and b/src/com/jpexs/decompiler/flash/gui/graphics/buttonicon_clear_256.png differ
diff --git a/src/com/jpexs/decompiler/flash/gui/graphics/oceanic.colorschemes b/src/com/jpexs/decompiler/flash/gui/graphics/oceanic.colorschemes
new file mode 100644
index 000000000..05730f546
--- /dev/null
+++ b/src/com/jpexs/decompiler/flash/gui/graphics/oceanic.colorschemes
@@ -0,0 +1,210 @@
+Oceanic Watermark {
+ kind=Light
+ colorUltraLight=#DEE8F5
+ colorExtraLight=#D2DFF0
+ colorLight=#D0E0F0
+ colorMid=#CAD9ED
+ colorDark=#BACAD9
+ colorUltraDark=#AEC2D5
+ colorForeground=#15428B
+}
+
+Oceanic Header Watermark {
+ kind=Light
+ colorUltraLight=#ceebfd
+ colorExtraLight=#b2e0fd
+ colorLight=#95d4fd
+ colorMid=#6ec4fb
+ colorDark=#59beff
+ colorUltraDark=#42b4fc
+ colorForeground=#000000
+}
+
+Oceanic Active {
+ kind=Light
+ colorUltraLight=#9DBDE7
+ colorExtraLight=#BBD5F8
+ colorLight=#ABCCF6
+ colorMid=#AACBF6
+ colorDark=#8CB8F3
+ colorUltraDark=#79ADF1
+ colorForeground=#15428B
+}
+
+Oceanic Title Watermark {
+ kind=Light
+ colorUltraLight=#ceebfd
+ colorExtraLight=#b2e0fd
+ colorLight=#95d4fd
+ colorMid=#6ec4fb
+ colorDark=#59beff
+ colorUltraDark=#42b4fc
+ colorForeground=#005e8e
+}
+
+Oceanic Border Active {
+ kind=Light
+ colorUltraLight=#7F96BA
+ colorExtraLight=#63779E
+ colorLight=#576890
+ colorMid=#596991
+ colorDark=#576890
+ colorUltraDark=#566890
+ colorForeground=#15428B
+}
+
+Oceanic Enabled {
+ kind=Light
+ colorUltraLight=#C2E1F9
+ colorExtraLight=#B1DDFF
+ colorLight=#72c2ff
+ colorMid=#49adfa
+ colorDark=#3ba8fb
+ colorUltraDark=#2ba3ff
+ colorForeground=#053E6A
+}
+
+
+Oceanic Border Enabled {
+ kind=Light
+ colorUltraLight=#9EBAE1
+ colorExtraLight=#8AADDB
+ colorLight=#84A8D7
+ colorMid=#81A3D0
+ colorDark=#6E90B8
+ colorUltraDark=#537BAE
+ colorForeground=#15428B
+}
+
+Oceanic Pressed {
+ kind=Light
+ colorUltraLight=#FDA661
+ colorExtraLight=#FC963C
+ colorLight=#FD9D3E
+ colorMid=#FC923C
+ colorDark=#FC8F3C
+ colorUltraDark=#FC923D
+ colorForeground=#15428B
+}
+
+Oceanic Pressed Selected {
+ kind=Light
+ colorUltraLight=#FEB96C
+ colorExtraLight=#FC963C
+ colorLight=#FDA962
+ colorMid=#FD953C
+ colorDark=#FC923D
+ colorUltraDark=#FC8F3D
+ colorForeground=#15428B
+}
+
+Oceanic Rollover {
+ kind=Light
+ colorUltraLight=#fef512
+ colorExtraLight=#feee0d
+ colorLight=#fcdf0a
+ colorMid=#fad008
+ colorDark=#f9c006
+ colorUltraDark=#f7b203
+ colorForeground=#000000
+}
+
+Oceanic Rollover Selected {
+ kind=Light
+ colorUltraLight=#febd12
+ colorExtraLight=#feb60d
+ colorLight=#fca60a
+ colorMid=#fa9808
+ colorDark=#f98706
+ colorUltraDark=#f77903
+ colorForeground=#15428B
+}
+
+Oceanic Selected {
+ kind=Light
+ colorUltraLight=#FBDBB5
+ colorExtraLight=#FDEB9F
+ colorLight=#FEC778
+ colorMid=#FDD07C
+ colorDark=#FDB759
+ colorUltraDark=#FEB456
+ colorForeground=#15428B
+}
+
+Oceanic Separator {
+ kind=Light
+ colorUltraLight=#D5E3F1
+ colorExtraLight=#D0E1F7
+ colorLight=#C2D5ED
+ colorMid=#C1D3EC
+ colorDark=#8DACD3
+ colorUltraDark=#7797C1
+ colorForeground=#F8FAFC
+}
+
+Oceanic Tab Rollover {
+ kind=Light
+ colorUltraLight=#E0E3DC
+ colorExtraLight=#E4E6E0
+ colorLight=#D8DBD0
+ colorMid=#E0D4A8
+ colorDark=#E2D19E
+ colorUltraDark=#E3D198
+ colorForeground=#15428B
+}
+
+Oceanic Tab Selected {
+ kind=Light
+ colorUltraLight=#F5FAFF
+ colorExtraLight=#EBF3FE
+ colorLight=#EAF2FD
+ colorMid=#E9F1FA
+ colorDark=#E8F0F9
+ colorUltraDark=#E1EAF6
+ colorForeground=#15428B
+}
+
+
+Oceanic Border Selected {
+ kind=Light
+ colorUltraLight=#C6C0B1
+ colorExtraLight=#AEA590
+ colorLight=#8E8165
+ colorMid=#8E8064
+ colorDark=#9A7057
+ colorUltraDark=#9F7559
+ colorForeground=#FCE59C
+}
+
+Oceanic Border Pressed {
+ kind=Light
+ colorUltraLight=#C8BAA4
+ colorExtraLight=#BDB19E
+ colorLight=#A6957B
+ colorMid=#8B7654
+ colorDark=#8B7654
+ colorUltraDark=#8B7654
+ colorForeground=#FEBE64
+}
+
+Oceanic Border Rollover {
+ kind=Light
+ colorUltraLight=#DAC378
+ colorExtraLight=#D9C176
+ colorLight=#D8BB6D
+ colorMid=#D6B664
+ colorDark=#D7B867
+ colorUltraDark=#CFBA73
+ colorForeground=#FFE798
+}
+
+Oceanic Border Rollover Selected {
+ kind=Light
+ colorUltraLight=#B1A389
+ colorExtraLight=#AE9F7D
+ colorLight=#A19476
+ colorMid=#9C8F73
+ colorDark=#9C8864
+ colorUltraDark=#8E8165
+ colorForeground=#F7C05B
+}
\ No newline at end of file
diff --git a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties
index e91a9c7a7..c692f46af 100644
--- a/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties
+++ b/src/com/jpexs/decompiler/flash/gui/locales/AdvancedSettingsDialog.properties
@@ -338,3 +338,7 @@ config.description.scriptExportSingleFile = Exporting texts to one file instead
config.name.setFFDecVersionInExportedFont = Set FFDec version number in exported font
config.description.setFFDecVersionInExportedFont = When this setting is disabled, FFDec won't add the current FFDec version number to the exported font.
+
+
+config.name.gui.skin = User Interface Skin
+config.description.gui.skin = Look and feel skin
\ No newline at end of file
diff --git a/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java b/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java
index 779c435cf..d52229543 100644
--- a/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java
+++ b/src/com/jpexs/decompiler/flash/gui/player/PlayerControls.java
@@ -508,9 +508,9 @@ public class PlayerControls extends JPanel implements ActionListener {
View.execInEventDispatch(new Runnable() {
@Override
public void run() {
- Color newColor = JColorChooser.showDialog(null, AppStrings.translate("dialog.selectbkcolor.title"), View.swfBackgroundColor);
+ Color newColor = JColorChooser.showDialog(null, AppStrings.translate("dialog.selectbkcolor.title"), View.getSwfBackgroundColor());
if (newColor != null) {
- View.swfBackgroundColor = newColor;
+ View.setSwfBackgroundColor(newColor);
display.setBackground(newColor);
}
}