diff --git a/MasterPassword/Java/masterpassword-algorithm/pom.xml b/MasterPassword/Java/masterpassword-algorithm/pom.xml
index 7bc976a3..5e0b7ddb 100644
--- a/MasterPassword/Java/masterpassword-algorithm/pom.xml
+++ b/MasterPassword/Java/masterpassword-algorithm/pom.xml
@@ -41,7 +41,7 @@
com.lambdaworks
scrypt
- 1.3.2
+ 1.4.0
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/AppleGUI.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/AppleGUI.java
index 00f6edf8..b9e52213 100644
--- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/AppleGUI.java
+++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/AppleGUI.java
@@ -1,6 +1,7 @@
package com.lyndir.masterpassword;
import com.apple.eawt.*;
+import javax.swing.*;
/**
@@ -29,4 +30,12 @@ public class AppleGUI extends GUI {
}
} );
}
+
+ @Override
+ protected PasswordFrame newPasswordFrame(final User user) {
+ PasswordFrame frame = super.newPasswordFrame( user );
+ frame.setDefaultCloseOperation( WindowConstants.DISPOSE_ON_CLOSE );
+
+ return frame;
+ }
}
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java
index 948aff07..7a2b59de 100644
--- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java
+++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/GUI.java
@@ -62,9 +62,16 @@ public class GUI implements UnlockFrame.SignInCallback {
}
user.getKey();
- passwordFrame = new PasswordFrame( user );
+ passwordFrame = newPasswordFrame( user );
open();
return true;
}
+
+ protected PasswordFrame newPasswordFrame(final User user) {
+ PasswordFrame frame = new PasswordFrame( user );
+ frame.setDefaultCloseOperation( WindowConstants.EXIT_ON_CLOSE );
+
+ return frame;
+ }
}
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/PasswordFrame.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/PasswordFrame.java
index b6d71165..a1554ef9 100644
--- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/PasswordFrame.java
+++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/PasswordFrame.java
@@ -22,6 +22,7 @@ public class PasswordFrame extends JFrame implements DocumentListener {
private final JComboBox siteTypeField;
private final JSpinner siteCounterField;
private final JLabel passwordLabel;
+ private final JLabel tipLabel;
public PasswordFrame(User user)
throws HeadlessException {
@@ -30,7 +31,6 @@ public class PasswordFrame extends JFrame implements DocumentListener {
JLabel label;
- setDefaultCloseOperation( DISPOSE_ON_CLOSE );
setContentPane( new JPanel( new BorderLayout( 20, 20 ) ) {
{
setBorder( new EmptyBorder( 20, 20, 20, 20 ) );
@@ -39,6 +39,7 @@ public class PasswordFrame extends JFrame implements DocumentListener {
// User
add( label = new JLabel( strf( "Generating passwords for: %s", user.getName() ) ), BorderLayout.NORTH );
+ label.setFont( Res.exoRegular().deriveFont( 12f ) );
label.setAlignmentX( LEFT_ALIGNMENT );
// Site
@@ -49,6 +50,7 @@ public class PasswordFrame extends JFrame implements DocumentListener {
// Site Name
sitePanel.add( label = new JLabel( "Site Name:", JLabel.LEADING ) );
+ label.setFont( Res.exoRegular().deriveFont( 12f ) );
label.setAlignmentX( LEFT_ALIGNMENT );
sitePanel.add( siteNameField = new JTextField() {
@@ -57,6 +59,7 @@ public class PasswordFrame extends JFrame implements DocumentListener {
return new Dimension( Integer.MAX_VALUE, getPreferredSize().height );
}
} );
+ siteNameField.setFont( Res.exoRegular().deriveFont( 12f ) );
siteNameField.setAlignmentX( LEFT_ALIGNMENT );
siteNameField.getDocument().addDocumentListener( this );
siteNameField.addActionListener( new ActionListener() {
@@ -71,7 +74,10 @@ public class PasswordFrame extends JFrame implements DocumentListener {
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run() {
- dispose();
+ if (getDefaultCloseOperation() == WindowConstants.EXIT_ON_CLOSE)
+ System.exit( 0 );
+ else
+ dispose();
}
} );
}
@@ -92,6 +98,7 @@ public class PasswordFrame extends JFrame implements DocumentListener {
} );
siteSettings.setAlignmentX( LEFT_ALIGNMENT );
sitePanel.add( siteSettings );
+ siteTypeField.setFont( Res.exoRegular().deriveFont( 12f ) );
siteTypeField.setAlignmentX( LEFT_ALIGNMENT );
siteTypeField.setAlignmentY( CENTER_ALIGNMENT );
siteTypeField.setSelectedItem( MPElementType.GeneratedLong );
@@ -102,6 +109,7 @@ public class PasswordFrame extends JFrame implements DocumentListener {
}
} );
+ siteCounterField.setFont( Res.exoRegular().deriveFont( 12f ) );
siteCounterField.setAlignmentX( RIGHT_ALIGNMENT );
siteCounterField.setAlignmentY( CENTER_ALIGNMENT );
siteCounterField.addChangeListener( new ChangeListener() {
@@ -112,9 +120,16 @@ public class PasswordFrame extends JFrame implements DocumentListener {
} );
// Password
- add( passwordLabel = new JLabel( " ", JLabel.CENTER ), BorderLayout.SOUTH );
- passwordLabel.setAlignmentX( LEFT_ALIGNMENT );
+ passwordLabel = new JLabel( " ", JLabel.CENTER );
passwordLabel.setFont( Res.sourceCodeProBlack().deriveFont( 40f ) );
+ passwordLabel.setAlignmentX( Component.CENTER_ALIGNMENT );
+
+ // Tip
+ tipLabel = new JLabel( " ", JLabel.CENTER );
+ tipLabel.setFont( Res.exoThin().deriveFont( 9f ) );
+ tipLabel.setAlignmentX( Component.CENTER_ALIGNMENT );
+
+ add( Components.boxLayout( BoxLayout.PAGE_AXIS, passwordLabel, tipLabel ), BorderLayout.SOUTH );
pack();
setMinimumSize( getSize() );
@@ -132,6 +147,7 @@ public class PasswordFrame extends JFrame implements DocumentListener {
if (siteType.getTypeClass() != MPElementTypeClass.Generated || siteName == null || siteName.isEmpty() || !user.hasKey()) {
passwordLabel.setText( null );
+ tipLabel.setText( null );
return;
}
@@ -139,14 +155,14 @@ public class PasswordFrame extends JFrame implements DocumentListener {
@Override
public void run() {
final String sitePassword = MasterPassword.generateContent( siteType, siteName, user.getKey(), siteCounter );
- if (callback != null) {
+ if (callback != null)
callback.passwordGenerated( siteName, sitePassword );
- }
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run() {
passwordLabel.setText( sitePassword );
+ tipLabel.setText( "Press [Enter] to copy the password." );
}
} );
}
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/Res.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/Res.java
index 46ec097a..ef85a14f 100644
--- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/Res.java
+++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/Res.java
@@ -26,6 +26,10 @@ public abstract class Res {
private static final Logger logger = Logger.get( Res.class );
private static Font sourceCodeProBlack;
+ private static Font exoBold;
+ private static Font exoExtraBold;
+ private static Font exoRegular;
+ private static Font exoThin;
public static void execute(final Runnable job) {
executor.submit( new Runnable() {
@@ -61,6 +65,54 @@ public abstract class Res {
}
}
+ public static Font exoBold() {
+ try {
+ URL resource = Resources.getResource( "fonts/Exo2.0-Bold.otf" );
+ Font font = Font.createFont( Font.TRUETYPE_FONT, resource.openStream() );
+ return exoBold != null? exoBold: //
+ (exoBold = font);
+ }
+ catch (FontFormatException | IOException e) {
+ throw Throwables.propagate( e );
+ }
+ }
+
+ public static Font exoExtraBold() {
+ try {
+ URL resource = Resources.getResource( "fonts/Exo2.0-ExtraBold.otf" );
+ Font font = Font.createFont( Font.TRUETYPE_FONT, resource.openStream() );
+ return exoExtraBold != null? exoExtraBold: //
+ (exoExtraBold = font);
+ }
+ catch (FontFormatException | IOException e) {
+ throw Throwables.propagate( e );
+ }
+ }
+
+ public static Font exoRegular() {
+ try {
+ URL resource = Resources.getResource( "fonts/Exo2.0-Regular.otf" );
+ Font font = Font.createFont( Font.TRUETYPE_FONT, resource.openStream() );
+ return exoRegular != null? exoRegular: //
+ (exoRegular = font);
+ }
+ catch (FontFormatException | IOException e) {
+ throw Throwables.propagate( e );
+ }
+ }
+
+ public static Font exoThin() {
+ try {
+ URL resource = Resources.getResource( "fonts/Exo2.0-Thin.otf" );
+ Font font = Font.createFont( Font.TRUETYPE_FONT, resource.openStream() );
+ return exoThin != null? exoThin: //
+ (exoThin = font);
+ }
+ catch (FontFormatException | IOException e) {
+ throw Throwables.propagate( e );
+ }
+ }
+
private static final class RetinaIcon extends ImageIcon {
private static final Pattern scalePattern = Pattern.compile(".*@(\\d+)x.[^.]+$");
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/util/Components.java b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/util/Components.java
index 3169a2db..70d5a75a 100644
--- a/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/util/Components.java
+++ b/MasterPassword/Java/masterpassword-gui/src/main/java/com/lyndir/masterpassword/util/Components.java
@@ -9,7 +9,7 @@ import javax.swing.*;
*/
public abstract class Components {
- public static JComponent boxLayout(int axis, Component... components) {
+ public static JPanel boxLayout(int axis, Component... components) {
JPanel container = new JPanel();
container.setLayout( new BoxLayout( container, axis ) );
for (Component component : components)
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Bold.otf b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Bold.otf
new file mode 100644
index 00000000..1e7072dd
Binary files /dev/null and b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Bold.otf differ
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-ExtraBold.otf b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-ExtraBold.otf
new file mode 100644
index 00000000..32dadb3f
Binary files /dev/null and b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-ExtraBold.otf differ
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Regular.otf b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Regular.otf
new file mode 100644
index 00000000..4bd82f98
Binary files /dev/null and b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Regular.otf differ
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Thin.otf b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Thin.otf
new file mode 100644
index 00000000..768f03f3
Binary files /dev/null and b/MasterPassword/Java/masterpassword-gui/src/main/resources/fonts/Exo2.0-Thin.otf differ
diff --git a/MasterPassword/Java/masterpassword-gui/src/main/resources/logback.xml b/MasterPassword/Java/masterpassword-gui/src/main/resources/logback.xml
index a5c492fa..37906259 100644
--- a/MasterPassword/Java/masterpassword-gui/src/main/resources/logback.xml
+++ b/MasterPassword/Java/masterpassword-gui/src/main/resources/logback.xml
@@ -6,7 +6,7 @@
-
+