| * Real-time document statistics (with CJK word separation) | ||
| * Diagrams: Mermaid, GraphViz, UML, sequence, timing, and more | ||
| -* Dark, custom, and responsive themes | ||
| +* Dark, custom, and responsive user interface skins | ||
| * Integrated file manager | ||
| * Interactive document outline | ||
| Read the [detailed documentation](docs/README.md) for using the application. | ||
| -### Themes | ||
| +### Skins | ||
| -Read the [themes documentation](docs/themes.md) to learn about themes. | ||
| +Read the [skins documentation](docs/skins.md) to learn about how to change | ||
| +the user interface appearance. | ||
| ## Screenshots | ||
| * [r.md](r.md) -- Call R functions within R Markdown documents | ||
| * [svg.md](svg.md) -- Fix known issues with displaying SVG files | ||
| -* [themes.md](themes.md) -- Describes how to add and customize themes | ||
| +* [skins.md](skins.md) -- Describes how to customize the user interface | ||
| * [credits.md](credits.md) -- Thanks to authors of contributing projects | ||
| * [samples](samples) -- Contains example documents |
| +# Skins | ||
| + | ||
| +The application provides bundled skins and the ability to add custom | ||
| +skins. This document describes the interplay between bundled skins | ||
| +and building your own look and feel. | ||
| + | ||
| +A skin is a set of styles, similar to cascading style sheet classes, | ||
| +that configures the user interface colours, fonts, spacing, highlights, | ||
| +drop-shadows, gradients, and more. | ||
| + | ||
| +For more information on CSS, see the [W3C CSS tutorial](https://www.w3.org/Style/Examples/011/firstcss). | ||
| + | ||
| +# Order | ||
| + | ||
| +The order that stylesheets are applied matters so that stylesheets can | ||
| +override styles defined previously. The application's user interface | ||
| +is made up of the following stylesheets, applied in the order listed: | ||
| + | ||
| +* **scene.css** --- Defines toolbar styling. | ||
| +* **markdown.css** --- Defines text editor styling. | ||
| +* **skins/skin_name.css** --- Bundled skin selected in preferences. | ||
| +* **custom.css** --- User-defined file set in preferences. | ||
| + | ||
| +# Customization | ||
| + | ||
| +Create a custom skin as follows: | ||
| + | ||
| +1. Start the application. | ||
| +1. Click **File → New** to create a new file. | ||
| +1. Click **File → Save As** to rename the file. | ||
| +1. Save the file as `custom.css`. | ||
| +1. Change the content to the following: | ||
| +``` css | ||
| +.root { | ||
| + -fx-base: rgb( 30, 30, 30 ); | ||
| + -fx-background: -fx-base; | ||
| +} | ||
| +``` | ||
| + | ||
| +Next, apply the skin as follows: | ||
| + | ||
| +1. Click **Edit → Preferences** to open the preferences dialog. | ||
| +1. Click **Skins** to view the available options. | ||
| +1. Click **Browse** to select a custom file. | ||
| +1. Browse to and select `custom.css`, created previously. | ||
| +1. Click **Open**. | ||
| +1. Click **Apply**. | ||
| + | ||
| +The user interface immediately changes to a dark mode. Continue: | ||
| + | ||
| +1. Click **OK** to close the dialog. | ||
| +1. Change the **rgb** numbers in **custom.css** from `30` to `60`. | ||
| +1. Click **File → Save** to save the CSS file. | ||
| + | ||
| +The user interface immediately changes colour. | ||
| + | ||
| +# Classes | ||
| + | ||
| +When creating your own skin, there many classes that can be styled. The | ||
| +previous section showed how to set up a rudimentary skin. Instead, start | ||
| +with a template that already has a number of classes defined so that you | ||
| +can tweak them to your taste. Accomplish this as follows: | ||
| + | ||
| +1. Visit the [skin](https://github.com/DaveJarvis/keenwrite/tree/master/src/main/resources/com/keenwrite/skins) repository directory | ||
| +1. Click one of the files (e.g., `haunted_grey.css`). | ||
| +1. Click **Raw**. | ||
| +1. Copy the entire text. | ||
| +1. Return to `custom.css`. | ||
| +1. Delete the contents. | ||
| +1. Paste the copied text. | ||
| +1. Save the file. | ||
| + | ||
| +To see how the CSS styles are applied to the text editor, open | ||
| +[markdown.css](https://github.com/DaveJarvis/keenwrite/blob/master/src/main/resources/com/keenwrite/editor/markdown.css), which is also in the repository. | ||
| + | ||
| +# Modena | ||
| + | ||
| +The basic look used by the application is _Modena Light_. Typically we | ||
| +only need to override a few classes to completely change the application's | ||
| +look and feel. For a full listing of available styles see the OpenJDK's | ||
| +[Modena CSS file](https://github.com/openjdk/jfx/blob/master/modules/javafx.controls/src/main/resources/com/sun/javafx/scene/control/skin/modena/modena.css). | ||
| + | ||
| +# JavaFX CSS | ||
| + | ||
| +The [Java CSS Reference Guide](https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/doc-files/cssref.html) is exhaustive. In addition to showing many | ||
| +differences between JavaFX CSS and W3C CSS, the guide introduces numerous | ||
| +helpful functions for manipulating colours and gradients using existing | ||
| +colour definitions. | ||
| + | ||
| +# RichTextFX | ||
| + | ||
| +The application uses RichTextFX to render the text editor. Styling various | ||
| +text editor classes can require using the prefix `-rtfx` instead of the | ||
| +regular JavaFX `-fx`. | ||
| + | ||
| +# Submit | ||
| + | ||
| +If you have a look that you'd like to contribute to the project, do pass | ||
| +it along. Either open a new issue in the [issue tracker](https://github.com/DaveJarvis/keenwrite/issues) that contains the CSS file or submit a pull request. | ||
| + | ||
| -# Themes | ||
| - | ||
| -The application provides bundled themes and the ability to add custom | ||
| -themes. This document describes the interplay between bundled themes | ||
| -and building your own theme. | ||
| - | ||
| -A theme is a set of styles, similar to cascading style sheet classes, | ||
| -that instruct the user interface on how to apply colours, fonts, spacing, | ||
| -highlights, drop-shadows, gradients, and so forth. | ||
| - | ||
| -For more information on CSS, see the [W3C CSS tutorial](https://www.w3.org/Style/Examples/011/firstcss). | ||
| - | ||
| -# Order | ||
| - | ||
| -The order that stylesheets are applied matters so that stylesheets can | ||
| -override styles defined previously. The application's user interface | ||
| -is made up of the following stylesheets, applied in the order listed: | ||
| - | ||
| -* **scene.css** --- Defines toolbar styling. | ||
| -* **markdown.css** --- Defines text editor styling. | ||
| -* **themes/theme_name.css** --- Bundled theme selected in preferences. | ||
| -* **custom.css** --- User-defined file set in preferences. | ||
| - | ||
| -# Customization | ||
| - | ||
| -Create a custom theme as follows: | ||
| - | ||
| -1. Start the application. | ||
| -1. Click **File → New** to create a new file. | ||
| -1. Click **File → Save As** to rename the file. | ||
| -1. Save the file as `custom.css`. | ||
| -1. Change the content to the following: | ||
| -``` css | ||
| -.root { | ||
| - -fx-base: rgb( 30, 30, 30 ); | ||
| - -fx-background: -fx-base; | ||
| -} | ||
| -``` | ||
| - | ||
| -Next, apply the theme as follows: | ||
| - | ||
| -1. Click **Edit → Preferences** to open the preferences dialog. | ||
| -1. Click **Themes** to view the theme options. | ||
| -1. Click **Browse** to select a custom theme file. | ||
| -1. Browse to and select `custom.css`, created previously. | ||
| -1. Click **Open**. | ||
| -1. Click **Apply**. | ||
| - | ||
| -The user interface immediately changes to a dark mode. Continue: | ||
| - | ||
| -1. Click **OK** to close the dialog. | ||
| -1. Change the **rgb** numbers in **custom.css** from `30` to `60`. | ||
| -1. Click **File → Save** to save the CSS file. | ||
| - | ||
| -The user interface immediately changes colour. | ||
| - | ||
| -# Classes | ||
| - | ||
| -When creating your own theme, there many classes that can be styled. The | ||
| -previous section showed how to set up a rudimentary theme. Instead, start | ||
| -with a template that already has a number of classes defined so that you | ||
| -can tweak them to your taste. Accomplish this as follows: | ||
| - | ||
| -1. Visit the [themes](https://github.com/DaveJarvis/keenwrite/tree/master/src/main/resources/com/keenwrite/themes) repository directory | ||
| -1. Click one of the themes (e.g., `haunted_grey.css`). | ||
| -1. Click **Raw**. | ||
| -1. Copy the entire text. | ||
| -1. Return to `custom.css`. | ||
| -1. Delete the contents. | ||
| -1. Paste the copied text. | ||
| -1. Save the file. | ||
| - | ||
| -To see how the CSS styles are applied to the text editor, open | ||
| -[markdown.css](https://github.com/DaveJarvis/keenwrite/blob/master/src/main/resources/com/keenwrite/editor/markdown.css), which is also in the repository. | ||
| - | ||
| -# Modena | ||
| - | ||
| -The basic theme used by the application is _Modena Light_. Typically we | ||
| -only need to override a few classes to completely change the application's | ||
| -look and feel. For a full listing of available styles see the OpenJDK's | ||
| -[Modena CSS file](https://github.com/openjdk/jfx/blob/master/modules/javafx.controls/src/main/resources/com/sun/javafx/scene/control/skin/modena/modena.css). | ||
| - | ||
| -# JavaFX CSS | ||
| - | ||
| -The [Java CSS Reference Guide](https://openjfx.io/javadoc/11/javafx.graphics/javafx/scene/doc-files/cssref.html) is exhaustive. In addition to showing many | ||
| -differences between JavaFX CSS and W3C CSS, the guide introduces numerous | ||
| -helpful functions for manipulating colours and gradients using existing | ||
| -colour definitions. | ||
| - | ||
| -# RichTextFX | ||
| - | ||
| -The application uses RichTextFX to render the text editor. Styling various | ||
| -text editor classes can require using the prefix `-rtfx` instead of the | ||
| -regular JavaFX `-fx`. | ||
| - | ||
| -# Submit | ||
| - | ||
| -Send in your themes! If you have a theme you'd like to contribute to the | ||
| -project, or improvements to an existing theme, do pass it along. Either open a new issue in the [issue tracker](https://github.com/DaveJarvis/keenwrite/issues) that contains the CSS file or submit a pull request. | ||
| - | ||
| public static final String STYLESHEET_APPLICATION_BASE = | ||
| get( "file.stylesheet.application.base" ); | ||
| - public static final String STYLESHEET_APPLICATION_THEME = | ||
| - get( "file.stylesheet.application.theme" ); | ||
| + public static final String STYLESHEET_APPLICATION_SKIN = | ||
| + get( "file.stylesheet.application.skin" ); | ||
| public static final String STYLESHEET_MARKDOWN = | ||
| get( "file.stylesheet.markdown" ); | ||
| /** | ||
| - * Default CSS theme to apply (resolves to a minimal implementation). | ||
| + * Default CSS to apply (resolves to a minimal implementation). | ||
| */ | ||
| - public static final String THEME_DEFAULT = "Modena Light"; | ||
| + public static final String SKIN_DEFAULT = "Modena Light"; | ||
| /** | ||
| - * Custom CSS theme to apply. | ||
| + * Custom CSS to apply. | ||
| */ | ||
| - public static final File THEME_CUSTOM_DEFAULT = null; | ||
| + public static final File SKIN_CUSTOM_DEFAULT = null; | ||
| /** | ||
| import static com.keenwrite.events.ScrollLockEvent.fireScrollLockEvent; | ||
| import static com.keenwrite.events.StatusEvent.clue; | ||
| -import static com.keenwrite.preferences.ThemeProperty.toFilename; | ||
| -import static com.keenwrite.preferences.WorkspaceKeys.KEY_UI_THEME_CUSTOM; | ||
| -import static com.keenwrite.preferences.WorkspaceKeys.KEY_UI_THEME_SELECTION; | ||
| +import static com.keenwrite.preferences.SkinProperty.toFilename; | ||
| +import static com.keenwrite.preferences.WorkspaceKeys.KEY_UI_SKIN_CUSTOM; | ||
| +import static com.keenwrite.preferences.WorkspaceKeys.KEY_UI_SKIN_SELECTION; | ||
| import static com.keenwrite.ui.actions.ApplicationBars.*; | ||
| import static javafx.application.Platform.runLater; | ||
| private void initStylesheets( final Scene scene, final Workspace workspace ) { | ||
| - final var internal = workspace.themeProperty( KEY_UI_THEME_SELECTION ); | ||
| - final var external = workspace.fileProperty( KEY_UI_THEME_CUSTOM ); | ||
| - final var inTheme = internal.get(); | ||
| - final var exTheme = external.get(); | ||
| - applyStylesheets( scene, inTheme, exTheme ); | ||
| + final var internal = workspace.skinProperty( KEY_UI_SKIN_SELECTION ); | ||
| + final var external = workspace.fileProperty( KEY_UI_SKIN_CUSTOM ); | ||
| + final var inSkin = internal.get(); | ||
| + final var exSkin = external.get(); | ||
| + applyStylesheets( scene, inSkin, exSkin ); | ||
| internal.addListener( | ||
| ( c, o, n ) -> { | ||
| if( n != null ) { | ||
| - applyStylesheets( scene, n, exTheme ); | ||
| + applyStylesheets( scene, n, exSkin ); | ||
| } | ||
| } | ||
| if( n != null ) { | ||
| try { | ||
| - applyStylesheets( scene, inTheme, n ); | ||
| + applyStylesheets( scene, inSkin, n ); | ||
| } catch( final Exception ex ) { | ||
| // Changes to the CSS file won't autoload, which is okay. | ||
| mFileWatchService.removeListener( mStylesheetFileListener ); | ||
| mStylesheetFileListener = event -> | ||
| - runLater( () -> applyStylesheets( scene, inTheme, event.getFile() ) ); | ||
| + runLater( () -> applyStylesheets( scene, inSkin, event.getFile() ) ); | ||
| mFileWatchService.addListener( mStylesheetFileListener ); | ||
| } | ||
| private String getStylesheet( final String filename ) { | ||
| - return get( STYLESHEET_APPLICATION_THEME, filename ); | ||
| + return get( STYLESHEET_APPLICATION_SKIN, filename ); | ||
| } | ||
| import static com.keenwrite.Messages.get; | ||
| import static com.keenwrite.preferences.LocaleProperty.localeListProperty; | ||
| -import static com.keenwrite.preferences.ThemeProperty.themeListProperty; | ||
| +import static com.keenwrite.preferences.SkinProperty.skinListProperty; | ||
| import static com.keenwrite.preferences.WorkspaceKeys.*; | ||
| import static javafx.scene.control.ButtonType.CANCEL; | ||
| ), | ||
| Category.of( | ||
| - get( KEY_UI_THEME ), | ||
| + get( KEY_UI_SKIN ), | ||
| Group.of( | ||
| - get( KEY_UI_THEME_SELECTION ), | ||
| - Setting.of( label( KEY_UI_THEME_SELECTION ) ), | ||
| - Setting.of( title( KEY_UI_THEME_SELECTION ), | ||
| - themeListProperty(), | ||
| - themeProperty( KEY_UI_THEME_SELECTION ) ) | ||
| + get( KEY_UI_SKIN_SELECTION ), | ||
| + Setting.of( label( KEY_UI_SKIN_SELECTION ) ), | ||
| + Setting.of( title( KEY_UI_SKIN_SELECTION ), | ||
| + skinListProperty(), | ||
| + skinProperty( KEY_UI_SKIN_SELECTION ) ) | ||
| ), | ||
| Group.of( | ||
| - get( KEY_UI_THEME_CUSTOM ), | ||
| - Setting.of( label( KEY_UI_THEME_CUSTOM ) ), | ||
| - Setting.of( title( KEY_UI_THEME_CUSTOM ), | ||
| - fileProperty( KEY_UI_THEME_CUSTOM ), false ) | ||
| + get( KEY_UI_SKIN_CUSTOM ), | ||
| + Setting.of( label( KEY_UI_SKIN_CUSTOM ) ), | ||
| + Setting.of( title( KEY_UI_SKIN_CUSTOM ), | ||
| + fileProperty( KEY_UI_SKIN_CUSTOM ), false ) | ||
| ) | ||
| ), | ||
| } | ||
| - private ObjectProperty<String> themeProperty( final Key key ) { | ||
| - return mWorkspace.themeProperty( key ); | ||
| + private ObjectProperty<String> skinProperty( final Key key ) { | ||
| + return mWorkspace.skinProperty( key ); | ||
| } | ||
| +/* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | ||
| +package com.keenwrite.preferences; | ||
| + | ||
| +import com.keenwrite.Constants; | ||
| +import javafx.beans.property.SimpleObjectProperty; | ||
| +import javafx.collections.ObservableList; | ||
| + | ||
| +import java.util.LinkedHashSet; | ||
| +import java.util.Set; | ||
| + | ||
| +import static com.keenwrite.Constants.SKIN_DEFAULT; | ||
| +import static com.keenwrite.preferences.Workspace.listProperty; | ||
| + | ||
| +/** | ||
| + * Maintains a list of look and feels that the user may choose. | ||
| + */ | ||
| +public final class SkinProperty extends SimpleObjectProperty<String> { | ||
| + /** | ||
| + * Ordered set of available skins. | ||
| + */ | ||
| + private static final Set<String> sSkins = new LinkedHashSet<>(); | ||
| + | ||
| + static { | ||
| + sSkins.add( "Count Darcula" ); | ||
| + sSkins.add( "Haunted Grey" ); | ||
| + sSkins.add( "Modena Dark" ); | ||
| + sSkins.add( SKIN_DEFAULT ); | ||
| + sSkins.add( "Silver Cavern" ); | ||
| + sSkins.add( "Solarized Dark" ); | ||
| + sSkins.add( "Vampire Byte" ); | ||
| + } | ||
| + | ||
| + public SkinProperty( final String skin ) { | ||
| + super( skin ); | ||
| + } | ||
| + | ||
| + public static ObservableList<String> skinListProperty() { | ||
| + return listProperty( sSkins ); | ||
| + } | ||
| + | ||
| + /** | ||
| + * Returns the given skin name as a sanitized file name, which must map | ||
| + * to a stylesheet file bundled with the application. This does not include | ||
| + * the path to the stylesheet. If the given name is not known, the file | ||
| + * name for {@link Constants#SKIN_DEFAULT} is returned. The extension must | ||
| + * be added separately. | ||
| + * | ||
| + * @param skin The name to convert to a file name. | ||
| + * @return The given name converted lower case, spaces replaced with | ||
| + * underscores, without the ".css" extension appended. | ||
| + */ | ||
| + public static String toFilename( final String skin ) { | ||
| + return sanitize( skin ).toLowerCase().replace( ' ', '_' ); | ||
| + } | ||
| + | ||
| + /** | ||
| + * Ensures that the given name is in the list of known skins. | ||
| + * | ||
| + * @param skin Validate this name's existence. | ||
| + * @return The given name, if valid, otherwise the default skin. | ||
| + */ | ||
| + private static String sanitize( final String skin ) { | ||
| + return sSkins.contains( skin ) ? skin : SKIN_DEFAULT; | ||
| + } | ||
| +} | ||
| -/* Copyright 2020-2021 White Magic Software, Ltd. -- All rights reserved. */ | ||
| -package com.keenwrite.preferences; | ||
| - | ||
| -import com.keenwrite.Constants; | ||
| -import javafx.beans.property.SimpleObjectProperty; | ||
| -import javafx.collections.ObservableList; | ||
| - | ||
| -import java.util.LinkedHashSet; | ||
| -import java.util.Set; | ||
| - | ||
| -import static com.keenwrite.Constants.THEME_DEFAULT; | ||
| -import static com.keenwrite.preferences.Workspace.listProperty; | ||
| - | ||
| -/** | ||
| - * Responsible for providing a list of themes from which the user may pick. | ||
| - */ | ||
| -public final class ThemeProperty extends SimpleObjectProperty<String> { | ||
| - /** | ||
| - * Ordered set of available themes. | ||
| - */ | ||
| - private static final Set<String> sThemes = new LinkedHashSet<>(); | ||
| - | ||
| - static { | ||
| - sThemes.add( "Count Darcula" ); | ||
| - sThemes.add( "Haunted Grey" ); | ||
| - sThemes.add( "Modena Dark" ); | ||
| - sThemes.add( THEME_DEFAULT ); | ||
| - sThemes.add( "Silver Cavern" ); | ||
| - sThemes.add( "Solarized Dark" ); | ||
| - sThemes.add( "Vampire Byte" ); | ||
| - } | ||
| - | ||
| - public ThemeProperty( final String themeName ) { | ||
| - super( themeName ); | ||
| - } | ||
| - | ||
| - public static ObservableList<String> themeListProperty() { | ||
| - return listProperty( sThemes ); | ||
| - } | ||
| - | ||
| - /** | ||
| - * Returns the given theme name as a sanitized file name, which must map | ||
| - * to a stylesheet file bundled with the application. This does not include | ||
| - * the path to the stylesheet. If the given theme name cannot be found in | ||
| - * the known theme list, the file name for {@link Constants#THEME_DEFAULT} | ||
| - * is returned. The extension must be added separately. | ||
| - * | ||
| - * @param theme The name to convert to a file name. | ||
| - * @return The given theme name converted lower case, spaces replaced with | ||
| - * underscores, without the ".css" extension appended. | ||
| - */ | ||
| - public static String toFilename( final String theme ) { | ||
| - return sanitize( theme ).toLowerCase().replace( ' ', '_' ); | ||
| - } | ||
| - | ||
| - /** | ||
| - * Ensures that the given theme name is in the list of known themes. | ||
| - * | ||
| - * @param theme Validate this theme name's existence. | ||
| - * @return The given theme name, if valid, otherwise the default theme name. | ||
| - */ | ||
| - private static String sanitize( final String theme ) { | ||
| - return sThemes.contains( theme ) ? theme : THEME_DEFAULT; | ||
| - } | ||
| -} | ||
| entry( KEY_UI_WINDOW_FULL, asBooleanProperty() ), | ||
| - entry( KEY_UI_THEME_SELECTION, asThemeProperty( THEME_DEFAULT ) ), | ||
| - entry( KEY_UI_THEME_CUSTOM, asFileProperty( THEME_CUSTOM_DEFAULT ) ), | ||
| + entry( KEY_UI_SKIN_SELECTION, asSkinProperty( SKIN_DEFAULT ) ), | ||
| + entry( KEY_UI_SKIN_CUSTOM, asFileProperty( SKIN_CUSTOM_DEFAULT ) ), | ||
| entry( KEY_LANGUAGE_LOCALE, asLocaleProperty( LOCALE_DEFAULT ) ), | ||
| @SuppressWarnings( "SameParameterValue" ) | ||
| - private ThemeProperty asThemeProperty( final String defaultValue ) { | ||
| - return new ThemeProperty( defaultValue ); | ||
| + private SkinProperty asSkinProperty( final String defaultValue ) { | ||
| + return new SkinProperty( defaultValue ); | ||
| } | ||
| } | ||
| - public ObjectProperty<String> themeProperty( final Key key ) { | ||
| + public ObjectProperty<String> skinProperty( final Key key ) { | ||
| return valuesProperty( key ); | ||
| } | ||
| public static final Key KEY_UI_WINDOW_FULL = key( KEY_UI_WINDOW, "full" ); | ||
| - public static final Key KEY_UI_THEME = key( KEY_UI, "theme" ); | ||
| - public static final Key KEY_UI_THEME_SELECTION = key( KEY_UI_THEME, "selection" ); | ||
| - | ||
| - public static final Key KEY_UI_THEME_CUSTOM = key( KEY_UI_THEME, "custom" ); | ||
| + public static final Key KEY_UI_SKIN = key( KEY_UI, "skin" ); | ||
| + public static final Key KEY_UI_SKIN_SELECTION = key( KEY_UI_SKIN, "selection" ); | ||
| + public static final Key KEY_UI_SKIN_CUSTOM = key( KEY_UI_SKIN, "custom" ); | ||
| public static final Key KEY_LANGUAGE = key( KEY_ROOT, "language" ); |
| workspace.definition.delimiter.ended.title=Closing | ||
| -workspace.ui.theme=Themes | ||
| -workspace.ui.theme.selection=Bundled | ||
| -workspace.ui.theme.selection.desc=Pre-packaged application style (default: Modena Light) | ||
| -workspace.ui.theme.selection.title=Name | ||
| -workspace.ui.theme.custom=Custom | ||
| -workspace.ui.theme.custom.desc=User-defined JavaFX cascading stylesheet file | ||
| -workspace.ui.theme.custom.title=Path | ||
| +workspace.ui.skin=Skins | ||
| +workspace.ui.skin.selection=Bundled | ||
| +workspace.ui.skin.selection.desc=Pre-packaged application style (default: Modena Light) | ||
| +workspace.ui.skin.selection.title=Name | ||
| +workspace.ui.skin.custom=Custom | ||
| +workspace.ui.skin.custom.desc=User-defined JavaFX cascading stylesheet file | ||
| +workspace.ui.skin.custom.title=Path | ||
| workspace.ui.font=Fonts |
| # ######################################################################## | ||
| -file.stylesheet.application.dir=${application.package}/themes | ||
| +file.stylesheet.application.dir=${application.package}/skins | ||
| file.stylesheet.application.base=${file.stylesheet.application.dir}/scene.css | ||
| -file.stylesheet.application.theme=${file.stylesheet.application.dir}/{0}.css | ||
| +file.stylesheet.application.skin=${file.stylesheet.application.dir}/{0}.css | ||
| file.stylesheet.markdown=${application.package}/editor/markdown.css | ||
| # {0} language code, {1} script code, {2} country code |
| +.root { | ||
| + -fx-base: rgb( 43, 43, 43 ); | ||
| + -fx-background: -fx-base; | ||
| + -fx-control-inner-background: -fx-base; | ||
| + | ||
| + -fx-light-text-color: rgb( 187, 187, 187 ); | ||
| + -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| + -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| + -fx-text-foreground: -fx-light-text-color; | ||
| + -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| + -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| + | ||
| + /* Make controls ( buttons, thumb, etc. ) slightly lighter */ | ||
| + -fx-color: derive( -fx-base, 20% ); | ||
| +} | ||
| + | ||
| +.caret { | ||
| + -fx-stroke: -fx-accent; | ||
| +} | ||
| + | ||
| +.glyph-icon { | ||
| + -fx-text-fill: -fx-light-text-color; | ||
| + -fx-fill: -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.glyph-icon:hover { | ||
| + -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| +} | ||
| + | ||
| +/* Fix derived prompt color for text fields */ | ||
| +.text-input { | ||
| + -fx-prompt-text-fill: derive( -fx-control-inner-background, +50% ); | ||
| +} | ||
| + | ||
| +/* Keep prompt invisible when focused ( above color fix overrides it ) */ | ||
| +.text-input:focused { | ||
| + -fx-prompt-text-fill: transparent; | ||
| +} | ||
| + | ||
| +/* Fix scroll bar buttons arrows colors */ | ||
| +.scroll-bar > .increment-button > .increment-arrow, | ||
| +.scroll-bar > .decrement-button > .decrement-arrow { | ||
| + -fx-background-color: -fx-mark-highlight-color, -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.scroll-bar > .increment-button:hover > .increment-arrow, | ||
| +.scroll-bar > .decrement-button:hover > .decrement-arrow { | ||
| + -fx-background-color: -fx-mark-highlight-color, rgb( 240, 240, 240 ); | ||
| +} | ||
| + | ||
| +.scroll-bar > .increment-button:pressed > .increment-arrow, | ||
| +.scroll-bar > .decrement-button:pressed > .decrement-arrow { | ||
| + -fx-background-color: -fx-mark-highlight-color, rgb( 255, 255, 255 ); | ||
| +} | ||
| +/* https://stackoverflow.com/a/58441758/59087 | ||
| + */ | ||
| +.root { | ||
| + -fx-accent: #1e74c6; | ||
| + -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; | ||
| + | ||
| + -fx-light-text-color: derive( -fx-base, 150% ); | ||
| + -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| + -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| + -fx-text-foreground: -fx-light-text-color; | ||
| + -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| + -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| +} | ||
| + | ||
| +.glyph-icon { | ||
| + -fx-text-fill: -fx-light-text-color; | ||
| + -fx-fill: -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.glyph-icon:hover { | ||
| + -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| +} | ||
| + | ||
| +.label { | ||
| + -fx-text-fill: -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.text-field { | ||
| + -fx-prompt-text-fill: gray; | ||
| +} | ||
| + | ||
| +.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-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; | ||
| +} | ||
| + | ||
| +/* Avoid clipping text descenders in statistics table row. */ | ||
| +.table-row-cell { | ||
| + -fx-cell-size: 30px; | ||
| +} | ||
| +/* https://github.com/joffrey-bion/javafx-themes/blob/master/css/modena_dark.css | ||
| + */ | ||
| +.root { | ||
| + -fx-base: rgb( 50, 50, 50 ); | ||
| + -fx-background: -fx-base; | ||
| + | ||
| + /* Make controls ( buttons, thumb, etc. ) slightly lighter */ | ||
| + -fx-color: derive( -fx-base, 10% ); | ||
| + | ||
| + /* Text fields and table rows background */ | ||
| + -fx-control-inner-background: rgb( 20, 20, 20 ); | ||
| + /* Version of -fx-control-inner-background for alternative rows */ | ||
| + -fx-control-inner-background-alt: derive( -fx-control-inner-background, 2.5% ); | ||
| + | ||
| + /* Text colors depending on background's brightness */ | ||
| + -fx-light-text-color: rgb( 220, 220, 220 ); | ||
| + -fx-mid-text-color: rgb( 100, 100, 100 ); | ||
| + -fx-dark-text-color: rgb( 20, 20, 20 ); | ||
| + -fx-text-foreground: -fx-light-text-color; | ||
| + -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| + -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| + | ||
| + /* A bright blue for highlighting/accenting objects. For example: selected | ||
| + * text; selected items in menus, lists, trees, and tables; progress bars */ | ||
| + -fx-accent: rgb( 0, 80, 100 ); | ||
| + | ||
| + /* Color of non-focused yet selected elements */ | ||
| + -fx-selection-bar-non-focused: rgb( 50, 50, 50 ); | ||
| +} | ||
| + | ||
| +.glyph-icon { | ||
| + -fx-text-fill: -fx-light-text-color; | ||
| + -fx-fill: -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.glyph-icon:hover { | ||
| + -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| +} | ||
| + | ||
| +/* Fix derived prompt color for text fields */ | ||
| +.text-input { | ||
| + -fx-prompt-text-fill: derive( -fx-control-inner-background, +50% ); | ||
| +} | ||
| + | ||
| +/* Keep prompt invisible when focused ( above color fix overrides it ) */ | ||
| +.text-input:focused { | ||
| + -fx-prompt-text-fill: transparent; | ||
| +} | ||
| + | ||
| +/* Fix scroll bar buttons arrows colors */ | ||
| +.scroll-bar > .increment-button > .increment-arrow, | ||
| +.scroll-bar > .decrement-button > .decrement-arrow { | ||
| + -fx-background-color: -fx-mark-highlight-color, rgb( 220, 220, 220 ); | ||
| +} | ||
| + | ||
| +.scroll-bar > .increment-button:hover > .increment-arrow, | ||
| +.scroll-bar > .decrement-button:hover > .decrement-arrow { | ||
| + -fx-background-color: -fx-mark-highlight-color, rgb( 240, 240, 240 ); | ||
| +} | ||
| + | ||
| +.scroll-bar > .increment-button:pressed > .increment-arrow, | ||
| +.scroll-bar > .decrement-button:pressed > .decrement-arrow { | ||
| + -fx-background-color: -fx-mark-highlight-color, rgb( 255, 255, 255 ); | ||
| +} | ||
| +.root { | ||
| + -fx-text-foreground: -fx-dark-text-color; | ||
| + -fx-text-background: derive( -fx-accent, 124% ); | ||
| + -fx-text-selection: #a6d2ff; | ||
| +} | ||
| +/* | ||
| + * Copyright (c) 2015 Karl Tauber <karl at jformdesigner dot com> | ||
| + * All rights reserved. | ||
| + * | ||
| + * Redistribution and use in source and binary forms, with or without | ||
| + * modification, are permitted provided that the following conditions are met: | ||
| + * | ||
| + * o Redistributions of source code must retain the above copyright | ||
| + * notice, this list of conditions and the following disclaimer. | ||
| + * | ||
| + * o Redistributions in binary form must reproduce the above copyright | ||
| + * notice, this list of conditions and the following disclaimer in the | ||
| + * documentation and/or other materials provided with the distribution. | ||
| + * | ||
| + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
| + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
| + * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
| + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
| + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
| + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| + */ | ||
| + | ||
| +.tool-bar { | ||
| + -fx-spacing: 0; | ||
| +} | ||
| + | ||
| +.tool-bar .button { | ||
| + -fx-background-color: transparent; | ||
| +} | ||
| + | ||
| +.tool-bar .button:hover { | ||
| + -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; | ||
| + -fx-color: -fx-hover-base; | ||
| +} | ||
| + | ||
| +.tool-bar .button:armed { | ||
| + -fx-color: -fx-pressed-base; | ||
| +} | ||
| + | ||
| +/* Definition editor drag and drop target. | ||
| + */ | ||
| +.drop-target { | ||
| + -fx-border-color: #eea82f; | ||
| + -fx-border-width: 0 0 2 0; | ||
| + -fx-padding: 3 3 1 3 | ||
| +} | ||
| +/* https://toedter.com/2011/10/26/java-fx-2-0-css-styling/ | ||
| + */ | ||
| +.root { | ||
| + -fx-base: rgb( 50, 50, 50 ); | ||
| + -fx-background: -fx-base; | ||
| + -fx-control-inner-background: -fx-base; | ||
| + | ||
| + -fx-light-text-color: derive( -fx-base, 150% ); | ||
| + -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| + -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| + -fx-text-foreground: -fx-light-text-color; | ||
| + -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| + -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| +} | ||
| + | ||
| +.glyph-icon { | ||
| + -fx-text-fill: -fx-light-text-color; | ||
| + -fx-fill: -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.glyph-icon:hover { | ||
| + -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| +} | ||
| + | ||
| +.tab { | ||
| + -fx-background-color: linear-gradient( to top, -fx-base, derive( -fx-base, 30% ) ); | ||
| +} | ||
| + | ||
| +.menu-bar { | ||
| + -fx-background-color: linear-gradient( to bottom, -fx-base, derive( -fx-base, 30% ) ); | ||
| +} | ||
| + | ||
| +.tool-bar:horizontal { | ||
| + -fx-background-color: linear-gradient( to bottom, derive( -fx-base, +50% ), derive( -fx-base, -40% ), derive( -fx-base, -20% ) ); | ||
| +} | ||
| + | ||
| +.button { | ||
| + -fx-background-color: transparent; | ||
| +} | ||
| + | ||
| +.button:hover { | ||
| + -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; | ||
| + -fx-color: -fx-hover-base; | ||
| +} | ||
| + | ||
| +.table-view { | ||
| + -fx-table-cell-border-color:derive( -fx-base, +10% ); | ||
| + -fx-table-header-border-color:derive( -fx-base, +20% ); | ||
| +} | ||
| + | ||
| +.split-pane:horizontal > * > .split-pane-divider { | ||
| + -fx-border-color: transparent -fx-base transparent -fx-base; | ||
| + -fx-background-color: transparent, derive( -fx-base, 20% ); | ||
| + -fx-background-insets: 0, 0 1 0 1; | ||
| +} | ||
| + | ||
| +.separator-label { | ||
| + -fx-text-fill: orange; | ||
| +} | ||
| +/* https://ethanschoonover.com/solarized | ||
| + */ | ||
| +.root { | ||
| + /* Solarized: base03 */ | ||
| + -fx-base: rgb( 0, 43, 54 ); | ||
| + -fx-background: -fx-base; | ||
| + | ||
| + /* Brighten controls */ | ||
| + -fx-color: derive( -fx-base, -40% ); | ||
| + | ||
| + -fx-control-inner-background: -fx-base; | ||
| + -fx-control-inner-background-alt: derive( -fx-control-inner-background, 2.5% ); | ||
| + | ||
| + /* Text colors */ | ||
| + /* Solarized: base0 */ | ||
| + -fx-light-text-color: rgb( 131, 148, 150 ); | ||
| + -fx-mid-text-color: derive( -fx-light-text-color, 50% ); | ||
| + -fx-dark-text-color: derive( -fx-light-text-color, 25% ); | ||
| + -fx-text-foreground: -fx-light-text-color; | ||
| + -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| + -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| + | ||
| + -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| + -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| + -fx-text-foreground: -fx-light-text-color; | ||
| + -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| + -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| + | ||
| + /* Accent colors */ | ||
| + -fx-accent: rgb( 38, 139, 210 ); | ||
| + -fx-focus-color: rgb( 253, 246, 227 ); | ||
| + | ||
| + /* Non-focused-selected elements */ | ||
| + -fx-selection-bar-non-focused: rgb( 0, 43, 54 ); | ||
| +} | ||
| + | ||
| +.glyph-icon { | ||
| + -fx-text-fill: -fx-light-text-color; | ||
| + -fx-fill: -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.glyph-icon:hover { | ||
| + -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| +} | ||
| + | ||
| +.scroll-bar { | ||
| + -fx-background-color: derive( -fx-base, 45% ); | ||
| +} | ||
| + | ||
| +.caret { | ||
| + -fx-stroke: -fx-accent; | ||
| +} | ||
| + | ||
| +/* https://github.com/Col-E/Recaf/blob/master/src/main/resources/style/ui-dark.css | ||
| + */ | ||
| +.root { | ||
| + -fx-base: rgb( 45, 45, 46 ); | ||
| + -fx-background: -fx-base; | ||
| + | ||
| + /* Brighten controls */ | ||
| + -fx-color: derive( -fx-base, -40% ); | ||
| + | ||
| + /* Control background */ | ||
| + -fx-control-inner-background: rgb( 46, 46, 47 ); | ||
| + | ||
| + /* Alternative control background ( rows ) */ | ||
| + -fx-control-inner-background-alt: derive( -fx-control-inner-background, 2.5% ); | ||
| + | ||
| + /* Text colors */ | ||
| + -fx-light-text-color: rgb( 220, 220, 220 ); | ||
| + -fx-mid-text-color: rgb( 100, 100, 100 ); | ||
| + -fx-dark-text-color: rgb( 20, 20, 20 ); | ||
| + -fx-text-foreground: -fx-light-text-color; | ||
| + -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| + -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| + | ||
| + /* Accent colors */ | ||
| + -fx-accent: rgb( 51, 51, 52 ); | ||
| + -fx-focus-color: rgb( 51, 51, 52 ); | ||
| + | ||
| + /* Non-focused-selected elements */ | ||
| + -fx-selection-bar-non-focused: rgb( 45, 45, 46 ); | ||
| +} | ||
| + | ||
| +.glyph-icon { | ||
| + -fx-text-fill: -fx-light-text-color; | ||
| + -fx-fill: -fx-light-text-color; | ||
| +} | ||
| + | ||
| +.glyph-icon:hover { | ||
| + -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| +} | ||
| + | ||
| +* { | ||
| + -fx-highlight-fill: rgba( 0, 180, 255, 0.4 ); | ||
| +} | ||
| + | ||
| +/* Scroll */ | ||
| +.scroll-bar { | ||
| + -fx-background-color: rgb( 61,61,62 ); | ||
| +} | ||
| +.scroll-bar .thumb { | ||
| + -fx-background-color: rgb( 91,91,92 ); | ||
| + -fx-background-radius: 0; | ||
| +} | ||
| +.scroll-bar .thumb:hover, | ||
| +.scroll-bar .thumb:pressed { | ||
| + -fx-background-color: rgb( 141,141,142 ); | ||
| +} | ||
| +.scroll-bar .increment-button .increment-arrow, | ||
| +.scroll-bar .decrement-button .decrement-arrow { | ||
| + -fx-background-color: rgb( 200,200,200 ); | ||
| +} | ||
| +.corner { | ||
| + -fx-background-color: rgb( 61,61,62 ); | ||
| +} | ||
| + | ||
| +/* Menu */ | ||
| +.menu-bar { | ||
| + -fx-background-color: rgb( 45, 45, 48 ); | ||
| +} | ||
| +.menu { | ||
| + -fx-padding: 6 14 6 14; | ||
| + -fx-background-insets: -1; | ||
| +} | ||
| +.menu-item { | ||
| + -fx-padding: 5 11 5 11; | ||
| + -fx-background-insets: -1; | ||
| +} | ||
| +.menu:hover { | ||
| + -fx-background-color: rgb( 61, 61, 62 ); | ||
| +} | ||
| +.context-menu, | ||
| +.menu:showing { | ||
| + -fx-background-color: rgb( 27, 27, 28 ); | ||
| + -fx-border-insets: -1; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.context-menu { | ||
| + -fx-min-width: 80px; | ||
| + -fx-background-insets: -1; | ||
| + -fx-border-insets: -1; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.context-menu .menu-item:focused { | ||
| + -fx-background-color: rgb( 61, 61, 62 ); | ||
| +} | ||
| +.context-menu-header { | ||
| + /* TODO: Find a way to disable hover coloring on the menu header */ | ||
| + -fx-opacity: 1.0; | ||
| + -fx-background-color: rgb( 24, 50, 95 ); | ||
| +} | ||
| +.context-menu-header .label { | ||
| + -fx-opacity: 1.0; | ||
| +} | ||
| + | ||
| +/* Tabs */ | ||
| +.tab-pane { | ||
| + -fx-tab-min-width: 100px; | ||
| +} | ||
| +.tab-pane *.tab-header-background { | ||
| + -fx-background-color: rgb( 29, 29, 31 ); | ||
| + -fx-border-width: 0 0 1 0; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.headers-region { | ||
| + -fx-background-color: rgb( 75, 75, 76 ); | ||
| +} | ||
| +.tab { | ||
| + -fx-background-color: rgb( 36,36,37 ); | ||
| + -fx-background-insets: 2 -1 -1 -1; | ||
| + -fx-background-radius: 0; | ||
| + -fx-padding: 2 2 1 2; | ||
| + -fx-border-insets: 0; | ||
| + -fx-border-width: 1 1 1 1; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.tab:selected { | ||
| + -fx-background-color: rgb( 45, 45, 46 ); | ||
| + -fx-background-insets: 2 -1 -1 -1; | ||
| + -fx-padding: 2; | ||
| + -fx-border-insets: 0; | ||
| + -fx-border-width: 1 1 0 1; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.tab:selected .focus-indicator { | ||
| + -fx-border-color: transparent; | ||
| +} | ||
| + | ||
| +/* Table */ | ||
| +.table-view { | ||
| + -fx-selection-bar: rgb( 50, 71, 77 ); | ||
| + -fx-selection-bar-non-focused: rgb( 46, 56, 59 ); | ||
| + -fx-background-color: rgb( 36,36,37 ); | ||
| + -fx-background-insets: 2 -1 -1 -1; | ||
| + -fx-background-radius: 0; | ||
| + -fx-padding: -1; | ||
| + -fx-border-width: 0 1 1 1; | ||
| + -fx-border-color: rgb( 22, 22, 23 ); | ||
| +} | ||
| +.table-view .filler, | ||
| +.table-view .show-hide-columns-button, | ||
| +.column-overlay { | ||
| + -fx-background-color: transparent; | ||
| +} | ||
| +.column-header-background { | ||
| + -fx-background-color: rgb( 36,36,37 ); | ||
| + -fx-background-insets: 2 -1 -1 -1; | ||
| + -fx-padding: -1; | ||
| + -fx-border-insets: 0; | ||
| + -fx-border-width: 0 1 0 1; | ||
| + -fx-border-color: rgb( 22, 22, 23 ); | ||
| +} | ||
| +.column-header { | ||
| + -fx-background-color: rgb( 45, 45, 46 ); | ||
| + -fx-background-insets: -1 -0 -1 0; | ||
| + -fx-padding: 2; | ||
| + -fx-border-insets: 1 -1 1 0; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: rgb( 22, 22, 23 ); | ||
| +} | ||
| + | ||
| +/* Splitpane */ | ||
| +.split-pane-divider { | ||
| + -fx-background-color: black; | ||
| + -fx-padding: 0; | ||
| + -fx-background-insets: -5; | ||
| +} | ||
| + | ||
| +/* Tree */ | ||
| +.tree-table-view, | ||
| +.tree-view { | ||
| + -fx-background-color: rgb( 29, 29, 31 ); | ||
| + -fx-background-insets: 0; | ||
| + -fx-border-width: 0 1 0 0; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.tree-table-cell, | ||
| +.tree-cell { | ||
| + -fx-background-color: rgb( 29, 29, 31 ); | ||
| +} | ||
| +.tree-cell:selected { | ||
| + -fx-background-color: rgb( 44, 48, 55 ); | ||
| +} | ||
| + | ||
| +/* Buttons */ | ||
| +.box, | ||
| +.button, | ||
| +.combo-box, | ||
| +.slider .thumb { | ||
| + -fx-background-radius: 0; | ||
| + -fx-background-color: rgb( 63, 63, 70 ); | ||
| + -fx-background-insets: 0; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: rgb( 85, 85, 85 ); | ||
| +} | ||
| +.check-box:hover .box, | ||
| +.button:hover, | ||
| +.combo-box:hover, | ||
| +.slider .thumb:hover { | ||
| + -fx-background-color: rgb( 80, 80, 85 ); | ||
| + -fx-border-color: rgb( 0, 122, 205 ); | ||
| +} | ||
| +.check-box:pressed .box, | ||
| +.button:pressed, | ||
| +.combo-box:pressed, | ||
| +.slider .thumb:pressed { | ||
| + -fx-background-color: rgb( 0, 122, 205 ); | ||
| + -fx-border-color: rgb( 0, 162, 245 ); | ||
| +} | ||
| +.combo-box:showing { | ||
| + -fx-background-color: rgb( 27, 27, 28 ); | ||
| + -fx-border-width: 1 1 0 1; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.combo-box .combo-box-popup .list-cell { | ||
| + -fx-background-color: rgb( 27, 27, 28 ); | ||
| +} | ||
| +.combo-box .combo-box-popup .list-cell:hover { | ||
| + -fx-background-color: rgb( 61, 61, 62 ); | ||
| +} | ||
| +.combo-box .combo-box-popup .list-view { | ||
| + -fx-background-color: rgb( 27, 27, 28 ); | ||
| + -fx-border-width: 0 1 1 1; | ||
| + -fx-border-color: black; | ||
| +} | ||
| +.hyperlink { | ||
| + -fx-text-fill: rgb( 30, 132, 250 ); | ||
| +} | ||
| +hyperlink:visited { | ||
| + -fx-text-fill: rgb( 98, 59, 217 ); | ||
| +} | ||
| + | ||
| +/* slider */ | ||
| +.slider .track { | ||
| + -fx-background-radius: 0; | ||
| + -fx-background-color: rgb( 29, 29, 31 ); | ||
| + -fx-background-insets: 0; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: rgb( 65, 65, 65 ); | ||
| +} | ||
| +.slider .thumb { | ||
| + -fx-padding: 5; | ||
| +} | ||
| +.axis-tick-mark { | ||
| + -fx-stroke: rgb( 100, 100, 100 ); | ||
| +} | ||
| + | ||
| +/* Text */ | ||
| +.text-area .content, | ||
| +.text-field { | ||
| + -fx-background-radius: 0; | ||
| + -fx-background-color: rgb( 63, 63, 70 ); | ||
| + -fx-background-insets: 0; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: rgb( 85, 85, 85 ); | ||
| +} | ||
| +.text-area { | ||
| + -fx-background-radius: 0; | ||
| + -fx-background-color: rgb( 63, 63, 70 ); | ||
| + -fx-background-insets: 0; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: rgb( 85, 85, 85 ); | ||
| +} | ||
| +.text-area .content { | ||
| + -fx-border-width: 0; | ||
| +} | ||
| + | ||
| +/* Popup */ | ||
| +.tooltip { | ||
| + -fx-background-radius: 0; | ||
| + -fx-background-color: rgb( 40, 40, 42 ); | ||
| + -fx-background-insets: 0; | ||
| + -fx-border-width: 1; | ||
| + -fx-border-color: rgb( 70, 70, 72 ); | ||
| +} | ||
| -.root { | ||
| - -fx-base: rgb( 43, 43, 43 ); | ||
| - -fx-background: -fx-base; | ||
| - -fx-control-inner-background: -fx-base; | ||
| - | ||
| - -fx-light-text-color: rgb( 187, 187, 187 ); | ||
| - -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| - -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| - -fx-text-foreground: -fx-light-text-color; | ||
| - -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| - -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| - | ||
| - /* Make controls ( buttons, thumb, etc. ) slightly lighter */ | ||
| - -fx-color: derive( -fx-base, 20% ); | ||
| -} | ||
| - | ||
| -.caret { | ||
| - -fx-stroke: -fx-accent; | ||
| -} | ||
| - | ||
| -.glyph-icon { | ||
| - -fx-text-fill: -fx-light-text-color; | ||
| - -fx-fill: -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.glyph-icon:hover { | ||
| - -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| -} | ||
| - | ||
| -/* Fix derived prompt color for text fields */ | ||
| -.text-input { | ||
| - -fx-prompt-text-fill: derive( -fx-control-inner-background, +50% ); | ||
| -} | ||
| - | ||
| -/* Keep prompt invisible when focused ( above color fix overrides it ) */ | ||
| -.text-input:focused { | ||
| - -fx-prompt-text-fill: transparent; | ||
| -} | ||
| - | ||
| -/* Fix scroll bar buttons arrows colors */ | ||
| -.scroll-bar > .increment-button > .increment-arrow, | ||
| -.scroll-bar > .decrement-button > .decrement-arrow { | ||
| - -fx-background-color: -fx-mark-highlight-color, -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.scroll-bar > .increment-button:hover > .increment-arrow, | ||
| -.scroll-bar > .decrement-button:hover > .decrement-arrow { | ||
| - -fx-background-color: -fx-mark-highlight-color, rgb( 240, 240, 240 ); | ||
| -} | ||
| - | ||
| -.scroll-bar > .increment-button:pressed > .increment-arrow, | ||
| -.scroll-bar > .decrement-button:pressed > .decrement-arrow { | ||
| - -fx-background-color: -fx-mark-highlight-color, rgb( 255, 255, 255 ); | ||
| -} | ||
| -/* https://stackoverflow.com/a/58441758/59087 | ||
| - */ | ||
| -.root { | ||
| - -fx-accent: #1e74c6; | ||
| - -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; | ||
| - | ||
| - -fx-light-text-color: derive( -fx-base, 150% ); | ||
| - -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| - -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| - -fx-text-foreground: -fx-light-text-color; | ||
| - -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| - -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| -} | ||
| - | ||
| -.glyph-icon { | ||
| - -fx-text-fill: -fx-light-text-color; | ||
| - -fx-fill: -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.glyph-icon:hover { | ||
| - -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| -} | ||
| - | ||
| -.label { | ||
| - -fx-text-fill: -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.text-field { | ||
| - -fx-prompt-text-fill: gray; | ||
| -} | ||
| - | ||
| -.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-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; | ||
| -} | ||
| - | ||
| -/* Avoid clipping text descenders in statistics table row. */ | ||
| -.table-row-cell { | ||
| - -fx-cell-size: 30px; | ||
| -} | ||
| -/* https://github.com/joffrey-bion/javafx-themes/blob/master/css/modena_dark.css | ||
| - */ | ||
| -.root { | ||
| - -fx-base: rgb( 50, 50, 50 ); | ||
| - -fx-background: -fx-base; | ||
| - | ||
| - /* Make controls ( buttons, thumb, etc. ) slightly lighter */ | ||
| - -fx-color: derive( -fx-base, 10% ); | ||
| - | ||
| - /* Text fields and table rows background */ | ||
| - -fx-control-inner-background: rgb( 20, 20, 20 ); | ||
| - /* Version of -fx-control-inner-background for alternative rows */ | ||
| - -fx-control-inner-background-alt: derive( -fx-control-inner-background, 2.5% ); | ||
| - | ||
| - /* Text colors depending on background's brightness */ | ||
| - -fx-light-text-color: rgb( 220, 220, 220 ); | ||
| - -fx-mid-text-color: rgb( 100, 100, 100 ); | ||
| - -fx-dark-text-color: rgb( 20, 20, 20 ); | ||
| - -fx-text-foreground: -fx-light-text-color; | ||
| - -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| - -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| - | ||
| - /* A bright blue for highlighting/accenting objects. For example: selected | ||
| - * text; selected items in menus, lists, trees, and tables; progress bars */ | ||
| - -fx-accent: rgb( 0, 80, 100 ); | ||
| - | ||
| - /* Color of non-focused yet selected elements */ | ||
| - -fx-selection-bar-non-focused: rgb( 50, 50, 50 ); | ||
| -} | ||
| - | ||
| -.glyph-icon { | ||
| - -fx-text-fill: -fx-light-text-color; | ||
| - -fx-fill: -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.glyph-icon:hover { | ||
| - -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| -} | ||
| - | ||
| -/* Fix derived prompt color for text fields */ | ||
| -.text-input { | ||
| - -fx-prompt-text-fill: derive( -fx-control-inner-background, +50% ); | ||
| -} | ||
| - | ||
| -/* Keep prompt invisible when focused ( above color fix overrides it ) */ | ||
| -.text-input:focused { | ||
| - -fx-prompt-text-fill: transparent; | ||
| -} | ||
| - | ||
| -/* Fix scroll bar buttons arrows colors */ | ||
| -.scroll-bar > .increment-button > .increment-arrow, | ||
| -.scroll-bar > .decrement-button > .decrement-arrow { | ||
| - -fx-background-color: -fx-mark-highlight-color, rgb( 220, 220, 220 ); | ||
| -} | ||
| - | ||
| -.scroll-bar > .increment-button:hover > .increment-arrow, | ||
| -.scroll-bar > .decrement-button:hover > .decrement-arrow { | ||
| - -fx-background-color: -fx-mark-highlight-color, rgb( 240, 240, 240 ); | ||
| -} | ||
| - | ||
| -.scroll-bar > .increment-button:pressed > .increment-arrow, | ||
| -.scroll-bar > .decrement-button:pressed > .decrement-arrow { | ||
| - -fx-background-color: -fx-mark-highlight-color, rgb( 255, 255, 255 ); | ||
| -} | ||
| -.root { | ||
| - -fx-text-foreground: -fx-dark-text-color; | ||
| - -fx-text-background: derive( -fx-accent, 124% ); | ||
| - -fx-text-selection: #a6d2ff; | ||
| -} | ||
| -/* | ||
| - * Copyright (c) 2015 Karl Tauber <karl at jformdesigner dot com> | ||
| - * All rights reserved. | ||
| - * | ||
| - * Redistribution and use in source and binary forms, with or without | ||
| - * modification, are permitted provided that the following conditions are met: | ||
| - * | ||
| - * o Redistributions of source code must retain the above copyright | ||
| - * notice, this list of conditions and the following disclaimer. | ||
| - * | ||
| - * o Redistributions in binary form must reproduce the above copyright | ||
| - * notice, this list of conditions and the following disclaimer in the | ||
| - * documentation and/or other materials provided with the distribution. | ||
| - * | ||
| - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | ||
| - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | ||
| - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | ||
| - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | ||
| - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | ||
| - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | ||
| - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
| - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
| - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | ||
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
| - */ | ||
| - | ||
| -.tool-bar { | ||
| - -fx-spacing: 0; | ||
| -} | ||
| - | ||
| -.tool-bar .button { | ||
| - -fx-background-color: transparent; | ||
| -} | ||
| - | ||
| -.tool-bar .button:hover { | ||
| - -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; | ||
| - -fx-color: -fx-hover-base; | ||
| -} | ||
| - | ||
| -.tool-bar .button:armed { | ||
| - -fx-color: -fx-pressed-base; | ||
| -} | ||
| - | ||
| -/* Definition editor drag and drop target. | ||
| - */ | ||
| -.drop-target { | ||
| - -fx-border-color: #eea82f; | ||
| - -fx-border-width: 0 0 2 0; | ||
| - -fx-padding: 3 3 1 3 | ||
| -} | ||
| -/* https://toedter.com/2011/10/26/java-fx-2-0-css-styling/ | ||
| - */ | ||
| -.root { | ||
| - -fx-base: rgb( 50, 50, 50 ); | ||
| - -fx-background: -fx-base; | ||
| - -fx-control-inner-background: -fx-base; | ||
| - | ||
| - -fx-light-text-color: derive( -fx-base, 150% ); | ||
| - -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| - -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| - -fx-text-foreground: -fx-light-text-color; | ||
| - -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| - -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| -} | ||
| - | ||
| -.glyph-icon { | ||
| - -fx-text-fill: -fx-light-text-color; | ||
| - -fx-fill: -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.glyph-icon:hover { | ||
| - -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| -} | ||
| - | ||
| -.tab { | ||
| - -fx-background-color: linear-gradient( to top, -fx-base, derive( -fx-base, 30% ) ); | ||
| -} | ||
| - | ||
| -.menu-bar { | ||
| - -fx-background-color: linear-gradient( to bottom, -fx-base, derive( -fx-base, 30% ) ); | ||
| -} | ||
| - | ||
| -.tool-bar:horizontal { | ||
| - -fx-background-color: linear-gradient( to bottom, derive( -fx-base, +50% ), derive( -fx-base, -40% ), derive( -fx-base, -20% ) ); | ||
| -} | ||
| - | ||
| -.button { | ||
| - -fx-background-color: transparent; | ||
| -} | ||
| - | ||
| -.button:hover { | ||
| - -fx-background-color: -fx-shadow-highlight-color, -fx-outer-border, -fx-inner-border, -fx-body-color; | ||
| - -fx-color: -fx-hover-base; | ||
| -} | ||
| - | ||
| -.table-view { | ||
| - -fx-table-cell-border-color:derive( -fx-base, +10% ); | ||
| - -fx-table-header-border-color:derive( -fx-base, +20% ); | ||
| -} | ||
| - | ||
| -.split-pane:horizontal > * > .split-pane-divider { | ||
| - -fx-border-color: transparent -fx-base transparent -fx-base; | ||
| - -fx-background-color: transparent, derive( -fx-base, 20% ); | ||
| - -fx-background-insets: 0, 0 1 0 1; | ||
| -} | ||
| - | ||
| -.separator-label { | ||
| - -fx-text-fill: orange; | ||
| -} | ||
| -/* https://ethanschoonover.com/solarized | ||
| - */ | ||
| -.root { | ||
| - /* Solarized: base03 */ | ||
| - -fx-base: rgb( 0, 43, 54 ); | ||
| - -fx-background: -fx-base; | ||
| - | ||
| - /* Brighten controls */ | ||
| - -fx-color: derive( -fx-base, -40% ); | ||
| - | ||
| - -fx-control-inner-background: -fx-base; | ||
| - -fx-control-inner-background-alt: derive( -fx-control-inner-background, 2.5% ); | ||
| - | ||
| - /* Text colors */ | ||
| - /* Solarized: base0 */ | ||
| - -fx-light-text-color: rgb( 131, 148, 150 ); | ||
| - -fx-mid-text-color: derive( -fx-light-text-color, 50% ); | ||
| - -fx-dark-text-color: derive( -fx-light-text-color, 25% ); | ||
| - -fx-text-foreground: -fx-light-text-color; | ||
| - -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| - -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| - | ||
| - -fx-mid-text-color: derive( -fx-base, 100% ); | ||
| - -fx-dark-text-color: derive( -fx-base, 25% ); | ||
| - -fx-text-foreground: -fx-light-text-color; | ||
| - -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| - -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| - | ||
| - /* Accent colors */ | ||
| - -fx-accent: rgb( 38, 139, 210 ); | ||
| - -fx-focus-color: rgb( 253, 246, 227 ); | ||
| - | ||
| - /* Non-focused-selected elements */ | ||
| - -fx-selection-bar-non-focused: rgb( 0, 43, 54 ); | ||
| -} | ||
| - | ||
| -.glyph-icon { | ||
| - -fx-text-fill: -fx-light-text-color; | ||
| - -fx-fill: -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.glyph-icon:hover { | ||
| - -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| -} | ||
| - | ||
| -.scroll-bar { | ||
| - -fx-background-color: derive( -fx-base, 45% ); | ||
| -} | ||
| - | ||
| -.caret { | ||
| - -fx-stroke: -fx-accent; | ||
| -} | ||
| - | ||
| -/* https://github.com/Col-E/Recaf/blob/master/src/main/resources/style/ui-dark.css | ||
| - */ | ||
| -.root { | ||
| - -fx-base: rgb( 45, 45, 46 ); | ||
| - -fx-background: -fx-base; | ||
| - | ||
| - /* Brighten controls */ | ||
| - -fx-color: derive( -fx-base, -40% ); | ||
| - | ||
| - /* Control background */ | ||
| - -fx-control-inner-background: rgb( 46, 46, 47 ); | ||
| - | ||
| - /* Alternative control background ( rows ) */ | ||
| - -fx-control-inner-background-alt: derive( -fx-control-inner-background, 2.5% ); | ||
| - | ||
| - /* Text colors */ | ||
| - -fx-light-text-color: rgb( 220, 220, 220 ); | ||
| - -fx-mid-text-color: rgb( 100, 100, 100 ); | ||
| - -fx-dark-text-color: rgb( 20, 20, 20 ); | ||
| - -fx-text-foreground: -fx-light-text-color; | ||
| - -fx-text-background: derive( -fx-control-inner-background, 7.5% ); | ||
| - -fx-text-selection: derive( -fx-control-inner-background, 45% ); | ||
| - | ||
| - /* Accent colors */ | ||
| - -fx-accent: rgb( 51, 51, 52 ); | ||
| - -fx-focus-color: rgb( 51, 51, 52 ); | ||
| - | ||
| - /* Non-focused-selected elements */ | ||
| - -fx-selection-bar-non-focused: rgb( 45, 45, 46 ); | ||
| -} | ||
| - | ||
| -.glyph-icon { | ||
| - -fx-text-fill: -fx-light-text-color; | ||
| - -fx-fill: -fx-light-text-color; | ||
| -} | ||
| - | ||
| -.glyph-icon:hover { | ||
| - -fx-effect: dropshadow( three-pass-box, rgba( 0, 0, 0, 0.2 ), 4, 0, 0, 0 ); | ||
| -} | ||
| - | ||
| -* { | ||
| - -fx-highlight-fill: rgba( 0, 180, 255, 0.4 ); | ||
| -} | ||
| - | ||
| -/* Scroll */ | ||
| -.scroll-bar { | ||
| - -fx-background-color: rgb( 61,61,62 ); | ||
| -} | ||
| -.scroll-bar .thumb { | ||
| - -fx-background-color: rgb( 91,91,92 ); | ||
| - -fx-background-radius: 0; | ||
| -} | ||
| -.scroll-bar .thumb:hover, | ||
| -.scroll-bar .thumb:pressed { | ||
| - -fx-background-color: rgb( 141,141,142 ); | ||
| -} | ||
| -.scroll-bar .increment-button .increment-arrow, | ||
| -.scroll-bar .decrement-button .decrement-arrow { | ||
| - -fx-background-color: rgb( 200,200,200 ); | ||
| -} | ||
| -.corner { | ||
| - -fx-background-color: rgb( 61,61,62 ); | ||
| -} | ||
| - | ||
| -/* Menu */ | ||
| -.menu-bar { | ||
| - -fx-background-color: rgb( 45, 45, 48 ); | ||
| -} | ||
| -.menu { | ||
| - -fx-padding: 6 14 6 14; | ||
| - -fx-background-insets: -1; | ||
| -} | ||
| -.menu-item { | ||
| - -fx-padding: 5 11 5 11; | ||
| - -fx-background-insets: -1; | ||
| -} | ||
| -.menu:hover { | ||
| - -fx-background-color: rgb( 61, 61, 62 ); | ||
| -} | ||
| -.context-menu, | ||
| -.menu:showing { | ||
| - -fx-background-color: rgb( 27, 27, 28 ); | ||
| - -fx-border-insets: -1; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.context-menu { | ||
| - -fx-min-width: 80px; | ||
| - -fx-background-insets: -1; | ||
| - -fx-border-insets: -1; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.context-menu .menu-item:focused { | ||
| - -fx-background-color: rgb( 61, 61, 62 ); | ||
| -} | ||
| -.context-menu-header { | ||
| - /* TODO: Find a way to disable hover coloring on the menu header */ | ||
| - -fx-opacity: 1.0; | ||
| - -fx-background-color: rgb( 24, 50, 95 ); | ||
| -} | ||
| -.context-menu-header .label { | ||
| - -fx-opacity: 1.0; | ||
| -} | ||
| - | ||
| -/* Tabs */ | ||
| -.tab-pane { | ||
| - -fx-tab-min-width: 100px; | ||
| -} | ||
| -.tab-pane *.tab-header-background { | ||
| - -fx-background-color: rgb( 29, 29, 31 ); | ||
| - -fx-border-width: 0 0 1 0; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.headers-region { | ||
| - -fx-background-color: rgb( 75, 75, 76 ); | ||
| -} | ||
| -.tab { | ||
| - -fx-background-color: rgb( 36,36,37 ); | ||
| - -fx-background-insets: 2 -1 -1 -1; | ||
| - -fx-background-radius: 0; | ||
| - -fx-padding: 2 2 1 2; | ||
| - -fx-border-insets: 0; | ||
| - -fx-border-width: 1 1 1 1; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.tab:selected { | ||
| - -fx-background-color: rgb( 45, 45, 46 ); | ||
| - -fx-background-insets: 2 -1 -1 -1; | ||
| - -fx-padding: 2; | ||
| - -fx-border-insets: 0; | ||
| - -fx-border-width: 1 1 0 1; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.tab:selected .focus-indicator { | ||
| - -fx-border-color: transparent; | ||
| -} | ||
| - | ||
| -/* Table */ | ||
| -.table-view { | ||
| - -fx-selection-bar: rgb( 50, 71, 77 ); | ||
| - -fx-selection-bar-non-focused: rgb( 46, 56, 59 ); | ||
| - -fx-background-color: rgb( 36,36,37 ); | ||
| - -fx-background-insets: 2 -1 -1 -1; | ||
| - -fx-background-radius: 0; | ||
| - -fx-padding: -1; | ||
| - -fx-border-width: 0 1 1 1; | ||
| - -fx-border-color: rgb( 22, 22, 23 ); | ||
| -} | ||
| -.table-view .filler, | ||
| -.table-view .show-hide-columns-button, | ||
| -.column-overlay { | ||
| - -fx-background-color: transparent; | ||
| -} | ||
| -.column-header-background { | ||
| - -fx-background-color: rgb( 36,36,37 ); | ||
| - -fx-background-insets: 2 -1 -1 -1; | ||
| - -fx-padding: -1; | ||
| - -fx-border-insets: 0; | ||
| - -fx-border-width: 0 1 0 1; | ||
| - -fx-border-color: rgb( 22, 22, 23 ); | ||
| -} | ||
| -.column-header { | ||
| - -fx-background-color: rgb( 45, 45, 46 ); | ||
| - -fx-background-insets: -1 -0 -1 0; | ||
| - -fx-padding: 2; | ||
| - -fx-border-insets: 1 -1 1 0; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: rgb( 22, 22, 23 ); | ||
| -} | ||
| - | ||
| -/* Splitpane */ | ||
| -.split-pane-divider { | ||
| - -fx-background-color: black; | ||
| - -fx-padding: 0; | ||
| - -fx-background-insets: -5; | ||
| -} | ||
| - | ||
| -/* Tree */ | ||
| -.tree-table-view, | ||
| -.tree-view { | ||
| - -fx-background-color: rgb( 29, 29, 31 ); | ||
| - -fx-background-insets: 0; | ||
| - -fx-border-width: 0 1 0 0; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.tree-table-cell, | ||
| -.tree-cell { | ||
| - -fx-background-color: rgb( 29, 29, 31 ); | ||
| -} | ||
| -.tree-cell:selected { | ||
| - -fx-background-color: rgb( 44, 48, 55 ); | ||
| -} | ||
| - | ||
| -/* Buttons */ | ||
| -.box, | ||
| -.button, | ||
| -.combo-box, | ||
| -.slider .thumb { | ||
| - -fx-background-radius: 0; | ||
| - -fx-background-color: rgb( 63, 63, 70 ); | ||
| - -fx-background-insets: 0; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: rgb( 85, 85, 85 ); | ||
| -} | ||
| -.check-box:hover .box, | ||
| -.button:hover, | ||
| -.combo-box:hover, | ||
| -.slider .thumb:hover { | ||
| - -fx-background-color: rgb( 80, 80, 85 ); | ||
| - -fx-border-color: rgb( 0, 122, 205 ); | ||
| -} | ||
| -.check-box:pressed .box, | ||
| -.button:pressed, | ||
| -.combo-box:pressed, | ||
| -.slider .thumb:pressed { | ||
| - -fx-background-color: rgb( 0, 122, 205 ); | ||
| - -fx-border-color: rgb( 0, 162, 245 ); | ||
| -} | ||
| -.combo-box:showing { | ||
| - -fx-background-color: rgb( 27, 27, 28 ); | ||
| - -fx-border-width: 1 1 0 1; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.combo-box .combo-box-popup .list-cell { | ||
| - -fx-background-color: rgb( 27, 27, 28 ); | ||
| -} | ||
| -.combo-box .combo-box-popup .list-cell:hover { | ||
| - -fx-background-color: rgb( 61, 61, 62 ); | ||
| -} | ||
| -.combo-box .combo-box-popup .list-view { | ||
| - -fx-background-color: rgb( 27, 27, 28 ); | ||
| - -fx-border-width: 0 1 1 1; | ||
| - -fx-border-color: black; | ||
| -} | ||
| -.hyperlink { | ||
| - -fx-text-fill: rgb( 30, 132, 250 ); | ||
| -} | ||
| -hyperlink:visited { | ||
| - -fx-text-fill: rgb( 98, 59, 217 ); | ||
| -} | ||
| - | ||
| -/* slider */ | ||
| -.slider .track { | ||
| - -fx-background-radius: 0; | ||
| - -fx-background-color: rgb( 29, 29, 31 ); | ||
| - -fx-background-insets: 0; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: rgb( 65, 65, 65 ); | ||
| -} | ||
| -.slider .thumb { | ||
| - -fx-padding: 5; | ||
| -} | ||
| -.axis-tick-mark { | ||
| - -fx-stroke: rgb( 100, 100, 100 ); | ||
| -} | ||
| - | ||
| -/* Text */ | ||
| -.text-area .content, | ||
| -.text-field { | ||
| - -fx-background-radius: 0; | ||
| - -fx-background-color: rgb( 63, 63, 70 ); | ||
| - -fx-background-insets: 0; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: rgb( 85, 85, 85 ); | ||
| -} | ||
| -.text-area { | ||
| - -fx-background-radius: 0; | ||
| - -fx-background-color: rgb( 63, 63, 70 ); | ||
| - -fx-background-insets: 0; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: rgb( 85, 85, 85 ); | ||
| -} | ||
| -.text-area .content { | ||
| - -fx-border-width: 0; | ||
| -} | ||
| - | ||
| -/* Popup */ | ||
| -.tooltip { | ||
| - -fx-background-radius: 0; | ||
| - -fx-background-color: rgb( 40, 40, 42 ); | ||
| - -fx-background-insets: 0; | ||
| - -fx-border-width: 1; | ||
| - -fx-border-color: rgb( 70, 70, 72 ); | ||
| -} | ||
| Author | DaveJarvis <email> |
|---|---|
| Date | 2021-03-31 22:43:47 GMT-0700 |
| Commit | 1a14cfd934ca404495aab98c251f979cd4fae6ca |
| Parent | 3b90293 |
| Delta | 876 lines added, 876 lines removed |