add dark theme

This commit is contained in:
Craig Raw 2020-09-20 15:04:53 +02:00
parent f22312e04f
commit 77d3c848f9
31 changed files with 374 additions and 122 deletions

View file

@ -98,6 +98,9 @@ public class AppController implements Initializable {
@FXML @FXML
private ToggleGroup bitcoinUnit; private ToggleGroup bitcoinUnit;
@FXML
private ToggleGroup theme;
@FXML @FXML
private CheckMenuItem showTxHex; private CheckMenuItem showTxHex;
@ -224,8 +227,18 @@ public class AppController implements Initializable {
Config.get().setBitcoinUnit(unit); Config.get().setBitcoinUnit(unit);
} }
final BitcoinUnit selectedUnit = unit; final BitcoinUnit selectedUnit = unit;
Optional<Toggle> selectedToggle = bitcoinUnit.getToggles().stream().filter(toggle -> selectedUnit.equals(toggle.getUserData())).findFirst(); Optional<Toggle> selectedUnitToggle = bitcoinUnit.getToggles().stream().filter(toggle -> selectedUnit.equals(toggle.getUserData())).findFirst();
selectedToggle.ifPresent(toggle -> bitcoinUnit.selectToggle(toggle)); selectedUnitToggle.ifPresent(toggle -> bitcoinUnit.selectToggle(toggle));
Theme configTheme = Config.get().getTheme();
if(configTheme == null) {
configTheme = Theme.LIGHT;
Config.get().setTheme(Theme.LIGHT);
}
final Theme selectedTheme = configTheme;
Optional<Toggle> selectedThemeToggle = theme.getToggles().stream().filter(toggle -> selectedTheme.equals(toggle.getUserData())).findFirst();
selectedThemeToggle.ifPresent(toggle -> theme.selectToggle(toggle));
setTheme(null);
showTxHex.setSelected(true); showTxHex.setSelected(true);
showTxHexProperty = true; showTxHexProperty = true;
@ -409,11 +422,11 @@ public class AppController implements Initializable {
Stage stage = new Stage(); Stage stage = new Stage();
stage.setTitle("About " + MainApp.APP_NAME); stage.setTitle("About " + MainApp.APP_NAME);
stage.initStyle(org.controlsfx.tools.Platform.getCurrent() == org.controlsfx.tools.Platform.OSX ? StageStyle.UNDECORATED : StageStyle.DECORATED); stage.initStyle(org.controlsfx.tools.Platform.getCurrent() == org.controlsfx.tools.Platform.OSX ? StageStyle.UNDECORATED : StageStyle.DECORATED);
setStageIcon(stage);
stage.setResizable(false); stage.setResizable(false);
stage.setScene(new Scene(root)); stage.setScene(new Scene(root));
controller.setStage(stage); controller.setStage(stage);
controller.initializeView(); controller.initializeView();
setStageIcon(stage);
return stage; return stage;
} catch(IOException e) { } catch(IOException e) {
@ -655,6 +668,7 @@ public class AppController implements Initializable {
public static void showErrorDialog(String title, String content) { public static void showErrorDialog(String title, String content) {
Alert alert = new Alert(Alert.AlertType.ERROR); Alert alert = new Alert(Alert.AlertType.ERROR);
setStageIcon(alert.getDialogPane().getScene().getWindow()); setStageIcon(alert.getDialogPane().getScene().getWindow());
alert.getDialogPane().getScene().getStylesheets().add(AppController.class.getResource("general.css").toExternalForm());
alert.setTitle(title); alert.setTitle(title);
alert.setHeaderText(title); alert.setHeaderText(title);
alert.setContentText(content); alert.setContentText(content);
@ -664,6 +678,10 @@ public class AppController implements Initializable {
public static void setStageIcon(Window window) { public static void setStageIcon(Window window) {
Stage stage = (Stage)window; Stage stage = (Stage)window;
stage.getIcons().add(new Image(AppController.class.getResourceAsStream("/image/sparrow.png"))); stage.getIcons().add(new Image(AppController.class.getResourceAsStream("/image/sparrow.png")));
if(stage.getScene() != null && Config.get().getTheme() == Theme.DARK) {
stage.getScene().getStylesheets().add(AppController.class.getResource("darktheme.css").toExternalForm());
}
} }
public static Font getMonospaceFont() { public static Font getMonospaceFont() {
@ -1092,6 +1110,19 @@ public class AppController implements Initializable {
return contextMenu; return contextMenu;
} }
public void setTheme(ActionEvent event) {
Theme selectedTheme = (Theme)theme.getSelectedToggle().getUserData();
if(Config.get().getTheme() != selectedTheme) {
Config.get().setTheme(selectedTheme);
}
if(selectedTheme == Theme.DARK) {
tabs.getScene().getStylesheets().add(getClass().getResource("darktheme.css").toExternalForm());
} else {
tabs.getScene().getStylesheets().remove(getClass().getResource("darktheme.css").toExternalForm());
}
}
@Subscribe @Subscribe
public void tabSelected(TabSelectedEvent event) { public void tabSelected(TabSelectedEvent event) {
String tabName = event.getTabName(); String tabName = event.getTabName();

View file

@ -0,0 +1,5 @@
package com.sparrowwallet.sparrow;
public enum Theme {
LIGHT, DARK
}

View file

@ -54,7 +54,7 @@ public class QRDisplayDialog extends Dialog<UR> {
qrImageView = new ImageView(); qrImageView = new ImageView();
stackPane.getChildren().add(qrImageView); stackPane.getChildren().add(qrImageView);
dialogPane.setContent(Borders.wrap(stackPane).lineBorder().outerPadding(0).innerPadding(0).buildAll()); dialogPane.setContent(Borders.wrap(stackPane).lineBorder().buildAll());
nextPart(); nextPart();
if(encoder.isSinglePart()) { if(encoder.isSinglePart()) {

View file

@ -40,7 +40,7 @@ public class QRScanDialog extends Dialog<QRScanDialog.Result> {
StackPane stackPane = new StackPane(); StackPane stackPane = new StackPane();
stackPane.getChildren().add(webcamView.getView()); stackPane.getChildren().add(webcamView.getView());
dialogPane.setContent(Borders.wrap(stackPane).lineBorder().outerPadding(0).innerPadding(0).buildAll()); dialogPane.setContent(Borders.wrap(stackPane).lineBorder().buildAll());
webcamService.resultProperty().addListener(new QRResultListener()); webcamService.resultProperty().addListener(new QRResultListener());
webcamService.setOnFailed(failedEvent -> { webcamService.setOnFailed(failedEvent -> {

View file

@ -26,6 +26,7 @@ public class TextAreaDialog extends Dialog<String> {
this.defaultValue = defaultValue; this.defaultValue = defaultValue;
dialogPane.setContent(hbox); dialogPane.setContent(hbox);
dialogPane.getStylesheets().add(AppController.class.getResource("general.css").toExternalForm());
AppController.setStageIcon(dialogPane.getScene().getWindow()); AppController.setStageIcon(dialogPane.getScene().getWindow());
dialogPane.getStyleClass().add("text-input-dialog"); dialogPane.getStyleClass().add("text-input-dialog");

View file

@ -3,6 +3,7 @@ package com.sparrowwallet.sparrow.io;
import com.google.gson.*; import com.google.gson.*;
import com.sparrowwallet.drongo.BitcoinUnit; import com.sparrowwallet.drongo.BitcoinUnit;
import com.sparrowwallet.sparrow.Mode; import com.sparrowwallet.sparrow.Mode;
import com.sparrowwallet.sparrow.Theme;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -24,6 +25,7 @@ public class Config {
private boolean includeMempoolChange = true; private boolean includeMempoolChange = true;
private boolean notifyNewTransactions = true; private boolean notifyNewTransactions = true;
private boolean checkNewVersions = true; private boolean checkNewVersions = true;
private Theme theme;
private List<File> recentWalletFiles; private List<File> recentWalletFiles;
private Integer keyDerivationPeriod; private Integer keyDerivationPeriod;
private File hwi; private File hwi;
@ -145,6 +147,15 @@ public class Config {
flush(); flush();
} }
public Theme getTheme() {
return theme;
}
public void setTheme(Theme theme) {
this.theme = theme;
flush();
}
public List<File> getRecentWalletFiles() { public List<File> getRecentWalletFiles() {
return recentWalletFiles; return recentWalletFiles;
} }

View file

@ -35,7 +35,7 @@ public class KeystoreImportDialog extends Dialog<Keystore> {
try { try {
FXMLLoader ksiLoader = new FXMLLoader(AppController.class.getResource("keystoreimport/keystoreimport.fxml")); FXMLLoader ksiLoader = new FXMLLoader(AppController.class.getResource("keystoreimport/keystoreimport.fxml"));
dialogPane.setContent(Borders.wrap(ksiLoader.load()).lineBorder().outerPadding(0).innerPadding(0).buildAll()); dialogPane.setContent(Borders.wrap(ksiLoader.load()).emptyBorder().buildAll());
keystoreImportController = ksiLoader.getController(); keystoreImportController = ksiLoader.getController();
keystoreImportController.initializeView(wallet); keystoreImportController.initializeView(wallet);
keystoreImportController.selectSource(initialSource); keystoreImportController.selectSource(initialSource);

View file

@ -31,7 +31,7 @@ public class PreferencesDialog extends Dialog<Boolean> {
try { try {
FXMLLoader preferencesLoader = new FXMLLoader(AppController.class.getResource("preferences/preferences.fxml")); FXMLLoader preferencesLoader = new FXMLLoader(AppController.class.getResource("preferences/preferences.fxml"));
dialogPane.setContent(Borders.wrap(preferencesLoader.load()).lineBorder().outerPadding(0).innerPadding(0).buildAll()); dialogPane.setContent(Borders.wrap(preferencesLoader.load()).emptyBorder().buildAll());
PreferencesController preferencesController = preferencesLoader.getController(); PreferencesController preferencesController = preferencesLoader.getController();
preferencesController.initializeView(Config.get()); preferencesController.initializeView(Config.get());
if(initialGroup != null) { if(initialGroup != null) {

View file

@ -227,7 +227,7 @@ public class ServerPreferencesController extends PreferencesDetailController {
} }
private void showConnectionSuccess(List<String> serverVersion, String serverBanner) { private void showConnectionSuccess(List<String> serverVersion, String serverBanner) {
testConnection.setGraphic(getGlyph(FontAwesome5.Glyph.CHECK_CIRCLE, Color.rgb(80, 161, 79))); testConnection.setGraphic(getGlyph(FontAwesome5.Glyph.CHECK_CIRCLE, "success"));
if(serverVersion != null) { if(serverVersion != null) {
testResults.setText("Connected to " + serverVersion.get(0) + " on protocol version " + serverVersion.get(1)); testResults.setText("Connected to " + serverVersion.get(0) + " on protocol version " + serverVersion.get(1));
if(ElectrumServer.supportsBatching(serverVersion)) { if(ElectrumServer.supportsBatching(serverVersion)) {
@ -248,7 +248,7 @@ public class ServerPreferencesController extends PreferencesDetailController {
} }
testResults.setText("Could not connect:\n\n" + reason); testResults.setText("Could not connect:\n\n" + reason);
testConnection.setGraphic(getGlyph(FontAwesome5.Glyph.EXCLAMATION_CIRCLE, Color.rgb(202, 18, 67))); testConnection.setGraphic(getGlyph(FontAwesome5.Glyph.EXCLAMATION_CIRCLE, "failure"));
} }
private void setupValidation() { private void setupValidation() {
@ -340,11 +340,11 @@ public class ServerPreferencesController extends PreferencesDetailController {
} }
} }
private Glyph getGlyph(FontAwesome5.Glyph glyphName, Color color) { private Glyph getGlyph(FontAwesome5.Glyph glyphName, String styleClass) {
Glyph glyph = new Glyph(FontAwesome5.FONT_NAME, glyphName); Glyph glyph = new Glyph(FontAwesome5.FONT_NAME, glyphName);
glyph.setFontSize(13); glyph.setFontSize(12);
if(color != null) { if(styleClass != null) {
glyph.setColor(color); glyph.getStyleClass().add(styleClass);
} }
return glyph; return glyph;

View file

@ -18,7 +18,7 @@ public class AdvancedDialog extends Dialog<Void> {
try { try {
FXMLLoader advancedLoader = new FXMLLoader(AppController.class.getResource("wallet/advanced.fxml")); FXMLLoader advancedLoader = new FXMLLoader(AppController.class.getResource("wallet/advanced.fxml"));
dialogPane.setContent(Borders.wrap(advancedLoader.load()).lineBorder().outerPadding(0).innerPadding(0).buildAll()); dialogPane.setContent(Borders.wrap(advancedLoader.load()).emptyBorder().buildAll());
AdvancedController settingsAdvancedController = advancedLoader.getController(); AdvancedController settingsAdvancedController = advancedLoader.getController();
settingsAdvancedController.initializeView(wallet); settingsAdvancedController.initializeView(wallet);

View file

@ -183,7 +183,7 @@ public class KeystoreController extends WalletFormController implements Initiali
validationSupport.registerValidator(fingerprint, Validator.combine( validationSupport.registerValidator(fingerprint, Validator.combine(
Validator.createEmptyValidator("Master fingerprint is required"), Validator.createEmptyValidator("Master fingerprint is required"),
(Control c, String newValue) -> ValidationResult.fromErrorIf( c, "Master fingerprint is invalid", (newValue.length() != 8 || !Utils.isHex(newValue))) (Control c, String newValue) -> ValidationResult.fromErrorIf( c, "Master fingerprint is invalid", (newValue == null || newValue.length() != 8 || !Utils.isHex(newValue)))
)); ));
validationSupport.setValidationDecorator(new StyleClassValidationDecoration()); validationSupport.setValidationDecorator(new StyleClassValidationDecoration());

View file

@ -114,7 +114,7 @@ public class ReceiveController extends WalletFormController implements Initializ
scriptPubKeyArea.appendScript(nodeEntry.getOutputScript(), null, null); scriptPubKeyArea.appendScript(nodeEntry.getOutputScript(), null, null);
outputDescriptor.clear(); outputDescriptor.clear();
outputDescriptor.appendText(nodeEntry.getOutputDescriptor()); outputDescriptor.append(nodeEntry.getOutputDescriptor(), "descriptor-text");
updateDisplayAddress(AppController.getDevices()); updateDisplayAddress(AppController.getDevices());
} }

View file

@ -88,7 +88,7 @@ public class SettingsController extends WalletFormController implements Initiali
@Override @Override
public void initializeView() { public void initializeView() {
keystoreTabs = new TabPane(); keystoreTabs = new TabPane();
keystoreTabsPane.getChildren().add(Borders.wrap(keystoreTabs).etchedBorder().outerPadding(10, 5, 0 ,0).innerPadding(0).raised().buildAll()); keystoreTabsPane.getChildren().add(keystoreTabs);
policyType.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, policyType) -> { policyType.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, policyType) -> {
walletForm.getWallet().setPolicyType(policyType); walletForm.getWallet().setPolicyType(policyType);

View file

@ -7,6 +7,7 @@
<?import javafx.scene.shape.Rectangle?> <?import javafx.scene.shape.Rectangle?>
<?import com.sparrowwallet.sparrow.control.UnlabeledToggleSwitch?> <?import com.sparrowwallet.sparrow.control.UnlabeledToggleSwitch?>
<?import com.sparrowwallet.drongo.BitcoinUnit?> <?import com.sparrowwallet.drongo.BitcoinUnit?>
<?import com.sparrowwallet.sparrow.Theme?>
<VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="200" minWidth="350" prefHeight="770.0" prefWidth="1000.0" fx:controller="com.sparrowwallet.sparrow.AppController" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1"> <VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="200" minWidth="350" prefHeight="770.0" prefWidth="1000.0" fx:controller="com.sparrowwallet.sparrow.AppController" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1">
<children> <children>
@ -39,6 +40,9 @@
<fx:define> <fx:define>
<ToggleGroup fx:id="bitcoinUnit"/> <ToggleGroup fx:id="bitcoinUnit"/>
</fx:define> </fx:define>
<fx:define>
<ToggleGroup fx:id="theme"/>
</fx:define>
<Menu mnemonicParsing="false" text="View"> <Menu mnemonicParsing="false" text="View">
<items> <items>
<Menu mnemonicParsing="false" text="Bitcoin Unit"> <Menu mnemonicParsing="false" text="Bitcoin Unit">
@ -60,6 +64,20 @@
</RadioMenuItem> </RadioMenuItem>
</items> </items>
</Menu> </Menu>
<Menu mnemonicParsing="false" text="Theme">
<items>
<RadioMenuItem mnemonicParsing="false" text="Light" toggleGroup="$theme" onAction="#setTheme">
<userData>
<Theme fx:constant="LIGHT" />
</userData>
</RadioMenuItem>
<RadioMenuItem mnemonicParsing="false" text="Dark" toggleGroup="$theme" onAction="#setTheme">
<userData>
<Theme fx:constant="DARK" />
</userData>
</RadioMenuItem>
</items>
</Menu>
<CheckMenuItem fx:id="showTxHex" mnemonicParsing="false" text="Show Transaction Hex" onAction="#showTxHex"/> <CheckMenuItem fx:id="showTxHex" mnemonicParsing="false" text="Show Transaction Hex" onAction="#showTxHex"/>
</items> </items>
</Menu> </Menu>

View file

@ -0,0 +1,146 @@
.root {
-fx-accent: #1e88cf;
-fx-focus-color: -fx-accent;
-fx-base: #373e43;
-fx-control-inner-background: derive(-fx-base, 35%);
-fx-control-inner-background-alt: -fx-control-inner-background ;
}
.label{
-fx-text-fill: lightgray;
}
.text-field {
-fx-prompt-text-fill: gray;
}
.titulo{
-fx-font-weight: bold;
-fx-font-size: 18px;
}
.button{
-fx-focus-traversable: false;
}
.button:hover{
-fx-text-fill: white;
}
.separator *.line {
-fx-background-color: #3C3C3C;
-fx-border-style: solid;
-fx-border-width: 1px;
}
.scroll-bar{
-fx-background-color: derive(-fx-base,45%)
}
.button:default {
-fx-base: -fx-accent ;
}
.table-view{
/*-fx-background-color: derive(-fx-base, 10%);*/
-fx-selection-bar-non-focused: derive(-fx-base, 50%);
}
.table-view .column-header .label{
-fx-alignment: CENTER_LEFT;
-fx-font-weight: none;
}
.list-cell:even,
.list-cell:odd,
.table-row-cell:even,
.table-row-cell:odd{
-fx-control-inner-background: derive(-fx-base, 15%);
}
.list-cell:empty,
.table-row-cell:empty {
-fx-background-color: transparent;
}
.list-cell,
.table-row-cell{
-fx-border-color: transparent;
-fx-table-cell-border-color:transparent;
}
.status-bar {
-fx-background-color: black, -fx-body-color;
}
.chart .default-color0.chart-series-line {
-fx-stroke: rgba(125, 128, 139, 0.6);
}
.chart .chart-bar {
-fx-bar-fill: rgba(135, 138, 149, 0.5);
}
#inputsPie .default-color0.chart-pie {
-fx-pie-color: #e06c75;
}
#outputsPie .default-color3.chart-pie {
-fx-pie-color: #e06c75
}
.root .etched-raised-border {
-fx-border-color: #ffffff, #000000;
-fx-border-style: solid, solid;
-fx-border-width: 1px, 1px;
}
.root .line-border {
-fx-border-color: #000000;
-fx-border-style: solid;
-fx-border-width: 1px;
}
.root .duplicate-warning {
-fx-text-fill: #e06c75;
}
.root .unused-check {
-fx-text-fill: #98c379;
}
.root .script-nest { -fx-fill: #565c64 }
.root .script-opcode { -fx-fill: #56b6c2 }
.root .script-hash { -fx-fill: #d19a66 }
.root .script-signature { -fx-fill: #98c379 }
.root .script-pubkey { -fx-fill: #c678dd }
.root .script-redeem { -fx-fill: #e06c75 }
.root .script-other { -fx-fill: #b6bdca }
.root #txhex {
color-0: #e06c75;
color-1: #e5c07b;
color-2: #d19a66;
color-3: #98c379;
color-4: #61afef;
color-5: #56b6c2;
color-6: #c678dd;
color-7: #be5046;
color-8: #000000;
color-grey: #565c64;
}
.root .success {
-fx-text-fill: #98c379;
}
.root .failure {
-fx-text-fill: #e06c75;
}
.root .titled-description-pane > .title {
-fx-background-color: derive(-fx-base, 10%);
-fx-padding: 0;
-fx-border-color: derive(-fx-base, -2%);
/*-fx-border-width: 1;*/
}

View file

@ -1,3 +1,3 @@
.descriptor-text { -fx-fill: #000000 } .descriptor-text { -fx-fill: -fx-text-inner-color }
.descriptor-error { -fx-fill: #ca1243 } .descriptor-error { -fx-fill: #ca1243 }

View file

@ -127,3 +127,27 @@
.default-button { .default-button {
-fx-base: -fx-default-button; -fx-base: -fx-default-button;
} }
.etched-raised-border {
-fx-border-color: #ffffff, #a9a9a9;
-fx-border-style: solid, solid;
-fx-border-width: 1px, 1px;
}
.line-border {
-fx-border-color: #a9a9a9;
-fx-border-style: solid;
-fx-border-width: 1px;
}
.success {
-fx-text-fill: rgb(80, 161, 79);
}
.failure {
-fx-text-fill: rgb(202, 18, 67);
}
.root .header-panel {
-fx-background-color: -fx-box-border, derive(-fx-background, 10%);
}

View file

@ -9,7 +9,7 @@
<?import com.sparrowwallet.drongo.wallet.KeystoreSource?> <?import com.sparrowwallet.drongo.wallet.KeystoreSource?>
<?import javafx.geometry.Insets?> <?import javafx.geometry.Insets?>
<BorderPane stylesheets="@../general.css, @keystoreimport.css" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.sparrowwallet.sparrow.keystoreimport.KeystoreImportController"> <BorderPane stylesheets="@../general.css, @keystoreimport.css" styleClass="line-border" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.sparrowwallet.sparrow.keystoreimport.KeystoreImportController">
<padding> <padding>
<Insets top="0" left="0" right="0" bottom="0" /> <Insets top="0" left="0" right="0" bottom="0" />
</padding> </padding>

View file

@ -9,7 +9,7 @@
<?import javafx.geometry.Insets?> <?import javafx.geometry.Insets?>
<?import com.sparrowwallet.sparrow.preferences.PreferenceGroup?> <?import com.sparrowwallet.sparrow.preferences.PreferenceGroup?>
<?import org.controlsfx.glyphfont.Glyph?> <?import org.controlsfx.glyphfont.Glyph?>
<BorderPane stylesheets="@../general.css, @preferences.css" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.sparrowwallet.sparrow.preferences.PreferencesController"> <BorderPane stylesheets="@../general.css, @preferences.css" styleClass="line-border" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.sparrowwallet.sparrow.preferences.PreferencesController">
<left> <left>
<VBox styleClass="list-menu"> <VBox styleClass="list-menu">
<ToggleButton VBox.vgrow="ALWAYS" text="General" wrapText="true" textAlignment="CENTER" contentDisplay="TOP" styleClass="list-item" maxHeight="Infinity" toggleGroup="$preferencesMenu"> <ToggleButton VBox.vgrow="ALWAYS" text="General" wrapText="true" textAlignment="CENTER" contentDisplay="TOP" styleClass="list-item" maxHeight="Infinity" toggleGroup="$preferencesMenu">

View file

@ -31,6 +31,7 @@
-fx-font-size: 13px; -fx-font-size: 13px;
-fx-font-family: 'Roboto Mono'; -fx-font-family: 'Roboto Mono';
-fx-padding: 4; -fx-padding: 4;
-fx-fill: -fx-text-inner-color;
} }
.virtualized-scroll-pane { .virtualized-scroll-pane {

View file

@ -1,24 +1,24 @@
.version { -fx-fill: #986801 } .version { -fx-fill: color-7 }
.segwit-marker { -fx-fill: #000000 } .segwit-marker { -fx-fill: color-8 }
.segwit-flag { -fx-fill: #4078f2 } .segwit-flag { -fx-fill: color-5 }
.num-inputs { -fx-fill: #ca1243 } .num-inputs { -fx-fill: color-0 }
.input-hash { -fx-fill: #0184bc } .input-hash { -fx-fill: color-4 }
.input-index { -fx-fill: #0184bc } .input-index { -fx-fill: color-4 }
.input-sigscript-length { -fx-fill: #0184bc } .input-sigscript-length { -fx-fill: color-4 }
.input-sigscript { -fx-fill: #0184bc } .input-sigscript { -fx-fill: color-4 }
.input-sequence { -fx-fill: #0184bc } .input-sequence { -fx-fill: color-4 }
.num-outputs { -fx-fill: #ca1243 } .num-outputs { -fx-fill: color-0 }
.output-value { -fx-fill: #50a14f } .output-value { -fx-fill: color-3 }
.output-pubkeyscript-length { -fx-fill: #50a14f } .output-pubkeyscript-length { -fx-fill: color-3 }
.output-pubkeyscript { -fx-fill: #50a14f } .output-pubkeyscript { -fx-fill: color-3 }
.witness-count { -fx-fill: #ca1243 } .witness-count { -fx-fill: color-0 }
.witness-length { -fx-fill: #a626a4 } .witness-length { -fx-fill: color-6 }
.witness-data { -fx-fill: #a626a4 } .witness-data { -fx-fill: color-6 }
.locktime { -fx-fill: #986801 } .locktime { -fx-fill: color-7 }
#locktimeCurrentHeight { #locktimeCurrentHeight {
-fx-padding: 0 0 0 12; -fx-padding: 0 0 0 12;

View file

@ -1,27 +1,27 @@
.version { -fx-fill: #e5e5e6 } .version { -fx-fill: color-grey }
.segwit-marker { -fx-fill: #e5e5e6 } .segwit-marker { -fx-fill: color-grey }
.segwit-flag { -fx-fill: #e5e5e6 } .segwit-flag { -fx-fill: color-grey }
.num-inputs { -fx-fill: #e5e5e6 } .num-inputs { -fx-fill: color-grey }
.input-other { -fx-fill: #e5e5e6 } .input-other { -fx-fill: color-grey }
.input-hash { -fx-fill: #0184bc } .input-hash { -fx-fill: color-4 }
.input-index { -fx-fill: #000000 } .input-index { -fx-fill: color-8 }
.input-sigscript-length { -fx-fill: #a626a4 } .input-sigscript-length { -fx-fill: color-6 }
.input-sigscript { -fx-fill: #50a14f } .input-sigscript { -fx-fill: color-3 }
.input-sequence { -fx-fill: #986801 } .input-sequence { -fx-fill: color-7 }
.num-outputs { -fx-fill: #e5e5e6 } .num-outputs { -fx-fill: color-grey }
.output-value { -fx-fill: #e5e5e6 } .output-value { -fx-fill: color-grey }
.output-pubkeyscript-length { -fx-fill: #e5e5e6 } .output-pubkeyscript-length { -fx-fill: color-grey }
.output-pubkeyscript { -fx-fill: #e5e5e6 } .output-pubkeyscript { -fx-fill: color-grey }
.witness-other { -fx-fill: #e5e5e6 } .witness-other { -fx-fill: color-grey }
.witness-count { -fx-fill: #ca1243 } .witness-count { -fx-fill: color-0 }
.witness-length { -fx-fill: #986801 } .witness-length { -fx-fill: color-7 }
.witness-data { -fx-fill: #a626a4 } .witness-data { -fx-fill: color-6 }
.locktime { -fx-fill: #e5e5e6 } .locktime { -fx-fill: color-grey }

View file

@ -1,24 +1,24 @@
.version { -fx-fill: #e5e5e6 } .version { -fx-fill: color-grey }
.segwit-marker { -fx-fill: #e5e5e6 } .segwit-marker { -fx-fill: color-grey }
.segwit-flag { -fx-fill: #e5e5e6 } .segwit-flag { -fx-fill: color-grey }
.num-inputs { -fx-fill: #ca1243 } .num-inputs { -fx-fill: color-0 }
.input-hash { -fx-fill: #0184bc } .input-hash { -fx-fill: color-4 }
.input-index { -fx-fill: #000000 } .input-index { -fx-fill: color-8 }
.input-sigscript-length { -fx-fill: #a626a4 } .input-sigscript-length { -fx-fill: color-6 }
.input-sigscript { -fx-fill: #50a14f } .input-sigscript { -fx-fill: color-3 }
.input-sequence { -fx-fill: #986801 } .input-sequence { -fx-fill: color-7 }
.num-outputs { -fx-fill: #e5e5e6 } .num-outputs { -fx-fill: color-grey }
.output-value { -fx-fill: #e5e5e6 } .output-value { -fx-fill: color-grey }
.output-pubkeyscript-length { -fx-fill: #e5e5e6 } .output-pubkeyscript-length { -fx-fill: color-grey }
.output-pubkeyscript { -fx-fill: #e5e5e6 } .output-pubkeyscript { -fx-fill: color-grey }
.witness-count { -fx-fill: #ca1243 } .witness-count { -fx-fill: color-0 }
.witness-length { -fx-fill: #986801 } .witness-length { -fx-fill: color-7 }
.witness-data { -fx-fill: #a626a4 } .witness-data { -fx-fill: color-6 }
.locktime { -fx-fill: #e5e5e6 } .locktime { -fx-fill: color-grey }
.chart-legend-item { .chart-legend-item {
-fx-font-size: 13px; -fx-font-size: 13px;

View file

@ -1,26 +1,26 @@
.version { -fx-fill: #e5e5e6 } .version { -fx-fill: color-grey }
.segwit-marker { -fx-fill: #e5e5e6 } .segwit-marker { -fx-fill: color-grey }
.segwit-flag { -fx-fill: #e5e5e6 } .segwit-flag { -fx-fill: color-grey }
.num-inputs { -fx-fill: #e5e5e6 } .num-inputs { -fx-fill: color-grey }
.input-hash { -fx-fill: #e5e5e6 } .input-hash { -fx-fill: color-grey }
.input-index { -fx-fill: #e5e5e6 } .input-index { -fx-fill: color-grey }
.input-sigscript-length { -fx-fill: #e5e5e6 } .input-sigscript-length { -fx-fill: color-grey }
.input-sigscript { -fx-fill: #e5e5e6 } .input-sigscript { -fx-fill: color-grey }
.input-sequence { -fx-fill: #e5e5e6 } .input-sequence { -fx-fill: color-grey }
.num-outputs { -fx-fill: #e5e5e6 } .num-outputs { -fx-fill: color-grey }
.output-other { -fx-fill: #e5e5e6 } .output-other { -fx-fill: color-grey }
.output-value { -fx-fill: #000000 } .output-value { -fx-fill: color-8 }
.output-pubkeyscript-length { -fx-fill: #a626a4 } .output-pubkeyscript-length { -fx-fill: color-6 }
.output-pubkeyscript { -fx-fill: #50a14f } .output-pubkeyscript { -fx-fill: color-3 }
.witness-count { -fx-fill: #e5e5e6 } .witness-count { -fx-fill: color-grey }
.witness-length { -fx-fill: #e5e5e6 } .witness-length { -fx-fill: color-grey }
.witness-data { -fx-fill: #e5e5e6 } .witness-data { -fx-fill: color-grey }
.locktime { -fx-fill: #e5e5e6 } .locktime { -fx-fill: color-grey }
#spentField .input-container { #spentField .input-container {
-fx-alignment: center-left; -fx-alignment: center-left;

View file

@ -1,24 +1,24 @@
.version { -fx-fill: #e5e5e6 } .version { -fx-fill: color-grey }
.segwit-marker { -fx-fill: #e5e5e6 } .segwit-marker { -fx-fill: color-grey }
.segwit-flag { -fx-fill: #e5e5e6 } .segwit-flag { -fx-fill: color-grey }
.num-inputs { -fx-fill: #e5e5e6 } .num-inputs { -fx-fill: color-grey }
.input-hash { -fx-fill: #e5e5e6 } .input-hash { -fx-fill: color-grey }
.input-index { -fx-fill: #e5e5e6 } .input-index { -fx-fill: color-grey }
.input-sigscript-length { -fx-fill: #e5e5e6 } .input-sigscript-length { -fx-fill: color-grey }
.input-sigscript { -fx-fill: #e5e5e6 } .input-sigscript { -fx-fill: color-grey }
.input-sequence { -fx-fill: #e5e5e6 } .input-sequence { -fx-fill: color-grey }
.num-outputs { -fx-fill: #ca1243 } .num-outputs { -fx-fill: color-0 }
.output-value { -fx-fill: #000000 } .output-value { -fx-fill: color-8 }
.output-pubkeyscript-length { -fx-fill: #a626a4 } .output-pubkeyscript-length { -fx-fill: color-6 }
.output-pubkeyscript { -fx-fill: #50a14f } .output-pubkeyscript { -fx-fill: color-3 }
.witness-count { -fx-fill: #e5e5e6 } .witness-count { -fx-fill: color-grey }
.witness-length { -fx-fill: #e5e5e6 } .witness-length { -fx-fill: color-grey }
.witness-data { -fx-fill: #e5e5e6 } .witness-data { -fx-fill: color-grey }
.locktime { -fx-fill: #e5e5e6 } .locktime { -fx-fill: color-grey }
.chart-legend-item { .chart-legend-item {
-fx-font-size: 13; -fx-font-size: 13;

View file

@ -1,8 +1,18 @@
#txhex { #txhex {
-fx-background-color: #ffffff; -fx-background-color: -fx-control-inner-background;
-fx-font-size: 13px; -fx-font-size: 13px;
-fx-font-family: 'Roboto Mono'; -fx-font-family: 'Roboto Mono';
-fx-padding: 2; -fx-padding: 2;
color-0: #ca1243;
color-1: #d75f00;
color-2: #c18401;
color-3: #50a14f;
color-4: #0184bc;
color-5: #4078f2;
color-6: #a626a4;
color-7: #986801;
color-8: #000000;
color-grey: #e5e5e6;
} }
.tx-pane { .tx-pane {

View file

@ -11,7 +11,7 @@
<?import com.sparrowwallet.sparrow.control.HelpLabel?> <?import com.sparrowwallet.sparrow.control.HelpLabel?>
<?import javafx.geometry.Insets?> <?import javafx.geometry.Insets?>
<BorderPane stylesheets="@../general.css" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.sparrowwallet.sparrow.wallet.AdvancedController"> <BorderPane stylesheets="@../general.css" styleClass="line-border" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="com.sparrowwallet.sparrow.wallet.AdvancedController">
<center> <center>
<GridPane hgap="10.0" vgap="10.0"> <GridPane hgap="10.0" vgap="10.0">
<padding> <padding>

View file

@ -18,7 +18,7 @@
<?import com.sparrowwallet.sparrow.control.CopyableTextField?> <?import com.sparrowwallet.sparrow.control.CopyableTextField?>
<?import com.sparrowwallet.sparrow.control.ScriptArea?> <?import com.sparrowwallet.sparrow.control.ScriptArea?>
<BorderPane stylesheets="@receive.css, @wallet.css, @../script.css, @../general.css" styleClass="wallet-pane" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.sparrowwallet.sparrow.wallet.ReceiveController"> <BorderPane stylesheets="@receive.css, @wallet.css, @../script.css, @../descriptor.css, @../general.css" styleClass="wallet-pane" xmlns="http://javafx.com/javafx/10.0.2-internal" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.sparrowwallet.sparrow.wallet.ReceiveController">
<center> <center>
<GridPane styleClass="receive-form" hgap="10.0" vgap="10.0"> <GridPane styleClass="receive-form" hgap="10.0" vgap="10.0">

View file

@ -10,4 +10,9 @@
-fx-alignment: center-left; -fx-alignment: center-left;
} }
.keystore-padding-border {
-fx-border-color: #00000000;
-fx-border-style: none;
-fx-border-width: 10 5 0 0;
}

View file

@ -85,7 +85,11 @@
<Form GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.rowIndex="2"> <Form GridPane.columnIndex="0" GridPane.columnSpan="2" GridPane.rowIndex="2">
<Fieldset inputGrow="SOMETIMES" text="Keystores"> <Fieldset inputGrow="SOMETIMES" text="Keystores">
<StackPane fx:id="keystoreTabsPane" /> <StackPane styleClass="keystore-padding-border">
<StackPane styleClass="etched-raised-border">
<StackPane fx:id="keystoreTabsPane"/>
</StackPane>
</StackPane>
</Fieldset> </Fieldset>
</Form> </Form>
</GridPane> </GridPane>

View file

@ -35,33 +35,29 @@
} }
.hashindex-row { .hashindex-row {
-fx-text-fill: #696c77; -fx-opacity: 0.7;
} }
.hashindex-row.spent { .hashindex-row.spent {
-fx-text-fill: #a0a1a7; -fx-opacity: 0.4;
} }
.transaction-row.confirming { .transaction-row.confirming {
-fx-text-fill: #696c77; -fx-opacity: 0.7;
} }
.utxo-row.unspendable { .utxo-row.unspendable {
-fx-text-fill: #a0a1a7; -fx-opacity: 0.4;
} }
.tree-table-row-cell:selected .utxo-row.unspendable { .tree-table-row-cell:selected .utxo-row.unspendable {
-fx-text-fill: #696c77; -fx-opacity: 0.7;
} }
.tree-table-view:focused:row-selection .tree-table-row-cell:selected .utxo-row.unspendable { .tree-table-view:focused:row-selection .tree-table-row-cell:selected .utxo-row.unspendable {
-fx-text-fill: derive(white, -15%); -fx-text-fill: derive(white, -15%);
} }
.tree-table-row-cell:selected .hashindex-row, .tree-table-row-cell:selected .transaction-row {
-fx-text-fill: white;
}
.label-cell .text-field { .label-cell .text-field {
-fx-padding: 0; -fx-padding: 0;
} }